在userform / sheet对象中提供公共变量

时间:2016-10-16 18:33:06

标签: excel-vba excel-2013 vba excel

我花了最后一小时阅读有关各种风格的excel vba的变量范围的页面,并且无法找到解决我的范围问题的明确文档参考...尽管我确信它是如此经典。哦,好了,好了。

我有一个只包含一个工作表和一个用户窗体的工作簿。我有一份学生名单,列在我的表格第1栏。我想:

  • 将此列表加载到名为students_list的某个全局Collection变量中(我使用 ThisWorkbook 对象中的Workbook-Open()过程执行此操作)
  • 使用students_list的内容初始化我的userform
  • 中的列表框
  • 在我的用户表单上单击按钮
  • 时从students_list删除元素

我需要的只是一个变量,可以从我的userform程序中看到,也可以从 ThisWorkbook 对象中看到。

我尝试将其声明为公共的,全局的,在工作表的代码中,在userform中,在ThisWorkbook中,在一个专用于全局变量的单独模块中......我似乎无法找到正确的方法来获取{{ 1}}变量从任何地方都可见。

我错过了什么?我对这个问题表示道歉,这个问题应该是如此基本而且还要打败我: - /

1 个答案:

答案 0 :(得分:1)

Public变量的声明放在模块中(如果您还没有,请使用菜单中的“插入/模块”创建一个)。然后范围将扩展到整个项目。

所以在模块(例如Module1)中有:

Public foo As Integer

在工作表(例如Sheet1)中,代码包含:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    foo = 4
    MsgBox "foo set to 4"
End Sub
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    MsgBox "foo = " & foo
End Sub

如果您要将声明放在ThisWorkbook的代码中,则需要将其引用为Thisworkbook.foo,因为尽管可以从代码的任何部分访问它,但它是特定于那个ThisWorkbook对象。

因此,在ThisWorkbook的代码中有:

Public foo As Integer

在工作表(例如Sheet1)中,代码包含:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    ThisWorkbook.foo = 4
    MsgBox "foo set to 4"
End Sub
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    MsgBox "foo = " & ThisWorkbook.foo
End Sub