Vba excel запрос на обновление

Содержание

  1. Метод QueryTable.Refresh (Excel)
  2. Синтаксис
  3. Параметры
  4. Возвращаемое значение
  5. Примечания
  6. Поддержка и обратная связь
  7. Глава 16. Автоматизация обновления решений в Power Query
  8. Планирование обновлений без использования кода
  9. Автоматизация обновления запросов с помощью VBA
  10. Обновление нескольких запросов
  11. Как обновить запросы Power Query(и не только) в указанном порядке?

Метод QueryTable.Refresh (Excel)

Обновления диапазон внешних данных в объекте QueryTable.

Синтаксис

expression. Обновление (BackgroundQuery)

Выражение Переменная, представляющая объект QueryTable .

Параметры

Имя Обязательный или необязательный Тип данных Описание
BackgroundQuery Необязательный Variant Используется только с queryTable, основанными на результатах SQL-запроса. Значение true , чтобы вернуть управление процедурой сразу после подключения к базе данных и отправки запроса. QueryTable обновляется в фоновом режиме. Значение false , чтобы вернуть управление процедуре только после получения всех данных на лист.

Если этот аргумент не указан, параметр свойства BackgroundQuery определяет режим запроса.

Возвращаемое значение

Примечания

Следующие примечания относятся к объектам QueryTable , основанным на результатах SQL-запроса.

Метод Refresh заставляет Microsoft Excel подключаться к источнику данных объекта QueryTable , выполнять SQL-запрос и возвращать данные в диапазон, основанный на объекте QueryTable . Если этот метод не вызывается, объект QueryTable не взаимодействует с источником данных.

При подключении к источнику данных OLE DB или ODBC Microsoft Excel использует строку подключения, указанную свойством Connection . Если в указанной строке подключения отсутствуют необходимые значения, будут отображаться диалоговые окна с запросом у пользователя необходимых сведений. Если свойство DisplayAlerts имеет значение False, диалоговые окна не отображаются, а метод Refresh завершается ошибкой с исключением недостаточных сведений о подключении.

После успешного подключения Microsoft Excel сохраняет завершенную строку подключения, чтобы не отображались запросы для последующих вызовов метода Refresh во время того же сеанса редактирования. Вы можете получить завершенную строку подключения, изучив значение свойства Connection .

После подключения к базе данных выполняется проверка SQL-запроса. Если запрос недопустим, метод Refresh завершается ошибкой с исключением ошибки синтаксиса SQL.

Если запрос требует параметров, перед вызовом метода Refresh коллекция Parameters должна быть инициализирована с помощью сведений о привязке параметров. Если не достаточно параметров было привязано, метод Refresh завершается ошибкой с исключением ошибка параметра. Если для параметров задан запрос их значений, для пользователя отображаются диалоговые окна независимо от значения свойства DisplayAlerts . Если пользователь отменяет диалоговое окно параметров, метод Refresh останавливается и возвращает значение False. Если дополнительные параметры связаны с коллекцией Parameters , эти дополнительные параметры игнорируются.

Метод Refresh возвращает значение True , если запрос успешно завершен или запущен; Возвращает значение False , если пользователь отменяет подключение или диалоговое окно параметров.

Чтобы узнать, превышает ли количество извлекаемых строк количество доступных строк на листе, изучите свойство FetchedRowOverflow . Это свойство инициализируется при каждом вызове метода Refresh .

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Глава 16. Автоматизация обновления решений в Power Query

Это продолжение перевода книги Кен Пульс и Мигель Эскобар. Язык М для Power Query. Главы не являются независимыми, поэтому рекомендую читать последовательно.

По мере того, как вы создаете все больше и больше решений на основе Power Query, и начинаете понимать, сколько времени это экономит, вы захотите еще большей автоматизации. Да, вы можете просто щелкнуть правой кнопкой мыши таблицу, которая была импортирована с помощью Power Query, но даже это ощущается как… ручная операции. Нельзя ли запланировать обновление или, возможно, контролировать порядок обновления?

На самом деле вы можете использовать несколько различных методов автоматизации обновления решений Power Query:

  • Обновление при открытии книги
  • Обновление каждые Х минут
  • Обновить соединение по требованию с помощью VBA
  • Обновить все соединения по требованию с помощью VBA
  • Использовать расписание обновлений в сторонней надстройке

Рис. 16.1. Настройка параметров подключения

Скачать заметку в формате Word или pdf, примеры в формате архива

Планирование обновлений без использования кода

Первые два метода работают через пользовательский интерфейс и не требуют кода VBA. Они могут быть настроены на основе подключения, и вы даже можете автоматизировать обновление вплоть до Power Pivot. Откройте файл Automating Refresh.xlsx. Перейдите на вкладку Данные –> Запросы и подключения. В правой части окна Excel откроется область Запросы и подключения. Кликните правой кнопкой мыши имя запроса –> Свойства. Откроется окно Свойства запроса (рис. 1).

Обратите внимание, что флажок Фоновое обновление установлен по умолчанию. Этот параметр позволяет указать, следует ли продолжать работать в Excel во время обновления данных. Если вы снимите этот флажок, вы можете потенциально уменьшить время, необходимое для обновления вашего решения, но вы также заблокируете пользовательский интерфейс, что означает, что вы не сможете делать другие вещи, пока обновление запроса не будет завершено. Желательно оставить этот параметр включенным.

