Страницы: 1
RSS
Как сделать проверку завершения запроса Query на VBA?
 
Всем привет!
Необходимо через макрос обновить запросы query в одном файле, потом закрыть файл с сохранением, далее открыть другой файл и сделать тоже самое.
Подскажите какие строки добавить в макрос vba, чтобы он переходил на этап сохранения файла ТОЛЬКО если обновление запроса query завершено.
 
Очень похожая задача: Собрать данные из защищенных паролем файлов - PowerQuery
там я приводил код, как правильно это делать. Основная нужная Вам часть здесь:
Код
For Each oc In ThisWorkbook.Connections        'запоминаем значение обновления в фоне для запроса
        IsBG_Refresh = oc.OLEDBConnection.BackgroundQuery
        'выставляем принудительно ждать завершения запроса
        oc.OLEDBConnection.BackgroundQuery = False
        'обновляем запрос
        oc.Refresh
        'возвращаем обновление в фоне в первоначальное состояние
        oc.OLEDBConnection.BackgroundQuery = IsBG_Refresh
    Next
Т.е. надо принудительно перед обновлением каждого запроса выставлять свойство BackgroundQuery в False, чтобы код ожидал его завершения. Не забыть потом вернуть.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий Щербаков написал:
Т.е. надо принудительно перед обновлением каждого запроса выставлять свойство BackgroundQuery в False, чтобы код ожидал его завершения. Не забыть потом вернуть.
Спасибо. А что значит не забыть потом вернуть? Что именно и когда надо менять после завершения макроса?
 
Про "после завершения макроса" это Вы уже от себя придумали. Я не писал такого. Я написал исключительно про параметр обновления BackgroundQuery. И даже код есть с комментариями: что выставить, когда вернуть
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
del
Изменено: Jack Famous - 25.11.2021 09:28:49
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
написал:
там я приводил код, как правильно это делать
Дмитрий, подскажите пожалуйста а почему может быть ошибка Run-time error '1004' ? Я предположил, что у меня в книге веб запросы тип подключения которых не имеет опции "BackgroundQuery". Как можно придумать обновление запроса с ожиданием в моём случае
Код
Dim oc As Object, IsBG_Refresh As Boolean
For Each oc In ThisWorkbook.Connections
        IsBG_Refresh = oc.OLEDBConnection.BackgroundQuery ' Ошибка на этом шаге! При этом данный код успешно работает в другой книге где запросы из файлов
        oc.OLEDBConnection.BackgroundQuery = False
        oc.Refresh
        oc.OLEDBConnection.BackgroundQuery = IsBG_Refresh    
Next
Изменено: Flatcher5615 - 18.01.2023 19:30:07 (добавил код)
Страницы: 1
Наверх