excel - 在用户窗体/工作表对象中具有可用的公共(public)变量

标签 excel excel-2013 vba

我花了最后一个小时阅读有关各种类型的 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/

相关文章:

excel - 使用VBA的图像尺寸单位

c# 生成带有图表模板的excel表格

Excel Active X 控制按钮突然不起作用

excel - 如何通过VBA填充以下模式的公式但保留单元格中的公式?

excel - 我可以通过 vba 设置 Excel Power Query 的用户名和密码吗?

java - 如何向服务器提交请求而不需要响应

Excel 在尝试计算一个或多个公式时耗尽资源

c++ qt API 适用于 Excel 2010 但不适用于 excel 2013

excel - VBA中的Countif函数与动态标准

VBA集合可以定义为静态类型吗?