VBA – 通过范围定义的2D数组循环
好的,所以我在这里发现了一个解决这个问题的方法,但它不在VBA中,所以我只需要正确的语法来从数组中获取信息。
我已经从一个表格中的一个范围定义了一个数组。 我已经知道这实际上不是一维数组,因为我第一次认为即使第二维参数只是1。
现在,我只是试图循环访问数组,以帮助我了解他们的工作方式,并获得下标超出范围的错误。
Dim arr1 As Variant Dim e As Variant arr1 = Array(ActiveSheet.Range("A1:A4")) For e = LBound(arr1) To UBound(arr1) MsgBox (arr1(e, 1)) Next e
如何修复MsgBox (arr1(e,1))
行?
有几个问题:
- 将
Array(..)
分配给数组时,不需要Array(..)
- 您应该在Ubound和Lbound上指定尺寸
所以在这里:
Dim arr1 As Variant Dim e As Long arr1 = ActiveSheet.Range("A1:A4").Value For e = LBound(arr1,1) To UBound(arr1,1) MsgBox arr1(e, 1) Next e
作为一个真正的一维数组,你可以这样做:
Option Explicit Sub main() Dim arr1 As Variant Dim e As Long arr1 = Application.Transpose(ActiveSheet.Range("A1:A4").value) '<--| transposing a 1-column range you get a 1-row range that fits in an actual 1-D array For e = LBound(arr1) To UBound(arr1) <--| no need to specify the column index MsgBox arr1(e) Next e End Sub
至于遍历数组,您可能需要使用For Each
语法:
Option Explicit Sub main() Dim arr1 As Variant, elem As Variant arr1 = Application.Transpose(ActiveSheet.Range("A1:A4").value) For Each elem In arr1 MsgBox elem Next elem End Sub