带有值的VBA中的全局变量

Tho*_*mas 5 excel vba excel-vba

我正在处理一个带有几个子的Excel文件,它们彼此独立.但是他们仍然始终使用相同值的相同变量.因此,我想在全局定义变量,但我发现很容易就是只在全局声明它们.我该怎么办呢?我还可以从头开始直接用变量填充变量?是否有可能从一开始就定义变量而不必编写子类,如下例所示?(我相信这是不可能的,还是我错了?)

非常感谢你的帮助!

托马斯

Public s1, s2, s3 As Worksheet
Public array1, array2 As Variant

s1 = ThisWorkbook.Worksheets("Sheet 1")
s2 = ThisWorkbook.Worksheets("Sheet 2")
s3 = ThisWorkbook.Worksheets("Sheet 3")  
array1 = Array(3, 5, 6, 7, 5)
array2 = Array(8, 9, 10, 11, 12)

Sub code1()
...
End Sub

Sub code2()
...
End Sub
Run Code Online (Sandbox Code Playgroud)

Sam*_*Sam 5

是否有可能从头开始定义变量而不必编写子?

不,您只能在子过程或函数中获取/设置变量的值.


另外,请注意您当前的代码:

Public s1, s2, s3 As Worksheet
Public array1, array2 As Variant
Run Code Online (Sandbox Code Playgroud)

声明s1s2as Variants3as Worksheet- 在VBA中常见的误解是你可以用这种方式声明多个相同类型的变量.

在VBA中的一行执行此操作的正确方法是:

Public s1 As Worksheet, s2 As Worksheet, s3 As Worksheet
Run Code Online (Sandbox Code Playgroud)

我会对第二行说同样的话,但你已经宣称它是一个变种.


Amo*_*ses 3

您可以在模块中将它们定义为公共变量,然后在 ThisWorkBook 模块的 Workbook_Open 中设置它们(其中工作表在 MS Visual Basic 编辑器中列出):

Public Sub Workbook_Open()
  Set s1 = ThisWorkbook.Worksheets("Sheet 1")
  Set s2 = ThisWorkbook.Worksheets("Sheet 2")
  Set s3 = ThisWorkbook.Worksheets("Sheet 3")  
  array1 = Array(3, 5, 6, 7, 5)
  array2 = Array(8, 9, 10, 11, 12)
End Sub
Run Code Online (Sandbox Code Playgroud)

每当电子表格首次打开时都会执行此方法。