范围类的Excel VBA select方法失败

use*_*861 1 excel vba runtime-error excel-vba

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

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
Run Code Online (Sandbox Code Playgroud)

我得到一个运行时错误'1004'在第4行上选择Range类失败的方法4.如何修复它?

Dou*_*ncy 10

你不是Select一张纸Activate.但实际上你在大多数情况下都不应该这样做.

您可以将代码缩短为:

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
Run Code Online (Sandbox Code Playgroud)

请注意,我也宣布了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
Run Code Online (Sandbox Code Playgroud)

请注意,我声明了一个Workbook变量并且对它有资格.对你来说还有一个好习惯!

  • 谢谢@ simoco,我过于专注于最佳实践. (2认同)