Vba 无法在此工作簿代码模块中声明的堆栈中保留全局变量

Vba 无法在此工作簿代码模块中声明的堆栈中保留全局变量,vba,Vba,我有一个VBA项目,由4个“代码块”组成: 第一个代码块包含在thiswoolk\u Open事件中。在这里,我创建了一个我想在我的项目中随处使用的集合: Set myList = New Collection 第二块和第三块是两个用户表单的方法。在这里,我希望能够访问我的变量myList,以便在其中添加自定义对象(自定义类的实例) 最后,第四块是包含在模块中的代码,我通过该模块执行后台操作。即使在这里,我也希望访问集合以检索我添加/修改的对象 我所做的是在我的代码上声明变量为全局变量,即在

我有一个VBA项目,由4个“代码块”组成:

  • 第一个代码块包含在
    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
    。非常好用,谢谢。