尝试动态刷新一堆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行之后足够长的时间在其余代码运行之前“等待”。
答案 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