Область видимости переменных
ЛАБОРАТОРНАЯ РАБОТА №4
Основы программирования на языке VBA
Цель работы –Изучение основных операторов и реализации основных конструкций программирования в языке VBA.
Основные этапы работы с программами на VBA в Excel
Для подготовки и выполнения программы на языке VBA требуется выполнить следующее:
- в Excel выбрать из меню команду Сервис – Макрос – Редактор Visual Basic;
- в появившемся окне выбрать из меню команду Insert – Module. Создается модуль, т.е., упрощенно говоря, открывается окно, в котором можно вводить текст программы.
В начале модуля может указываться инструкция Option Explicit. Если она указана, то все переменные, используемые в программе, необходимо будет объявлять в операторе Dim (подробнее об этом см. в подразделе 4.3).
В некоторых случаях, в зависимости от настройки среды VBA, инструкция Option Explicit указывается в начале модуля автоматически. Если программист желает использовать переменные, не объявляя их в операторе Dim, то инструкцию Option Explicit необходимо удалить.
Для запуска программы на выполнение необходимо выбрать из меню команду Run – Run Sub/UserForm.
Простейший пример программы на языке VBA
Пример 4.1 – Программа, возводящаяуказанное число a в указанную степень b.
Sub primer4_1()
‘Первый пример программы на VBA
Dim a As Single, b As Single
a = InputBox(“Введите основание: ”)
b = InputBox(“Введите показатель степени: ”)
x = a^b ‘Возведение в степень
MsgBox(“Результат равен ” & x)
End Sub
Здесь слово Sub обозначает начало процедуры; ее имя в данном случае – primer4_1. Программа на языке VBA всегда состоит из одной или нескольких процедур (в данном случае – из одной).
Символ ‘ (одиночная кавычка) обозначает начало комментария. Текст комментария может быть любым.
Dim – оператор объявления переменных. В данном случае указано, что переменные a и b имеют тип Single. т.е. могут представлять собой как целые, так и дробные числа. Подробнее типы данных и объявление переменных будут рассмотрены в подразделе 4.3.
InputBox – функция для ввода значения переменной. Строка a = InputBox (“Введите основание: ”) означает, что вводится значение переменной a; при этом на экран выводится сообщение “Введите основание:”. Строка x = a^b – оператор присваивания: вычисляется значение правой части (в данном случае переменная a возводится в степень b), и результат присваивается переменной, указанной в левой части (в данном случае – переменной x). Строка MsgBox(“Результат равен ” & x)означает, что на экран выводится сообщение “Результат равен ” и значение переменной x.
Примечание – Знак & в функции MsgBox предназначен для сцепления нескольких элементов данных, которые требуется вывести на экран, в данном примере – строки “Результат равен” и переменной x. Аналогично знак & может использоваться в функции InputBox (примеры такого использования будут приведены далее). Перед знаком & и после него обязательно должны быть указаны пробелы.
В одной строке можно разместить несколько операторов языка VBA. Для этого они разделяются символами «двоеточие». Так, программу из примера 4.1 можно было записать, например, следующим образом:
Sub primer4_1()
‘Первый пример программы на VBA
Dim a As Single, b As Single
a = InputBox(“Введите основание: ”) : b = InputBox(“Введите показатель степени: ”)
x = a^b : MsgBox(“Результат равен ” & x) ‘Возведение в степень и вывод результата
End Sub
В рассмотренном примере использована процедура, называемая подпрограммой. Такая процедура начинается со слова Sub. В программе на VBA всегда имеется хотя бы одна процедура-подпрограмма. Кроме того, в языке VBA имеется еще один вид процедур – функции. Процедура-функция начинается со слова Function. Использование таких процедур будет рассмотрено в подразделе 4.9.
Типы данных. Объявление переменных и констант
Типы данных
Тип данных, указанный для переменной, определяет, какие значения может принимать эта переменная. Основные типы данных, используемые в VBA, приведены в таблице 4.1.
Таблица 4.1 – Основные типы данных в VBA
Тип данных
| Допустимые значения
| Byte (байт)
| от 0 до 255 (только целые)
| Boolean (логический)
| True или False
| Integer (целое)
| от -32768 до 32767 (только целые)
| Long(длинное целое)
| от -2147483648 до 2147483647 (только целые)
| Single(с плавающей точкой, обычной точности)
| от -3,402823×1038 до 3,402823×1038
| Double(с плавающей точкой, двойной точности)
| от -1,79769313486231×10308 до 1,79769313486232×10308
| Date (дата)
| от 01.01.100 до 31.12.9999
| String (строка)
| строки из любых символов, практически неограниченной длины
| Примечание – В данной таблице приведены только основные типы данных. Более подробные сведения о типах данных имеются в литературе по VBA, а также в справочной системе.
Объявление переменных
Тип переменной указывается при ее объявлении. Переменные обычно объявляются в начале программы, до их первого использования, как правило – сразу после оператора начала процедуры (Sub или Function). Основной оператор языка VBA для объявления переменных – оператор Dim.
Пусть, например, требуется, чтобы переменная a могла принимать любые числовые значения (как целые, так и дробные), переменные b и c – только целые (причем как положительные, так и отрицательные), переменная d – только положительные целые значения (причем небольшие), переменная x - строковые значения, переменная y– булевы значения (т.е. только True или False). Эти переменные можно объявить следующим образом:
Dim a As Single, b As Integer, c As Integer, d As Byte, x As String, y As Boolean
После этого, например, попытка присвоить переменной d любое значение, превышающее 255, вызовет сообщение об ошибке из-за несоответствия типов.
Если переменная не объявлена в операторе Dim, то ей назначается тип Variant. В этом случае тип переменной определяется автоматически в зависимости от значения, присваиваемого ей. Например, если переменная z не указана в операторе Dim, то в одной части программы ей может быть присвоено значение z=”Минск” (т.е. строковое значение), а в другой части программы – значение z=5 (т.е. числовое). Использование переменных типа Variant приводит к увеличению затрат памяти и времени выполнения программы, а в некоторых случаях может приводить к ошибкам. Поэтому при разработке сложных программ, как правило, желательно объявлять с помощью оператора Dim все переменные.
Объявление в операторе Dim обязательно для массивов (см. подраздел 4.7), а также для некоторых сложных типов данных, не рассматриваемых в данном пособии.
Рекомендуется объявлять в операторе Dim все переменные, вводимые с клавиатуры, т.е. с помощью функции InputBox. Если, например, переменная z не указана в операторе Dim, и для нее с клавиатуры вводится числовое значение (например, 7), то оно может быть распознано программой не как число, а как строка символов (в данном случае – как строка “7”). Это приводит к ошибкам, например, в операциях сравнения.
Следует обратить внимание, что в операторе Dim тип должен указываться для каждой переменной отдельно. Так, в примере, приведенном выше, объявление b, c As Integer было бы неправильным: тип Integer в этом случае относится только к переменной c, а переменная b остается необъявленной, и ей назначается тип Variant.
Объявление констант
Константы обычно указываются в начале процедуры, как правило – сразу после оператора начала процедуры (Sub или Function) или операторов объявления переменных (Dim). Для объявления констант используется оператор Const.
Пусть, например, в процедуре требуется использовать цену некоторого изделия, равную 250, и вес изделия, равный 3,5. Эти величины удобно задать в начале процедуры в виде констант:
Const cena = 250, ves = 3.5
Изменять константу в программе нельзя. В рассмотренном примере попытка указать в программе оператор cena = cena + 10 или cena = 220 приведет к сообщению об ошибке.
Область видимости переменных
Сложные программы практически всегда состоят из нескольких процедур, а иногда и из нескольких модулей. В зависимости от области видимости, т.е. от того, в какой части программы может использоваться переменная, различают три вида переменных:
- переменные уровня процедуры, используемые только в пределах той процедуры, в которой они объявлены. Такие переменные объявляются оператором Dim в соответствующей процедуре;
- переменные уровня модуля, используемые во всех процедурах модуля. Такие переменные объявляются оператором Dim или Private в начале модуля перед процедурами, т.е. до первого оператора Sub или Function;
- переменные уровня проекта, используемые во всех модулях проекта (т.е. программы, состоящей из нескольких модулей). Такие переменные объявляются оператором Public в начале любого из модулей или в отдельном модуле.
Пример 4.2 – В модуле введена следующая программа:
Private x As Integer
Sub primer4_2a()
Dim y As Integer
x = 5
y = 10
Call primer4_2b
End Sub
Sub primer4_2b()
MsgBox ("x=" & x)
MsgBox ("y=" & y)
End Sub
Здесь x – переменная уровня модуля, используемая во всех процедурах модуля; y – переменная уровня процедуры, используемая только в той процедуре, где она объявлена, т.е. в процедуре primer4_2a.
Пусть запускается процедура primer4_2a. Для этого требуется расположить курсор в пределах текста этой процедуры и выбрать из меню команду Run – Run Sub/UserForm. Переменной x присваивается значение 5, переменной y – значение 10. Затем вызывается процедура primer4_2b. Для этого используется оператор Call (подробнее он будет рассмотрен в разделе 4.8). В этой процедуре на экран выводятся значения переменных x и y. Так как x – переменная уровня модуля, ее значение, присвоенное в любой из процедур (в данном случае – в процедуре primer4_2a), известно и во всех остальных процедурах модуля (в данном случае – в процедуре primer4_2b). Поэтому на экран будет выведено x=5. Переменная y – переменная уровня процедуры, поэтому ее значение, заданное в процедуре primer4_2a, неизвестно в процедуре primer4_2b. На экран будет выведено y=, так как переменной y в процедуре primer4_2b не присвоено никакого значения (т.е. она представляет собой пустую строку).
Оператор If
Общий вид условного оператора Ifследующий:
If условие1 Then
действия, выполняемые, если условие1 верно
Elseif условие2 Then
действия, выполняемые, если условие1 неверно, а условие2 верно
Else
действия, выполняемые, если и условие1, и условие2 неверны
End If
Части Elseif и Else необязательны, поэтому оператор If может иметь следующий вид:
If условие Then
действия, выполняемые, если условие верно
Else
действия, выполняемые, если условие неверно
End If
или следующий:
If условие Then
действия, выполняемые, если условие верно
End If
Если оператор If записывается в одну строку, то слова End If после него не указываются.
Пример 4.3 – Программа запрашивает число и умножает его на 2, если оно меньше 5, или на 3, если оно больше или равно 5.
Sub primer4_3()
Dim x As Single
x = InputBox(“Введите число: ”)
If x < 5 Then x=x*2 Else x=x*3
MsgBox(“Результат равен ” & x)
End Sub
Здесь оператор If записан в одну строку, поэтому слова End If не требуются.
Пример 4.4 – Программа для решения квадратного уравнения.
Sub primer4_4()
Dim a As Single, b As Single, c As Single
a = InputBox ("Введите коэффициент a")
b = InputBox ("Введите коэффициент b")
c = InputBox ("Введите коэффициент c")
d = b ^ 2 - 4 * a * c
If d > 0 Then
x1 = (-b - Sqr(d)) / (2 * a): x2 = (-b + Sqr(d)) / (2 * a)
MsgBox ("x1=" & x1)
MsgBox ("x2=" & x2)
Elseif d = 0 Then
x = -b / (2 * a)
MsgBox ("x=" & x)
Else
MsgBox ("Вещественных корней нет")
End If
End Sub
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|