设置很多PivotItem.visible属性非常慢 - 我如何加快速度?

时间:2014-02-28 10:29:55

标签: excel vba pivot

我有一个数据透视表,根据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

0 个答案:

没有答案