【问题标题】:Excel VBA Variable value Scope - assign value to a variable for all subsExcel VBA 变量值范围 - 将值分配给所有子项的变量
【发布时间】:2015-12-06 16:32:49
【问题描述】:

我正在编写一个包含多个子模块的模块,并且我需要一些变量在所有模块中具有相同的值。我知道将变量声明为

Public varname as vartype

但是我怎样才能为这样的变量分配一个全局值呢?

谢谢

【问题讨论】:

  • 把它放在任何模块表的顶部,就在Option Explicit 的下方,所有模​​块和工作表代码页中的所有子都可以使用它。这称为声明区域。
  • @Jeeped 我不是在谈论声明变量,我想为它分配一个值,一个我想在整个模块中使用的值;类似于“公共”价值的东西;显然,这在子之外是不可能的
  • 像往常一样在任何子甚至函数中赋值。如果要分配的值是静态的,那么 var 可以声明为常量;例如public const csURL as string = "http://stackoverflow.com/" 但您将无法更改它。
  • 创建一个公共变量并赋值绝对是可能的。我感觉你忘了提供一些信息。
  • 您需要告诉我们您尝试将什么数据类型用于您的“全局”变量,以便获得完整的答案。

标签: excel vba scope assign


【解决方案1】:

对于工作表对象(与此相关的任何对象),您需要执行以下操作:

在标准代码模块中:

Public varName As Excel.Worksheet

Workbook_Open() 事件中:

Private Sub Workbook_Open()
    Set varName = Sheets("mySheet")
End Sub

然后您可以在该工作簿的任何其他模块中引用varName,它将指向您的工作表对象。


从您的问题/cmets 看来,您实际上想要某种对象常量,而这在 VBA 中无法完成 - 请参阅 Declare a Workbook as a Global variable 了解更多信息。

如果您指的是 value 数据类型,例如 StringIntegerLong,那么您可以使用常量而不是变量,但是不能使用常量的值一旦被声明就改变了('constant'的定义),即

Public Const someName As String = "Macro Man"
Public Const someNumber As Long = "1234567890"
Public Const someInt As Integer = "1453"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-05
    • 2023-04-06
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    相关资源
    最近更新 更多