缩短复制并粘贴VBA以将已过滤的单元格从一个表格粘贴到另一个表格

我是相当新的VBA,并希望在下面的一些build议,我目前正在尝试过滤某些date,然后复制并粘贴到一个单独的工作表,然后= SUBTOTAL等。 VBA的工作,但需要比预期略长。 任何人都可以提供给我一个解决scheme,我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 

任何时候使用。 .Copy .Paste或select它会显着减慢你的速度。 通过closures“屏幕更新和计算”,可以稍快一点。 那么使用范围本身总是会更快,看下面我如何摆脱使用。select你可以在这里阅读更多关于它。 通常当你想跳过使用.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 

使用select非常慢,通常可以避免,如果你可以帮助它。 我build议使用with语句来完成给定工作表上的所有操作。 像这样的东西应该有所帮助。 不要使用select,请尝试激活。

 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 

我希望这样的事情会有帮助! 我不知道你正在使用什么types的数据,但是它将一堆随机生成的数据复制到隐藏的工作表中。

你可以做的另一件事,以避免屏幕闪烁/闪烁是在macros的开始closures屏幕更新,然后在最后打开它。

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