【问题标题】:Excel VBA select method of range class failed范围类的Excel VBA选择方法失败
【发布时间】:2014-06-21 18:30:54
【问题描述】:

我正在尝试将各种工作表中的数据范围复制到一个工作表中。我写了这段代码:

Sub sub1()
For i = 1 To 3
Sheets(i).Select
Range(Cells(1, 1), Cells(1, 1).End(xlDown)).Select 'line4
Selection.Copy
Sheets(6).Select
Cells(1, i).Select
Selection.PasteSpecial xlPasteValues
Next i
End sub

我在第 4 行收到 Range 类的运行时错误“1004”Select 方法失败。如何解决?

【问题讨论】:

标签: excel runtime-error vba


【解决方案1】:

你不Select一张纸你Activate它。但实际上大多数情况下你是shouldn't do either

您可以将代码缩短为:

Sub sub1()
Dim i As Long

For i = 1 To 3
    With Sheets(i)
       .Range(.Cells(1, 1), .Cells(1, 1).End(xlDown)).Copy
    End With
    Sheets(6).Cells(1, i).PasteSpecial xlPasteValues
Next i
End Sub

请注意,我还声明了i。我建议声明所有变量,并使用Option Explicit 确保您在所有情况下都使用您认为的变量。

编辑:Simoco 的编辑很好:这是我想出的:

Sub sub1()
Dim i As Long
Dim wb As Excel.Workbook

Set wb = ActiveWorkbook
For i = 1 To 3
    With wb.Sheets(i)
        .Range("A1:A" & .Range("A1").End(xlDown).Row).Copy
        wb.Sheets(6).Cells(1, i).PasteSpecial xlPasteValues
    End With
Next i
End Sub

请注意,我声明了一个 Workbook 变量并对其进行了限定。再给你一个好习惯!

【讨论】:

  • 谢谢@simoco,我太关注最佳实践了。
  • 现在可以了!似乎i 的声明至关重要。谢谢各位。
  • 实际上,它并没有声明i。这只是个好主意。它试图Select 一张表。编码愉快!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-12
  • 1970-01-01
  • 2010-12-04
  • 2016-05-20
  • 2016-05-04
相关资源
最近更新 更多