我需要在VBA中声明一个数组,该数组将由每个函数使用。但是,我不能像在c++中那样将其声明为全局变量。
我的代码如下:Option Explicit
Dim test(0 to 10) as String
test(0) = "avds"
test(1) = "fdsafs"
....
下面的内容概括了我要做的事情。
public function store() as boolean
Worksheets("test").cells(1,1) = test(0)
End Function
如何实现这个功能?
对于全局声明,将Dim改为Public,如下所示:
Public test(0 to 10) as String
你可以这样调用它(假设它在Module1中,否则将Module1更改为你所命名的任何名称):
Module1.test(0) = "something"
或简单的:
test(0) = "something"
为什么不在类中创建所有内容呢?这就是为什么要发明类的原因。
考虑Class1
定义
Option Explicit
Private m_data() As String
Private Sub Class_Initialize()
ReDim m_data(0 To 10)
End Sub
Private Sub Class_Terminate()
Erase m_data
End Sub
Public Property Get Count() As Integer
Count = UBound(m_data) - LBound(m_data) + 1
End Property
Public Property Get Data(index As Integer) As String
Data = m_data(index)
End Property
Public Property Let Data(index As Integer, value As String)
m_data(index) = value
End Property
Public Function Store(rng As Range) As Boolean
Store = (rng.value = m_data(0))
End Function
你可以添加所有你想要的函数,可以访问你的数组,就像Store()
。使用
Public Sub Test()
Dim c As New Class1
c.Data(0) = "January"
Debug.Print c.Store(Cells(1, 1))
End Sub
你也可以缓存它所引用的单元格的位置,或者使用一个假定的命名参数,并且在类初始化之后只提供一次对工作表的引用。
您可以使用Public
关键字来声明您需要在任何模块中访问的变量。
请记住,在vba中不能在过程之外声明变量或代码。
查看更多信息
我有一个比类更轻的建议(尽管类是一个很好的建议)
选项1
将所需的常量数组定义为分隔字符串常量:
Public Const cstrTest = "String 1;String 2; String 3; String 4; String 5; String 6"
接下来,当你需要它时,只需使用Split创建一个数组,代码最少:
Dim arrStrings
arrStrings = Split (cstrTest, ";")
选项2
您可以替换(或与选项1结合)一个简单的公共函数
Public Function constStringArray() As String()
constStringArray = Split (cstrTest, ";")
End Function
那么,在使用…
Dim arrStrings
'Option 1 example
arrStrings = Split (cstrTest, ";")
'Option 2 example
arrStrings = constStringArray()
可以通过Static Property
直接完成(使用全局初始化),而无需创建类或字符串解析—如这里详细描述和示例所示