Добавить команду по фоновому обновлению в макрос - в какую конкретно часть?, В какую часть кода вставлять команду .BackgroundQuery := False, чтобы обновление происходило последовательно и следующий этап не начинался до полного завершения обновления запроса
1. Есть перечень запросов Power Query 2. Есть зависящие от них таблицы 3. Есть последующие вычисления
Есть макрос для обновления запросов:
Код
Sub Update_1()
Dim Connection As WorkbookConnection
Dim rng_Refresh As Range
Set rng_Refresh = Range("Update_1[Update_1]")
For Each Connection In ThisWorkbook.Connections
If Not rng_Refresh.Find(Connection.Name) Is Nothing Then
'MsgBox rng_Refresh.Find(Connection.Name).Address
Connection.Refresh
End If
Next Connection
End Sub
Он вызывается в другом макросе командой Call и потом дальше начинают происходить действия.
Вопрос в следующем, понимаю, что нужно использовать команду ниже, чтобы следующие шаги после Update_1 и Update_2 дожидались завершения обновления запроса.
Код
.BackgroundQuery = False
Но куда его в этой последовательности впихнуть - ума не приложу! Прошу помощи) Спасибо большое заранее!
For Each oc In ThisWorkbook.Connections 'запоминаем значение обновления в фоне для запроса
IsBG_Refresh = oc.OLEDBConnection.BackgroundQuery
'выставляем принудительно ждать завершения запроса
oc.OLEDBConnection.BackgroundQuery = False
'обновляем запрос
oc.Refresh
'возвращаем обновление в фоне в первоначальное состояние
oc.OLEDBConnection.BackgroundQuery = IsBG_Refresh
Next
Его-то я и нашел и скакал вокруг него несколько часов, пытаясь понять, в какой конкретно части своего макроса его применить и как модифицировать под свой случай
написал: в какой конкретно части своего макроса его применить
ну как бэ...вроде все достаточно прозрачно и с комментариями. Не так уж вроде сложно подстроить под себя
Код
Sub Update_1()
Dim Connection As WorkbookConnection
Dim rng_Refresh As Range
Dim IsBG_Refresh as boolean
Set rng_Refresh = Range("Update_1[Update_1]")
For Each Connection In ThisWorkbook.Connections
If Not rng_Refresh.Find(Connection.Name) Is Nothing Then
'MsgBox rng_Refresh.Find(Connection.Name).Address
'запоминаем значение обновления в фоне для запроса
IsBG_Refresh = Connection.OLEDBConnection.BackgroundQuery
'выставляем принудительно ждать завершения запроса
Connection.OLEDBConnection.BackgroundQuery = False
'обновляем запрос
Connection.Refresh
'возвращаем обновление в фоне в первоначальное состояние
Connection.OLEDBConnection.BackgroundQuery = IsBG_Refresh
End If
Next Connection
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
написал Дмитрий(The_Prist) Щербаков: ну как бэ...вроде все достаточно прозрачно и с комментариями. Не так уж вроде сложно подстроить под себя
ну как бэ...вроде все достаточно прозрачно и с комментариями. Не так уж вроде сложно подстроить под себя Дмитрий, спасибо огромное!! Все работает идеально Не сложно - умеючи) но я пытался до последнего, прежде чем писать сюда)
Здравствуйте, подскажите как исправить возникающую проблему. Я использую макрос в сообщении выше Но если в таблице формула, которая создает текст запроса
Код
="Запрос — "&Лист1!B4&Лист1!C4
то код не работает, а если просто текст - работает. Как исправить, чтобы макрос работал, когда в таблице формулы?
Дмитрий(The_Prist) Щербаков, спасибо за помощью может подскажите, как игнорировать ошибки Power Query при обновлении запроса в том же коде, что выше. Надо проигнорировать Datasource.Error
Не знаю правильно или нет, но мне помогло, если в начале кода поставить