Следующий параметр – Обновлять каждые ХХ минут. Этот параметр очень пригодится, если вы извлекаете данные из веб-источника, который постоянно меняется, или если вы ориентируетесь на базу данных, которая регулярно обновляется. Для того, чтобы это обновление произошло книга Excel должна быть открыта. Допустимые значения для этого параметра – от 1 до 32 767.

Обновлять при открытии книги. Второй параметр в этом разделе – Удалять данные из внешнего диапазона перед сохранением книги. Установите этот флажок, если вы хотите сохранить книгу с определением запроса, но без использования внешних данных. Снимите этот флажок, чтобы сохранить, и определение запроса, и данные. Этот флажок, будет доступен только после установления флажка Обновлять при открытии книги.

Автоматизация обновления запросов с помощью VBA

Приемы, описанные выше, и не использующие макросы, обходятся без каких-либо окон, предупреждающих о безопасности. Кроме того, такие книги легче переносить в Power BI, так как они не вызывают никаких проблем с блокировкой. Однако если вы работаете исключительно в настольном экземпляре Excel, иногда может потребоваться предоставить пользователю удобный и очевидный способ обновления решений Power Query. Это может быть сделано с помощью записи кода VBA.

Можно создать макрос для обновления одного подключения Power Query. В файле Automating Refresh.xlsx и перейдите на лист Transactions. На листе расположена Таблица Transactions, а также сводная таблица. Допустим, вы хотите создать макрос для обновления их обеих. Перейдите на вкладку Разработчик. Если вы не видите вкладку Разработчик, щелкните правой кнопкой мыши любую вкладку на ленте и выберите Настроить ленту. В правом окне установите флажок рядом с вкладкой Разработчик и нажмите Ok. На вкладке Разработчик нажмите кнопку Запись макроса. Также можно нажать иконку в левом нижнем углу окна Excel:

Рис. 16.2. Кнопка Начать запись макроса

Как только вы нажмете эту кнопку, Excel начнет записывать каждый щелчок листа, каждое нажатие клавиши и… каждую ошибку, которую вы делаете. Выполните в точности следующие действия. Дайте макрос Refresh и сохраните его в текущей книге. Пройдите по меню Данные –> Запросы и подключения –> В правой части окна Excel в области Запросы и подключения кликните правой кнопкой мыши на запросе Transactions –> Обновить. Щелкните правой кнопкой мыши любую ячейку сводную таблицу –> Обновить. Повторно кликните кнопку, как на рис. 16.2. Запись макроса будет остановлена. Проверьте код. Пройдите по меню Вид –> Макросы:

Рис. 16.3. Макросы

Нажмите Изменить. Откроется окно редактора VBA

Рис. 16.4. Код VBA; чтобы увеличить изображение кликните на нем правой кнопкой мыши и выберите Открыть картинку в новой вкладке

Добавьте кнопку для обновления макроса. Перейдите на вкладку Разработчик –> Вставить –> Кнопку:

Рис. 16.5. Вставить элемент управления Кнопку

Выберите место на листе, и удерживая левую кнопку мыши, нарисуйте прямоугольник для Кнопки. Отпустите левую кнопку мыши. Появится окно с предложением поставить в соответствие Кнопке макрос. Выберите Refresh. Нажмите Ok. Щелкните правой кнопкой мыши по Кнопке –> Изменить текст. Введите Обновить. Щелкните любую ячейку на листе, чтобы выйти из режима редактирования названия кнопки.

Рис. 16.6. Кнопка, подключенная к макросу

Обновление нескольких запросов

Теперь можно добавить иные запросы в макрос. Пройдите по меню Разработчик –> Макросы –> Refresh –> Изменить. На данный момент код имеет вид (см. также рис. 16.4):

Источник

Как обновить запросы Power Query(и не только) в указанном порядке?

С выходом Power Query в массы все чаще стал появляться вопрос: как обновить запросы один за другим в заданном порядке?
Если еще не работали с этой надстройкой и не знаете что это такое, то для начала лучше ознакомиться со статьей: Power Query — что такое и почему её необходимо использовать в работе?
Описание проблемы
В книге может быть десять и более запросов. И только 4 из них надо обновлять постоянно, да еще и в заданном порядке. Например, у нас есть с десяток запросов по продажам, отгрузкам и прочей аналитике, но только 4 из них нам надо обновить. При этом обновить надо в строгой последовательности: «Запрос — Отделы», «Запрос — Сотрудники», «Заказы и Продажи», «Запрос — Бюджет» . При этом обязательно необходимо, чтобы «Запрос — Бюджет» обновился последним, т.к. он зависит от всех остальных.

Какие есть варианты решения?

Что еще может пригодиться в решении задачи:

Обновление вручную
Можно обновить запросы стандартными методами, поочередно вручную обновляя каждый запрос. Но это не всегда удобно, особенно если запросов более 5. Значит этот вариант не разбираем в деталях в принципе — все его плюсы и минусы очевидны.

