Импорт данных из базы данных SQL в Excel 2003 против Excel 2010 (VBA)
-
30-09-2019 - |
Вопрос
Итак, моя компания, наконец, обновилась до MS Office 2010. До сих пор я работал в 2003 году. Я программист SQL, и я постоянно создаю отчеты в Excel, которые получают данные из нашей базы данных. В большинстве случаев я создам макросы, которые принимают параметры, которые пользователи будут вводить в определенные ячейки, изменять запрос, а затем обновлять его в соответствии с параметрами.
Вот действительно простой пример:
- В Excel 2003 я бы открыл новую рабочую книгу.
- Нажмите «Данные», затем «Импортируйте внешние данные», а затем «Новая база данных».
- Затем он побуждает вас выбрать источник данных, поэтому я бы выбрал базу данных, из которой я хотел запросить (которая уже была настроена с подключением ODBC).
Затем я отменил Windows Windows Windows Windows, а затем, когда я нахожусь в редакторе Microsoft Query, я просто ввожу свой запрос.
Для простоты я буду выбирать
*
Из таблицы называетсяAgents
который является лишь списком агентов, которые работают для компании и ихEmployeeIds
.select * from Agents
Затем я «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.
Вот мои шаги и ошибка, которая следует:
- Я открываю Excel 2010 и перейду на вкладку «Данные».
- В разделе «Получить внешние данные», я нажмите «Из других источников» и выберите «Из Mircrosoft запроса» из выпадения.
- Затем появляется поле «Выбрать источник данных», и в основном он точно такой же, как и шаги 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
Тим