Учимся работать с базами данных Access из макросов Excel
Кратко о структуре базы данных. База состоит из таблиц. Таблица - из строк. Строка - из полей. В полях могут храниться данные разных форматов. Форматы определяются в момент создания таблицы. Создать базу и таблицы в ней можно в Access, а можно и средствами макроса прямо из Excel.
Чтобы Access смог обращаться к базам Access, нужно подключить библиотеку DAO. Для этого в редакторе Visual Basic выбираем меню "Tools->References", открывается окошко, в котором нужно поставить галочку напротив Microsoft DAO 3.6 Object Library.
Теперь делаем так:
'Объявляем переменные
Dim dbs As DAO.Database 'База данных
Dim rs As DAO.Recordset 'Запрос к базе данных
'Открываем базу
Set dbs = DAO.OpenDatabase("c:\database.mdb")
'Выполняем запрос к базе данных
Set rs = dbs.OpenRecordset("SELECT * FROM тбл_тов WHERE ID_тов>2")
Тут объясню подробнее. Запросы к базе выполняются на языке SQL. Пока рассмотрим только одну команду этого языка - SELECT. Эта команда выбирает из таблицы строки, удовлетворяющие заданному условию. Там, где у нас стоит звездочка, можно указать названия полей, которые будут присутствовать в ответе. В нашем случае будет возвращаться вся строка полностью. После слова FROM идет название таблицы, из которой идет выбор строк. Таблиц в базе может быть много. В нашем случае это тбл_тов - таблица товаров. После слова WHERE указывается условие, по которому отбираются строки. У нас условие такое: если поле ID_тов > 2, то строка включается в ответ.
Ответ получается в переменной rs, которая имеет тип Recordset. Recordset - это временная таблица, сформированная из строк, удовлетворяющих условию запроса.
'Если ничего не найдено - выдаем сообщение и выходим
If rs.RecordCount = 0 Then
MsgBox ("По вашему запросу ничего не найдено")
Exit Sub
End If
Do while not rs.EOF 'цикл выполняется пока не достигнута последняя строка в таблице ответа
'Присваиваем ячейкам таблицы значения из базы
Cells(i, 2).value = rs.Fields("назв_тов")
Cells(i, 1).value = rs.Fields("ID_тов")
i=i+1
'переходим к следующей строке во временной таблице ответа
rs.MoveNext
Loop
'Закрываем временную таблицу
rs.Close
'Очищаем память. Если этого не сделать, то таблица так и останется в памяти до закрытия рабочей книги.
Set rs = Nothing
'Закрываем базу
dbs.Close
'Очищаем память
Set dbs = Nothing
Скачать пример работы с базой данных