Данные -Обновить все
Кнопка Данные (Data)Обновить все (Refresh All) не просто обновляет все без исключения запросы в книге, но и порядок запросов при этом никак не определить, следовательно мы не можем быть уверены в том, что обновление произошло именно в нужном нам порядке. Но все же не станем отбрасывать этот вариант как не рабочий — если проблема лишь в порядке обновления, то решение все же есть.
На самом деле, если мы имеем дело с Power Query, то правильнее всего выстраивать все взаимосвязи уже на стадии создания этих запросов в любом случае. Т.е. создавать их в правильной последовательности и «затягивать» данные в основной запрос в самую последнюю очередь, ориентируясь на результаты вспомогательных запросов. Это оптимальный вариант, т.к. в этом случае достаточно будет просто обновить нужный запрос, а Power Query сама определит какие вспомогательные запросы необходимо обновить для корректного результата. При этом встроенный механизм Power Query достаточно хорошо справляется с кешированием данных и даже если обновление происходит через кнопку Обновить все (Refresh All) , то даже если на один и тот же вспомогательный запрос будет завязано несколько других — он будет обновлен лишь один раз, а не при обновлении каждого запроса.
Но здесь у нас опять же возникает проблема — если нам не надо обновлять все запросы в книге — как Power Query узнает, какие из них надо обновлять, а какие нет? Ответ — никак. Поэтому хоть и следует всегда стараться выстраивать цепочки взаимодействий запросов в «правильном» порядке — нашу проблему с обновлением только части запросов это никак не решит. В этом случае можно создать мастер запрос, в который просто через объединение запросов собирать все нужные. И обновление этого запроса должно инициировать обновление всех указанных в нем запросов со всеми их цепочками. Как создать подобный мастер запрос:

Все, запрос готов. Теперь достаточно обновить только его, чтобы все связанные запросы обновились. Правда, есть одна проблема: если данных много, то такой запрос их увеличит вдвое — ведь мы в один запрос собираем все остальные.

Собственный порядок обновления через Visual Basic for Applications
В решении через мастер-запрос есть одна проблема — запросы могут быть не только Power Query, но и более старых версий. Здесь вариантов вообще не остается — только Visual Basic for Applications. Да и в случае, если запросы уже созданы ранее кем-то еще или навыков создать мастер-запрос нет.

‘————————————————————————————— ‘ Author : Щербаков Дмитрий(The_Prist) ‘ Профессиональная разработка приложений для MS Office любой сложности ‘ Проведение тренингов по MS Excel ‘ https://www.excel-vba.ru ‘ info@excel-vba.ru ‘ Purpose: Код обновляет поочередно указанные запросы в заданном порядке ‘————————————————————————————— Sub RefreshConnections() Dim oc, xQuery, aConnections, xConName Dim IsBG_Refresh As Boolean ‘создаем перечисление всех запросов, которые надо обновить ‘располагаем их в том порядке, в котором необходимо обновлять aConnections = Array(«Запрос — Отделы», «Запрос — Сотрудники», «Заказы и Продажи», «Запрос — Бюджет») ‘перебираем и обновляем все запросы поочередно For Each xConName In aConnections Set oc = ActiveWorkbook.Connections(xConName) Set xQuery = Nothing Select Case oc.Type Case Excel.XlConnectionType.xlConnectionTypeODBC Set xQuery = oc.ODBCConnection Case Excel.XlConnectionType.xlConnectionTypeOLEDB Set xQuery = oc.OLEDBConnection Case Else ‘запрос выгружен в таблицу на листе If oc.Ranges.Count > 0 Then Set xQuery = oc.Ranges(1).QueryTable End If End Select ‘непосредственно обновление запроса с ожиданием окончания обновления If Not xQuery Is Nothing Then ‘запоминаем значение обновления в фоне для запроса IsBG_Refresh = xQuery.BackgroundQuery ‘выставляем принудительно ждать завершения запроса xQuery.BackgroundQuery = False ‘обновляем запрос xQuery.Refresh ‘возвращаем обновление в фоне в первоначальное состояние xQuery.BackgroundQuery = IsBG_Refresh End If Next End Sub

Как использовать: Для начала надо убедиться, что разрешены макросы и при необходимости включить их: почему не работает макрос. Затем копируем код выше, из Excel переходим в редактор VBA( Alt + F11 ) —InsertModule. Вставляем туда скопированный код. Теперь код можно вызывать нажатием клавиш Alt + F8 -выделяем RefreshConnectionsВыполнить (Run) .
Чтобы использовать приведенный код для своих запросов достаточно в строке:

aConnections = Array(«Запрос — Отделы», «Запрос — Сотрудники», «Заказы и Продажи», «Запрос — Бюджет»)

внутри Array() перечислить в кавычках через запятую все имена запросов, которые необходимо обновить. Перечислять надо сразу в том порядке, в котором их требуется обновлять.
Код обновляет не только запросы Power Query, но и запросы более старых версий, выгруженных просто на лист.

Вывести список всех запросов в книге на лист
Что делать, если я не знаю, как правильно называются запросы
Да, вполне логичная ситуация, когда запросов много и переписывать имя каждого запроса не такая уж простая задача. Очень легко ошибиться в имени и тогда обновления не будет. Поэтому ниже я прилагаю код, который выводит на новый лист имена всех запросов:

Источник

Файлы к уроку:

  • Для спонсоров Boosty
  • Для спонсоров VK
  • YouTube
  • VK

Ссылка:

  • Страница курса
  • Плейлист YouTube
  • Плейлист ВК

Описание

Мы хотим при помощи VBA обновить запросы выборочно. Напишем несколько простых VBA скриптов.

В первом скрипте мы просто научимся выводить на лист Excel названия всех подключений.

Во втором скрипте мы обновим запросы выборочно прямо в коде указав, какие запросы обновлять не нужно.

