【问题标题】:Syntax error in array program数组程序中的语法错误
【发布时间】:2018-08-17 16:30:07
【问题描述】:

我正在尝试使用数组方法将工作表数据范围从一个位置写入另一个位置,以便稍后尝试数组操作。该程序运行良好。

  Sub Array2Range5()

    Dim Directory As Variant
    Directory = Range("A30:D39").Value2

    For i = LBound(Directory, 1) To UBound(Directory, 1)
    For j = LBound(Directory, 2) To UBound(Directory, 2)
        Worksheets("List").Range(Worksheets("List").Cells(i + 1, j + 1), Worksheets("List").Cells(i + 1, j + 1)) = Directory(i, j)
    Next j
    Next i
End Sub

以下出于相同目的的程序给出了运行时错误“9”。以下代码部分中的下标超出范围。

           Worksheets("List").Range(Worksheets("List").Cells(i + 1, j + 1), Worksheets("List").Cells(i + 1, j + 1)) = Directory(i, j)

我无法纠正,程序如下。

 Sub Array2Range6()

    Dim Directory As Variant
    Directory = Range("A30:D39").Value2

    For i = 0 To UBound(Directory, 1)
    For j = 0 To UBound(Directory, 2)
        Worksheets("List").Range(Worksheets("List").Cells(i + 1, j + 1), Worksheets("List").Cells(i + 1, j + 1)) = Directory(i, j)
    Next j
    Next i
  End Sub

我的问题是这些行的语法是否错误。如果是这样,类似行的正确语法应该是什么

    For i = 0 To UBound(Directory, 1)
    For j = 0 To UBound(Directory, 2)

任何帮助将不胜感激。

【问题讨论】:

    标签: arrays vba excel loops


    【解决方案1】:

    将工作表范围中的值转储到数组中始终会生成从 1 开始的二维数组,而不是从零开始的一维或二维数组。

    用以下证明这一点:

    Dim Directory As Variant
    Directory = Range("A30:D39").Value2
    
    debug.print LBound(Directory, 1) & " to " & UBound(Directory, 1)
    debug.print LBound(Directory, 2) & " to " & UBound(Directory, 2)
    

    第一个有效,因为您使用的是 LBound;后者失败,因为您将 LBound 指定为零,而它实际上是 1。

    就个人而言,无论数组是从零开始的一维数组、从一开始的一维数组(使用Option Base 1 指令)还是从一开始的二维数组,我总是使用 LBound 作为下边界D 数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-17
      • 1970-01-01
      • 2015-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-24
      • 1970-01-01
      相关资源
      最近更新 更多