在用户窗体/工作表对象中有一个公共变量可用
在用户窗体/工作表对象中有一个公共变量可用
我花了一个小时的时间阅读了关于不同版本的Excel VBA中变量作用域的页面,但没有找到明确的文档参考解决我的作用域问题...尽管我确信这是一个经典问题。好吧,那就开始吧。\n我的工作簿只包含一个工作表和一个用户窗体。在我的工作表上,我有一个学生名单,存储在第一列。我想要:\n
- \n
- 将这个名单加载到一个名为
students_list
的全局集合变量中(我在ThisWorkbook对象的Workbook-Open()过程中实现了这一点) - 使用
students_list
的内容初始化我的用户窗体中的一个列表框 - 在用户窗体上点击一个按钮时,从
students_list
中删除元素
\n
\n
\n
\n我只需要一个变量,它可以在我的用户窗体的过程中和ThisWorkbook对象内部被看到。\n我尝试将其声明为public、global、在工作表的代码中、在用户窗体中、在ThisWorkbook中、在一个专门用于全局变量的模块中...但我似乎找不到正确的方法让students_list
变量在任何地方都可见。\n我错过了什么?对于这个看起来如此基本但却让我困扰的问题,我表示歉意 :-/
在用户窗体/工作表对象中使用公共变量的问题是因为公共变量的作用范围限制在特定的对象内部。要解决这个问题,可以将公共变量的声明放在一个模块内,这样作用范围将扩展到整个项目。
在一个模块(例如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