Для третьего скрипта мы предварительно создадим таблицу Excel с перечнем запросов для обновления.

Код

Код для вывода на лист Excel всех запросов в книге:

Sub ShowConnections()
    
    Dim Connection As WorkbookConnection
    
    rn = 1
    
    For Each Connection In ThisWorkbook.Connections
        Range("A" & rn).Value = Connection.Name
        i = i + 1
    Next Connection
    
End Sub

Код для обновления запросов выборочно с указанием запросов, которые обновлять не надо:

Sub RefreshConnections()
    Dim Connection As WorkbookConnection
    
    For Each Connection In ThisWorkbook.Connections
        If Not Connection.Name = "Запрос — pop_1" Then
            Connection.Refresh
        End If
    Next Connection
    
End Sub

Код, для которого мы предварительно создали таблицу с перечнем запросов к обновлению:

Sub RefreshSelectively()
    Dim Connection As WorkbookConnection
    Dim rng_Refresh As Range
    
    Set rng_Refresh = Range("Обновить_Запросы[Обновить_Запросы]")
    
    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

Курс Power Query + VBA

Номер урока Урок Описание
1 Power Query + VBA №1. Обновить запросы выборочно, обновить все запросы кроме одного В этом уроке мы научимся выборочно обновлять запросы в книге Excel с помощью VBA.
2 Power Query + VBA №2. Путь к файлу папке при помощи VBA В этом уроке вы узнаете как задать путь к файлу-источнику для Power Query при помощи VBA.
3 Power Query + VBA №3. Обработать и сохранить много файлов В этом уроке вы узнаете как по очереди обработать и сохранить каждый нужный вам файл. Это еще один распространенный способ применения VBA в связке с Power Query.
4 Power Query + VBA №4. Обработать множество ссылок по одной В этом уроке вы узнаете как обработать большое количество web-страниц по одной, чтобы избежать ошибок и разрывов.

Хитрости »

12 Январь 2023              893 просмотров


С выходом Power Query в массы все чаще стал появляться вопрос: как обновить запросы один за другим в заданном порядке?

Если еще не работали с этой надстройкой и не знаете что это такое, то для начала лучше ознакомиться со статьей: Power Query — что такое и почему её необходимо использовать в работе?
Описание проблемы

В книге может быть десять и более запросов. И только 4 из них надо обновлять постоянно, да еще и в заданном порядке. Например, у нас есть с десяток запросов по продажам, отгрузкам и прочей аналитике, но только 4 из них нам надо обновить. При этом обновить надо в строгой последовательности:

«Запрос — Отделы», «Запрос — Сотрудники», «Заказы и Продажи», «Запрос — Бюджет»

. При этом обязательно необходимо, чтобы «Запрос — Бюджет» обновился последним, т.к. он зависит от всех остальных.

Какие есть варианты решения?

  • Вручную
  • Кнопка Обновить все(Refresh All)
  • Написать собственный порядок обновления через Visual Basic for Applications

 
Что еще может пригодиться в решении задачи:

  • Вывести список имен имен всех подключений на лист

Обновление вручную

Можно обновить запросы стандартными методами, поочередно вручную обновляя каждый запрос. Но это не всегда удобно, особенно если запросов более 5. Значит этот вариант не разбираем в деталях в принципе — все его плюсы и минусы очевидны.


Данные -Обновить все

Кнопка Данные(Data)Обновить все(Refresh All) не просто обновляет все без исключения запросы в книге, но и порядок запросов при этом никак не определить, следовательно мы не можем быть уверены в том, что обновление произошло именно в нужном нам порядке. Но все же не станем отбрасывать этот вариант как не рабочий — если проблема лишь в порядке обновления, то решение все же есть.
На самом деле, если мы имеем дело с Power Query, то правильнее всего выстраивать все взаимосвязи уже на стадии создания этих запросов в любом случае. Т.е. создавать их в правильной последовательности и «затягивать» данные в основной запрос в самую последнюю очередь, ориентируясь на результаты вспомогательных запросов. Это оптимальный вариант, т.к. в этом случае достаточно будет просто обновить нужный запрос, а Power Query сама определит какие вспомогательные запросы необходимо обновить для корректного результата. При этом встроенный механизм Power Query достаточно хорошо справляется с кешированием данных и даже если обновление происходит через кнопку Обновить все(Refresh All), то даже если на один и тот же вспомогательный запрос будет завязано несколько других — он будет обновлен лишь один раз, а не при обновлении каждого запроса.
Но здесь у нас опять же возникает проблема — если нам не надо обновлять все запросы в книге — как Power Query узнает, какие из них надо обновлять, а какие нет? Ответ — никак. Поэтому хоть и следует всегда стараться выстраивать цепочки взаимодействий запросов в «правильном» порядке — нашу проблему с обновлением только части запросов это никак не решит. В этом случае можно создать мастер запрос, в который просто через объединение запросов собирать все нужные. И обновление этого запроса должно инициировать обновление всех указанных в нем запросов со всеми их цепочками. Как создать подобный мастер запрос:

Все, запрос готов. Теперь достаточно обновить только его, чтобы все связанные запросы обновились. Правда, есть одна проблема: если данных много, то такой запрос их увеличит вдвое — ведь мы в один запрос собираем все остальные…


Собственный порядок обновления через Visual Basic for Applications

