VBA错误:应用程序定义或对象定义的错误

嗨我得到这个错误在Excel中:应用程序定义的对象定义的错误

Private Sub CommandButton1_Click() Dim r1 As Range Dim r2 As Range Dim a As Integer Dim b As Integer b = 1 Set r2 = Range("a1:a100") For Each r1 In r2.Cells If r1.Value = "hummer1" Then a = r1.Row Range(Cells(a, 1), Cells(a, 5)).Copy Sheets("Sheet2").Range(Cells(b, 1), Cells(b, 1)).Paste "line with the error" b = b + 1 End If Next r1 End Sub 

它看起来很简单,但我无法弄清楚是什么问题

提到工作表以清晰的代码非常重要。 下面的工作提供了你不使用公式,不想在第二个工作表中更新:

 Dim r1 As Range Dim r2 As Range Dim a As Integer Dim b As Integer b = 1 Dim wkSheet1 As Worksheet Dim wkSheet2 As Worksheet Set wkSheet1 = ThisWorkbook.Worksheets("Sheet1") Set wkSheet2 = ThisWorkbook.Worksheets("Sheet2") Set r2 = wkSheet1.Range("a1:a100") For Each r1 In r2.Cells If r1.Value = "hummer1" Then a = r1.Row wkSheet1.Range(wkSheet1.Cells(a, 1), wkSheet1.Cells(a, 5)).Copy wkSheet2.Range(wkSheet2.Cells(b, 1), wkSheet2.Cells(b, 5)).PasteSpecial Paste:=xlPasteValues b = b + 1 End If Next r1 

顺便说一下,使用“工作表”而不是“工作表”:将对象点指向graphics工作表和常用工作表。 既然你知道你想粘贴在一个平常的工作表,提到它使代码更具可读性!

这应该可以解决你的问题:

 Private Sub CommandButton1_Click() Dim r1 As Range Dim r2 As Range Dim a As Integer Dim b As Integer b = 1 Set r2 = Range("a1:a100") For Each r1 In r2.Cells If r1.Value = "hummer1" Then a = r1.Row Range(Cells(a, 1), Cells(a, 5)).Copy Destination:=Sheets("Sheet2").Range("A" & b) b = b + 1 End If Next r1 End Sub 

没办法检查,但我认为Paste方法只适用于Worksheets Object
所以要使它工作,删除它并执行直接复制,如下所示:

 Range(Cells(a, 1), Cells(a, 5)).Copy Sheets("Sheet2").Range(Cells(b, 1), Cells(b, 1)) 

另外,由于r2被声明为Range对象,所以For Each Loop应该像下面这样简单:

 For Each r1 In r2 '~~> rest of code here Next