在没有上限的情况下,在VBA-ACCESS中声明Array()不起作用

问题描述 投票:2回答:2

我正在学习宣布arrays。它通过使用以下代码给出上限来声明它时起作用:

Dim arrayA(5) as String

我通过分配一个随机值来检查它:

arrayA(0) = 1
MsgBox arrayA(0)

MsgBox通过给出值1来响应。

但是,我的目的是创建一个动态数组,我定义如下:

Dim arrayA() as String

我以同样的方式测试它

arrayA(0) = 1
MsgBox arrayA(0)

但这一次它不起作用,MsgBox弹出空洞。有人会告诉我是否需要加载一些库来与dynamic array一起工作?

vba access-vba
2个回答
4
投票

VBA中的数组需要在使用之前进行初始化。

您可以使用Redim语句初始化数组:

Dim arrayA() as String
Dim i As Integer
i = 0
Redim ArrayA (0 To i)
arrayA(0) = "1" 'String
MsgBox arrayA(0)

或者,有些函数返回初始化数组。在这种情况下,由于初始化发生在外部函数中,因此不需要Redim。但是,您确实需要确保将类型与返回的数组匹配,并且开销相同或更多。

Dim arrayA() as Variant
arrayA = Array(1)
MsgBox arrayA(0)

2
投票

您可以声明一个没有限制的数组,但必须在使用之前将数组redim到所需的限制:

Dim myArray() As Long
Redim myArray(0)
myArray(0) = 0 'etc...

所以,你不能像这样在VBA中使用“动态”数组。

我所知道的阵列(以及其他许多VB / A相关信息)的最佳参考来自已故的Chip Pearson:http://www.cpearson.com/Excel/VBAArrays.htm

© www.soinside.com 2019 - 2024. All rights reserved.