缩短复制和粘贴VBA以将过滤后的单元格从一个工作表粘贴到另一个工作表

时间:2017-10-04 13:46:05

标签: excel vba excel-vba

我对VBA很新,并想在下面提出一些建议,我目前正在尝试过滤某些日期,然后将它们复制并粘贴到单独的表格中,然后= SUBTOTAL等。 VBA可以工作,但确实比预期稍长。任何人都可以给我一个解决方案吗,我已经用Google搜索了这个,并且在缩短时无法让它工作。

Sheets("Paster").Select
ActiveSheet.Range("$A$1:$AK$801").AutoFilter Field:=10, Criteria1:= _
    xlFilterLastYear, Operator:=xlFilterDynamic
Cells.Select
Selection.Copy
Sheets("Hidden").Select
Cells.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Sheets("Overall").Select

2 个答案:

答案 0 :(得分:1)

使用select非常慢,如果可以帮助它,通常会避免使用。我建议使用with语句来完成给定工作表上的所有操作。这样的事情应该会有所帮助。而不是使用选择,尝试激活。

With Sheets("Paster").Range("$A$1:$AK$801")
    .AutoFilter Field:=10, Criteria1:= _
    xlFilterLastYear, Operator:=xlFilterDynamic
    .Copy
End With

With Sheets("Hidden")
    .Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _ 
        SkipBlanks:=False, Transpose:=False 'I just pasted into cell A1
End With
Sheets("Overall").Activate

我希望这样的事情会有所帮助!我不知道您使用的是哪种类型的数据,但它确实将一堆随机生成的数据复制到隐藏的工作表中。

为避免屏幕闪烁/闪烁,您可以做的另一件事是在宏开始时关闭屏幕更新,然后在最后重新打开它。

Application.ScreenUpdating = False ' This should be the first line of a sub
Application.ScreenUpdating = True  ' This should be the last line of the sub

答案 1 :(得分:0)

只要您使用.Copy .Paste.Select,就会显着降低您的速度。您可以通过关闭屏幕更新和计算来使其快一点。然后使用范围本身总是会更快看到我如何摆脱使用.Select你可以阅读更多关于它here。通常情况下,如果您想跳过使用.copy,最好对This Range = That Range说,那么您可以完全跳过剪贴板,但过滤后的数据会让您感到有点噩梦。

Sub CopyAndPaste()

    Dim wbk As Workbook
    Dim Paste As Worksheet, Hidden As Worksheet, Overall As Worksheet

    Set wbk = ActiveWorkbook
    Set Paste = wbk.Worksheets("Paster")
    Set Hidden = wbk.Worksheets("Hidden")
    Set Overall = wbk.Worksheets("Overall")

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

        Paste.Range("$A$1:$AK$801").AutoFilter Field:=10, Criteria1:=xlFilterLastYear, Operator:=xlFilterDynamic
        Paste.Cells.Copy

        Hidden.Cells.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub