VBA - 循环通过范围定义的2D数组

时间:2016-09-23 17:11:59

标签: arrays excel vba excel-vba

好的,所以我在这里找到了一个解决这个问题的方法,但它不在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))行?

2 个答案:

答案 0 :(得分:2)

有几个问题:

  1. 为阵列分配范围时,您不需要Array(..)
  2. 您应该在Ubound和Lbound上指定维度
  3. 所以这里:

    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
    

答案 1 :(得分:2)

作为一个真正的 1-D阵列你可以这样:

"propertyFoo": "https://example.com/some-iri" 

对于遍历数组,您可能希望使用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