Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тойота_макросы_модули.doc
Скачиваний:
2
Добавлен:
20.11.2019
Размер:
2.34 Mб
Скачать

Создание процедуры

Для создания процедуры (подпрограммы или функции) в Access 97 предназначена команда Процедура из меню Вставка, которая имеет аналог в

панели инструментов Visual Basic. В результате ее активизации открывается диалоговое окно Вставка процедуры, которое служит для выбора типа про­цедуры (подпрограмма (Sub) или функция (Function)) и присвоения ей имени

(поле Имя). Подпрограмму или функцию можно создать и другим спо­собом — в ведя в окно модуля инструкцию Sub или Function.

Рис. 6. 4. Диалоговое окно создания процедуры

При создании процедуры можно задать область ее использования с помощью следующих переключателей (Область определения):

общая (Public) — процедура доступна для всех процедур во всех модулях.

личная (Private) — процедура доступна для других процедур только в том

модуле, в котором она объявлена.

Если процедуры не используются вне данного модуля, их следует декла­рировать как личные. При объявлении личной процедуры в первой строке перед ключевым словом Function или Sub вставляется префикс Private:

Private Function Имя ()

ИЛИ

Private Sub Имя ()

В результате установки опции Все локальные переменные считать стати­ческими локальным переменным присваивается тип Static (Статический). В этом случае локальные переменные сохраняются между вызовами. Атрибут Static не влияет на переменные, которые объявлены вне данной процедуры, даже если они используются в процедуре.

Попробуем создать простую процедуру-функцию Предположим, что на основе цен, выраженных в рублях, должны быть автоматически определены и указаны в отдельном поле цены в американских долларах. Мы будем использовать форму Прейскурант цен, содержащую поля Название товара, Цена в рублях и Цена в долларах, которые связаны с соответствующими полями таблицы Товары отношением один к одному.

Р ис. 6. 5.Пример формы

Чтобы решить данную задачу, необходимо создать процедуру, определяю­щую значение поля USD на основе содержимого поля Цена в рублях:

• Откройте окно модуля и вызовите команду Процедура из меню Вставка или нажмите соответствующую кнопку на панели инструментов. На экране появится диалоговое окно для указания имени создаваемой про­цедуры.

Р ис. 6. 6. Выбор типа процедуры и указание ее имени

Активизируйте переключатель функция (Function), введите в поле Имя имя функции Рубли_в_Доллары и щелкните на кнопке ОК. Access 97 генерирует заготовку функции (начальный и конечный опера­торы) с указанным именем. Вам останется ввести операторы, которые будут производить расчеты. Окончательный вариант создаваемой функции должен быть приблизительно таким:

Public Function Рубли_в_Доллары ()

' Пересчет цены в рублях в цену в долларах

Forms! [Прейскурант цен]! [Цена в долларах]= Forms! [Прейскурант цен]! [Цена в рублях]/5.5

End Function

После ввода каждой строки процедуры программа проверяет синтаксис введенного оператора. При обнаружении синтаксической ошибки на экране появляется соответствующее сообщение. Следует учитывать, что возможно­сти синтаксической проверки VBA ограничены. Программа проверяет только корректность написания операторов и не обнаруживает более сложные ошибки, такие как обращение к полю, которого нет. Не обнаруживаются также ошибки в именах формы — они дают о себе знать только при выполнении процедуры.

Примечание:

Режим проверки синтаксиса отменяется путем выключения опции про­верка синтаксиса, расположенной на вкладке Модуль диалогового окна Параметры. В этом случае проверка осуществляется только при компи­лировании.

• Выберите в меню Файл команду Сохранить, чтобы сохранить модуль с созданной функцией Присвойте модулю имя Прейскурантные расчеты.

Примечание:

Имя функции должно начинаться только с букв и не может содержать более 255 символов.

В имени функции наряду с буквами можно исполь­зовать цифры и знак подчеркивания, однако в нем не должно быть пробелов, пунктуационных знаков и ключевых слов VBA. Следите за тем, чтобы одно имя дважды не использовалось в одной базе данных.

Тело созданной процедуры состоит из одного оператора присваивания (=). В результате его выполнения вычисляется значение цены в долларах, которое заносится в соответствующее поле формы.

Структурирование программного кода

Автоматически сгенерированные в модуле строки кода обозначают нача­ло (Public Function Имя Функции ()) и конец (End Function) процедуры. Для повышения удобочитаемости кода процедуры, вводимого между ограничи­тельными операторами, применяют приемы структурирования.

Аргументы процедуры

Благодаря аргументам пользователь имеет возможность управлять выпол­нением процедуры. Аргументы указываются в процессе создания процедуры.

Усложним рассмотренный ранее пример пересчета цен. Значение курса валют зададим как аргумент для функции пересчета. В случае изменения курса валют пользователю не придется редактировать текст процедуры — будет достаточно изменить только аргумент функции при обращении к ней.

При описании процедуры, зависящей от аргументов, имя аргумента принято вводить в скобках за именем процедуры в строке с ключевым словом Function/Sub:

Function Рубли_в_Доллары (Коэффициент)

