Процесс разработки программы на языке VBA – проекта, может состоять из нескольких этапов, в зависимости от конечного результата. Если необходимо получить программу, которая будет производить определенные вычисления или действия, расширяющие математические возможности стандартного приложения Microsoft Office, то достаточно создать программный модуль. Для применения этой программы можно поместить в рабочей области приложения кнопку, нажатие которой будет вызывать выполнение программы. Для этого в приложении необходимо включить панель инструментов с помощью команды Вид Панели инструментов Элементы управления, а затем создать кнопку с соответствующим программным кодом. Либо выполнять программу с помощью команды Сервис Макрос Макросы.
Разработка “полноценной” программы (для выполнения которой требуется отдельное окно, с различными элементами управления) будет включать два этапа. Первый этап – этап визуального программирования, на котором создается окно (форма) программы, где располагаются необходимые элементы управления. Второй – этап программирования, на котором создаются части программы (процедуры), выполняющиеся в ответ на определенные события. Событием является, например, щелчок левой кнопкой мыши на командной кнопке (событие Click), нажатие клавиши на клавиатуре (событие KeyPress) и т.д. Использовать такое приложение можно нажатием кнопки – «Запуск проекта».
2.1. Объекты, свойства и методы VBA
Одним из основных понятий VBA является объект. Объект – это то, чем вы управляете с помощью программы на языке VBA, например, форма, кнопка, рабочий лист или диапазон ячеек MS Excel. Каждый объект обладает некоторыми свойствами. Например, форма может быть видимой или невидимой в данный момент на экране. Другой пример свойства объекта – шрифт для отображения информации в ячейке (объекте) рабочего листа.
Объект содержит также список методов, которые к нему применимы. Методы – это то, что вы можете делать с объектом. Например, показать форму на экране или убрать её можно с помощью методов Show и Hide.
Таким образом, объект – это программный элемент, который имеет свое отображение на экране, содержит некоторые переменные, определяющие его свойства, и некоторые методы для управления объектом. Например, в MS Excel имеется много встроенных объектов:
Range(“Адрес”) |
- диапазон ячеек (может включать только одну ячейку). |
Cells(i, j) |
- ячейка, находящаяся на пересечении i-й строки и j-го столбца рабочего листа MS Excel (i и j – целые числа). |
Rows(№ строки) |
- строка с заданным номером. |
Columns(№ столбца) |
- столбец с заданным номером |
Sheets(“Имя”) |
- лист с указанным именем. |
Sheets(№ листа) |
- лист с указанным номером. |
WorkSheet |
- рабочий лист. |
Установка значений свойств – это один из способов управления объектами. Синтаксис установки значения свойства объекта следующий:
Объект. Свойство = Выражение
Основным свойством объектов Cells и Range, является Value (значение), которое, однако, можно не указывать. Например:
Range(“A5:A10”). Value = 0 или Range(“A5:A10”) = 0 – в диапазон ячеек A5:A10 заносится значение 0.
Cells(2, 4). Value = n или Cells(2, 4) = n – в ячейку, находящуюся на пересечении 2-й строки и 4-го столбца (ячейка с адресом “D2”), заносится значение переменной n.
Синтаксис чтения свойств объекта следующий:
Переменная = Объект. Свойство
Например:
Xn = Cells(1, 2).Value или Xn = Range(“B1”).Value – переменной Xn присваивается значение из ячейки B1 текущего рабочего листа.
Синтаксис применения методов к объекту:
Объект. Метод
Например:
Sheets(2).Activate – сделать активным лист с №2.
Sheets(“Диаграмма”).Delete – удалить лист с именем “Диаграмма”.
Range("A5:A10").Clear – очистить диапазон ячеек A5:A10.
Range("A2:B10").Select – выделить диапазон ячеек A2:B10.
В MS Excel имеются объекты, которые содержат другие объекты. Например, рабочая книга содержит рабочие листы, рабочий лист содержит диапазон ячеек и т.д. Объектом самого высокого уровня является Application (приложение). Если вы изменяете его свойства или вызываете его методы, то результат применяется к текущей работе MS Excel. Например:
Application.Quit - завершение работы с Excel.
Отметим, что точка после имени объекта может использоваться для перехода от одного объекта к другому. Например, следующее выражение очищает вторую строку рабочего листа Май в рабочей книге Отчет:
Application.Workbooks("Отчет").Worksheets("Май").Rows(2).Delete
Нужно отметить следующее:
- Можно не писать имя объекта Application, так как это подразумевается по умолчанию.
- При работе с подобъектом уже активизированного объекта нет необходимости указывать содержащий его объект.
- VBA использует некоторые свойства и методы, которые возвращают объект к которому они относятся (это позволяет быстро указывать нужный объект). Примеры таких свойств: ActiveCell (активная ячейка), ActiveSheet (активный лист), ActiveWorkBook (активная рабочая книга). Так, установить значение активной ячейки можно следующим образом:
ActiveCell.Value = " Да".
2.2. Описание данных
Все объекты, которыми оперирует язык программирования VВА, относятся к определенному типу.
Тип данных определяет:
– область возможных значений переменной;
– структуру организации данных;
– операции, определенные над данными этого типа.
Типы данных подразделяются на простые (скалярные) и сложные (структурированные). У простых типов данных возможные значения данных едины и неделимы. Сложные же типы имеют структуру, в которую входят различные простые типы данных. Скалярные типы данных представлены в таблице 2.1.
Таблица 2.1. Скалярные типы VBA
Имя типа |
Русское |
Возможные значения |
Boolean |
Логический |
True, False |
Byte |
Байтовый |
0…255 |
Integer |
Целое |
-32768…+32767 |
Long |
Длинное целое |
-2147483648…+2147483647 |
Single |
Число с плавающей точкой |
-3,4Е38…-1,4Е-45 для отрицательных значений. 1,4Е-45…3,4Е38 для положительных значений. |
Double |
Число с плавающей точкой двойной точности |
-1,7Е308…-4,9Е-324 для отрицательных значений. 4,9Е-324…1,7Е308 для положительных значений. |
Currency |
Денежный |
Десятичные числа с фиксированной позицией запятой. Возможны 15 цифр до запятой и 4 после. |
String |
Строковый |
Есть два вида строк: строки фиксированной длины (до 216 символов) и строки переменной длины (до 231 символов). Данные записываются в кавычках. |
Date |
Дата |
Даты изменяются в диапазоне от 1.01.100г. до 31.12.9999г. |
Object |
Объект |
Ссылка на объект (указатель) |
Variant |
Вариант |
Универсальный тип, значением которого могут быть данные любого из перечисленных выше типов, объекты, значения NULL и значения ошибок ERROR. |
Переменные в программе можно описывать или не описывать. В последнем случае ей будет присвоен тип Variant. Явно описывать переменную можно как в начале блока, так и в любом месте, где возникла необходимость использовать новую переменную. Лучше все переменные описывать явно и, как правило, в начале блока. Для запрета использования переменных, которые не были описаны явно, в начало программы необходимо вставить оператор Option Explicit.
2.2.1. Описание простых переменных
Описание простых переменных имеет следующий синтаксис:
Dim ИМЯ_ПЕРЕМЕННОЙ As ИМЯ_ТИПА
Одним оператором Dim можно описать произвольное число переменных, но конструкция Аs должна быть указана для каждой из них, иначе переменным без Аs будет присвоен тип Variant.
Например.
Dim X As Byte, Z As Integer, С, Cлово As String
Здесь переменная Х - это переменная байтового типа, переменная Z - целого типа, переменная С - типа вариант (по умолчанию), переменная Слово - строкового типа.
2.2.2. Описание констант
Данные, не изменяющиеся внутри программы можно считать константами. Их можно описать следующим образом:
Const ИМЯ_КОНСТАНТЫ As ИМЯ_ТИПА=ПОСТОЯННОЕ_ВЫРАЖЕНИЕ
Например.
Const Pi As Double = 3.141593
2.2.3. Описание массивов
Для хранения векторов, матриц и т.д. можно использовать массивы.
Массив - это структурированный тип данных, который представляет собой последовательность ячеек памяти, имеющих общее имя и хранящих данные одного типа. Каждый элемент массива определяется индексом (номером). Количество элементов в массиве называется размерностью массива. Массив описывается следующей конструкцией:
Dim ИМЯ_МАССИВА(СПИСОК_РАЗМЕРНОСТЕЙ) As ИМЯ_ТИПА
В списке размерностей массива каждое измерение отделяется запятой и определяется заданием нижней и верхней границ изменения индексов.
Например.
Dim X(1 TO 5) As Integer, Y(1 To 10, 1 To 20) As Double
Здесь Х - одномерный массив, состоящий из 5 элементов целого типа, Y - двумерный массив, у которого 10 строк и 20 столбцов с элементами числового типа двойной точности.
2.3. Выражения
Выражения устанавливают порядок выполнения действий над элементами данных. Выражения состоят из операндов и знаков операций. Операндами являются константы, переменные, указатели функций, выражения, взятые в скобки.
2.3.1. Виды операций
Операции бывают арифметические, отношения и логические:
– арифметические операции:
^ возведение в степень,
* умножение,
/ деление,
\ деление нацело,
mod остаток от деления,
+ плюс,
- минус;
– операции отношения:
< меньше,
> больше,
<= меньше или равно,
>= больше или равно,
= равно,
<> не равно;
– логические операции:
Not логическое отрицание,
And логическое "И",
Or логическое "ИЛИ".
Результатом логической операции может быть одно из двух значений:
True ("истина") или False ("ложь").
2.3.2. Приоритет выполнения операций
Если выражение содержит несколько операций, то приоритет их выполнения следующий:
1. Сначала выполняются арифметические операции в таком порядке, как они представлены в таблице 2.2.
Таблица 2.2. Приоритет арифметических операций
Описание операции |
Обозначение в VВА |
Унарный минус (изменение знака) |
- (в начале выражения) |
Возведение в степень |
^ |
Умножение и деление |
*, / |
Деление нацело и остаток от деления |
\, Mod |
Сложение и вычитание |
+, - |
2. Далее операции отношения (они имеют одинаковый приоритет).
3. Последними выполняются логические операции в таком порядке, как они представлены в таблице 2.3.
Таблица 2.3. Приоритет логических операций
Описание операции |
Обозначение в VВА |
Логическое отрицание |
Not |
Логическое "И" |
And |
Логическое "ИЛИ" |
Or |
Если выражение содержит несколько операций одинакового приоритета, то порядок их выполнения слева направо. Чтобы изменить порядок действий в выражении используются круглые скобки.
Выражения бывают арифметические, отношения и логические.
Арифметические выражения записываются с помощью операндов числовых типов и арифметических операций, а результатом является числовое значение. В арифметическом выражении можно использовать стандартные математические функции, которые приведены в таблице 2.4.
Таблица 2.4. Стандартные математические функции VBA
Математическая запись |
Имя функции в VBA |
Описание |
½Х½ |
Abs(число) |
Возвращает значение, тип которого совпадает с типом переданного аргумента, равное абсолютному значению указанного числа. |
arctg X |
Atn(число) |
Возвращает значение типа Double, содержащее арктангенс числа. |
cos X |
Cos(число) |
Возвращает значение типа Double, содержащее косинус угла. |
]X[ |
Int(число) |
Возвращает значение типа, совпадающего с типом аргумента, которое содержит целую часть числа. |
ln X |
Log(число) |
Возвращает значение типа Double, содержащее натуральный логарифм числа. |
eX |
Exp(число) |
Возвращает значение типа Double, содержащее результат возведения числа e (основание натуральных логарифмов) в указанную степень. |
Sign X |
Sgn(число) |
Возвращает значение типа Variant (Integer), соответствующее знаку указанного числа. |
sin X |
Sin(число) |
Возвращает значение типа Double, содержащее синус угла. |
|
Sqr(число) |
Возвращает значение типа Double, содержащее квадратный корень указанного числа. |
tg X |
Tan(число) |
Возвращает значение типа Double, содержащее тангенс угла. |
Выражения отношения определяют истинность или ложность результата при сравнении двух операндов. Сравнивать можно данные любого одинакового типа. Результат операции отношения только логический: True - "истина" или False - "ложь".
Логические выражения. Результатом логического выражения является логическое значение True или False. Простейшими видами логических выражений являются: логическая константа, логическая переменная, логическая функция, выражение отношения. Логические операции выполняются только над операндами логического типа.
Пример. Записать 1£Х£5 и определить значение выражения при Х=3.1
Выражение в VВА будет выглядеть так:
X>=1 And X<=5
Результатом выражения будет True.
Чтобы получить перечень всех математических функций, достаточно набрать имя любой известной математической функции (например, SIN), а затем нажать клавишу F1 и ниже описания выбранной функции выбрать ссылку на Математические функции. В полученном перечне можно получить справку о назначении любой из встроенных математических функций и ее аргументе.
Чтобы получить перечень всех производных математических функций и правила их формирования, достаточно набрать имя любой известной математической функции (например, SIN), а затем нажать клавишу F1 и ниже описания выбранной функции выбрать ссылку на Производные математические функции.
Ниже, в таблице 2.5, приведен список функций, которые могут быть получены с помощью встроенных математических функций.
Таблица 2.5. Производные математические функции
Математическая запись |
Название функции |
Комбинация встроенных функций |
sc X |
Секанс |
1/Cos(X) |
csc X |
Косеканс |
1/Sin(X) |
ctg X |
Котангенс |
1/Tan(X) |
arcsin X |
Арксинус |
Atn(X/Sqr(-X*X+1)) |
arccos X |
Арккосинус |
Atn(-X/Sqr(-X*X+1))+2*Atn(1) |
arcsc X |
Арксеканс |
Atn(X/Sqr(X*X-1))+Sgn((X)-1)*2*Atn(1) |
arccsc X |
Арккосеканс |
Atn(X/Sqr(X*X-1))+(Sgn(X)-1)*2*Atn(1) |
arcctg X |
Арккотангенс |
Atn(X)+2*Atn(1) |
sh X |
Гиперболический синус |
(Exp(X)-Exp(-X))/2 |
ch X |
Гиперболический косинус |
(Exp(X)+Exp(-X))/2 |
th X |
Гиперболический тангенс |
(Exp(X)-Exp(-X))/(Exp(X)+Exp(-X)) |
sch X |
Гиперболический секанс |
2/(Exp(X)+Exp(-X)) |
csch X |
Гиперболический косеканс |
2/(Exp(X)-Exp(-X)) |
сth X |
Гиперболический котангенс |
(Exp(X)+Exp(-X))/(Exp(X)-Exp(-X)) |
arsh X |
Гиперболический арксинус |
Log(X+Sqr(X*X+1)) |
arch X |
Гиперболический арккосинус |
Log(X+Sqr(X*X-1)) |
arth X |
Гиперболический арктангенс |
Log((1+X)/(1-X))/2 |
arsch X |
Гиперболический арксеканс |
Log((Sqr(-X*X+1)+1)/X) |
arcsch X |
Гиперболический арккосеканс |
Log((Sgn(X)*Sqr(X*X+1)+1)/X) |
arcth X |
Гиперболический арккотангенс |
Log((X+1)/(X-1))/2 |
lognX |
Логарифм по основанию N |
Log(X)/Log(N) |