无法在ThisWorkbook代码模块中声明的堆栈中保留全局变量

时间:2014-12-04 15:07:20

标签: vba

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

  1. 第一个代码块包含在ThisWorkbook_Open事件中。在这里,我创建了一个我想在项目中随处使用的集合:

    Set myList = New Collection
    
  2. 第二个和第三个块是两个用户表单的方法。在这里,我希望能够访问我的变量myList,以便添加自定义对象(自定义类的实例);

  3. 最后,第四个块是包含在模块中的代码,通过该模块执行后台操作。即使在这里,我也想访问该集合来检索我添加/修改的对象。

  4. 我所做的是在我的代码之上将变量声明为全局变量,即在ThisWorkbook一般声明之上,因为它是第一次我需要使用我的变量:

    Dim myList As Collection 
    Private Sub Open()
        '...
        Set myList = New Collection
        '...
    End Sub
    

    我的预期:尝试执行Button-click事件中包含的以下语句(其代码位于项目树的另一个源文件中,当然)我的表单应该正常工作,因为变量是全局声明的:

    MyList.Add MyObject
    

    发生什么:变量不在堆栈中,因此编译器返回错误Object required;当然我也用一个观察者检查过这个(告诉我对象是Nothing)。

    有人能帮我理解我在做错的地方吗?如果您认为我遗漏了重要的内容,请随时询问/编辑。

    编辑:项目结构(黄色,其中定义了全局变量,红色,其中尝试调用全局变量但失败,因为它什么都没有)

    enter image description here

1 个答案:

答案 0 :(得分:1)

您在ThisWorkbook中创建的内容很可能无法在整个VBA项目中访问。您在Open事件中要执行的操作是将控件重定向到Module1,然后在那里使用collection。因此,请从Dim myList as Collection中取出ThisWorkbook,并在Public myList as Collection之上将其functional_code声明为。{/ p>