Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа Макросы.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
897 Кб
Скачать
☆

Операторы языка vba Оператор присваивания

Оператор присваивания задает исходные значения переменным, записывает результат вычисления в переменную, т.е. изменяет значение переменной.

Синтаксис оператора присваивания:

<var>= <formula>

где <var> - имя переменной;

<formula> - формула.

Слева от знака "=" может быть переменная, элемент массива или свойство объекта. Стоящая справа формула может состоят из переменных, констант, операций и функций, например:

Path="c:\windows\system"

File="GTE"

Stud_Card(100).Gr= 133

Таблица 4. Арифметические, логические операции языка VBA

Операция

Название

Приоритет

^

Возведение в степень

1

-

Отрицание (НЕ)

2

*

Умножение

3

/

Деление

3

\

Деление нацело

4

Mod

Остаток от деления

5

+

Сложение

6

-

Вычитание

6

&

Объединение (конкатенация) строк

7

Таблица 5. Операции сравнения

Операция

Название

=

Равно

>=

Больше или равно

<>

Не равно

<

Меньше

<=

Меньше или равно

>

Больше

Is

Идентично (используется только для объектов, вместе с зарезервированным словом Null, которое позволяет проверить, является ли значение пустым)

Like

Использование шаблонов для поиска и сравнения

Between… And

Проверяет принадлежность выражения указанному диапазону значений

In

Проверяет выражение на совпадение с одним из элементов в списке

Приоритеты перечислены в порядке убывания (чем больше номер, тем меньше приоритет операции). Для изменения естественного порядка выполнения операций используются круглые скобки, например:

D = ( S – P ) / ( r * t )^2

Сначала вычисляется разность S - Р, затем произведение r*t возводится в степень 2, после этого вычисляется частное от деления; результат присваивается переменной D.

Оператор комментариев

Комментарий - это текст, поясняющий программу. Текст комментариев предназначен для обеспечения понимания и логики программы, пояснять алгоритма работы. Комментарий может начинаться в любой строке программы с произвольного места.

Процедуры

Программные модули VBA состоят из процедур (одной или более).

Процедура - минимальный модуль в прикладной программы на языке VBA.

Синтаксис объявления процедуры:

Sub <имя_процедуры> (аргументы)

тело процедуры (операторы)

End Sub

Оператор Sub – зарезервированное слово - объявление процедуры, задает имя, указывает состав аргументов, передаваемых процедуре при вызове из программы. Каждому оператору Sub должен соответствовать End Sub.

Тело процедуры - набор операторов на языке VBA. В программе макроса Excel можно вызывать процедуры данного программного модуля, а также и процедуры других модулей текущей рабочей книги и процедуры других рабочих книг. Для этого нужно задать ссылки. Для этого при нахождении на рабочем листе модуля нужно выполнить команду СЕРВИС\Ссылки. Затем в диалоговом окне "Ссылки", содержащем список доступных ссылок на библиотеки или другие рабочие книги, выбрать нужную. Для установления новых ссылок используется кнопка Пролистать и затем из диалогового окна выбрать диск, каталог и файла, содержащий процедуры, на которые нужно ссылаться из данного программного модуля. Доступна процедура или нет из программного модуля или библиотеки, определяется с помощью переключателя.

Различают 4 типа процедур:

 процедуры общего назначения (стандартные);

командные процедуры - расширяют возможности прикладных программ, выполняя новые виды обработки данных;

процедуры обработки событий - вызываются при наступлении определенного вида событий: открытие\закрытие электронной таблицы Excel, нажатие кнопки, перемещение объекта и т.д.;

 функции пользователя - возвращают вычисленное значение, которое можно использовать по аналогии с вызовом встроенных функций VBA.

Перед вызовом процедуры необходимо установить все необходимые ссылки.

Варианты вызова процедур:

1. Из другой процедуры того же модуля - вызов осуществляется по имени процедуры, например:

Sub Рrос_А () ' вызывающая процедура Рrос_А ()

…

Рrос_В ' вызов процедуры Рrос_В()

…

End Sub ' Завершение работы процедуры Рrос_А ()

Sub Proc_B () ' вызываемая процедура

…

End Sub ' Завершение работы процедуры Proc_B ()

