下标超出范围:Debug.Print arr(i, 1)



我正在尝试使用以下方法遍历数组:-

For i = LBound(arr, 1) To UBound(arr, 1)
    Debug.Print arr(i, 1)
Next i

但在我不明白的Debug.Print arr(i, 1)收到下标超出范围的错误。如果我去掉上面的行,代码工作正常。

Sub Summarise()
    Dim dict
    Dim i As Long
    Dim arr() As Variant
    Dim n As Long
    Dim ws As Worksheet
    Dim ws2 As Worksheet
    Set ws2 = Worksheets("Plan")
    Set ws = Worksheets("Data")
    dict = ws.[A1].CurrentRegion.Value
    With CreateObject("Scripting.Dictionary")
        For i = 1 To UBound(dict, 1)
            .Item(dict(i, 1)) = .Item(dict(i, 1)) + dict(i, 5)
        Next
        arr = Array(.Keys, .items)
        n = .Count
    End With
    For i = LBound(arr, 1) To UBound(arr, 1)
        Debug.Print arr(i, 1)
    Next i
    ws2.[A1].CurrentRegion.ClearContents
    ws2.[A1].Resize(n, 2).Value = Application.Transpose(arr)   
End Sub

您的行arr = Array(.Keys, .items)正在创建一个数组数组,而不是这些项目的数组。

Array(Array(1,2,3), Array(4,5,6))

要遍历它,您需要执行以下操作:

For i = LBound(arr, 1) To UBound(arr, 1)
    For j = LBound(arr(i)) to UBound(arr(i))
        Debug.Print arr(i)(j)
    Next j
Next i

为了避免这样做并像您当前一样循环访问,您可以在添加到字典时添加到数组中

最新更新