Динамически освежающий CUBEVALUE - PullRequest
0 голосов
/ 09 апреля 2019

Попытка динамически обновить набор функций 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

C1 используется в D1

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

, который используется в функции CubeValue (8 на цикл), например:

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

Попытка заставить Excel «ждать» после Range («C1»). Значение = c.Value строка достаточно длинная, прежде чем остальная часть кода будет запущена.

1 Ответ

0 голосов
/ 09 апреля 2019

Один из способов решить эту проблему - создать цикл, который прерывается только в том случае, если значение вашей ячейки не равно «ПОЛУЧЕНИЕ ДАННЫХ ...».Затем выполните задержку и переназначение значения.

Например, что-то вроде приведенного ниже псевдокода для обработки ожидания.

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