宏将已完成的项目粘贴到另一个工作表

时间:2018-06-07 19:54:36

标签: excel vba excel-vba

请帮我修复一个宏,将已完成的项目(A列)粘贴到下一个工作表(已完成的选项卡),然后在转移到已完成选项卡后从第一个工作表(电子邮件跟踪器)中删除它。它的行为如下:

- 在“已完成”选项卡中覆盖内容,而不是向其添加其他条目

以下是我的代码。

Sub Clear()
'
' Clear Macro
'
' Keyboard Shortcut: Ctrl+Shift+G
'
    Sheets("Email Tracker").Select
    Range("A1").AutoFilter Field:=1, Criteria1:= _
        "Completed"
    ActiveSheet.AutoFilter.Range.Copy
    Sheets("Completed").Select
    Dim Lastrow As Long
    Lastrow = Cells(Rows.Count, 1).End(xlUp).Row
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A1").Select
    Sheets("Email Tracker").Select
    Range("A1").Select
    Application.CutCopyMode = False
    ActiveSheet.ShowAllData
End Sub

1 个答案:

答案 0 :(得分:0)

使用宏录制器时,应始终尝试清理代码并删除"选择"。我看到你试图添加最后一行的位置,但不知道如何应用它。下面的代码首先设置目标表的最后一行(LR),这样您就可以正确粘贴"已完成的"通过电子邮件发送到“目标”工作表中最后一行之后的第一个空行。接下来,它会将您的标题从源表复制到目标表,因为我不知道它们是否已经在目标表中。接下来,它会过滤您的源表并将可见数据复制到目标表,将数据粘贴到最后一行下面的第一个空行。然后它将删除过滤后的源表上的可见数据。最后,它会删除源表中的过滤器。

Dim LR As Long

With Worksheets("Email Tracker")
    Rows(1).EntireRow.Copy Sheets("Completed").Range("A1")

    LR = Sheets("Completed").Cells(Rows.Count, 1).End(xlUp).Row

    .AutoFilterMode = False
        With Range("A1").CurrentRegion
            .AutoFilter Field:=1, Criteria1:="Completed"
            On Error Resume Next
            .Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Copy Sheets("Completed").Cells(LR + 1, 1)
            .Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Delete
        End With
    .AutoFilterMode = False
End With