我对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
答案 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