2013-07-29 83 views
0

所以我基本都在Excel中从日历中包含的数据行的列表,所有谁创造了他们每个用户。我正在为每个用户制作一个对象集合。在将个人添加到第1个集合后,我在用户对象内部创建了另一个名为“Events”的集合。这是存储事件类型和日期的地方。我无法将数组添加到Collection“Events”中。添加阵列收集VBA

“用户”对象是这样的:

User

-Name

-Events [event1, event2, event3, ..., etc]

我得到的错误“对象变量或带变量未设置”这是在结束从下面的代码所采取的行的neested if和else if,让这个错误的语句:

temp.Events.Add arr1

emp2.Events.Add arr2

代码:

Do Until IsEmpty(Cells(i, 5)) 
Dim name As String 
'grab name in cell 
name = Cells(i, 5) 
'if first list item, add new user 
If list.Count = 0 Then 
    Dim emp1 As New User 
    emp1.name = name 
    list.Add emp1 
Else 
    'traverse through list and search for same name 
    For j = 1 To list.Count 
     'if name is present, add event data to user object 
     If list.Item(j).name = name Then 
      Dim temp As New User 
      Set temp = list.Item(j) 
      Dim arr1(2) As String 
      arr1(1) = Cells(i, 3) 
      arr1(2) = Cells(i, 1) 
      temp.Events.Add arr1 
     'if name is not present, add new user and event data to new user object 
     ElseIf j = list.Count Then 
      Dim emp2 As New User 
      emp2.name = name 
      Dim arr2(2) As String 
      arr2(1) = Cells(i, 3) 
      arr2(2) = Cells(i, 1) 
      emp2.Events.Add arr2 
      list.Add emp2 
     End If 
    Next 
End If 

    i = i + 1 
Loop 

如果这样做的任何更简单的方法,或者如果这是不可能的,请点我在正确的方向。任何帮助是极大的赞赏。谢谢。

+1

在构造你的'User'对象,你'初始化Events' ? – sigil

回答

0

在用户类中添加方法Class_Initialize和初始化变量。现在,这只被调用的第一个方法使用,因此,当您使用

Dim temp As New User 

它,直到你调用对象的方法仍然没有初始化。

你会想用以下方式使用

Dim temp As User 
set temp = New User 'now it is initialized 

之前初始化它在你的用户类别

Private Sub Class_Initialize() 
'code here 
End Sub 
+2

这是不正确的。对象可以用Dim'语句初始化;作为一个例子,尝试用'Dim FSO作为New FileSystemObject'创建一个新的FileSystemObject。没有'Set'语句就可以立即使用。 – sigil

+1

@sigil我建议你去阅读:http://support.microsoft.com/kb/154651 – Sorceri

+0

初始化是问题。对不起,第一次使用VBA时,我发现所有创建类的教程都很糟糕。谢谢您的帮助! – hartley054