所以今天的问题让我生气,因为这应该很容易,我找不到答案:
如何在VBA中声明公共数组?我正在使用带有字母A,B,C ......的数组,因为我正在使用Excel单元格,我不想在我创建的每个函数中声明它,对吧?我试图先在网上看一下,然后我读到你必须在另一个模块中声明它,这就是我所做的:
Public colHeader As String
colHeader = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L")
Run Code Online (Sandbox Code Playgroud)
但Visual Basic不喜欢它......
那我该怎么办?
非常感谢 :)
编辑:问题更多的是将值赋予数组而不是声明它
将数组声明为应用程序中的subs的全局:
Public GlobalArray(10) as String
GlobalArray = Array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L')
Sub DisplayArray()
Dim i As Integer
For i = 0 to UBound(GlobalArray, 1)
MsgBox GlobalArray(i)
Next i
End Sub
Run Code Online (Sandbox Code Playgroud)
方法2:将数组传递给sub.使用ParamArray.
Sub DisplayArray(Name As String, ParamArray Arr() As Variant)
Dim i As Integer
For i = 0 To UBound(Arr())
MsgBox Name & ": " & Arr(i)
Next i
End Sub
Run Code Online (Sandbox Code Playgroud)
ParamArray必须是最后一个参数.
您使用了错误的类型。该Array(...)函数返回 a Variant,而不是 a String。
因此,在你的模块的声明部分(它不需要是一个不同的模块!),你定义
Public colHeader As Variant
Run Code Online (Sandbox Code Playgroud)
并在程序代码开头的某个地方(例如,在Workbook_Open事件中)使用以下命令对其进行初始化
colHeader = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L")
Run Code Online (Sandbox Code Playgroud)
另一个(简单的)替代方法是创建一个返回数组的函数,例如
Public Function GetHeaders() As Variant
GetHeaders = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L")
End Function
Run Code Online (Sandbox Code Playgroud)
这样做的优点是不需要初始化全局变量,缺点是每次函数调用都会重新创建数组。
| 归档时间: |
|
| 查看次数: |
106657 次 |
| 最近记录: |