Импорт данных из базы данных SQL в Excel 2003 против Excel 2010 (VBA)

StackOverflow https://stackoverflow.com/questions/3926808

Вопрос

Итак, моя компания, наконец, обновилась до MS Office 2010. До сих пор я работал в 2003 году. Я программист SQL, и я постоянно создаю отчеты в Excel, которые получают данные из нашей базы данных. В большинстве случаев я создам макросы, которые принимают параметры, которые пользователи будут вводить в определенные ячейки, изменять запрос, а затем обновлять его в соответствии с параметрами.

Вот действительно простой пример:

  1. В Excel 2003 я бы открыл новую рабочую книгу.
  2. Нажмите «Данные», затем «Импортируйте внешние данные», а затем «Новая база данных».
  3. Затем он побуждает вас выбрать источник данных, поэтому я бы выбрал базу данных, из которой я хотел запросить (которая уже была настроена с подключением ODBC).
  4. Затем я отменил Windows Windows Windows Windows, а затем, когда я нахожусь в редакторе Microsoft Query, я просто ввожу свой запрос.

    • Для простоты я буду выбирать * Из таблицы называется Agents который является лишь списком агентов, которые работают для компании и их EmployeeIds.

    • select * from Agents

  5. Затем я «X» из редактора запросов, и появляется ящик, называемый «Импортные данные», где он спрашивает, где вы хотите поместить данные: в существующем рабочем листе? Новый рабочий лист? и т. д. Я только что вернул данные в существующем рабочем листе, начиная с ячейки A2

Итак, я пишу этот простой макрос в редакторе Visual Basic в модуле для рабочей книги:

Sub Refresh()

Dim oQuery as QueryTable
Dim oAgent as String

set oQuery = Sheet1.QueryTables(1)

oAgent = Sheet1.Range("A1")

oQuery.CommandText = "select * from Agents where Agent = '"+oAgent+"'"
oQuery.Refresh

End Sub

Я создаю кнопку, которая запускает этот макрос и вкладываю ее в B1. Анкет Таким образом, пользователь открывает отчет, вводит имя в A1, ударяет в кнопку, и этот агент и их идентификатор появляются в таблице ниже. Действительно просто, верно? Но я не могу заставить это работать в Excel 2010.

Вот мои шаги и ошибка, которая следует:

  1. Я открываю Excel 2010 и перейду на вкладку «Данные».
  2. В разделе «Получить внешние данные», я нажмите «Из других источников» и выберите «Из Mircrosoft запроса» из выпадения.
  3. Затем появляется поле «Выбрать источник данных», и в основном он точно такой же, как и шаги 3,4 и 5 выше.

Затем я пишу тот же макрос, создаю кнопку и назначаю ее Marco, но когда я нажимаю кнопку, я получаю следующую ошибку:

Run-time error '9':
Subscript out of range

Я попал в отладку, и отладчик подчеркивает эту строку

Set oQuery = Sheet1.QueryTables(1)

Я попытался сделать эту линию более конкретной, как так:

Set oQuery = WorkBooks("Book 1").Sheets("Sheet 1").QueryTables(1)

Но я просто получаю ту же ошибку.

Так что в основном мне нужно знать, как сделать этот тип вещей в Excel 2010. Но вот интересное примечание: если я создам этот отчет в Excel 2003, сохраните его как .xls, затем откройте его в 2010 году, он будет Работа. Я даже могу сохранить копию в качестве .xlsm, затем откроет ее, и она будет работать с тем же макросом. Только когда я создаю отчет в 2010 году, я не могу заставить его работать. По какой -то причине кажется, что он просто не может найти запрос, чтобы изменить свой командный текст, а затем обновить. Пожалуйста, помогите, я застрял в этом в течение нескольких дней!

Это было полезно?

Решение

В XL2007 и 2010 QueryTables содержится в «ListObject» в рамках листа, поэтому вам просто нужно настроить свой код на:

Set oQuery = WorkBooks("Book 1").Sheets("Sheet 1").ListObjects(1).QueryTables(1)

http://msdn.microsoft.com/en-us/library/ff841237.aspx

Тим

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top