让excel将整行粘贴到新工作表的下一个可用位置,而不是覆盖已有的数据

让excel将整行粘贴到新工作表的下一个可用位置,而不是覆盖已有的数据,excel,vba,Excel,Vba,如果列包含关键字,我将使用此代码复制/粘贴整行。我将宏指定给一个按钮。它可以工作,但是如果我得到一个标记为“完成”的新项目并再次按下按钮,它会删除“完成”工作表上的所有内容并粘贴新信息。我想把它贴在最后一行下面 Dim i As long Dim p As long Dim Source As Worksheet Dim Target As Worksheet Set Source = ActiveWorkbook.Worksheets("In Prog

如果列包含关键字,我将使用此代码复制/粘贴整行。我将宏指定给一个按钮。它可以工作,但是如果我得到一个标记为“完成”的新项目并再次按下按钮,它会删除“完成”工作表上的所有内容并粘贴新信息。我想把它贴在最后一行下面

    Dim i As long
    Dim p As long
    Dim Source As Worksheet
    Dim Target As Worksheet

    Set Source = ActiveWorkbook.Worksheets("In Progress")
    Set Target = ActiveWorkbook.Worksheets("Complete")

    p = 3     ' Start copying to row 3 in target sheet
    Dim lastrow As Integer: lastrow = Source.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row

    For i = lastrow To 3 Step -1
        If Source.Range("B" & i).Value = "Complete" Then
        Source.Rows(i).Copy Target.Rows(p)
        Source.Rows(i).EntireRow.Delete
        p = p + 1
    End If
Next
End Sub
在谷歌搜索之后,我似乎需要

lastrow=Sheet2.范围(“A99999”).结束(xlUp).行+1.

我是否有点接近我需要解决的问题?感谢您的帮助。

工作版本:

Sub TransferComplete()
    Dim i As long
    Dim p As long
    Dim Source As Worksheet
    Dim Target As Worksheet

    Set Source = ActiveWorkbook.Worksheets("In Progress")
    Set Target = ActiveWorkbook.Worksheets("Complete")

    p = Target.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row + 1    ' Start copying to last row in target sheet
    Dim lastrow As long: lastrow = Source.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row

    For i = lastrow To 3 Step -1
        If Source.Range("B" & i).Value = "Complete" Then
        Source.Rows(i).Copy Target.Rows(p)
        Source.Rows(i).EntireRow.Delete
        p = p + 1
    End If
Next
End Sub

我删除了
p=3
并将其替换为
p=Target.Cells.Find(“*”,searchorder:=xlByRows,searchdirection:=xlPrevious)。行+1

这是否回答了您的问题?也不要使用
Integer
,使用
Long
。是的,我测试了它,但它对我不起作用,所以我发了帖子,想知道我是否在正确的轨道上。谢谢BigBen。我会读一下,看看能不能解决。你的问题是你正在使用
p=3
开始粘贴到
Target
工作表。因此,当您再次启动宏时,它将覆盖
Target
工作表上的每一行。您需要为每个工作表标注不同的最后一行变量。