我有一个由4个“代码块”组成的VBA项目:
第一个代码块包含在ThisWorkbook_Open
事件中。在这里,我创建了一个我想在项目中随处使用的集合:
Set myList = New Collection
第二个和第三个块是两个用户表单的方法。在这里,我希望能够访问我的变量myList
,以便添加自定义对象(自定义类的实例);
最后,第四个块是包含在模块中的代码,通过该模块执行后台操作。即使在这里,我也想访问该集合来检索我添加/修改的对象。
我所做的是在我的代码之上将变量声明为全局变量,即在ThisWorkbook
一般声明之上,因为它是第一次我需要使用我的变量:
Dim myList As Collection
Private Sub Open()
'...
Set myList = New Collection
'...
End Sub
我的预期:尝试执行Button-click事件中包含的以下语句(其代码位于项目树的另一个源文件中,当然)我的表单应该正常工作,因为变量是全局声明的:
MyList.Add MyObject
发生什么:变量不在堆栈中,因此编译器返回错误Object required
;当然我也用一个观察者检查过这个(告诉我对象是Nothing
)。
有人能帮我理解我在做错的地方吗?如果您认为我遗漏了重要的内容,请随时询问/编辑。
编辑:项目结构(黄色,其中定义了全局变量,红色,其中尝试调用全局变量但失败,因为它什么都没有)
答案 0 :(得分:1)
您在ThisWorkbook
中创建的内容很可能无法在整个VBA项目中访问。您在Open
事件中要执行的操作是将控件重定向到Module1
,然后在那里使用collection
。因此,请从Dim myList as Collection
中取出ThisWorkbook
,并在Public myList as Collection
之上将其functional_code
声明为。{/ p>