调试VBA代码 - 将值附加到数组

时间:2014-08-04 09:20:27

标签: vba excel-vba excel

我正在尝试使用以下形式的代码来填充x行数组:

Dim myarray() As Variant
Dim string1 As String

Dim myarray_ubound As Integer
myarray_ubound = 0

For i = 1 to x

  myarray_ubound = myarray_ubound + 1
  ReDim Preserve myarray(1 To myarray_ubound, 1 To 2)

  myarray(myarray_ubound,1) = i
  myarray(myarray_ubound,2) = string1

Next i

但是,当我运行它时,它会在第一个循环后卡住,告诉我下标超出了范围。调试将我带到ReDim命令。

我使用myarray_ubound作为多次调用UBound函数的替代方法,但我也尝试过使用它,我也得到了同样的错误。

有人能发现出了什么问题吗?

3 个答案:

答案 0 :(得分:3)

你只能重新训练数组的最后一个元素(不是第一个),见下文。如你所知x我建议从头开始用这个值重新编译你的数组。

Dim myarray() As Variant
Dim string1 As String

Dim myarray_ubound As Integer
myarray_ubound = 0

For i = 1 To 10

  myarray_ubound = myarray_ubound + 1
  ReDim Preserve myarray(1 To 2, 1 To myarray_ubound)

  myarray(1, myarray_ubound) = i
  myarray(2, myarray_ubound) = string1

Next i

答案 1 :(得分:3)

请参阅:http://msdn.microsoft.com/en-us/library/aa266231.aspx "如果您使用Preserve关键字,则只能调整最后一个数组维度,并且根本无法更改维度数。"

尝试

ReDim Preserve myarray(1 To 2, 1 To myarray_ubound)

代替。

答案 2 :(得分:1)

由于您将变量声明为Variant,因此我不知道为什么需要重新调暗。 (可能与记忆问题有关,请随时填写)。

我建议:

For i = 1 to 10

myArray(1, i-1) = i
myArray(2, i-1) = string1

next i