动态刷新CUBEVALUE

时间:2019-04-09 00:44:06

标签: excel vba powerpivot

尝试动态刷新一堆CUBEVALUE函数以生成报告。 CUBEVALUE的一个维度涉及一个Excel验证列表。

我想做的是在验证列表的元素上循环(通过VBA),让Excel刷新并重新计算CUBEVALUES,因此我可以在下面剪切并粘贴这些值(和几个图表)来完成所有操作再次。

问题是当显示“正在获取数据...”时,正在复制CUBEVALUE,我想等待数据变好后再复制它。

对如何更好地做到这一点的一些想法将不胜感激。

尝试过应用程序。请等待并进入睡眠状态,即使延迟20秒仍会失败

Set inputRange = Evaluate(Range("C1").Validation.Formula1)
For Each c In inputRange
    Range("C1").Value = c.Value

        newHour = Hour(Now())
        newMinute = Minute(Now())
        newSecond = Second(Now()) + 20
        waitTime = TimeSerial(newHour, newMinute, newSecond)
        Application.Wait waitTime

    Range("A22:A42").EntireRow.Insert
    Range("A3:A20").EntireRow.Copy

    Range("A3").Offset(21, 0).PasteSpecial xlPasteValues
    Range("A3").Offset(21, 0).PasteSpecial xlPasteFormats
    ActiveSheet.Shapes.Range(Array("shpGraphs")).Select
    Selection.Copy
    Range("A29").Select
    ActiveSheet.PasteSpecial Format:="Picture (PNG)", Link:=False, DisplayAsIcon:=False

D1中使用了C1

=IF(C1="All","[Table1].[Location].[All]","[Table1].[Location].[All].["&C1&"]")

在CubeValue函数中使用(每个循环8个),例如

=CUBEVALUE("ThisWorkbookDataModel",$D$1,"[Measures].[Number of Cars]")

试图使Excel在Range(“ C1”)。Value = c.Value行之后足够长的时间在其余代码运行之前“等待”。

2 个答案:

答案 0 :(得分:0)

解决此问题的一种方法是让循环仅在单元格的值不等于“ GETTING DATA ...”时中断。然后延迟,重新分配价值。

例如类似于下面的伪代码来处理等待。

Loop (check if value <> "GETTING DATA..." )
   Delay of x time
   value = cell value
End Loop
Move to Next Cell

答案 1 :(得分:0)

这是我在工作簿中使用的:

Sub RefreshAll_WaitForCubeCalc()
    ThisWorkbook.RefreshAll
    Application.CalculateUntilAsyncQueriesDone
End Sub