我的宏在后台运行,大约需要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。
有没有一种方法可以在不使用剪贴板的情况下移动(或复制)一行数据?
理想情况下,我希望避免循环遍历该行的列,因为这可能会增加运行宏所需的时间。
答案 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