数组和全局变量声明



我需要在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直接完成(使用全局初始化),而无需创建类或字符串解析—如这里详细描述和示例所示

相关内容

  • 没有找到相关文章

最新更新