Raz*_*ero 4 arrays excel vba class excel-vba
我正在尝试创建一个自定义类的数组,但它给了我这个错误:
运行时错误'91':
对象变量或未设置块变量
到目前为止,这是我的代码:
Sub DBM_Format()
Dim coreWS As Worksheet
Dim WS As Worksheet
Dim LastRow As Long
Dim RowRange As Long
Dim dataList() As clsDBM
Dim tmpdate As Date
Set coreWS = Sheets(ActiveSheet.Name)
'Set WS = Sheets.Add
LastRow = coreWS.Columns("A").Cells.Find("*", SearchOrder:=xlByRows, LookIn:=xlValues, SearchDirection:=xlPrevious).row
RowRange = LastRow - 1
Dim row As Integer
ReDim Preserve dataList(RowRange)
Dim i As Integer
Dim tmpData As clsDBM
For i = 0 To (RowRange - 1)
row = i + 2
tmpData.setDate = Format(Cells(row, 2), "MM/dd/yyyy hh:mm:ss")
tmpData.setBloodGlucose = Cells(row, 3)
tmpData.setCH = Cells(row, 4)
tmpData.setInzulinF = Cells(row, 5)
tmpData.setInzulinL = Cells(row, 6)
tmpData.setCategory = Cells(row, 8)
tmpData.setDayOfWeek = Weekday(dataList(i).pDate, vbMonday)
'dataList(i).setDate = Format(Cells(row, 2), "MM/dd/yyyy hh:mm:ss")
'dataList(i).setBloodGlucose = Cells(row, 3)
'dataList(i).setCH = Cells(row, 4)
'dataList(i).setInzulinF = Cells(row, 5)
'dataList(i).setInzulinL = Cells(row, 6)
'dataList(i).setCategory = Cells(row, 8)
'dataList(i).setDayOfWeek = Weekday(dataList(i).pDate, vbMonday)
Set dataList(i) = tmpData
Next i
End Sub
Run Code Online (Sandbox Code Playgroud)
和班级模块:
Option Explicit
Public pDayOfWeek As Integer
Public pDate As Date
Public pBloodGlucose As Double
Public pCH As Double
Public pInzulinF As Double
Public pInzulinL As Double
Public pCategory As String
Public Property Let setDayOfWeek(Value As Integer)
pDayOfWeek = Value
End Property
Public Property Let setDate(Value As Date)
pDate = Value
End Property
Public Property Let setBloodGlucose(Value As Double)
pBloodGlucose = Value
End Property
Public Property Let setCH(Value As String)
If IsNumeric(Value) Then
setCH = CDbl(Value)
Else
setCH = 0
End If
End Property
Public Property Let setInzulinF(Value As String)
If IsNumeric(Value) Then
pInzulinF = CDbl(Value)
Else
pInzulinF = 0
End If
End Property
Public Property Let setInzulinL(Value As String)
If IsNumeric(Value) Then
pInzulinL = CDbl(Value)
Else
pInzulinL = 0
End If
End Property
Public Property Let setCategory(Value As String)
If Value = "Something" Then
If Hour(pDate) < 9 Then
pCategory = "Something"
ElseIf Hour(pDate) < 11 Then
pCategory = "Something"
ElseIf Hour(pDate) < 14 Then
pCategory = "Something"
ElseIf Hour(pDate) < 16 Then
pCategory = "Something"
ElseIf Hour(pDate) < 19 Then
pCategory = "Something"
ElseIf Hour(pDate) < 21 Then
pCategory = "Something"
End If
Else
pCategory = Value
End If
pCategory = Value
End Property
Run Code Online (Sandbox Code Playgroud)
所以我的类名是"clsDBM",我正在尝试使用whorksheet中的相应数据填充此数组.表格格式正确,没有空行,所以这不是问题,但我无法弄清楚是什么...
有没有办法解决它并实现这一点(或者我应该使用完全不同的方法:D)
提前致谢!
使用新的运算符
Dim tmpData As New clsDBM
Run Code Online (Sandbox Code Playgroud)
因为您正在使用的这个语句:Dim tmpData As clsDBM只是定义一个变量容器或占位符,其类型 clsDBM的默认值为Nothing(同样:Dim i as Integer创建一个默认值为的空整数0).要创建该类对象的实际实例,您需要New它.