изменение URL для веб-запроса Excel

#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 — Я бы предположил, что на активном листе нет таблицы запросов.