【问题标题】:Subscript out of range in Excel VBAExcel VBA中的下标超出范围
【发布时间】:2014-07-08 04:03:30
【问题描述】:

我已经自学了VBA,新手。我遇到了这个问题:Subscript out of range 不知道是什么原因,请帮我解决,不胜感激。

代码如下:

Sub copy_paste()
Dim Arr As Variant
Dim x As Integer

Arr = Array("A2:I1000", "K2:M1000", "U2:U1000", "X2:Y1000", "AB2:AB1000", "AE2:AF1000", "AK2: AN1000", _
"AQ2: AQ1000", "AS2: AS1000", "BA2: BB1000", "BE2: BE1000 ")
For x = LBound(Arr) To UBound(Arr)
    Application.Workbooks("20140707.xls").Sheets("Sheet1").Range(Arr(i)).copy
    If Application.Workbooks("C2_development.xlsx").Sheets("Sheet1").Value <> "" Then
    Application.Workbooks("C2_development.xlsx").Sheets("Sheet1").Range("A1").End(xlRight).Offset(0, 1). _
    PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Else
    Application.Workbooks("C2_development.xlsx").Sheets("Sheet1").Range("A1").End(xlRight). _
    PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    End If
Next x
End Sub

【问题讨论】:

  • 出现错误时突出显示哪一行代码?
  • 我注意到了两件事。不需要Next xNext 就可以了。它也是End(xlToRight) 而不仅仅是End(xlRight)。尝试其中任何一个,如果仍有问题,请告诉我。
  • 哦,“下标超出范围”在这里,行:Application.Workbooks("C2_development.xlsx").Sheets("Sheet1").Range("A1").End(xlToRight) .Offset(0, 1)。 _ PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False。

标签: arrays excel vba


【解决方案1】:

在你的循环中你使用for x=,后来你使用Arr(i),所以我猜,改为Arr(x)

您可以通过在模块的最开始使用Option Explicit 来避免这个问题,这会强制您声明每个变量。

另外,If Application.Workbooks("C2_development.xlsx").Sheets("Sheet1").Value &lt;&gt; "" Then 错过了.range("something") 之间的Sheets("Sheet1").value

【讨论】:

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