在Sheet1中查找单元格,然后复制它到Sheet2中第一个空行的整个行

我在下面的行中收到一个“下标超出范围”:表格(“Sheet1”)。单元格(“A”,i).EntireRow.Copy。 如何将行复制并粘贴到Sheet2中的第一个打开的行。

Sub IDwalkups() Dim endRow As Long Dim Match1() As Variant Dim ws As Worksheet Set ws = Worksheets("Sheet1") ICount = 0 endRow = Sheet1.Range("B999999").End(xlUp).Row Match1 = Sheet1.Range("E3:E" & endRow) For i = LBound(Match1) To UBound(Match1) If Match1(i, 1) = "W" Then Sheets(“Sheet1”).Cells("A", i).EntireRow.Copy Destination:=Sheets (“Sheet2”).Range(“A” & Rows.Count).End(xlUp).Offset(1) Else End If Next i End Sub 

你有三个错误是:

  • 使用而不是"例如“Sheet1”是一个有效的variables名 ,可以用在“Sheet1” = 5 * 2语句中,从句法上来说,与"Sheet1"是一个string。
  • 使用Cells("A", i)而不是Cells(i, "A")Cells的第一个参数是行,第二个参数是列。
  • 在使用Rows.Count时不符合您所指的是哪个表单(但是很可能无论如何都会起作用)

所以

 Sheets(“Sheet1”).Cells("A", i).EntireRow.Copy Destination:=Sheets (“Sheet2”).Range(“A” & Rows.Count).End(xlUp).Offset(1) 

本来应该

 Sheets("Sheet1").Cells(i, "A").EntireRow.Copy Destination:=Sheets("Sheet2").Range("A" & Sheets("Sheet2").Rows.Count).End(xlUp).Offset(1) 

我看到2个错误。 首先复制和粘贴是两个步骤(2个命令)。 其次,如果使用Cells ,则必须将行和列作为数字参数。 您必须将其更改为Range

  If Match1(i, 1) = "W" Then Dim sourceRange As Range, destRange As Range Set sourceRange = ws.Range("A" & i).EntireRow ' or Set sourceRange = ws.Cells(i, 1).EntireRow sourceRange.Copy Set destRange = Sheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Offset(1) destRange.PasteSpecial End If