Импорт данных из базы данных SQL в Excel 2003 VS Excel 2010 (VBA)
Итак, моя компания наконец-то перешла на MS Office 2010. До сих пор я работал в 2003 году. Я программист SQL, и я постоянно создаю отчеты в Excel, которые извлекают данные из нашей базы данных. Большую часть времени я буду создавать макросы, которые будут принимать параметры, которые пользователи будут вводить в определенные ячейки, изменять запрос, а затем обновлять его в соответствии с параметрами.
Вот действительно простой пример:
- В Excel 2003 я бы открыл новую рабочую книгу.
- Нажмите "Данные", затем "Импорт внешних данных", затем "Новый запрос к базе данных".
- Затем вам будет предложено выбрать источник данных, поэтому я бы выбрал базу данных, к которой хотел обратиться (которая уже была настроена с помощью соединения ODBC).
Затем я отменяю работу из окон мастера запросов, а затем, когда я нахожусь в редакторе запросов Microsoft, я просто ввожу свой запрос.
Для простоты я буду выбирать
*
из таблицы под названиемAgents
это просто список агентов, которые работают на компанию и ихEmployeeIds
,select * from Agents
Затем я "х" из редактора запросов, и появляется окно под названием "Импорт данных", где он спрашивает, где вы хотите поместить данные: в существующую таблицу? новый лист? и т. д. Я просто хочу вернуть данные в существующую таблицу, начиная с ячейки
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
, нажимает на кнопку, и этот агент и их Id появляется в таблице ниже. Действительно просто верно? Но я не могу заставить это работать в Excel 2010.
Вот мои шаги и следующая ошибка:
- Я открываю Excel 2010 и захожу на вкладку "Данные".
- В разделе "Получить внешние данные" я нажимаю "Из других источников" и выбираю "Из запроса Mircrosoft" из выпадающего списка.
- Затем появляется окно выбора источника данных, и оно в основном совпадает с шагами 3,4 и 5 выше.
Затем я пишу тот же макрос, создаю кнопку и назначаю ее марко, но когда я нажимаю кнопку, я получаю следующую ошибку:
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 году, я не могу заставить его работать. По какой-то причине кажется, что он просто не может найти запрос, чтобы изменить текст своей команды и затем обновить. Пожалуйста, помогите, я застрял на этом в течение нескольких дней!
1 ответ
В XL2007 и 2010 таблицы запросов содержатся в "ListObject" на листе, поэтому вам просто нужно настроить свой код так:
Set oQuery = WorkBooks("Book 1").Sheets("Sheet 1").ListObjects(1).QueryTables(1)
http://msdn.microsoft.com/en-us/library/ff841237.aspx
Тим