我需要将Sheet1中E列中具有单词“ Done”的任何行剪切并粘贴到Sheet2的下一个空行中。我的问题是我不知道如何在Sheet2中找到下一个空行,并开始将值粘贴到该下一个空行。
这是一个包含两张工作表的基本工作簿。 Sheet1具有所有员工任务,Sheet2仅显示“完成”的任务。每当员工完成任务并在Sheet1的E列中的单元格中键入“完成”时,都需要剪切整行并将其粘贴到Sheet2的下一个空行中。我在Sheet1中使用以下代码创建了ActiveX Command按钮。代码会在Sheet1中找到任何显示为“完成”的单元格,并将其剪切/粘贴到Sheet2中,但是它总是从Sheet2的开头开始粘贴,我需要它从Sheet2的下一个空行开始粘贴。
Private Sub CommandButton1_Click()
Dim c As Range
Dim j As Integer
Dim Source As Worksheet
Dim Target As Worksheet
' Change worksheet designations as needed
Set Source = ActiveWorkbook.Worksheets("Sheet1")
Set Target = ActiveWorkbook.Worksheets("Sheet2")
j = 1 ' Start copying to row 1 in target sheet
For Each c In Source.Range("E1:E1000") ' Do 1000 rows
If c = "Done" Then
Source.Rows(c.Row).Cut Target.Rows(j)
j = j + 1
End If
Next c
End Sub
我的问题是,它会继续覆盖Sheet2中已经存在的所有内容,因为我不知道用什么替换“ j”变量代码。我需要它来在Sheet2中找到下一个空行并从那里开始粘贴。
答案 0 :(得分:0)
尝试一下:
Private Sub CommandButton1_Click()
Dim Source As Worksheet
Dim Target As Worksheet
Dim lRowSrc As Long, lRowDst As Long, lColSrc As Long, R As Long
' Change worksheet designations as needed
Set Source = ActiveWorkbook.Worksheets("Sheet1")
Set Target = ActiveWorkbook.Worksheets("Sheet2")
With Source
lRowSrc = .Cells(.Rows.Count, 1).End(xlUp).row
lColSrc = .Cells(1, .Columns.Count).End(xlToLeft).Column
For R = lRowSrc To 1 Step -1
If .Cells(R, 5) = "Done" Then
lRowDst = Target.Cells(Target.Rows.Count, 1).End(xlUp).row
Target.Range(Target.Cells(lRowDst + 1, 1), Target.Cells(lRowDst + 1, lColSrc)).Value = .Range(.Cells(R, 1), .Cells(R, lColSrc)).Value
.Cells(R, 5).EntireRow.Delete 'get rid of the row
End If
Next R
End With
End Sub
请记住,对于大型数据集,此方法并不理想,而使用数组要好得多。但是,如果您只有少量的行(假设...),那应该没问题。
编辑:使用最后一行变量而不是当前行来复制值。固定。