这实在让我感到困惑。我昨天提出了一个关于模块之间传递的集合的问题(see here),但似乎并没有对这个问题进行更多的解释,所以我试图以一种通用的方式更清楚地说明问题。EXCEL数组和模块之间传递值的集合
我有一个模块(module1)和一个用户窗体(userform1)。我在userform1中创建一个集合(或数组)并将工作表对象添加到这个数组中。然后,我将控制权传递给module1,module1调用userform1中的一个名为addNewFile的子元素,它应该将新创建的工作簿添加到集合中。但是,每次module1调用addNewFile时,我都会得到以下两种情况之一:1)集合已被删除,所有已添加的工作表现在都已经消失(对于集合),2)我得到一个错误,说我的类型不匹配(对于数组)。我不知道为什么会发生这种情况,所以下面的代码可以更好地说明问题。任何帮助,将不胜感激,即使它只是告诉我,它是不可能存储在数组中的工作表对象。
UserForm1
Dim workBooksCollection as New Collection 'can also define as an array
Private Sub CommandButton1_click()
Dim mainWorkBook as workbook
Set mainWorkBook = ActiveWorkbook
Dim testwb As Workbook
workBooksCollection.Add Item:=mainWorkBook, key:="main" 'Adds successfully
workBooksCollection.Add Item:=testwb, key:="test" 'Adds successfully
MsgBox "the size of the array is: " & usedWorkBooks.Count 'Prints off as size 2
Module1.initialize
'After running initialize, prints off as size 0, meaning collection has been erased
MsgBox "the size of the array is: " & usedWorkBooks.Count 'Prints off as size 0
End Sub
Public Sub addNewFile(filepath As String, sheetKey As String)
Dim newWorkBook As Workbook
Set newWorkBook = Workbooks.Open(filepath)
MsgBox "The name of the workbook is: " & newWorkBook.name 'Prints off name of workbook successfully
workBooksCollection.Add Item:=newWorkBook, key:=sheetKey
MsgBox "the size of the array is: " & workBooksCollection.Count 'Prints off as size 1
End Sub
模块1
Public Sub intialize()
Dim filepath as string
'The filepath is set to any path of a workbook
'This will print out that the array size is 1
UserForm1.addNewFile filePath, "secondBook"
End Sub
很抱歉,如果我似乎在这里费口舌,但我真的没有任何想法是怎么回事。我习惯于集合和列表的思想是全局性的,在被另一个模块引用时不会改变。任何关于这里发生的事情的帮助都会很棒。
此外,这发生在所有数据类型,而不仅仅是工作簿。 – derigible 2012-08-01 19:45:02
你似乎没有初始化你的'workBooksCollection'集合对象('Set workBooksCollection = New collection')。这发生在哪里? – 2012-08-01 20:03:40
对不起,我忘了在workBooksCollection之前添加New运算符。它现在重申'Dim workBooksCollection as New Collection' – derigible 2012-08-01 20:27:15