Обновление запросов в Excel с использованием VBA

У меня есть запрос ( Query1 ), загруженный в Excel с использованием соединения из Teradata . Обычно, когда я хочу обновить запрос, я должен щелкнуть его правой кнопкой мыши и выбрать «Изменить».

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

Оказавшись внутри редактора Power Query Editor , я могу открыть источник и отредактировать сценарий SQL внутри, чтобы обновить запрос.

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

Вопрос в том, как я могу редактировать этот сценарий SQL с помощью VBA ?

При попытке использовать Macro Recorder , я могу только обновить запрос, используя

ActiveWorkbook.Connections("Query - Query1").OLEDBConnection.Refresh

Попытка изменить CommandText также не удалась. Вот свойства запроса.

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

Всего 1 ответ


ActiveWorkbook.Connections("Query - Query1").OLEDBConnection.Refresh

Во-первых, замените ActiveWorkbook на ThisWorkbook , поскольку вы хотите работать с этой конкретной книгой (той, в которой хранится ваш код VBA), а не с какой-либо книгой, которая в данный момент активна .

.Refresh - это метод соединения OLEDB, которое вы хотите изменить: у вас уже есть ссылка на соединение, для которого вы хотите изменить текст команды - все, что вам нужно, - это вызвать для него метод, отличный от .Refresh , т.е. попробуйте .Refresh расставьте точки и посмотрите, что может предложить этот объект.

Вы можете получить текст команды для этого объекта OLEDBConnection через его свойство CommandText - попробуйте CommandText его в ближайшей панели (Ctrl + G) и посмотреть, получите ли вы тот же вывод:

?ThisWorkbook.Connections("Query - Query1").OLEDBConnection.CommandText
SELECT * FROM [Query1]

Просто присвойте этому свойству:

Dim oledb As OLEDBConnection
Set oledb = ThisWorkbook.Connections("Query - Query1").OLEDBConnection
oledb.CommandText = "SomeOtherTable"
oledb.Refresh

Есть идеи?

10000