В решении через мастер-запрос есть одна проблема — запросы могут быть не только Power Query, но и более старых версий. Здесь вариантов вообще не остается — только Visual Basic for Applications. Да и в случае, если запросы уже созданы ранее кем-то еще или навыков создать мастер-запрос нет.

'---------------------------------------------------------------------------------------
' Author : Щербаков Дмитрий(The_Prist)
'          Профессиональная разработка приложений для MS Office любой сложности
'          Проведение тренингов по MS Excel
'          https://www.excel-vba.ru
'          info@excel-vba.ru
' Purpose: Код обновляет поочередно указанные запросы в заданном порядке
'---------------------------------------------------------------------------------------
Sub RefreshConnections()
    Dim oc, xQuery, aConnections, xConName
    Dim IsBG_Refresh As Boolean
    'создаем перечисление всех запросов, которые надо обновить
    'располагаем их в том порядке, в котором необходимо обновлять
    aConnections = Array("Запрос — Отделы", "Запрос — Сотрудники", "Заказы и Продажи", "Запрос — Бюджет")
    'перебираем и обновляем все запросы поочередно
 
    For Each xConName In aConnections
        Set oc = ActiveWorkbook.Connections(xConName)
        Set xQuery = Nothing
        Select Case oc.Type
        Case Excel.XlConnectionType.xlConnectionTypeODBC
            Set xQuery = oc.ODBCConnection
        Case Excel.XlConnectionType.xlConnectionTypeOLEDB
            Set xQuery = oc.OLEDBConnection
        Case Else
            'запрос выгружен в таблицу на листе
            If oc.Ranges.Count > 0 Then
                Set xQuery = oc.Ranges(1).QueryTable
            End If
        End Select
        'непосредственно обновление запроса с ожиданием окончания обновления
        If Not xQuery Is Nothing Then
            'запоминаем значение обновления в фоне для запроса
            IsBG_Refresh = xQuery.BackgroundQuery
            'выставляем принудительно ждать завершения запроса
            xQuery.BackgroundQuery = False
            'обновляем запрос
            xQuery.Refresh
            'возвращаем обновление в фоне в первоначальное состояние
            xQuery.BackgroundQuery = IsBG_Refresh
        End If
    Next
End Sub

Как использовать: Для начала надо убедиться, что разрешены макросы и при необходимости включить их: почему не работает макрос. Затем копируем код выше, из Excel переходим в редактор VBA(Alt+F11) —InsertModule. Вставляем туда скопированный код. Теперь код можно вызывать нажатием клавиш Alt+F8 -выделяем RefreshConnectionsВыполнить(Run).
Чтобы использовать приведенный код для своих запросов достаточно в строке:

aConnections = Array("Запрос — Отделы", "Запрос — Сотрудники", "Заказы и Продажи", "Запрос — Бюджет")

внутри Array() перечислить в кавычках через запятую все имена запросов, которые необходимо обновить. Перечислять надо сразу в том порядке, в котором их требуется обновлять.
Код обновляет не только запросы Power Query, но и запросы более старых версий, выгруженных просто на лист.


Вывести список всех запросов в книге на лист

Что делать, если

я не знаю, как правильно называются запросы

Да, вполне логичная ситуация, когда запросов много и переписывать имя каждого запроса не такая уж простая задача. Очень легко ошибиться в имени и тогда обновления не будет. Поэтому ниже я прилагаю код, который выводит на новый лист имена всех запросов:

'---------------------------------------------------------------------------------------
' Author : Щербаков Дмитрий(The_Prist)
'          Профессиональная разработка приложений для MS Office любой сложности
'          Проведение тренингов по MS Excel
'          https://www.excel-vba.ru
'          info@excel-vba.ru
' Purpose: Код выводит на лист все запросы в текущей книге
'---------------------------------------------------------------------------------------
Sub GetAllConnections()
    Dim ws As Worksheet
    Dim lr As Long
    Dim oc, aList()
    'создаем массив для запоминания имен всех запросов
    ReDim aList(1 To ActiveWorkbook.Connections.Count, 1 To 1)
    For Each oc In ActiveWorkbook.Connections
        lr = lr + 1 'увеличиваем счетчик
        aList(lr, 1) = oc.Name
    Next
    'создаем новый лист, в который записываем имена всех запросов
    Set ws = ActiveWorkbook.Worksheets.Add(before:=ActiveWorkbook.Worksheets(1))
    'оформляем заголовок(для эстетики)
    ws.Cells(1, 1).Value = "Имя запроса"
    ws.Cells(1, 1).Font.Bold = True
    'записываем имена всех запросов
    ws.Cells(2, 1).Resize(lr, 1).Value = aList
End Sub

Статья помогла? Поделись ссылкой с друзьями!

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

Grilled Giardiniera-Stuffed Steak Sandwich image

Grilled Giardiniera-Stuffed Steak Sandwich

This rolled flank steak is inspired by the Italian beef sandwich, a Chicago delicacy typically consisting of chopped thin slices of roast beef stuffed…

Provided by Food Network Kitchen

Mapo Potato image

Mapo Potato

Let’s be clear: Nothing surpasses the hearty deliciousness of a traditional mapo tofu. But for those days when you find yourself without soft tofu in the…

Provided by Hetty McKinnon

Chili image

Chili

This is a spicy, smoky and hearty pot of chili. It’s the kind of chili you need after a long day skiing — or hibernating. To create a rich and thick sauce,…

Provided by Ali Slagle

Banket image

Banket

