eXcellence-team eXcellence

Учимся работать с базами данных 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


Скачать пример работы с базой данных