我有一个具有大型数据模型的Excel工作簿,连接着两个切片器。我需要循环遍历每个切片器中的每个条目,允许工作簿在加载大量存储过程公式时进行等待,并将一个特定的工作表复制到另一个工作簿中。
我编写了VBA来完成所有这些操作,但我无法让VBA在工作簿完成上传之前等待,然后再继续执行脚本的其他部分。 可以排除基于后台刷新的解决方案,因为它们不适用于OLAP。 我在网上找到了各种解决方案,其中包括等待计算完成的建议,但是脚本会跳过这些行。
唯一看起来适用的解决方案涉及到识别由于选择器更改而更新的每个单元格,并循环遍历它们,直到它们不再显示 #GETTING DATA。
对于我的工作簿,这将是数百个要识别和检查的单元格,感觉不可持续。
"Applcation.Wait" 在工作簿暂停获取数据的时间内等待所选的时间量。
设置与数据模型连接的切片器的不同值并自动化一些输出感觉应该是常见任务,我们应该有解决方案。 运行Office 365。
我编写了VBA来完成所有这些操作,但我无法让VBA在工作簿完成上传之前等待,然后再继续执行脚本的其他部分。 可以排除基于后台刷新的解决方案,因为它们不适用于OLAP。 我在网上找到了各种解决方案,其中包括等待计算完成的建议,但是脚本会跳过这些行。
唯一看起来适用的解决方案涉及到识别由于选择器更改而更新的每个单元格,并循环遍历它们,直到它们不再显示 #GETTING DATA。
对于我的工作簿,这将是数百个要识别和检查的单元格,感觉不可持续。
"Applcation.Wait" 在工作簿暂停获取数据的时间内等待所选的时间量。
设置与数据模型连接的切片器的不同值并自动化一些输出感觉应该是常见任务,我们应该有解决方案。 运行Office 365。
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
无效的解决方案:
我真的不想用的解决方案: 强制 VBA 等待 Power Pivot 完成刷新