代码之家  ›  专栏  ›  技术社区  ›  urdearboy

如何查看数组中的项

  •  1
  • urdearboy  · 技术社区  · 6 年前

    我得到了 Subscript out of range Debug.Print myarr(i) .

    Dim ws As Worksheet: Set ws = Sheets("Sheet1")
    Dim myarr as Variant, i as Long
    myarr = Array(ws.Range("A2:A" & ws.Range("A" & ws.Rows.Count).End(xlUp).Row))
    
    For i = LBound(myarr) To UBound(myarr)
        Debug.Print myarr(i)
    Next i
    

    我已经用显示A2:A5的(下面)验证了范围。

    Msgbox ws.Range("A2:A" & ws.Range("A" & ws.Rows.Count).End(xlUp).Row)).Address (false, false)
    

    我也试过改变 myarr

     = ws.Range("A2:A" & ws.Range("A" & ws.Rows.Count).End(xlUp).Row) 
     = ws.Range("A2:A" & ws.Range("A" & ws.Rows.Count).End(xlUp).Row).Value
     = Array(Temp.Range("A2:A" & Temp.Range("A" & Temp.Rows.Count).End(xlUp).Row).Value)
    

    第一个给 下标范围不够 ,第二个两个给 type mismatch

    对数组的使用还比较陌生,我不知道这里缺少什么。 我是否加载数组不正确或试图查看数组中的项目不正确?

    2 回复  |  直到 6 年前
        1
  •  5
  •   Scott Craner    6 年前

    myarr 是一个具有一列的二维数组。

    您需要将引用添加到第二个维度。

    Debug.Print myarr(i,1)
    

    此外,要从一个范围加载数组,只需分配该值:

    myarr = ws.Range("A2:A" & ws.Range("A" & ws.Rows.Count).End(xlUp).Row).Value
    

    所以

    Dim ws As Worksheet: Set ws = Sheets("Sheet1")
    Dim myarr as Variant, i as Long
    myarr = ws.Range("A2:A" & ws.Range("A" & ws.Rows.Count).End(xlUp).Row).Value
    
    For i = LBound(myarr,1) To UBound(myarr,1)
        Debug.Print myarr(i,1)
    Next i
    
        2
  •  0
  •   gregV    6 年前

    要添加,可以在 VBA Locals Window (开发人员->Visual Basic->视图->本地)。它对代码编译非常有帮助,我一直都在使用它。