This recipe is from my mother. It is the one she taught me with a slight tweak. In my home on the holidays one way to show someone or a family they were…

Provided by Jena Lewis

Moroccan Nachos image

Moroccan Nachos

This Moroccan twist on the much-loved appetizer features kefta, a ground beef (or lamb) mixture seasoned with parsley, cilantro, mint, paprika and cumin,…

Provided by Nargisse Benkabbou

Peanut Butter Brownie Cups image

Peanut Butter Brownie Cups

I’m not a chocolate fan (atleast not the kind made in the U.S.), but I LOVE peanut butter and chocolate and this hit the spot. I found the recipe in 2007…

Provided by AmyZoe

Banana Cream Pudding image

Banana Cream Pudding

This fabulous version of the favorite Southern dessert boosts the banana flavor by infusing it into the homemade vanilla pudding, in addition to the traditional…

Provided by Martha Stewart

Lemon Russian Tea Cakes image

Lemon Russian Tea Cakes

I love lemon desserts,these are a simple cookie I can make quickly. The recipe is based on the pecan Russian tea cakes.I don’t like lemon extract,instead…

Provided by Stephanie L. @nurseladycooks

Easy Churros with Mexican Chocolate Sauce image

Easy Churros with Mexican Chocolate Sauce

Forgo the traditional frying — and mixing up the batter! — for this Latin American treat. Instead, bake store-bought puff pastry for churros that are…

Provided by Martha Stewart

Easy Lasagna image

Easy Lasagna

Everyone loves lasagna. It’s perfect for feeding a big crowd and a hit at potlucks. But most people reserve it for a weekend cooking project since it can…

Provided by Food Network Kitchen

Grilled Vegetables Korean-Style image

Grilled Vegetables Korean-Style

Who doesn’t love grilled vegetables — the sauce just takes them over the top.

Provided by Daily Inspiration S @DailyInspiration

Outrageous Chocolate Cookies image

Outrageous Chocolate Cookies

From Martha Stewart. I’m putting this here for safe keeping. This is a chocolate cookie with chocolate chunks. Yum! Do not over cook this cookie since…

Provided by C. Taylor

CERTO® Citrus Jelly image

CERTO® Citrus Jelly

A blend of freshly squeezed orange and lemon juices puts the citrusy deliciousness in this CERTO Citrus Jelly.

Provided by My Food and Family

Previous

Next

VBA WAIT FOR REFRESH OF POWER QUERY TO EXECUTE NEXT LINE …

vba-wait-for-refresh-of-power-query-to-execute-next-line image

WebNov 18, 2018 if you truely just need the vba to wait for a bit while the query refreshes, you could try a simple call to the Application’s wait …
From stackoverflow.com
Reviews 3

Nov 18, 2018 if you truely just need the vba to wait for a bit while the query refreshes, you could try a simple call to the Application’s wait …»>
See details


REFRESH POWER QUERY IN EXCEL: 4 WAYS + ADVANCED OPTIONS

refresh-power-query-in-excel-4-ways-advanced-options image

WebJul 2, 2022 To demonstrate the data refresh capabilities of Power Query we first need to create a query. To work along with the example, open a …
From exceloffthegrid.com
Estimated Reading Time 8 mins

Jul 2, 2022 To demonstrate the data refresh capabilities of Power Query we first need to create a query. To work along with the example, open a …»>
See details


SOLVED: REFRESH SPECIFIC QUERY FOR POWERQUERY BY VBA

solved-refresh-specific-query-for-powerquery-by-vba image

WebJun 24, 2022 Corect syntax for refresh one specific Query by VBA is: SUB Macro_Name () ThisWorkbook.Connections («Query – Name of Query»).Refresh End Sub Message 3 of 4 3,165 Views 1 Reply Make …
From community.powerbi.com


REFRESHING EXCEL POWER QUERY QUERIES WITH VBA AND POWER …

WebFeb 27, 2022 I created a Power Query query called GetTheDateAndTime that returns the current date and time in a table with one row and column. Here’s the M code for the …
From blog.crossjoin.co.uk

Feb 27, 2022 I created a Power Query query called GetTheDateAndTime that returns the current date and time in a table with one row and column. Here’s the M code for the …»>
See details


REFRESH POWER QUERY VBA | MREXCEL MESSAGE BOARD

WebApr 28, 2022 I need each macro to refresh individual queries (in an effort to speed up the process). Example — Click button for Macro «Color» Refreshes Query for «Color» Button …
From mrexcel.com

Apr 28, 2022 I need each macro to refresh individual queries (in an effort to speed up the process). Example — Click button for Macro «Color» Refreshes Query for «Color» Button …»>
See details


HOW TO GET THE REFRESH STATUS OF EACH POWER QUERY OF A EXCEL …

WebMar 19, 2022 Need to refresh the queries in a given order The query behind needs to start once the previous query finishes and successes, if fails, need to provide error reason. …
From stackoverflow.com

Mar 19, 2022 Need to refresh the queries in a given order The query behind needs to start once the previous query finishes and successes, if fails, need to provide error reason. …»>
See details


#REF ERROR AFTER POWER QUERY REFRESH — MICROSOFT COMMUNITY HUB

WebJul 14, 2021 I create a table using a Power Query. Next to this table I added columns with formulas referencing the table (eg. [@ProductRef] or tCalc [@ProductRef]). This works …
From techcommunity.microsoft.com


