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