我正在使用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)
答案 0 :(得分:2)
Dim Anum() As Variant
声明一个尚未包含任何元素的动态数组,因此您无法为其指定值。需要ReDim
才能使用它。
但是既然你已经知道你需要多少元素,你想要的是:
Dim Anum(0 To highval) As Variant
或者如果你知道你只会在其中存储字符串,
Dim Anum(0 To highval) As String