AUTO REFRESH EXCEL POWER QUERY WHEN A PARTICULAR CELL CHANGES (I …

WebAug 19, 2020 2 Answers Sorted by: 1 I ended up using this code which refreshes only the query I want instead of refeshing all queries in the workbook: Sub Worksheet_Change …
From stackoverflow.com

Aug 19, 2020 2 Answers Sorted by: 1 I ended up using this code which refreshes only the query I want instead of refeshing all queries in the workbook: Sub Worksheet_Change …»>
See details


POWER QUERY REFRESHES ON OPEN OR VIA VBA

WebMay 21, 2015 There’s currently no VBA support in Power Query. This is something in our future roadmap but not near future yet (i.e. not in 2013). Something that you could try is …
From social.technet.microsoft.com


VBA CODE TO REFRESH POWER QUERY

WebApr 11, 2022 I sometimes forget to refresh the Power Query. For example, I have the following code on a button’s click event: Private Sub cmdImportPC_Click () …
From community.powerbi.com


HOW TO REFRESH POWER QUERY IN WEBEXCEL STORED IN SHAREPOINT IN …

WebJan 31, 2023 Generally, if we created a list based on Excel data which stored in SharePoint, you can also use Microsoft Power Automate to help you achieve your …
From answers.microsoft.com

Jan 31, 2023 Generally, if we created a list based on Excel data which stored in SharePoint, you can also use Microsoft Power Automate to help you achieve your …»>
See details


BEST OPTION TO REFRESH A SINGLE QUERY USING VBA — STACK OVERFLOW

WebMay 5, 2020 1 Answer Sorted by: 3 Fastest should be to refresh that specific query by name. ThisWorkbook.Connections …
From stackoverflow.com

May 5, 2020 1 Answer Sorted by: 3 Fastest should be to refresh that specific query by name. ThisWorkbook.Connections …»>
See details


MACRO TO REFRESH POWER QUERY WHEN NEW DATA IS ADDED

WebMay 20, 2020 Refer to the screenshot below to know how to get the correct name of the Query Connection to update the Code that would be used to refresh the Query …
From techcommunity.microsoft.com


VBA — IS IT POSSIBLE TO SCHEDULE THE DATA REFRESH OF A POWER …

WebApr 1, 2020 I would like to make the query refresh at those times; however, when I go into the Query Properties under «Usage» and then under «Refresh Control» the only options …
From stackoverflow.com

Apr 1, 2020 I would like to make the query refresh at those times; however, when I go into the Query Properties under «Usage» and then under «Refresh Control» the only options …»>
See details


REFRESH POWER QUERY WITH VBA — EXCELGURU

WebOct 22, 2014 Proving The Refresh Works The easiest way to do this is to go back to the table on Sheet 1 and add a new row to the table. I’m going to do that first, then I’m going …
From excelguru.ca

Oct 22, 2014 Proving The Refresh Works The easiest way to do this is to go back to the table on Sheet 1 and add a new row to the table. I’m going to do that first, then I’m going …»>
See details


VBA OPEN WORKBOOK, REFRESH QUERY, SAVE AND CLOSE

WebApr 14, 2021 Aim is to open the excel file using a batch file and windows task scheduler, refresh the query, save the file and close. VBA Code: Sub Workbook_Open() Call …
From mrexcel.com

Apr 14, 2021 Aim is to open the excel file using a batch file and windows task scheduler, refresh the query, save the file and close. VBA Code: Sub Workbook_Open() Call …»>
See details


POWER QUERY NOT REFRESHING ON REFRESH ALL VBA

WebDec 13, 2021 12-13-2021 03:10 PM. I have built a large report using purely Excel with Power Query. A lot of steps are involved in PQ and later loaded in Excel sheet the final …
From community.powerbi.com


REFRESH POWER QUERIES WITH VBA — EXCELGURU

WebAug 19, 2015 Refresh Power Queries With VBA. The macro below is a more targeted approach that checks the source of the query. If it is a connection that is built against …
From excelguru.ca

Aug 19, 2015 Refresh Power Queries With VBA. The macro below is a more targeted approach that checks the source of the query. If it is a connection that is built against …»>
See details


VBA REFRESH POWER QUERIES IN SEQUENCE — CHANDOO.ORG

WebDec 5, 2018 I tried to get it to refresh sequentially like this: Code: Public Sub RefreshPowerQuery () dim cn As WorkbookConnection For Each cn In …
From chandoo.org

Dec 5, 2018 I tried to get it to refresh sequentially like this: Code: Public Sub RefreshPowerQuery () dim cn As WorkbookConnection For Each cn In …»>
See details


Get our FREE VBA eBook of the 30 most useful Excel VBA macros.

Automate Excel so that you can save time and stop doing the jobs a trained monkey could do.

Claim your free eBook


Auto-refresh Power Query Featured Image

A few days ago, a reader asked a question about using parameters in Power Query; they wanted to auto-refresh Power Query whenever a parameter changes.

“One question, how do you set the query to refresh automatically when a value changes.”

I’ve not tried this before, but I can understand the benefits.  It reduces the need to click Refresh and creates behavior that is closer in nature to standard Excel formulas.  So, it sounded like a question that deserved its own post.

This is the result we are trying to achieve:

Auto refresh Power Query

Download the example file

I recommend you download the example file for this post.  Then you’ll be able to work along with examples and see the solution in action, plus the file will be useful for future reference.

Download Icon
Download the file: 0013 Auto refresh Power Query.zip

Auto refresh power query with a macro

There are two ways for Excel to trigger events when cell values change:

  1. User Defined Function (UDF)
  2. Worksheet change event

I love using UDFs to control objects in Excel, such as changing tab colors, or setting the min and max of a chart axis.  However, I tried a UDF for this auto-refresh scenario, but it just wasn’t stable and caused Excel to crash.  If you manage to achieve this, please let me know in the comments so we can all learn from your VBA mastery 🙂

That leaves option 2, the worksheet change event.

  1. Go into the Visual Basic Editor by clicking Developer -> Visual Basic (if you’ve not got the Developer ribbon visible, you can use the keyboard short cut Alt + F11).
    Developer - Visual Basic
  2. Open the code module for the worksheet that contains the parameter.   In the example file, the Query Output tab contains the cell with the parameter.
    Visual Basic Editor
  3. Copy the following code into the sheet module.
    Sub Worksheet_Change(ByVal Target As Range)
    
    If Target.Address = Me.Range("G6").Address _
        Or Target.Address = Me.Range("G3").Address _
        Then
    
        ActiveWorkbook.Connections("Query - SalesData").Refresh
    
    End If
    
    End Sub
  4. Next, adapt the code to your scenario by changing the following:
    The cell references (highlighted purple in the code above) are the cells containing your parameters.  In the example file, there are two parameters in cells G6 and G3.
    The name of the query (highlighted green in the code above) will be the string “Query – “ + name of the query to refresh.  In the example file, the query is called SalesData.  Therefore the full string is Query – SalesData
    If you need more or less parameters, then add or remove instances of the following line of code:

    Or Target.Address = Me.Range("G3").Address _
  5. Close the Visual Basic Editor

That’s it; now the macro is ready for use.  Change the parameter and watch the macro automatically update the query.

NOTES:Workbooks that contain macros cannot be saved as .xlsx files. Instead, we need to use the .xlsm format.

As standard Excel behavior, when a macro executes, the Undo stack is cleared.  Therefore you will not be able to use the Undo feature after the macro runs.

Another option – refresh every n minutes

Another option, which doesn’t quite meet the reader’s requirements, but which might meet yours, is to automatically refresh the query at set intervals.  Doing this:

    • Avoids macros and therefore we can use the standard .xlsx file type
    • Still avoids the need to click refresh
    • Won’t provide an instant update, so does not emulate formula behavior of automatically recalculating

To implement this:

  1. From the ribbon select Data -> Queries & Connections
    Data - Queries and Connections
  2. Right-click on the query and select Properties… from the menu.
    Query Properties
  3. Tick the Refresh Every n Minutes option and enter a time interval.
    Refresh every x minutes
  4. Click OK to close the Query Properties dialog box.

The query will now automatically refresh at the set interval.  It if meets your requirements, it is a better option than a macro.

What next?

If your query is loaded directly into a Pivot Table, then this post by Jon Acampora will be a good next step.

Or, if you want to know more about using the Power Query editor, check out this post.


Headshot Round

About the author

Hey, I’m Mark, and I run Excel Off The Grid.

My parents tell me that at the age of 7 I declared I was going to become a qualified accountant. I was either psychic or had no imagination, as that is exactly what happened. However, it wasn’t until I was 35 that my journey really began.

In 2015, I started a new job, for which I was regularly working after 10pm. As a result, I rarely saw my children during the week. So, I started searching for the secrets to automating Excel. I discovered that by building a small number of simple tools, I could combine them together in different ways to automate nearly all my regular tasks. This meant I could work less hours (and I got pay raises!). Today, I teach these techniques to other professionals in our training program so they too can spend less time at work (and more time with their children and doing the things they love).


Do you need help adapting this post to your needs?

I’m guessing the examples in this post don’t exactly match your situation. We all use Excel differently, so it’s impossible to write a post that will meet everybody’s needs. By taking the time to understand the techniques and principles in this post (and elsewhere on this site), you should be able to adapt it to your needs.

But, if you’re still struggling you should:

  1. Read other blogs, or watch YouTube videos on the same topic. You will benefit much more by discovering your own solutions.
  2. Ask the ‘Excel Ninja’ in your office. It’s amazing what things other people know.
  3. Ask a question in a forum like Mr Excel, or the Microsoft Answers Community. Remember, the people on these forums are generally giving their time for free. So take care to craft your question, make sure it’s clear and concise.  List all the things you’ve tried, and provide screenshots, code segments and example workbooks.
  4. Use Excel Rescue, who are my consultancy partner. They help by providing solutions to smaller Excel problems.

What next?
Don’t go yet, there is plenty more to learn on Excel Off The Grid.  Check out the latest posts:

Есть 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

Все работает только после обновление запроса перекидывает на страницу с «умной» таблицей и автоматически ее выделяет. Сколько бы добавлял ожидание после выполнение обновления все равно в конце макроса он выделяют эту таблицу, даже добавление второго макроса не помогло. Добавление запроса в модель данных не вариант так как тогда исчезает возможность добавить вычисляемое поле, добавить вычисление в самом запросе тоже не вариант так как итого считается не верно.

Like this post? Please share to your friends:
  • Vba excel запрос к запросу
  • Vba excel запрос значения
  • Vba excel запрос ввода данных
  • Vba excel запрет редактирования ячеек
  • Vba excel значение ячейки как строка