Самоучитель VBA


Рисунок 15 9 Результат запроса



Рисунок 15.9. Результат запроса




Макрорекордер записывает перечисленные выше действия в виде следующего макроса:

Sub Макрос1()

'

' Макрос1 Макрос

' Макрос записан 03.06.99 (Андрей)

'

'

With ActiveSheet.QueryTables

.Add(Connection:=Array(Array(

"ODBC;DSN=MS Access 97

Database;DBQ=C:\МУ_DОС\студенты.mdb;

DefaultDir=C:\MY__DOC;Driverld=25;

FIL=MS Aceess;MaxBufferSize=512;PageT-imeo")

, Array("ut=5;")),

Destination:=Range("Al"))

.Sql = Array( "SELECT ПервыйКурс.Фамилия,

ПервыйКурс.Группа, ПервыйКурс.Предмет,

ПервыйКурс.Оценка" & Ghr(13) & "" & Chr(10) & "FROM

`C:\МY_ООС\СТУДЕНТЫ` .ПервыйКурс

ПервыйКурс" & Chr(13) & "" & Ghr,(10) & "WHERE (ПервыйКурс.Группа='Экономика')

AND (ПервыйКурс.Предмет='Инф" ,"орматика')"

& Chr(13) & "" & Chr(10) &

"ORDER BY ПервыйКурс.Фамилия")

.FieldNames = True

.RefreshStyle = xlInsertDeleteCells

.RowNumbers = False

.FillAdjacentFormulas = False

.RefreshOnFileOpen = False

.HasAutoFormat = True

.BackgroundQuery = True

.TablesOnlyFromHTML = True

.Refresh BackgroundQuery:=False

.SavePassword = True

.SaveData = True

End With

End Sub

Для удобства расположения этого макроса на листе, выделенные цветом две группы строк по три и по четыре строки соответственно, составляющие единые строки, не разбиты на подстроки знаками переноса. Во всяком случае, нельзя было бы ограничиться только добавлением знаков переноса, т. к. их лимит уже исчерпан. На самом деле, корректная запись макроса не представляет никаких усилий. Достаточно было бы ввести дополнительные строковые переменные, которым были бы присвоены выделенные строковые выражения. Но в этом случае макрос визуально сильно бы отличался от того, который был создан макрорекордером. Поэтому, во имя получения максимального приближения к "реальной боевой ситуации" (работы макрорекордера) и большей наглядности, приходится идти на небольшую жертву -оставить в макросе не скорректированными заранее оговоренные ошибки, которые не должны вызвать у читателя никаких затруднений.

Центральную роль в данном макросе играют: инструкция SELECT, указывающая выбираемые поля, инструкция WHERE, задающая критерий отбора записей и инструкция ORDER BY, устанавливающая порядок вывода записей.

В макросе используется семейство QueryTables. Семейство QueryTables является семейством всех объектов QueryTable, представляющих собой внедренные на рабочий лист результаты запроса по внешней базе данных посредством Microsoft Query. Основными методами семейства QueryTables являются Add и item. Несмотря на громоздкость макроса макрос1, метод Add имеет простую синтаксическую структуру:

Add(Connection, Destination, Sql)

Аргументы:

Connection

ODBC-строковое выражение, указывающее базу данных, к которой производится запрос

Destination

Устанавливает верхнюю левую ячейку диапазона рабочего листа, в который выводится результат запроса

Sql

ODBC-строковое выражение, указывающее критерии, по которым создается запрос









Начало  Назад  Вперед