在这个VBA程序中,我要做的就是从电子表格传递一个数组,并为每个数组的单元格添加1。我的问题是数组的索引。当我开始循环数组时它不会 当我从零开始索引时工作(我得到错误下标超出范围)但是当我从1开始数组时它工作得很好。为什么会这样? (我认为只有我在顶部 Option Base 1 指定
的情况才是这种情况Sub Passarray()
Dim Array As Variant
Dim i, j As Integer
'Pass array and manipulate
Vol = Range("Volatility")
For i = 0 To 2
For j = 0 To 2
Vol(i, j) = 1+ Vol(i,j)
Next j
Next i
End Sub
答案 0 :(得分:1)
根据我的经验将 Range 传递给数组时,情况并非如此。
我不知道背后的具体原因,但this link表示您无法改变此行为。
QUOTE:加载工作表数据的数组始终具有等于1的下限(LBound),无论模块中可能包含哪个Option Base指令。你无法改变这种行为。
你能做的就是像这样利用 LBound / UBound :
Vol = Range("Volatility")
For i = LBound(Vol, 1) To UBound(Vol, 1)
For j = Lbound(Vol, 2) To Ubound(Vol, 2)
'~~> do stuff here
Vol(i, j) = 1 + Vol(i, j)
Next j
Next i
但是,如果您的 Range 只是一行包含多行,则将其传递给Array,如下所示:
Vol = Application.Transpose(Range("Volatility"))
For i = LBound(Vol) To UBound(Vol)
'~~> do stuff here
Vol(i) = 1 + Vol(i)
Next
这样,您将生成一维阵列而不是二维阵列 要迭代上面可以使用的值,或者也可以使用 For Each :
Dim x As Variant '~~> dimension another variant variable
For Each x In Vol
'~~> do stuff here
x = 1 + x
Next