Формы![Прейскурант цен]!USD=Формы!Прейскурант цен]!Рубли/ Коэффициент

End Function

При вызове такой функции значение аргумента указывается в скобках после имени функции:

=Рубли_в_Доллары(4500)

Пользователь может поставить функции в зависимость от целого ряда аргументов. В этом случае имена аргументов разделяютея запятыми:

Function Имя (Аргумент1, Аргумент2, ...)

Вызов процедуры, которая имеет аргументы, должен сопровождаться заданием значений для всех объявленных аргументов. Эти значения пере­числяются в том же порядке, что и аргументы при объявлении, и разделяются запятыми. Если один из аргументов будет пропущен, компилятор выдаст сообщение об ошибке.

В пользовательских функциях или модулях в качестве аргументов могут применяться выражения. Это допускается во многих распространенных встроенных функциях (примеры этих функций приведены в следующей таблице). Такие аргументы вводятся в круглых скобках после имени функ­ции. Например, в функции:

Sum ([Цена] + [Расходы на доставку])

[Цена] + [Расходы на доставку] является аргументом.

Функция Описание

Count Определяет количество маркированных записей

Dlookup Выводит значение поля из записи указанного набора данных

Format Форматирует число

Sum Выводит сумму значений ряда

Для обозначения логических значений в модулях служат зарезервирован­ные слова TRUE (-1) и FALSE (0). Нельзя использовать в качестве логиче­ских значений слова Yes, No, On, Off, а также операторы Between, In и Is.

Значение функции

В приведенном примере присвоение полю вычисленного значения вы­полняется специальным оператором присваивания внутри функции. Обычно функции возвращают вычисленное значение. Пользователь описывает функ­цию, например Function Глубина(), которая вычисляет и возвращает некото­рое значение. Затем он может обратиться к этой функции из любой проце­дуры, указав имя функции в правой части оператора присваивания:

Объем = 3*2* Глубина ()

При выполнении указанного оператора присваивания будет вызвана функция Глубина(). Чтобы функция вернула определенное значение, оно должно присваиваться имени функции. Например, функция Коэффици­ент_пересчета (), возвращающая коэффициент пересчета, должна выглядеть следующим образом-Function Коэффициент_лересчета () Коэффициент_пересчета=4500 End Function

Основные операторы VBA

После изучения основных приемов работы с процедурами вы можете попробовать написать функцию или подпрограмму для выполнения более сложных вычислений. Это потребует знания техники программирования на VBA, в том числе основных операторов этого языка.

Переменные и оператор присваивания

Переменные используются для сохранения значений величин, изменяю­щихся в процессе выполнения программы. Каждая переменная имеет имя, по которому происходит обращение к ней. Правила присвоения имен переменным не отличаются от описанных выше правил для имен полей. Присвоение значения переменной осуществляется посредством оператора присваивания, в котором слева указывается имя переменной, а справа — присваиваемое значение или выражение:

Номер =1

Город = "Новые Васюки"

Температура = 5.9

Синус = Sin (1.3)

Коэффициент = 234 /4*0.5

Переменные могут создаваться VBA автоматически, по мере появления в процедуре (неявное объявление). Переменные, которые не объявляются явно, по умолчанию имеют тип Variant. Внутри такой переменной кроме значения хранится индикатор типа значения.

Неявное объявление переменных допустимо только в случае отсутствия оператора Option Explicit в области описания модуля. Чтобы при создании нового модуля предотвратить появление этого оператора в области описания, следует отключить опцию явное описание переменных на вкладке Модуль диалогового окна Параметры.

Рекомендуется описывать все переменные явно, что позволит избежать появления ошибок, связанных с преобразованием типов данных и с опечат­ками в именах переменных. Явное описание переменных выполняется с помощью оператора Dim, после которого указываются имя переменной и ее тип:

Function Расчет()

Dim A As Integer

Dim Коэффициент As Single

Dim Результат As Single

A = 1

Коэффициент = 234 / 4 * 0.5

Результат = А / Коэффициент

End Function

В этом примере переменная А объявлена целой (As Integer), а переменные Результат и Коэффициент — действительными переменными единичной длины (As Single). Объявив явно тип некоторой переменной, вы берете на себя обязательство заносить в эту переменную данные только определенного типа (целые числа, текстовые строки, денежные величины), который указан для нее при объявлении. Попытку занести в целую переменную текстовую строку компилятор VBA расценит как ошибку и выдаст соответствующее сообщение.

Если при явном объявлении переменной не указан тип данных, а заданы оператор Dim и ее имя, будет создана переменная типа Variant, которой можно присваивать цепочки символов, числа с плавающей точкой, а также значения даты и времени (совершенно разные типы данных) Access 97 однозначно идентифицирует присваиваемые значения, поскольку наряду с ними он хранит в переменной и признак типа.

Работа с данными типа Variant имеет существенный недостаток: посто­янное отслеживание типа хранимого значения занимает много машинного времени. Для сокращения времени, необходимого для выполнения програм­мы, все используемые переменные надлежит декларировать явно, задавая один из стандартных типов данных.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]