我有一个数据透视表,根据18000行数据左右,特定字段(CO)有1378个不同的值。
以手动方式过滤这些值中的7个小于1秒。 记录下来,然后运行宏需要 105s。 优化代码可将此速度提高到 58s 。
这仍远未达到最佳状态。还有其他方法可以加快速度吗?我在i5第三代上运行这个,所以不是它......
Sub test()
Dim i, t As Integer
Dim pvi As PivotItem
Dim startTime As Double
startTime = Timer
Sheets("Analyse BE WBS").Select
Application.StatusBar = "CLEARING WBS"
'FASTER...
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
ActiveSheet.PivotTables("PivotTable2").ManualUpdate = True
'clear all items: this is the time consuming part
For Each pvi In ActiveSheet.PivotTables("PivotTable2").PivotFields("CO").PivotItems
If pvi <> "(blank)" Then
pvi.Visible = False
End If
Next
'selecting the wanted items
Application.StatusBar = "selecting specific CO WBS"
With ActiveSheet.PivotTables("PivotTable2").PivotFields("CO")
.PivotItems("ICA").Visible = True
.PivotItems("IGR").Visible = True
.PivotItems("ILI").Visible = True
.PivotItems("IPO").Visible = True
.PivotItems("ITR").Visible = True
.PivotItems("P020").Visible = True
.PivotItems("P021").Visible = True
.PivotItems("P022").Visible = True
.AutoSort xlAscending, "CO"
End With
'restore it
Application.StatusBar = "refresh"
ActiveSheet.PivotTables("PivotTable2").ManualUpdate = False
ActiveSheet.PivotTables("PivotTable2").PivotCache.Refresh
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
'timer results in 58s
MsgBox Format(Timer - startTime, "00.00") & " seconds"
End Sub