【问题标题】:Excel VBA -- Subscript out of range with single-dimension arrayExcel VBA - 下标超出一维数组的范围
【发布时间】:2012-08-30 18:07:09
【问题描述】:

这是一个非常简单的问题,但我已经为此头疼了一个小时。我正在尝试执行以下操作:

  1. 从我的电子表格中的命名范围定义 VBA 数组
  2. 访问该数组中的项目

现在,如果命名范围恰好覆盖了多维区域(行和列),那么这可以正常工作:

foobar = Range("two_dimensional_range")
MsgBox foobar(1,1)

但是,如果命名范围由单个维度(只是一列)数据组成,则会产生“下标超出范围”错误:

foobar = Range("one_dimensional_range")
MsgBox foobar(1)

我已经验证 foobar 确实是一个数组。我可以用 For Each ... Next 遍历它。如果我调用 Ubound(foobar) 那么它会给我正确的大小。我只是不能直接访问它的单个元素!

我做错了什么?

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    当您将范围(不是单个单元格)分配给变量数组时,它将始终是多维数组,因此此 MsgBox foobar(1,1) 在第二个实例中仍然有效。

    看这个例子

    Option Explicit
    
    Sub Sample()
        Dim Ar As Variant
    
        Ar = Range("A1:A2")
    
        Debug.Print Ar(1, 1)
        Debug.Print Ar(2, 1)
    End Sub
    

    另一个例子

    Option Explicit
    
    Sub Sample()
        Dim Ar As Variant
    
        Ar = Range("A1:B2")
    
        '~~> Get Values from Col A
        Debug.Print Ar(1, 1)
        Debug.Print Ar(2, 1)
    
        '~~> Get Values from Col B
        Debug.Print Ar(1, 2)
        Debug.Print Ar(2, 2)
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2014-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多