| Каталог | Индекс раздела |
| Оглавление |
Visual Basic for Applications представляет собой полуфункциональный язык программирования, являющийся неотъемлемой составной частью Access. Этот язык используется для разработки приложений, предназначенных для манипулирования БД и для настройки пользовательского интерфейса. VBA - это структурированный язык программиррования высокого уровня. В нем, как и в других языках, есть операторы проверки условий, циклического выполнения повторяющихся операций, а также обмена данными с пямятью и дисками. В языке VBA реализованы общие принципы объектно-ориентированного программирования. Это означает, что пользовательская среда, управляемая приложением, не подвергается изменениям путем выполнения последовательности процедур и операторов, но реагирует на события, связанные с различными объектами: полями ввода, кнопками, разделами форм и отчетов. В языке VBA программный код привязан непосредственно к объектам и срабатывает тогда, когда случается определенное событие. Все программирование в Windows основано именно на отклике на то или иное событие в системе.
Одним из эффективных способов использования VBA является привязка кода к кнопкам, добавляемым в форму с помощью мастеров элементов управления. Чтобы добавить кнопку с фрагментом кода, а затем просмотреть код, необходимо выполнить следующее:
![]() |
| Рис. 1. |
![]() |
| Рис. 2. |
В этом окне можно видеть три фрагмента программы на языке VBA: раздел объявлений (в верхней части окна), который содержит код, относящийся ко всей форме в целом, а также два раздела кода, привязанных к двум кнопкам.
Первый раздел начинается с заголовка процедуры:
Private Sub Кнопка13_Click( )
Заканчивается процедура оператором: End Sub. Операторы, заключенные между ними, выполняются после щелчка по кнопке Найти. Основная часть работы выполняется следующим оператором:
DoCmd.DoMenuItem acFormBar, AcEditMenu, 10, AcMenuVer70
Этот оператор выполняет те же действия, что и команда меню Правка -> Найти, т.е. выводит на экран диалоговое окно Поиск в поле, с помощью которого можно выполнить поиск.
Открыв модуль VBA, его можно редактировать как текст в любом текстовом редакторе. В окне редактора Visual Basic в код можно вставить текст из другого файла. Для этого выбрать команду Вставка -> Файл, а в открывшемся диалоговом окне выбрать нужный файл и выполнить щелчок по кнопке ОК.
Модули на языке Visual Basic можно выводить на печать. Для этого следует открыть модуль и выбрать команду Файл -> Печать.
Структурным элементом программы, написанной на языке VBA, является модуль - совокупность объявлений и процедур, объединенных в единое целое. В ACCESS 97 модули трех типов: стандартные модули, модули формы и модули отчетов. В отличие от стандартного модуля, который создается таким же образом, как и любой другой объект БД, и может выполнять практически любые вычисления, модули форм и отчетов разрабатываются для обработки событий, связанных с элементами формы или отчета.
Каждый модуль состоит из области описания и одной или нескольких процедур. Процедура представляет собой последовательность операторов, которые часто называют программными кодами. Входящие в модуль процедуры объединены общей областью описания. В ней описываются данные и объекты, которые являются общепринятыми для процедур модуля. Иерархия указанных объектов такова:
Процедуры делятся на две категории: процедуры-подпрограммы (подпрограммы) и процедуры-функции (функции).
Процедура-подпрограмма активизируется при обращении к ней по имени, вследствие чего выполняется определенная последовательность операторов (инструкций). Подпрограмму используют, например, для задания свойства формы или заполнения списка значениями, полученными в результате вычислений.
Процедура-функция после выполнения возвращает некоторое значение, которое можно применять в операторах и выражениях в качестве переменной. Например, функции могут возвращать значение, используемое по умолчанию для некоторого поля, или вычислять сложный критерий в рамках запроса. В модуль можно включать любое количество функций и подпрограмм.
Процедурой называется целостная структурная единица кода на языке VBA. Каждая процедура состоит из операторов, в которых применяются встроенные в ACCESS 97 функции, методы и свойства, которые предназначены для выполнения каких-либо операций над данными. Например, к свойству Click кнопки Найти приведенного ранее примера привязана следующая процедура:
Private Sub Command6_Click ( )
On Error GoTo Err_Command6_Click
Screen.PreviosControl.SetFocus
DoCmd.DoMenuItem acFormBar, acEditMenu, 10, , acMenuVer70
Exit Command6_Click:
Exit Sub
Err_Command6_Click:
MsgBox Err.Descrition
Resume Exit_Command6_Click
End Sub
Для обращения к перечисленным объектам, а также для обозначения операторов используются ключевые слова, которые записываются с прописной буквы (например, Function).
Теоретически каждая процедура может быть вызвана из любого модуля, а функция - из таких объектов, как форма, запрос или отчет. Наряду с общедоступными процедурами (Public), которыми являются все процедуры по умолчанию, существуют локальные, или личные процедуры (Private), доступные только в том модуле, в котором они описаны.
Для передачи значений из вызывающих операторов в вызываемые процедуры служат аргументы. С помощью аргументов ведется контроль за выполнением процедуры, устанавливается способ получения результата, определяются параметры вычислений и т.д.
Начинающим разработчикам приложений ACCESS понадобится набор процедур для отклика на различные события, например, внесение изменений в поле или щелчок на кнопке. Код процедуры обработки события привязывается к событию, которое может произойти при работе с формой, отчетом или элементом управления. Результат выполнения процедуры-функции обычно применяется:
Хотя конкретный вид процедуры зависит от события и желаемого отклика, можно предложить общую последовательность действий по созданию процедуры обработки события.
Для повышения удобочитаемости кода процедуры, вводимого между ограничительными операторами, применяют приемы структурирования. Один из таких приемов заключается в том, что все операторы процедуры записываются с отступом от начала строки. Для создания отступа можно использовать клавишу Tab. По умолчанию позиции табуляции установлены через четыре символа. Отступы образуются и посредством команды Увеличить отступ из меню Правка. В результате активизации этой команды строка смещается вправо на то количество символов, которое указано в поле интервал табуляции. Команда Уменьшить отступ служит для выполнения противоположного действия.
Посредством отступов выделяют вложенные циклы и условные операторы внутри процедуры.
Тексты программ принято снабжать комментариями. В начале каждой строки комментария ставится апостроф, и такие строки не влияют на выполнение программы, а при синтаксическом анализе и компилировании - пропускаются. Наряду с отступами ACCESS 97 позволяет использовать различные шрифты и цвета для выделения фрагментов текста модуля. Эти параметры устанавливаются на вкладке Модуль диалогового окна Параметры.
Код модуля и тексты подпрограмм/функций редактируются также как документы в обычном текстовом редакторе. Для поиска процедуры в тексте модуля используется список процедур, находящийся в верхней части окна модуля.
При перемещении курсора из строки кода программа автоматически проверяет синтаксис этой строки и в случае обнаружения ошибки выводит на экран соответствующее сообщение. Для отказа от такой проверки следует выключить опцию проверка синтаксиса на вкладке Модуль диалогового окна Параметры.
Для быстрого поиска и замены фрагментов кода применяются команды Найти и Заменить из меню Правка.
В ACCESS при редактировании фрагментов кодов кроме общепринятых используются дополнительные комбинации клавиш: Ctrl + Y позволяет вставить в буфер строку, в которой находится курсор, не выполняя его маркировку; F3 и Shift + F3 позволяют просмотреть все фрагменты модуля, в которых встречается искомая последовательность символов. F3 дублирует команду Найти далее из меню Правка и кнопку Найти далее окна поиска.
Благодаря аргументам пользователь имеет возможность управлять выполнением процедуры. При описании процедуры, зависящей от аргументов, имя аргумента принято вводить в скобках за именем процедуры в строке с ключевым словом Function/Sub. Например:
Function Рубли_в_Доллары (Коэффициент)
При вызове такой функции значение аргумента указывается в скобках после имени функции Например:
=Рубли_в_Доллары (4500)
Вызов процедуры, имеющей аргументы, должен сопровождаться заданием значений для всех объявленных аргументов. Эти значения перечисляются в том же порядке, что и аргументы при объявлении и разделяются запятыми. В пользовательских функциях или модулях в качестве аргументов могут применяться выражения.
Переменные используются для сохранения значений величин, изменяющихся в процессе выполнения программы. Каждая переменная имеет имя по которому к ней обращаются. Правила присвоения имен аналогично правилу присвоения имен для полей. Присвоение значения для переменной осуществляется посредством оператора присваивания. В левой части оператора присваивания имя переменной, а в правой - значение или выражение.
Переменные могут создаваться автоматически, по мере появления в процедуре (неявное объявление). По умолчанию неявно объявленные переменные имеют тип Variant. Внутри такой переменной кроме значения хранится индикатор типа значения.
Неявное объявление типа допустимо только в случае отсутствия оператора Option Explicit в области описания модуля. Чтобы при создании нового модуля предотвратить появление этого оператора в области описания, следует отключить опцию явное описание переменных на вкладке Модуль диалогового окна Параметры.
Рекомендуется описывать все переменные явно, это позволит избежать ошибок, связанных с преобразованием типов данных. Явное описание типа производится оператором Dim, после которого указывается имя переменной и ее тип. Если при явном объявлении переменной не указан тип данных, а задано только имя переменной то будет создана переменная типа Variant, которой можно присваивать цепочки символов, числа с плавающей точкой, значения даты и времени. ACCESS 97 однозначно идентифицирует присваиваемые значения, поскольку наряду с ними он хранит в переменной и признак типа.
В ACCESS используются следующие типы данных:
| Тип данных | Хранимые значения | Область значений |
| Boolean | Логическая величина | True или False |
| Byte | Целое положительное число | От 0 до 255 |
| Integer | Целое число | От -32768 до 32768 |
| Long | Целое число двойной длины | От -2147483648 до 2147483648 |
| Single | Число с плавающей точкой | От -3,402823Е38 до -1,401298Е-45 и от 1,401298Е-45 до 3,402823Е38 |
| Double | Число с плавающей точкой двойной точности | От -1,79769313486232Е308 до -4,94065645841247Е-32 и от 4,94065645841247Е-324 до 1,79769313486232Е308 |
| Currency | Число с фиксированной точкой (используется для проведения денежных расчетов) | От -922337203685477,5808 до 922337203685477,5807 |
| Date | Дата | От 1 января 100 года до 31 декабря 9999 года |
| String (фиксированной длины) | Строковое значение | Длина от 1 до 65536 |
| String (переменной длины) | Строковое значение | Длина от 0 до 2147483648 |
Для объявления нескольких переменных можно пользоваться одним оператором Dim, перечисляя их через запятую.
При объявлении переменной следует помнить об области действия. Переменные объявленные в процедуре, можно использовать только внутри этой процедуры. Если переменная должна быть доступна во всех процедурах одного модуля, ее необходимо объявить в области описания модуля. Здесь также можно применять оператор Dim. Наибольшую область действия имеет переменная, объявленная глобальной (с префиксом Global) в области описания модуля. Синтаксис оператора Global не отличается от синтаксиса оператора Dim.
В отличие от переменной, константа содержит фиксированное значение, которое не может быть изменено в процессе выполнения программы. Согласно правилам хорошего тона, константы, как и переменные, следует объявлять явно, указывая их имена и значения. Для объявления константы используется оператор Const. Объявленную константу можно использовать в программе, обращаясь к ней по имени. Например:
Const Число_Пи = 3.1415926
В языке VBA, как и в других языках программирования, основными элементами, управляющими ходом выполнения процедуры, являются условные операторы. Наиболее простой из них - оператор If . . . Then:
If Полина = "Ж" Then
Поздравление = "С 8 марта!"
End if
Если условие, заданное выражением между ключевыми словами If и Then выполняется, соблюдаются инструкции внутри блока, ограниченного ключевыми словами Then и End if. Иначе операторы между ключевыми словами не выполняются, а ACCESS перейдет к обработке оператора, который следует за ключевыми слова End if. В случае необходимости произвести два различных действия (одно при соблюдении условия, а второе - нет), надлежит воспользоаться полной формой оператора If:
If выражение Then
Оператор1
Else
Оператор2
End if
Если условие соблюдается, выполняется Оператор1 (или группа операторов, расположенных между ключевыми словами Then и Else, а если не соблюдается - Оператор2 (или группа операторов, расположенных между ключевыми словами Else и End if.
Однако, не всегда возможны два варианта решения. Учитывая это, VBA предоставляет в распоряжение пользователей оператор Select Case, предназначенный для выбора одного из множеств вариантов решений:
Select Case Город
Case "Киев"
Код_МГТС = "044"
Case "Москва"
Код_МГТС = "095"
Case "Запорожье"
Код_МГТС = "061-2"
Case Else
Print "Я не знаю такого города!"
End Select
При выполнении этого оператора проверяется значение переменной Город. В зависимости от результата проверки переменной Код_МГТС присваивается телефонной код некоторого города. Если значение переменной Город не совпадает ни с одним из значений, перечисленных в строках с ключевым словом Case, производится действие, указанной между ключевыми словами Case Else и End Select.
Цикл используется для многократного повторения одной или нескольких инструкций. Количество повторений цикла связано с некоторым условием. В VBA предусмотрено несколько разновидностей циклов. Простейшим примером циклической конструкции является так называемый цикл по счетчику.
For Счетчик = 1 To 10
Print Счетчик
Next Счетчик
Цикл по счетчику ограничивается ключевыми словами For и Next. После ключевого слова For указывается имя переменной, которая будет выполнять роль счетчика, после знака равенства - начальное значение счетчика, а после ключевого слова To - конечное значение счетчика.
Еще одна разновидность цикла - While-цикл. Условие выполнения команд внутри такого цикла определяется некоторым условным оператором:
Do While Счетчик <> 10
Print
Loop
Разновидностью цикла Do является Until-цикл, который выполняется, пока условное выражение ложно:
Do Until Счетчик=10
Print
Счетчик=Счетчик+1
Loop
| Оглавление |
| Каталог | Индекс раздела |