我花了最后一小时阅读有关各种风格的excel vba的变量范围的页面,并且无法找到解决我的范围问题的明确文档参考...尽管我确信它是如此经典。哦,好了,好了。
我有一个只包含一个工作表和一个用户窗体的工作簿。我有一份学生名单,列在我的表格第1栏。我想:
students_list
的某个全局Collection变量中(我使用 ThisWorkbook 对象中的Workbook-Open()过程执行此操作)students_list
的内容初始化我的userform students_list
删除元素
我需要的只是一个变量,可以从我的userform程序中看到,也可以从 ThisWorkbook 对象中看到。
我尝试将其声明为公共的,全局的,在工作表的代码中,在userform中,在ThisWorkbook中,在一个专用于全局变量的单独模块中......我似乎无法找到正确的方法来获取{{ 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