#vba #excel
#vba #excel
Вопрос:
У меня есть электронная таблица Excel 2010, которая получает информацию из подключения к данным. В свойствах соединения находится «строка подключения», которая представляет собой URL с несколькими параметрами, которые передаются на сервер в строке запроса. Если вы нажмете «Редактировать запрос», вы можете изменить URL, а затем импортировать новые данные на основе нового URL. Мне нужно сделать это через VBA.
Допустим, строка подключения в данный момент http://myserver.com?name=foo
мне нужно изменить это на http://myserver.com?name=bar
Как это можно сделать?
Комментарии:
1. Строки подключения и URL-адреса — это совершенно разные вещи.
2. вы имеете в виду, что это «веб-запрос»?
3. Хм, не в этом контексте это не так. Строка подключения — это URL, который будет использоваться для подключения к серверу. Посмотрите на формулировку самостоятельно в Excel.
4. @p.campbell: Да, и мне нужно обновлять URL на лету.
Ответ №1:
With ActiveSheet.QueryTables(1)
.Connection = "URL;" amp; NewURL
.Refresh
End With
Комментарии:
1. Потрясающе, спасибо. Последующие вопросы: Могу ли я ссылаться на соединение любыми другими способами вместо
ActiveSheet.QueryTables(1)
? Может быть, по имени, например? И, наконец, после того, как я выполню обновление, я хочу сохранить книгу, чтобы пользователю не было предложено сделать это при ее закрытии, но если я попытаюсьThisWorkbook.Save
после вашегоWith
блока, я получу сообщение о том, чтоSave
отменит ожиданиеRefresh.
, я предполагаю, что оно пытается сохранить до завершения обновления. Есть ли способ, которым я могу справиться с этим?2. Я бы посоветовал вам попробовать записать макрос при создании нового веб-запроса. Записанный код покажет вам доступные параметры: я думаю, что «Name» и «BackgroundQuery» — это свойства, которые вас интересуют. Если вы установите BackgroundQuery в значение False, то обновление должно завершиться до того, как ваш код перейдет к операции сохранения.
3. Спасибо @Tim. Я только что нашел
Backgroundquery:=false
свойство, и оно отлично работает.4. Я всегда получаю «Нижний индекс вне диапазона», когда я делаю это. Есть идеи?
5. @roviuser — Я бы предположил, что на активном листе нет таблицы запросов.