- •Использование макросов в табличных документах Теоретические сведения определение макроса
- •Основы работы в visual basic Основные понятия языка vba
- •Правила написания программ
- •Встроенные типы данных
- •Переменные
- •Массивы
- •Пользовательские типы данных
- •Объявление констант
- •Оператор комментариев
- •Процедуры
- •Операторы языка vba Оператор присваивания
- •Встроенные функции vba
- •Функции пользователя
- •Управляющие структуры
- •Условный оператор If.
- •Оператор выборки Select Case.
- •Оператор счетного цикла For-Next
- •Цикл Do-Loop
- •Цикл While-Wend
- •Цикл For Each
- •Возможности vba по созданию макросов Excel
- •Приемы работы в среде Visual Basic for Applications
- •Методические указания к выполнению работы Пример создания макроса
- •Порядок работы
- •Вариант 2. Письмо - поздравление
- •Вариант 3. Товарный чек
- •Вариант 4. Расчетный листок зарплаты
- •Порядок выполнения расчета.
- •Вариант 5. Комплектация изделия из составных частей
Операторы языка 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 |
- вызывающая процедура - объявление переменных - площадь - длина - высота - присвоение значений переменным - преобразование аргумента в формулу - конец процедуры |
