2015-10-03 2 views
2

Как говорится в строке темы, я пытаюсь сохранить объекты класса, который я написал в массив. VBA дает мне расстраивает ошибку:Пользовательский объект в массиве VBA

«Переменная объекта или блока переменной не установлено»

Я довольно уверен, что я правильно определяя свой объект, а локальные переменные показывают, что объект моего определен тип и все его поля заполнены, поэтому я не могу понять, где моя проблема.

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 

Мой класс выглядит примерно так:

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 

ответ

1

Попробуйте это изменение в нижней части:

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 
+0

Когда я делаю это изменение, которое я получаю сообщение об ошибке типа: «Объект не поддерживайте это свойство или метод » –

+0

Ах! Не видел второго предложения. Это сработало отлично, и это имеет смысл. Забыл использовать ключевое слово Set, так как я обновлял массив. Спасибо! –

+0

Добро пожаловать. Рад, что смог помочь. –

Смежные вопросы