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))行?

有几个问题:

  1. Array(..)分配给数组时,不需要Array(..)
  2. 您应该在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