如何让VBA等待Power Pivot的#GETTING DATA完成后再执行?
OLAP切片器切换后等待Cube公式加载完成的VBA解决方案需求
我有一个关联两个切片器的大型Data Model Excel工作簿,需要遍历切片器所有条目,待工作簿加载完大量Cube公式后,将指定工作表内容复制到另一工作表。
已编写实现逻辑的VBA代码,但无法让VBA等待工作簿完成数据加载后再执行后续脚本:
- 背景刷新方案不适用于OLAP,已排除;
- 网上各类等待计算完成的方案均无效,脚本会直接跳过等待代码;
- 逐个检查所有显示
#GETTING DATA的单元格虽然可行,但工作簿有数百个此类单元格,该方案不具可持续性; - 使用
Application.Wait时,工作簿会暂停数据加载,达不到预期效果。
设置关联Data Model的切片器不同值并自动化输出是常见任务,应该有对应解决方案,我使用的是Office365。
现有VBA代码
Sub generate_all_forecasts() 'Cycle through all products and push forecast values to fcst_output' Application.ScreenUpdating = True Dim SC_products As SlicerCache Dim selection, product_array As Variant Dim push As Boolean Set SC_products = ThisWorkbook.SlicerCaches("Slicer_PRODUCT_GROUPING_WRITTEN") 'The product slicer on the Inputs worksheet' product_array = Range("product_array") 'Named range product_array on Tbl_Codes worksheet' For Each p In product_array 'For each product' push = WorksheetFunction.Index(Range("fcst_push_array"), WorksheetFunction.Match(p, product_array, 0)) 'Check if the product has been selected for this run' If push = True Then If p = "Major Medical Plan" Then 'If "Major Medical" ' selection = Array("[Query1 1].[PRODUCT_GROUPING_WRITTEN].&[Major Medical Plan - CMM]", _ "[Query1 1].[PRODUCT_GROUPING_WRITTEN].&[Major Medical Plan - GMM]") 'selection will be both CMM and GMM' Else selection = Array("[Query1 1].[PRODUCT_GROUPING_WRITTEN].&[" & p & "]") 'Otherwse selection is the single product' End If SC_products.VisibleSlicerItemsList = selection 'Change slicer to current selection' 'This is where the script needs to pause until #GETTING DATA is complete' Application.Run "push_to_output" 'Run the forecast update macro' End If Next p Worksheets("Fcst_Output").Range("B2:B1381").Value = "" 'Clear prior month's comments' Application.ScreenUpdating = True End Sub
已尝试但无效的方案
- 针对Power Pivot切片器切换后的等待方案
- 让VBA暂停后再执行的通用方案
- 等待
Application.Calculate完成的方案
不想使用的方案
- 强制VBA等待Power Pivot刷新完成的方案(逐个检查Data Model连接状态的方式)
内容的提问来源于stack exchange,提问作者OldKingCole
相关产品推荐
相关产品推荐

