数组中的用户定义对象 VBA
User-Defined Object In Array VBA
如主题行所述,我正在尝试将 class 的对象存储到数组中。 VBA 给我一个令人沮丧的错误:
'Object Variable or With Block variable not set'
我很确定我正确地定义了我的对象,并且局部变量显示该对象是我定义的类型并且它的所有字段都已填写,所以我无法弄清楚我的问题出在哪里.
Dim Type1(2 To 250) As myClass
Dim Type2(2 To 250) As myClass
Dim Type3(2 To 250) As myClass
Dim temp_obj As myClass
Dim foo As String
For i = 2 To 250
Set temp_obj = New myClass
With temp_obj
.field1 = Worksheets("Sheet1").Rows(i).Columns(2).Value
.field2 = Worksheets("Sheet1").Rows(i).Columns(3).Value
.field3 = Worksheets("sheet1").Rows(i).Columns(4).Value
.field4 = Worksheets("Sheet1").Rows(i).Columns(5).Value
End With
foo = Worksheets("Sheet1").Rows(i).Columns(1).Value
If foo = "Type1" Then
Type1(i) = temp_obj
ElseIf foo = "Type2" Then
Type2(i) = temp_obj
ElseIf foo = "Type3" Then
Type3(i) = temp_obj
End If
Next i
我的 class 看起来像这样:
Private pfield1 As Single
Private pfield2 As Integer
Private pfield3 As String
Private pfield4 As String
Public Property Get field1() As Single
field1 = pfield1
End Property
Public Property Get field2() As Integer
field2 = pfield2
End Property
Public Property Get field3() As String
field3 = pfield3
End Property
Public Property Get field4() As String
field4 = pfield4
End Property
Public Property Let field1(p As Single)
pfield1 = p
End Property
Public Property Let field2(p As Integer)
pfield2 = p
End Property
Public Property Let field3(p As String)
pfield3 = p
End Property
Public Property Let field4(p As String)
pfield4 = p
End Property
尝试在底部进行此更改:
If foo = "Type1" Then
Set Type1(i) = temp_obj
ElseIf foo = "Type2" Then
Set Type2(i) = temp_obj
ElseIf foo = "Type3" Then
Set Type3(i) = temp_obj
End If
如主题行所述,我正在尝试将 class 的对象存储到数组中。 VBA 给我一个令人沮丧的错误:
'Object Variable or With Block variable not set'
我很确定我正确地定义了我的对象,并且局部变量显示该对象是我定义的类型并且它的所有字段都已填写,所以我无法弄清楚我的问题出在哪里.
Dim Type1(2 To 250) As myClass
Dim Type2(2 To 250) As myClass
Dim Type3(2 To 250) As myClass
Dim temp_obj As myClass
Dim foo As String
For i = 2 To 250
Set temp_obj = New myClass
With temp_obj
.field1 = Worksheets("Sheet1").Rows(i).Columns(2).Value
.field2 = Worksheets("Sheet1").Rows(i).Columns(3).Value
.field3 = Worksheets("sheet1").Rows(i).Columns(4).Value
.field4 = Worksheets("Sheet1").Rows(i).Columns(5).Value
End With
foo = Worksheets("Sheet1").Rows(i).Columns(1).Value
If foo = "Type1" Then
Type1(i) = temp_obj
ElseIf foo = "Type2" Then
Type2(i) = temp_obj
ElseIf foo = "Type3" Then
Type3(i) = temp_obj
End If
Next i
我的 class 看起来像这样:
Private pfield1 As Single
Private pfield2 As Integer
Private pfield3 As String
Private pfield4 As String
Public Property Get field1() As Single
field1 = pfield1
End Property
Public Property Get field2() As Integer
field2 = pfield2
End Property
Public Property Get field3() As String
field3 = pfield3
End Property
Public Property Get field4() As String
field4 = pfield4
End Property
Public Property Let field1(p As Single)
pfield1 = p
End Property
Public Property Let field2(p As Integer)
pfield2 = p
End Property
Public Property Let field3(p As String)
pfield3 = p
End Property
Public Property Let field4(p As String)
pfield4 = p
End Property
尝试在底部进行此更改:
If foo = "Type1" Then
Set Type1(i) = temp_obj
ElseIf foo = "Type2" Then
Set Type2(i) = temp_obj
ElseIf foo = "Type3" Then
Set Type3(i) = temp_obj
End If