Vba 无法在此工作簿代码模块中声明的堆栈中保留全局变量
我有一个VBA项目,由4个“代码块”组成:Vba 无法在此工作簿代码模块中声明的堆栈中保留全局变量,vba,Vba,我有一个VBA项目,由4个“代码块”组成: 第一个代码块包含在thiswoolk\u Open事件中。在这里,我创建了一个我想在我的项目中随处使用的集合: Set myList = New Collection 第二块和第三块是两个用户表单的方法。在这里,我希望能够访问我的变量myList,以便在其中添加自定义对象(自定义类的实例) 最后,第四块是包含在模块中的代码,我通过该模块执行后台操作。即使在这里,我也希望访问集合以检索我添加/修改的对象 我所做的是在我的代码上声明变量为全局变量,即在
thiswoolk\u Open
事件中。在这里,我创建了一个我想在我的项目中随处使用的集合:
Set myList = New Collection
myList
,以便在其中添加自定义对象(自定义类的实例)ThisWorkbook
常规声明的顶部,因为它是我第一次需要使用变量时出现的:
Dim myList As Collection
Private Sub Open()
'...
Set myList = New Collection
'...
End Sub
我的预期:尝试执行包含在我的一个表单的按钮单击事件(其代码当然位于项目树的另一个源文件中)中的以下语句应该正常工作,因为变量是全局声明的:
MyList.Add MyObject
发生的情况:该变量不在堆栈中,因此编译器返回错误所需对象
;当然,我也与观察者进行了检查(这告诉我对象是无
)
有人能帮我理解我在这件事上哪里做错了吗?如果你认为我遗漏了一些重要的东西,请不要犹豫询问/编辑
编辑:项目结构(在定义全局变量时为黄色,在尝试调用全局变量时为红色,但由于无效而失败)
您在
此工作簿中创建的内容很可能无法在整个VBA项目中访问。在打开
事件中,您要做的是将控件重定向到模块1
,然后在那里使用集合
。因此,将您的Dim myList as Collection
从本工作簿中取出,并在功能代码上声明为公共myList as Collection
,您在本工作簿中创建的内容在整个VBA项目中很可能无法访问。在Open
事件中,您要做的是将控件重定向到Module1
,然后处理那里的集合。因此,将您的Dim myList as Collection
从本工作簿中取出,并将其声明为Public myList as Collection
,再加上functional_code
@VBA4您说得对,现在一切正常。你介意把它写下来回答我吗?我将相应地编辑我的标题,事实上,问题摘要应该是“将一个全局变量声明到此工作簿中不会保留在堆栈中”,这是一个愚蠢的错误,对于下一个可能寻找我们问答交流的用户来说,这可能仍然是一个棘手的问题!谢谢@vba4all,我终于在我的functional\u code
模块中添加了Public myList As Collection
,并在那里创建了一个子初始化列表
,我从thispoolk\u Open
过程调用该列表以设置myList=New Collection
。非常好用,谢谢。