VBA:数组和全局变量声明

时间:2011-08-17 18:33:04

标签: arrays excel-vba global-variables scope vba

我需要在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

如何实现此功能?

5 个答案:

答案 0 :(得分:6)

对于全局声明,将Dim更改为Public,如下所示:

Public test(0 to 10) as String

您可以这样调用(假设它在Module1中,否则将Module1更改为您命名的任何内容):

Module1.test(0) = "something"

或者简单地说:

test(0) = "something"

答案 1 :(得分:5)

为什么不在课堂上创作一切?这就是毕竟发明课程的原因。

考虑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

您还可以缓存引用它的单元格的位置,或者使用假定的命名参数,并且只在类初始化后提供对工作表的引用。

答案 2 :(得分:3)

您可以使用Public关键字来声明您需要在任何模块中访问的变量。

请记住,在vba中,您无法在过程之外声明变量或代码。

有关详细信息,请参阅here

答案 3 :(得分:1)

我的建议比课程轻一点(虽然课程是一个很好的推荐)

选项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()

答案 4 :(得分:0)

一个人可以通过Static Property进行直接初始化(无需全局初始化),而无需创建类或字符串解析-如详细说明和示例here