Пособие Серкова1
.pdf3. Редактор VBA
Разработка модулей (процедур) выполняется в редакторе VBA с использованием одного из двух основных методов.
Автоматическая запись макроса и его редактирование. Этот метод позволяет записать выполняемые пользователем действия, а затем в любое время воспроизвести их, т.е. автоматизировать работу. При записи макроса основное приложение создает процедуру с именем макроса, которую можно просмотреть и отредактировать. Требуется выбрать кнопку «Записать» макрос, выполнить требуемую последовательность действий и остановить макрос. Затем выбрать записанный макрос в списке макросов и нажать кнопку «Изменить». Запускается окно редактора VBA и в окне модуля выводится текст макроса. Запись макросов очень полезна для ознакомления с приемами программирования. Например, не знаете как запрограммировать вычерчивание отрезка прямой линии: включаете запись макроса, выполняете графические операции с помощью панели инструментов «Рисование» и смотрите, как выглядят соответствующие инструкции VBA.
Создание процедур и функций в редакторе. В этом случае на лист Excel выносятся требуемые элементы управления и создаются процедуры, связанные с ними, а также процедуры и функции общего назначения.
На рисунке 1 (с.18) представлено окно проекта, в котором элементы отображаются в виде иерархической структуры, включающей формы, модули, объекты основного приложения (листы книги Excel) и рабочее окно редактора VBA.
Ввод инструкций в редакторе VBA:
В одной строке можно записать одну или несколько инструкций.
Несколько инструкций в одной строке разделяются символом: (двоеточие).
Для продолжения инструкции в следующей строке надо ввести пробел и символ «_» (подчеркивание) в конце строки.
Комментарии начинаются с символа «'» (апостроф), комментарии служат для пояснения, они могут записываться как в отдельных строках, так и стро-
ке с инструкцией.
Инструкция VBA состоит из элементов, среди которых могут присутство-
вать:
1) Ключевое слово – это слово или символ, которые распознаются как элементы языка программирования, например: If, Else, Sub, For и т.д.
11
2)Выражение – комбинация ключевых слов, переменных и констант. Результатом выражения является строка, число или логическое значение.
3)Переменная – поименованная область памяти, отведенная для временного хранения данных, которые могут изменяться при выполнении программы.
4)Массив – поименованная область памяти состоящая из набора элементов (обычно – переменных) определенного типа, каждый элемент имеет свой порядковый номер. Порядковый номер называется индексом элемента в массиве.
5)Константа – поименованный элемент, сохраняющий постоянное значение в течение выполнения программы.
6)Методы и свойства объектов: методы – это действия, которые выполняются объектом, а свойства – это переменные, описывающие характеристики объекта. Методы и свойства записываются через точку после имени объекта, например: TextBox1.Text.
4. Работа с переменными, массивами, константами и со свойствами объектов
Приложение, созданное средствами VBA и встроенное в рабочую книгу Excel, хранит исходные, промежуточные данные и результаты их обработки в таблицах и отдельных ячейках на листах книги Excel, в переменных, в массивах переменных и в виде констант, а также в виде значений свойств объектов – элементов управления. Кроме того, VBA предоставляет средства для чтения данных из файлов и для записи в файлы. Для работы с данными используются инструкции языка программирования, процедуры и функции, но все эти средства рассчитаны на работу с данными определенных типов. Рассмотрим встроенные типы данных VBA (Таблица 2). Возможности конструирования в приложении собственных типов данных поясним позже.
Когда при разработке приложения возникает необходимость в переменной для хранения данных, ее описывают в модуле перед процедурами или в конкретной процедуре. В первом случае переменная будет доступна всем процедурам модуля (как контейнер общего пользования), а если в ее описании применено ключевое слово Public, то переменную смогут использовать даже процедуры других модулей. Такую переменную называют глобальной. В ней удобно размещать данные, требуемые многим процедурам. Переменная, опи-
12
санная внутри процедуры, называется локальной – она используется только в этой процедуре, а в других могут быть переменные с таким же именем.
Таблица 2 – Встроенные типы данных VBA
Тип |
Размер |
Разрядность |
Диапазон, пояснение |
данных |
в |
(цифр) |
|
|
байтах |
|
|
Boolean |
2 |
1 |
True, False – логические значения |
Byte |
1 |
≤ 3 |
0, 255 – целые положительные числа |
Integer |
2 |
≤ 5 |
-32768, 32767 – целые числа |
Long |
4 |
≤ 10 |
-2147483648, 2147483647 – длинные целые |
Single |
4 |
≤ 7 |
-3.402823.1038, -1.401298.10-45– отрицательные числа |
|
|
|
1.401298.10-45, 3.402823.1038 – положительные числа |
Double |
8 |
≤ 15 |
Действительные числа с двойной точностью |
Currency |
8 |
≤ 19 |
Действительные числа с 4 знаками после десятичной |
|
|
|
точки. Используются для точных денежных расчетов |
Date |
8 |
|
01.01.0100, 31.12.9999 – даты |
String |
1+L |
|
Строка из L символов; L≤ 65535 |
Object |
4 |
|
Объект – фактически, ссылка на него, т.е. адрес его |
|
|
|
размещения в оперативной памяти |
Variant |
|
|
Может принимать любой тип данных, т.е. настройка |
|
|
|
на тип операнда происходит во время исполнения |
|
|
|
инструкций или процедур |
|
|
|
|
Инструкция, содержащая описание переменной, имеет вид: Dim (ИмяПеременной) As (ТипДанных)
Для определения глобальной переменной вместо Dim пишут Public.
5. Основные инструкции языка Visual Basic
Сгруппируем основные инструкции языка Visual Basic по типу операций:
присваивания, в том числе с выполнением математических операций в правой части инструкции;
проверки условий, управления последовательностью исполнения инструкций, организации циклов;
инструкции для работы с файлами.
Последняя группа инструкций в этом кратком пособии не рассматривается. При необходимости с ними можно познакомиться самостоятельно [2, 4].
13
Инструкция присваивания предписывает найти значение выражения, заданного в ее правой части, и присвоить результат переменной, идентификатор которой расположен в левой части. Например, присвоить переменной x значение 2. Это можно записать: x=2. В следующем примере значение переменной x увеличивается на 2: x = x + 2.
Рассмотрим математические операции, которые используются в выражениях, стоящих в правой части инструкций присваивания. Среди возможных операций можно выделить арифметические, конкатанации строк, сравнения и логические.
Арифметические операции выполняются над числами, и их результатом являются числа. Они перечислены в таблице 3. При программировании формул необходимо учитывать приоритеты операций и (в случае необходимости) использовать скобки, как это принято в математике.
Поясним таблицу 3. Смена знака имеет место, когда минус ставится перед именем переменной, константы или перед числом. Например: F=CX*(-G^2), если CX=3, а G=1.5, то F = -6.75. Чтобы убедиться в правильности результата, достаточно на листе Excel разместить кнопку CommandButton1 и поле TextBox1, а в событийную процедуру CommandButton1_Click включить инструкции:
Dim I As Integer, F As Single F = 3 * (-1.5 ^ 2)
I = 3 * (-1.5 ^ 2)
TextBox1.Text = "F=" & Format(F, "0.00") & "I=" & Str(I)
Выйдя из режима конструктора и нажав кнопку, увидим в поле TextBox1 результаты.
Все результаты примеров легко проверить, подставляя в текст приведенной только что процедуры формулы вычисления I и F. Из этих примеров должно быть понятно, что результат арифметических операций зависит также от типа переменной, которой он присваивается, ведь переменная целого типа не может хранить число с плавающей точкой, поэтому перед записью в ячейку I результат округляется.
Приведенная выше процедура иллюстрирует и конкатанацию (&) – слияние строк. К строке «F=»прибавляется строка, содержащая отформатированное значение F (с двумя цифрами после десятичной точки). К этой объединенной строке добавляется «I=» и далее – превращенное в последовательность символов (в строку) число I.
14
Таблица 3 – Арифметические операции
Операция |
Содержание операции |
Приоритет |
|
|
|
^ |
Возводит первое арифметическое выражение в степень, |
1 |
|
задаваемую вторым арифметическим выражением |
|
|
|
|
- |
Знак минус ставится перед именем переменной, константы |
2 |
|
или перед числом |
|
|
|
|
* |
Перемножает два арифметических выражения |
3 |
|
|
|
/ |
Делит первое арифметическое выражение на второе |
3 |
|
|
|
\ |
Округляет два арифметических выражения до целых значений и |
4 |
|
делит первое число на второе. Результат округляется до целого |
|
|
|
|
Mod |
Округляет оба арифметических выражения до целых чисел, де- |
5 |
|
лит первое число на второе и возвращает в качестве результата |
|
|
остаток |
|
|
|
|
+ |
Складывает два арифметических выражения |
6 |
|
|
|
- |
Вычитает из первого арифметического выражения второе |
6 |
|
|
|
Операции сравнения используют для сравнения чисел, значений переменных, констант, ячеек таблиц. Результат операции сравнения имеет тип Boolean и может принимать значение True или False (Таблица 4).
Таблица 4 – Операции сравнения |
|
||
|
|
|
|
Операция |
Наименование |
Пример (R имеет тип Boolean) |
Результат ® |
= |
Равно |
R = (10=5) |
False |
> |
Больше |
R = 10>5 |
True |
< |
Меньше |
R = 10<5 |
False |
>= |
Больше |
R = “a” >= “b” |
False |
|
или равно |
|
|
<= |
Меньше |
R = “a” <= “b” |
True |
|
или равно |
|
|
<> |
Не равно |
R = “a” <> “b” |
True |
В логических операциях не только результат, но и операнды имеют тип Boolean.
Таблица 5 – Логические операции
Операция |
Наименование |
And |
Логическое умножение |
Or |
Логическое сложение |
Xor |
Исключающее Or (или) |
Not |
Логическое отрицание |
15
Поясним назначение таких операций на простом примере. Пусть переменная типа Boolean с именем R должна принимать значение True, если точка с координатами X,Y попадает в прямоугольную область, ограниченную координатами X1,X2 и Y1,Y2. Если точка за пределами прямоугольника, то R = False. Применив логическую операцию AND (И), вычислим значение R:
R = (X>=X1) AND (X<=X2) AND (Y>=Y1) AND (Y<=Y2).
Смысл этой операции в том, что если и первое выражение (X больше или равно X1) истинно, и второе, и третье, и четвертое истинно, то R = True. Если один из операндов логической операции AND представляет собой ложное выражение (утверждение), то и результатом будет False.
Кроме операции AND, к числу часто используемых логических операций относятся OR и NOT. Первая из них дает результат True, если истинно хотя бы одно выражение, являющееся операндом. Операция NOT изменяет результат на противоположный, подобно смене знака в арифметическом выражении. Вычислим R с помощью этих операций:
R = NOT ((X<X1) OR (X>X2) OR (Y<Y1) OR (Y>Y2)).
Выражение, стоящее в скобках после операции NOT, истинно (True), если точка левее или правее, или ниже, или выше воображаемого прямоугольника, т.е. если точка в него не попала. В этом случае R будет иметь значение False благодаря логическому отрицанию NOT.
Несколько реже используются логические операции XOR (исключающее ИЛИ), EQV (эквивалентность) и IMP (импликация). Первая из них дает результат True, если только одно из выражений-операндов имеет результат True. Результатом операции EQV будет True, если выражения-операнды дают одинаковый результат. Результатом IMP будет True, если выражения-операнды дают разные результаты.
Генератор случайных чисел (Randomize, RND)
Иногда в программе нужно где-нибудь применить случайное число. Для этого в Бэйсике существует функция RND: она возвращает число между 0 (включительно) и 1 (исключительно), но какое именно - чистая случайность!
Чтобы получить случайное значение между 0 и каким-нибудь другим числом, например, между 0 и 256, случайное число можно просто умножить на это число: RND * 256 выдаст случайное число между 0(включительно) и 256 (исключительно). Компьютер берёт случайные числа из, так сказать, одинаково рассортированных карт
16
Таблица 6 – Часто используемые встроенные функции Visual Basic
Функция |
Содержание арифметической функции |
1 |
2 |
Abs(x) |
Возвращает значение, тип которого совпадает с типом пе- |
|
реданного аргумента Х, равное абсолютному значению |
|
указанного числа |
Atn(x) |
Возвращает значение типа Double, содержащее арктангенс |
|
числа Х |
Cos(x) |
Возвращает значение типа Double, содержащее косинус |
|
угла Х |
Exp(x) |
Возвращает значение типа Double, содержащее результат |
|
возведения числа е (основание натуральных логарифмов) в |
|
указанную степень |
Fix(x) |
Возвращает значение типа, совпадающего с типом аргу- |
|
мента, которое содержит целую часть числа, ближайшее |
|
отрицательное целое число, большее либо равное указан- |
|
ному Х |
Int(x) |
Возвращает значение типа, совпадающего с типом аргу- |
|
мента, которое содержит целую часть числа, ближайшее |
|
отрицательное целое число, меньшее либо равное указан- |
|
ному Х |
Log(x) |
Возвращает значение типа Double, содержащее натураль- |
|
ный логарифм числа Х |
Rnd(x) |
Возвращает значение типа Single, содержащее случайное |
|
число |
Sgn(x) |
Возвращает значение типа Variant (Integer), соответст- |
|
вующее знаку указанного числа. Обязательный аргумент: |
|
число Х может представлять любое допустимое числовое |
|
выражение. Возвращаемое значение: Х>0, то Sgn(x) воз- |
|
вращает 1; если Х равняется нулю, то 0; если X<0, то -1 |
Sin(x) |
Возвращает значение типа Double, содержащее синус угла |
|
Х |
Sqr(x) |
Возвращает значение типа Double, содержащее квадрат- |
|
ный корень указанного числа |
Tan(x) |
Возвращает значение типа Double, содержащее тангенс уг- |
|
ла Х |
Категория |
Примеры функций |
функций |
|
|
|
Строковые |
LCASE( ) – преобразование строки в строчные буквы |
|
UCASE( ) – преобразование строки в заглавные буквы |
|
LEN( ) – определение длины строки и др. |
|
INSTR( ) – позиция первой встречи одной строки внутри |
|
другой |
17
Окончание табл. 6
1 |
|
2 |
Даты и |
вре- |
DATE( ) – текущая дата |
мени |
|
TIME( ) – текущее время |
|
|
NOW( ) – текущая дата и время |
|
|
DAY( ) – номер дня года и др. |
Преобразо- |
CINT( ) – действительного числа в целое (с округлением) |
|
вания |
|
CSTR( ) – числа в строку символов |
типов |
дан- |
CVAR( ) – преобразование в тип данных VARIANT |
ных |
|
FORMAT( ) – форматирование данных, формирование |
|
|
строк |
|
|
VAL( ) – преобразование строки символов в число и др. |
Создание интерфейса пользователя.
Ход работы.
1)Меню Вид/Панели инструментов/Visual Basic.
2)Кнопкой в виде молоточков вывести на экран панель, содержащую
элементы управления.
3)Перейти в режим конструктора – кнопка с изображением треугольника и карандаша.
4)Кнопкой в виде листочка с указательным пальцем вывести окно
Свойства.
Рисунок 1 – Интерфейс пользователя
18
Создание программы на Visual Basic состоит из двух взаимосвязанных процессов: а) конструирования формы, с которой пользователь будет вести диалог; б) кодирования, определяющего характер работы программы.
Форма – это окно будущего приложения. Когда начинаем создавать новый проект, Visual Basic создает пустую форму и присваивает ей заголовок UserForml. На форме изображаются различные части программы – объекты или элементы управления: окна, списки, кнопки, переключатели, линейки прокрутки и т.д. Сама форма рассматривается Visual Basic как объект.
Элементы управления создаются на основе шаблонов, расположенных в окне инструментария. В момент создания формы можно изменять положение, размеры и другие атрибуты объектов, однако объекты остаются неактивными, то есть с помощью их нельзя выполнить никаких операций.
Рисунок 2 – Создание формы в редакторе VBA
19
При запуске законченного приложения Visual Basic убирает весь инструментарий. Компоновка элементов окна формы фиксируется, объекты управления можно активизировать и работать с программой как задумано. Приложение берет управление на себя, a Visual Basic исполняет операторы программы.
5.1. Окно свойств
Понятие Properties в Visual Basic связано с механизмом формального описания атрибутов объекта. Окно свойств активно только на этапе проектирования приложения.
Каждый объект Visual Basic обладает своими специфическими свойствами, параметры которых определяют внешний вид и поведение объекта.
В верхней части окна свойств (рисунок 5.3) находится раскрывающийся список, содержащий имена и типы объектов, включенных в приложение, который называется списком объектов. Изначально здесь содержится лишь информация о форме, но по мере размещения на форме элементов управления Visual Basic регистрирует их в этом списке.
Рисунок 3 – Список свойств
Под списком объектов расположен список свойств с их текущими значениями для выбранного объекта. Список свойств может быть представлен в ал-
20