2. Из другой процедуры другого (подключенного) модуля того же приложения - вызов осуществляется указанием квалифицируемого имени, состоящего из имени модуля и имени процедуры, например:

Sub Р_А () 'вызывающая процедура Р_А ()

…

[Модуль#].Р_В'вызов процедуры Р_В() модуля Модуль#

End Sub ' Завершение работы процедуры P_A ()

3. Из другого приложения, т.е. из другой рабочей книги Excel - вызов осуществляется указанием имени модуля, имени процедуры и имени рабочей книги, например:

Sub Р_А () 'вызывающая процедура Р_А ()

…

[Otchet.XLS].[Модуль#].P_B 'вызов Р_В() модуля 'Модуль# рабочей книги Otchet.XLS

…

End Sub ' Завершение работы процедуры Рrос_А ()

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

Чтобы закрыть процедуру от внешнего программного кода других модулей (т.е. запретить доступ к ней), процедуру делают частной. Для этого в операторе объявления процедуры нужно указать:

Private Sub Proc_B ()

End Sub

Для запрета доступа к модулю рабочей книги из процедур другой рабочей книги в начале модуля указывают: Option Private Module

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

Синтаксис объявления аргументов в заголовке процедуры:

Sub P_B (V1 As Single; V2 As Date;...)

Здесь видно, что через разделитель (в зависимости от настройки - запятая или точка с запятой) перечисляются аргументы с указанием имени и типа значения. Если аргумент необязательный, т.е. может не задаваться при вызове процедуры, указывается ключевое слово Optional, например процедура вычисления площади прямоугольника по двум сторонам:

Текст программы

Комментарий

Sub Square (L As Single; H As Single;

S As Single; Optional F)

- объявление процедуры Square c 4-мя аргументами

If IsMissing( F) Then F=100

- стандартная функция VBA - IsMissing проверяет есть ли аргумент; если нет, то по умолчанию F присваивается значение 100 (F имеет тип Variant)

S=L*H

- вычисление площади

End Sub

- конец процедуры

Вызов такой процедуры можно выполнить разными способами:

  • 1-й вариант - непосредственное задание значений аргументов при вызове процедуры

    Текст программы

    Комментарий

    Sub P_A() Dim Sq as Single

    - вызывающая процедура

    Square 12; 23; Sq

    - вызов процедуры с передачей значений длин сторон прямоугольника в явном виде, результат вычисления будет присвоен переменной Sq

    End Sub

    - конец процедуры

  • 2-й вариант - через имена переменных, которым присвоены значения:

    Текст программы

    Комментарий

    Sub Proc_A ( )

    - вызывающая процедура

    Dim Sq as Single

    - площадь

    Dim L as Single

    - длина

    Dim H as Single

    - высота

    L=12 H=23

    - присвоение значений переменным

    Square L H Sq

    - Вызов процедуры с передачей значений длин сторон прямоугольника в явном виде, результат вычисления присваивается переменной Sq

    End Sub

    - конец процедуры

  • 3-й вариант - использование явного указания при вызове процедуры соответствия списка поименованных аргументов и передаваемых переменных

Текст программы

Комментарий

Sub P_A ( )

- вызывающая процедура

Dim Sq as Single

- площадь

Dim L as Single

- длина

Dim H as Single

- высота

L1=12 H1=23

- присвоение значений переменным

Square L:=L1; H:=H1; Sq

- вызов процедуры с явным указанием соответствия имен аргументов и имен передаваемых переменных

End Sub

- конец процедуры

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

Static <var> As <type>

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

Модификации заголовка процедуры выполняется указание ключевого слова By Val перед именами аргументов, которые нужно передать по значению, например:

Sub Square(By Val L As Single; By Val H As Single; S As Single)

S=L*H

L=10

H=20

End Sub

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

Текст программы

Комментарий

Sub Proc_A ( )

Dim Sq as Single

Dim LL as Single

Dim HH as Single

LL=12

HH=23

SquarPr L:=(LL);H:= (HH);S:= Sq

End Sub

- вызывающая процедура

- объявление переменных

- площадь

- длина

- высота

- присвоение значений переменным

- преобразование аргумента в формулу

- конец процедуры