我花了最后一个小时阅读有关各种类型的 excel vba 中的变量作用域的页面,但找不到解决我的作用域问题的明确文档引用...尽管我确信它是如此经典。哦,好吧,开始了。
我有一本工作簿,其中仅包含一张工作表和一个用户表单。我的表格第一栏中有一份学生名单。我愿意:
- 将此列表加载到名为
students_list
的全局 Collection 变量中(我使用 ThisWorkbook 对象中的 Workbook-Open() 过程来执行此操作) - 使用
students_list
的内容初始化我的用户表单中的列表框 - 当点击我的用户表单上的按钮时,从
students_list
中删除元素
我所需要的只是一个可以从我的用户表单的过程以及 ThisWorkbook 对象内部看到的变量。
我尝试在工作表的代码中、用户表单中、ThisWorkbook 中、专用于全局变量的单独模块中将其声明为公共(public)的、全局的...我似乎找不到正确的方法来拥有 students_list
变量随处可见。
我错过了什么?我对这个问题表示歉意,这个问题应该很基本,但却让我困惑:-/
最佳答案
将 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
关于excel - 在用户窗体/工作表对象中具有可用的公共(public)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40073952/