在Excel VBA中将数据从一张纸移动到另一张纸而无需复制粘贴

时间:2018-09-20 09:34:03

标签: excel vba

我的宏在后台运行,大约需要30分钟才能完成。

它使用以下代码将数据从一张纸移动到另一张纸:

            .AutoFilter Field:=19, Criteria1:=Array("Rejected", "Withdrawn"), Operator:=7
            If xlapp.WorksheetFunction.Subtotal(3, .Range("A2:A500000")) <> 0 Then
                Set wsNew = xlapp.Sheets.Add(After:=xlapp.Sheets(xlapp.Sheets.Count))
                wsNew.Name = "Rejected & Withdrawn"
                wsNew.Tab.Color = RGB(255, 125, 125)
                .SpecialCells(12).Copy Destination:=wsNew.Range("A1")
                wsNew.Cells.EntireColumn.AutoFit
            End If

剪贴板一直在使用,这意味着我无法在宏运行时可靠地使用clipbaord。

有没有一种方法可以在不使用剪贴板的情况下移动(或复制)一行数据?

理想情况下,我希望避免循环遍历该行的列,因为这可能会增加运行宏所需的时间。

1 个答案:

答案 0 :(得分:1)

一种方法是使用“高级筛选器”(修改“ Sheet1”,使其与您的工作表名称匹配):

Set wsNew = xlApp.Sheets.Add(After:=xlApp.Sheets(xlApp.Sheets.Count))
wsNew.Name = "Rejected & Withdrawn"
wsNew.Tab.Color = RGB(255, 125, 125)
With Worksheets("Sheet1")
    wsNew.Range("A1").Value = .Cells(1, 19).Value
    wsNew.Range("A2").Value = "Withdrawn"
    wsNew.Range("A3").Value = "Rejected"
    .UsedRange.AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=wsNew.Range("A1:A3"), CopyToRange:=wsNew.Range("C1"), Unique:=False
End With
wsNew.Range("A:B").EntireColumn.Delete
wsNew.UsedRange.Columns.AutoFit