【发布时间】:2021-10-31 00:15:32
【问题描述】:
我花了最后一个小时阅读有关各种风格的 excel vba 中的变量范围的页面,但找不到解决我的范围问题的明确文档参考......即使我确信它是如此经典。哦,好吧,这就去。
我有一个只包含一张工作表和一个用户窗体的工作簿。我有一张学生名单,列在我工作表的第 1 列。我想:
- 将此列表加载到某个名为
students_list的全局 Collection 变量中(我使用 ThisWorkbook 对象中的 Workbook-Open() 过程来执行此操作) - 使用
students_list的内容在我的用户表单中初始化一个列表框 - 当点击我的用户窗体上的按钮时,从
students_list中删除元素
我只需要一个可以从我的用户窗体过程中看到的变量,以及从 ThisWorkbook 对象中看到的变量。
我尝试在工作表的代码、用户表单、ThisWorkbook、专用于全局变量的单独模块中将其声明为公共的、全局的……我似乎找不到正确的方法来拥有@987654325 @ 变量随处可见。
我错过了什么?我为这个应该如此基本但让我失望的问题道歉:-/
【问题讨论】:
-
您可以使用电子表格的
Range来存储列表,并且可以通过您的 VBA 代码的所有不同元素访问——基本上来自任何工作表和任何模块。如果您不希望这个暂存区域可见,请在 BB 列中开始它和/或将字体颜色设置为白色,这样用户就不会注意到它。 -
如果您在模块中将
students_list声明为Public,则该变量应该已可用于项目中的所有过程。见stackoverflow.com/a/3815797/6535336。 (唯一的例外是,如果您在其他地方声明了另一个具有相同名称的变量 - 那么第二个变量将在第二个声明的范围内被引用。) -
没有显示暂存区的 pb,实际上这就是我将值加载到我的
students_list集合中的方式......但我担心这不是问题。 -
@YowE3K: 是的,就像你说的,应该是 :) 我已经尝试用最少的代码进行测试:* 在 ThisWorkbook 代码中,只有一行:
Public foo As Integer* in 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 -
好的,对于评论布局很抱歉,在 cmets 中似乎无法使列表或换行符正常工作。无论如何,我只是想补充一点,我没有收到预期的消息“foo = 4”。现在请对我大喊大叫,指出我明显的错误。
标签: excel excel-2013 vba