使用VBA更新Excel切片器select的性能较差

我正在模拟使用VBA的Excel切片器上的一个点击,但已经遇到了严重的性能问题。

用户在X轴上点击date列图。 当点击一列时,在包含date列表的切片机中select相应的date。 该名单将继续与时俱进。

(据我所知)设置非OLAP数据源的切片器select(我的情况)是为每个切片器项目单独设置selected = true。 由于重新计算会在每个设置上触发,因此对于具有多个项目的切片机而言,这是非常缓慢的。

显示问题的小代码示例:

On Error GoTo Err_Handler: Dim SC As SlicerCache Set SC = ActiveWorkbook.SlicerCaches("Slicer_DATE") Dim SI As SlicerItem Application.EnableEvents = False Application.Calculation = xlCalculationManual For Each SI In SC.SlicerItems SI.Selected = True Next Err_Handler: Application.Calculation = xlCalculationAutomatic Application.EnableEvents = True 

以前也有类似的问题:

一次select多个切片器项目而不刷新

数据透视切片更新要慢,我可以暂停所有function,直到切片更新完成?

有build议是:

 Application.EnableEvents = false 

要么

 Application.Calculation = xlCalculationManual 

更新:我也注意到,尽pipeclosures事件和计算,所有透视表实际上是重新计算!

对我而言,这些选项都不起作用,不会提高性能。 计算确实推迟了,没有事件被触发。 不过,selected = true的每次迭代大约需要1.5秒。 总共需要大约5分钟的时间才能完成。

我的切片机连接到多个表中的23个数据透视表(!)。 底层数据(MS Access数据库连接)大约有60,000行,大约有20个variables。

任何帮助表示赞赏。

数据透视表具有可以设置为TrueManualUpdate属性。 为您的所有枢轴设置此属性可能有助于加速您的代码。

请尝试在上面的更新切片器代码是:

 Dim PT As PivotTable Dim wb As Workbook Dim ws As Worksheet Set wb = ThisWorkbook For Each ws In wb.Sheets For Each PT In ws.PivotTables PT.ManualUpdate = True Next PT Next ws 

然后在更新切片器后添加这个:

 For Each ws In wb.Sheets For Each PT In ws.PivotTables PT.ManualUpdate = False Next PT Next ws 

了解更多信息:
加快数据透视表过滤VBA代码
closuresPT Calc
MSDN:ManulaUpdate

希望有所帮助!

你需要做的是复制切片机和复制该领域作为切片机和报告filter见http://www.powerpivotpro.com/2010/12/another-way-to-get-and-use-slicer-values -in-公式/

然后使用CurrentPage属性来select该项目:

 Private Sub SelectPivotItem(FieldName As String, Itemname As String) Dim PT As PivotTable, PTF As PivotField, PTI As PivotItem Set PT = shtInt.PivotTables("PivotTable1") Set PTF = PT.PivotFields(FieldName) PTF.ClearAllFilters PTF.CurrentPage = Itemname End Sub 

这大大有助于提高性能。 同样的方法适用于在VBA中select多个PivotItems。

  1. 将数据透视表设置为ManualUpdate。
  2. 在进行多个切片器select时,隐藏包含切片器影响的数据透视表的所有图纸。

完成后不要忘记将数据透视表设置为ManualUpdate,并在需要时将表单设置为可见

这很奇怪,因为即使使用Application.ScreenUpdating = False这仍然有很大的帮助。

我通过这样做了3分钟到3秒的PivotItemsselectmacros。 相当明显的差异。

不幸的是,对于切片商来说,这个速度还是很慢的,大约30多岁 我期待切换回VBA和PivotItems做这个,并避免完全使用Slicers,除非我能find另一种方法来提高性能。