VBA Access 2010将数组元素提取为单独的动态命名变量

时间:2015-11-28 16:05:04

标签: arrays vba ms-access access-vba

我正在使用Access 2010 VBA脚本。我从一个临时表中提取信息,其中可能有1到10条记录。我正在使用GetRows来构建一个看起来像这样的二维数组,例如:

**0**       **1**
8677229     1
10289183    2
11981680    3
13043481    4

我已通过调试打印测试了数组函数,并且数组确实包含值。我想将数组值动态拆分为变量供以后使用。在这个例子中,我希望0列通过Anum(3)生成4个名为Anum(0)的变量,1列通过Pay(3)生成4个名为Pay(0)的变量。但是,我不断收到“错误9,下标超出范围”,如下所示:

Dim db As Database
Dim rs As Recordset
Dim PayAcct As Variant
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT Anum, Pay FROM PayPerAcct")
Dim highval As Integer
Dim i As Integer
i = 0

While Not rs.EOF
   PayAcct = rs.GetRows(10)
Wend
highval = UBound(PayAcct, 2)

Dim Anum() As Variant
Dim Pay() As Variant

For i = 0 To highval
    'error occurs on the below line
    Anum(i) = CStr(PayAcct(0, i))
    Pay(i) = CStr(PayAcct(1, i))
Next i

当我手动定义Anum和Pay变量并使用Cstr(PayAcct(1,0))操作时,它会将数组中的期望值传递给变量,所以我不认为这是问题。

我怀疑我正在为Anum()和Pay()分配错误的维度,因为我在Excel VBA中看到了类似的示例代码,其中将这些变量定义为Range工作。我已经尝试将Anum()和Pay()定义为Range(它不起作用,因为这是Access VBA),Variant和Object。

有任何想法或提示吗?

编辑 - 以下结束了,感谢您的帮助:

Dim Anum() As String
ReDim Anum(0 To highval)
Dim Pay() As String
ReDim Pay(0 To highval)

1 个答案:

答案 0 :(得分:2)

Dim Anum() As Variant

声明一个尚未包含任何元素的动态数组,因此您无法为其指定值。需要ReDim才能使用它。

但是既然你已经知道你需要多少元素,你想要的是:

Dim Anum(0 To highval) As Variant

或者如果你知道你只会在其中存储字符串,

Dim Anum(0 To highval) As String