Есть 2 файла excel 2016, в первом заполняю "умные" таблицы и выгружаю во второй где строится сводная таблица.
Задача: Сделать макрос который обновит запрос, дождется завершения а после обновит все сводные таблицы.
Код макроса обновления запроса и сводных таблиц:
Код |
---|
IsBG_Refresh = ThisWorkbook.Connections("Запрос — AllTables").OLEDBConnection.BackgroundQuery
ThisWorkbook.Connections("Запрос — AllTables").OLEDBConnection.BackgroundQuery = False
ThisWorkbook.Connections("Запрос — AllTables").Refresh
ThisWorkbook.Connections("Запрос — AllTables").OLEDBConnection.BackgroundQuery = IsBG_Refresh
Sheets("Статистика").PivotTables("Статистика").PivotCache.Refresh
Sheets("Сравнение").PivotTables("Сравнение").PivotCache.Refresh
Sheets("Диаграмма").PivotTables("Диаграмма").PivotCache.Refresh
Sheets("Статистика").Range("H1").Value = 1 |
Код запуска другого макроса(прописан в коде листа "Статистика"):
Код |
---|
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$H$1" Then
If IsEmpty(Target) Then Exit Sub
If Range("H1") = 1 Then
Call ActivateStatList
End If
End If
End Sub |
Код макроса который должен активировать первый лист:
Код |
---|
Sub ActivateStatList()
Application.Wait DateAdd("s", 2, Now)
Sheets("Статистика").Activate
Sheets("Статистика").Range("H1").Clear
End Sub |
Все работает только после обновление запроса перекидывает на страницу с "умной" таблицей и автоматически ее выделяет. Сколько бы добавлял ожидание после выполнение обновления все равно в конце макроса он выделяют эту таблицу, даже добавление второго макроса не помогло. Добавление запроса в модель данных не вариант так как тогда исчезает возможность добавить вычисляемое поле, добавить вычисление в самом запросе тоже не вариант так как итого считается не верно.
Call ActivateStatList можно было бы вызвать прямо из первого макроса но я хотел дать ему время выделить таблицу. Прошелся по коду пошагово все ок, все срабатывает как надо