Алфавит, словарь, идентификаторы
ВВЕДЕНИЕ В VBA ДЛЯ ПРИЛОЖЕНИЙ MS OFFICE
Подобно другим языкам программирования VBA позволяет создавать полностью автоматические программные продукты. Однако, прежде всего, VBA – это инструмент разработки приложений MS Office. Дело в том, что VBA является общей языковой платформой для всех приложений MS Office. Поэтому он встроен во все приложения: Excel, Word, Access и др. Это с одной стороны значительно расширяет функциональные возможности каждого приложения, а с другой позволяет объединять данные из нескольких приложений в одном документе. Например, можно открыть базу данных Access, проанализировать ее данные с помощью встроенных или созданных средств в Excel, а результаты анализа вывести в документ Word.
Язык VBA является производным от языка Visual Basic (VB). Синтаксис этих языков практически одинаков. Основное различие их заключается в том, что VB имеет собственную среду разработки, а VBA использует среду, встроенную в приложение MS Office – редактор VBA. В силу этого, с помощью VB можно создать полностью самостоятельный программный продукт, в то время как проекты VBA могут быть выполнены только с помощью приложения, которое поддерживает VBA.
БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКА VBA
Алфавит, словарь, идентификаторы
Любая программа формируется с помощью конечного набора знаков, из которых состоит алфавит языка.
Алфавит языка VBA образуют:
- прописные и строчные буквы латинского алфавита;
- десятичные цифры;
- знак подчеркивания “_”;
- специальные символы:
+ плюс
- минус
* звездочка
/ дробная часть
= равно
> больше
< меньше
[ ] квадратные скобки
( ) круглые скобки
{} фигурные скобки
. точка
, запятая
: двоеточие
; точка с запятой
´ знак апострофа
“” кавычки
# номер
& амперсанд
$ знак денежной единицы
^ тильда
\ слеш
% знак процента
! восклицательный знак
? вопросительный знак
пробел (обозначения нет)
Комбинации специальных символов могут образовывать составные символы:
<> не равно
<= меньше или равно
>= больше или равно
. . диапазон значений
: = присваивание
Знаки алфавита используются для составления слов.
Слова – неделимые последовательности знаков алфавита, отделенные друг от друга разделителями, и несущие определенный смысл в программе.
Разделителями могут использоваться символ пробела, комментарий или символ конца строки.
Слова подразделяются на две группы:
- ключевые слова;
- идентификаторы пользователя.
Ключевые слова являются составной частью языка, имеют фиксированное начертание и раз, и навсегда определенный смысл. Ключевые слова распознаются как элемент языка VBA. К ключевым словам относятся имена инструкций, типов данных, методов, свойств, операторов, встроенных констант, объектов и стандартных функций.
Идентификаторы пользователя применяются для обозначения переменных, констант, процедур, функций, различных объектов, определенных самим пользователем.
При выборе имен идентификаторов необходимо руководствоваться следующими правилами:
Ø Длина имени не должна превышать 255 символов;
Ø Имя может содержать любую комбинацию букв, цифр и допустимых символов, начинающуюся только с буквы;
Ø Допустимыми символами являются знак подчеркивания “_”, который может быть размещен в любом месте идентификатора, кроме первого, единичные знаки %, !, $, &, @ могут располагаться только в конце идентификатора;
Ø Имена должны быть уникальны внутри области, в которой они определены;
Ø Имена не должны совпадать со служебными словами VBA и именами встроенных функций и процедур.
Например:
§ допустимые имена:X15, F_I_O, NomerTel, A%, B@;
§ недопустимые имена: 15x, Ф.И.О., №Tel, A%_1, B@@.
Кроме этого, имя должно быть не только правильным, но и понятным, а еще лучше, если оно отражает назначение объекта.
Поскольку регистр букв не имеет значение, то лучше пользоваться такими именами PlanWupyska, Plan_wupyska , нежели Planwupyska. Или выражение R=F/P станет более понятным, если его заменить таким:
Procent = Fakt / Plan
Идентификаторы VBA не «чувствительны» к состоянию регистра: написание идентификатора прописными или заглавными буквами не имеет значения. Например, идентификаторы пользователя Name и name или Sin и sin для VBA представляют собой одно и то же. Если же переменная объявлена явно, то все обращения к идентификатору переменной, преобразуются в соответствии с ее объявлением.
Типы данных
Понятие типа является одним из фундаментальных понятий любого языка программирования. При решении любой задачи требуются данные. Каждый элемент данных или объект (константа, переменная, выражение, функция), которым оперирует программа, относится к определенному типу.
Тип данных определяет:1) множество значений, которые могут принимать объекты программ, 2) совокупность операций, допустимых над этими объектами, и 3) объем выделяемой памяти и форму представления данных в ней.
В VBA можно обрабатывать числа, строки, логические значения, даты и объекты, использовать наиболее общий тип данных – тип Variant, а также создавать собственные типы данных. Наиболее часто используемые типы данных представлены в табл.1.
Тип Variant, использованный для описания некоторой переменной, позволяет присваивать и обрабатывать с ее помощью данные разных типов. С одной стороны это хорошо: не надо помнить об ограничениях на множество допустимых значений и операций. Но это чревато ошибками, значительно увеличивает время обработки переменных и необходимые для выполнения программы ресурсы памяти.
Таблица 1 | |||||
Тип данных | Описание | Размер, байт | Диапазон | ||
Byte | Байт | От 0 до 255 | |||
Boolean | Логический | True или False | |||
Integer | Целое | От -32 768 до 32 767 | |||
Long | Длинное целое | От -2 147 473 648 до 2 147 483 647 | |||
Single | С плавающей точкой обычной точности | От -3,402823Е38 до - 1,401298Е-45 для отрицательных чисел От 1,401298Е-45 до 3,402823Е38 для положительных чисел | |||
Currency | Денежный | От -922337230685477,5808 до 922337203685477,5807 | |||
Date | Даты и время | С 1 января 100 года до 31 декабря 9999 года | |||
Variant | Числовые подтипы | 16 байт + N байт (согласно типу) | Переменная любого числового типа | ||
Переменные
Переменными называются элементы данных, значения которых при выполнении программы могут принимать различные значения в соответствии с указанным типом.
Для объявления переменных обычно используется инструкция объявления Dim.
Синтаксис:
Dim имяПеременной [As тип] [, имяПеременной [As тип] …
Элементы синтаксиса:
имяПеременной –
Обязательный. Имя переменной, удовлетворяющее стандартным правилам именования переменных.
тип –
Необязательный. Тип данных переменной. Для каждой описываемой переменной следует использовать отдельное предложение As тип. В случае отсутствия параметра переменная будет иметь тип Variant.
Например, инструкции
Dim A As Integer
Dim B As Single
Dim C As Boolean
описывают переменные А – целого, В – вещественного и С – логического типа.
Это же объявление переменных можно выполнить с помощью одной инструкции Dim:
Dim A As Integer, B As Single, C As Boolean
При объявлении любой переменной VBA выполняет ряд действий:
· В памяти выделяется область, размер которой определяется в соответствии с типом объявляемой переменной.
· Выделенная область памяти связывается с идентификатором объявляемой переменной. При обращении к переменной фактически происходит обращение к области памяти, где хранится текущее значение переменной.
· Переменная инициализируется, т.е. в соответствии с типом объявляемой переменной ей присваивается начальное значение. Число инициализируются значением 0, переменные Boolean – значением False, строки – пустыми строками (не содержат символов).
Объявить переменную можно в любом месте программы, но обязательно до ее использования. Однако правила хорошего стиля программирования все-таки предписывают делать это в самом начале программы в ее, так называемой, описательной части.
Переменные, описанные с помощью инструкции Dim, называются явно описанными.
Переменные являются неявно описанными, если 1) они используются в программе без объявления их с помощью инструкции Dim или 2) в инструкции объявления типа переменной был опущен параметр тип.Неявно описанные переменные связываются с типом Variant, а затем они используются как любые другие переменные этого типа. Однако, при этом, во-первых, потребуется больше ресурсов памяти по сравнению с другими типами данных и времени, т.к. компилятор вынужден сначала определить настоящий тип переменной, затем преобразовать его к этому типу, и только потом использует в вычислениях. При работе с достаточно большими программами это может привести к значительной потере во времени и ресурсах. Во-вторых, не описывая переменные явно можно получать неправильные ответы или ситуацию «бесконечный цикл» всего лишь из-за орфографической ошибки или описки.
Например, при написании процедуры Prim допущена описка: вместо инструкции K=K+10 введена инструкция K=K1+10. В результате будет искажен результат.
С переменной будет связан тип Variant и тогда, когда при объявлении переменной была допущена ошибка.
Например, инструкции
Dim A, В, С As Integer
Dim D As Variant
описывают переменные A, В и D типа Variant. Причем переменная D описана явно, а переменные A и В неявно.Для того чтобы все три переменные первой инструкции были объявлены как целые, необходимо было написать такую инструкцию:
Dim A As Integer, В As Integer, С As Integer
Чтобы избежать части ошибок, VBA позволяет наложить требование на явное описание всех переменных в модуле. В этом случае при использовании необъявленной переменной, во время компиляции генерируется ошибка, которую можно легко исправить.
Чтобы наложить требование на явное описание переменных, необходимо в разделе описаний модуля указать директиву компилятора Option Explicit:
Option Explicit
Sub Prim()
Dim K As Byte
K=K+10
. . .
End Sub
Константы
Константами называются элементы данных, значения которых определены при их описании и в процессе выполнения программ не изменяются.
В VBA существуют константы двух типов:
- Литеральные. Это константы, определяемые их значениями и используемые в выражениях. Различают числовые (3.14; 16; 4.2Е+02), строковые (“ГЭФ”; “Иванов И.И.”) и логические константы (True, False).
- Именованные, т.е. имеющие собственные уникальные идентификаторы. Они в свою очередь разделяются на
Встроенные (стандартные) константы. Их имена и количество определяются используемым приложением. В MS Excel их очень много. Например, к встроенным константам относятся vbOKOnly, fmAltMask и т.д.
Пользовательские константы объявляются самим пользователем с помощью инструкции Const. В момент объявления пользовательским константам присваиваются значения. Попытка переопределения значения константы с помощью оператора присваивания вызывает ошибку.
Сокращенный синтаксис инструкции Const:
Const ИмяКонстанты [As тип] = выражение
Элементы синтаксиса:
ИмяКонстанты –
Обязательный. Имя константы, удовлетворяющее стандартным правилам именования.
тип –
Необязательный. Связывает объявляемую константу с одним из поддерживаемых типов данных. Для каждой описываемой константы следует использовать отдельное предложение As тип. В случае отсутствия параметра тип константы определяется типом выражения.
выражение –
Обязательный. Литерал (числовое, строковое или логическое значение), другая константа или любое сочетание, которое включает арифметические и логические операторы.
Например, следующие инструкции
Const Year As Integer=2003
Const Plan=129
объявляют две целочисленные константы: Year и Plan. Первая константа имеет явно описанный целый тип, а тип второй определяется ее значением.
Инструкция
Const NameGrup = “МТ - 21”
осуществляет объявление строковый константы NameGrup, которой присвоено значение строкового литерала МТ – 21.
Логическая константа Flag, с которой связывается значение True (Истина), может быть объявлена следующим образом:
Const Flag = True
Операции и операторы VBA
В программах на VBA можно использовать стандартный набор операций над данными. Для обозначения различных операций используются соответствующие операторы. Например, оператор “+” выполняет операцию сложения двух чисел или выражений, являющихся операндами. Большинство операций VBA требуют наличия двух операндов.
Все операции VBA можно разделить на следующие группы:
- арифметические;
- отношения;
- конкатенации (сцепления);
- логические.
Им соответствуют группы операторов с аналогичными названиями.
Арифметические операторы используются для выполнения математических вычислений.
Таблица 2 | ||||||
Оператор | Выражение | Тип операнда | Тип результата | Операция | Пример | Возвращаемое значение |
+ | A+B | Числовой | Числовой | Сложение | y=4+2 | 6 |
_ | A-B | Числовой | Числовой | Вычитание | y=4-2 | 2 |
-A | Числовой | Числовой | Изменение знака выражения | y=-x | Для x=4 y=-4 Для x=-4 y=4 | |
* | A*B | Числовой | Числовой | Умножение | y=4*2 | 8 |
/ | A/b | Числовой | Числовой | Деление | y=10/4 | 2.5 |
^ | A^B | Числовой | Числовой | Возведение в степень | y=2^2 y=3^3^3 y=(-5)^3 | 4 19683 -125 |
\ | A\B | Числовой | Числовой | Целочисленное деление | y=11\4 y=9\3 y=100\3 | 2 3 33 |
Mod | A Mod B | Числовой (перед выполнением операции округляется до целого) | Числовой | Остаток от целочисленного деления | y=10 Mod 5 y=12 Mod 3 y=12 Mod 4.3 y=12.6 Mod 5 | 0 1 0 3 |
Операторы конкатенации используются для объединения строковых значений. С их помощью можно формировать строки, состоящие из компонент различного типа.
VBA имеет два оператора для реализации операции конкатенации. Это оператор «+» и «&».
Поскольку оператор «+» используется и для обозначения операции сложения и конкатенации, то в последнем случае предпочтительнее использовать оператор «&», так как он однозначно определяет требуемую операцию.
Таблица 3 | ||
Оператор | Пример | Возвращаемое значение |
+ | y= “46”+ “8” y= 46+ 8 y= “Сегодня ”+1+ “ Мая” | “468” - строка 54 - число “Сегодня 1 Мая” |
& | y= “46”& “8” y= 46 & 8 y= “Сегодня ”& 1& “ Мая” | “468” - строка “468” - строка “Сегодня 1 Мая” |
Таблица 4 | |||
Оператор | Операция | Пример | Результат |
< | Меньше | 2<5 2<2 | True False |
<= | Меньше или равно | 2<=2 2<=0 | True False |
> | Больше | 5>2 2>5 | True False |
>= | Больше или равно | 2>=2 5>=2 | True False |
= | Равно | 2=2 2=5 | True False |
<> | Не равно | 2<>5 2<>2 | True False |
Операторы сравнения (табл.4) позволяют сравнить два выражения. Они используются при написании простых логических выражений. Результатом сравнения может быть значение True (истина), False (ложь). Например:
Ø a <= N
Ø x <> (2*z –b)/3
Ø i +1 > j -5
Результатом выполнения логических операторов (табл. 5)также является логическое значение True(истина) или False(ложь). Однако логические операторы используются при написании сложных логических выражений. Например:
Ø i <= N and W
Ø (z + 1) <> (x >3) and (y < 5)
Ø a > 0 or (b < 0 and c = 0) or g <> a + b
Таблица 5 | |||||
Оператор | Операция | Выражение | Значение А | Значение В | Результат |
And | Конъюнкция (логическое умножение или логическоеИ) | A And B | True True False False | True False True False | True False False False |
Or | Дизъюнкция (логическое сложение или логическое ИЛИ) | A Or B | True True False False | True False True False | True True True False |
Not | Логическое отрицание | Not A | True False | False True | |
Xor | Исключающее ИЛИ | A Xor B | True True False False | True False True False | False True True False |
Встроенные функции VBA
VBA предоставляет большой набор встроенных функций и процедур, использование которых существенно упрощает программирование. Все функции можно разделить на следующие основные категории: математические функции, функции проверки определения и преобразования типов, преобразования форматов, обработки строк, времени и даты, финансовые функции.
Рассмотрим некоторые математические функции (табл.6).
Таблица 6 | ||||
Действие | Ключевое слово, синтаксис | Функция | Пример | Примечание |
Тригонометрические вычисления | Atn (x) | Арктангенс числа | pi=4*Atn(1) | Вычисление значения pi |
Cos (x) | Косинус угла | M=1/cos(ugol) | Вычисление секанса | |
Sin (x) | Синус угла | M=1/sin(ugol) | Вычисление косеканса | |
Tan (x) | Тангенс угла | M=1/tan(ugol) | Вычисление котангенса | |
Общие вычисления | Exp(x) | Возведение числа е в степень x | M=Exp(A) | Вычисление еA |
Log (x) | Логарифм натуральный | M=Log(A) | Вычисление Ln(A),A>0 | |
Sqr (x) | Квадратный корень числа | M=Sqr(A) | Вычисление ,A>=0 | |
Вычисление абсолютного значения | Abs (x) | Абсолютное значение числа | M=Abs(A) | Вычисление |A| |
Выражения
Выражение – это комбинация операндов (констант, переменных, обращений к функциям), круглых скобок и знаков операций (операторов).
Операции определяют действия, которые надо выполнить над операндами. Например, в выражении (A + Sin(x) - 6) - A, Sin(x) и 6 – операнды; “+” и “-” – знаки операций (операторы) сложения и вычитания соответственно.
В простейшем случае выражение может состоять из одной переменной или константы.
Например:
Ø 123 (выражение – значение константы)
Ø Name (выражение – имя переменной или константы)
Круглые скобки в выражениях используются для управления порядком выполнения операций.
В зависимости от возвращаемого результата и используемых в выражении операторов различают числовые, строковые, логические выражения, выражения типа даты и объектные выражения.
Числовое выражение – это любое выражение, значением которого является число.
В числовых выражениях могут быть использованы только арифметические операции.
Например:
Ø Sin(x) + 3
Ø (2*x + b^5)/2
Ø (A + 1)\(x^2 + b) Mod (A + B)
Ø I Mod 2
Ø (Cos(x + 1) ^3) ^2
Пример 1.1. Вычислить значение выраженияy=sin ( -1)
Фрагмент программы:
y = Sin(Sqr(x + 2) -1)
Пример 1.2. Вычислить значение выражения
Фрагмент программы:
y= (2*x + a) / (b-1) + Abs(x + a) ^ (1/3)
Пример 1.3. Вычислить значение десятичного логарифма для выражения (x+1), т.е. y=lg(x+1)
Т.к. в VBA существует встроенная функция вычисления значения только натурального логарифма числового выражения, то для решения этой задачи потребуется формула приведения натурального логарифма к десятичному: Lg(x) =ln(x)/ln (10). Поэтому фрагмент программы будет выглядеть так:
y = log(x+1) / log (10)
Строковое выражение – любое выражение, значением которого является последовательность символов.
Операндами выражения могут быть функции, возвращающие строковые значения, строковые константы в явном представлении (литералы), строковые константы, строковые переменные.
В строковых выражениях могут быть использованы операции конкатенации.
Например:
Ø “1”& “ Мая”
Ø Fam & Im & Otch
Ø Kurs + Gruppa
Ø “Процент выполнения плана -” & Procent
Ø “Количество чисел, больших ” & Z & “ равно ” & K
Логическое выражение – любое выражение, возвращающее логическое значение. При составлении логического выражения могут быть использованы все виды операций.
Например:
Ø A>=B
Ø (x+1)<y
Ø (A(i)>x) And (A(i)<y)
Ø Name1=Name
Ø Sin(x+1)>(x+2)/3
Логическое выражение может быть простым или сложным.
Простые логические выражения могут содержать идентификаторы констант, переменных, обращений к функциям, числовые значения, арифметические и алгебраические выражения и обязательно какой-либо один из знаков отношения.
Например:
Ø x=2
Ø x+2>=3/(y+1)
Ø i<=N-i+1
Ø j<=M
Ø x>Z
Сложные логические выражения образуются объединением простых логических выражений с помощью логических операций.
Наиболее часто используются логические операции And (И) и Or (ИЛИ).
Например, если необходимо определить принадлежит ли значение переменной z промежутку [x;y), то используется сложное логическое выражение, состоящее из двух простых: z>=x и z<y, - объединенных логической операцией And (И):
(z>=x) And (z<y) или z>=x And z<y
Если значение переменной z принадлежит заданному промежутку, то выражение принимает значение True, в противном случае значение выражения будет – False.
Если значение переменной z не должно принадлежать промежутку [x;y), то условие записывается с помощью следующего логического выражения
(z<x) Or (z>=y) или z<x Or z>=y
Если значение переменной z не принадлежит заданному промежутку, выражение принимает значение True, в противном случае значение выражения будет – False.
Примеры сложных логических выражений:
Ø (i<=N) and (W=1)
Ø ((a>0) or (b<0)) and (c<>0)
Ø x>0 And (y>0 or z<0)
Ø (i>N) Or (i<M)
Ø c>3 or c>=10
Приоритеты операций
Таблица 7 | |
Приоритет | Оператор (операция) |
Вызов функции и скобки | |
^ (возведение в степень) | |
- (смена знака) | |
*, / (умножение, деление) | |
\ (целочисленное деление) | |
Mod (остаток от целочисленного деления) | |
+, - (сложение, вычитание) | |
&, + (слияние строк) | |
=, <>, <, >, <=, >= (операции отношения) | |
Not (логическое отрицание) | |
And (логическое И) | |
Or (логическоеИЛИ) | |
Xor (исключающееИЛИ) |
Если выражение содержит несколько операторов (знаков операций), то они выполняются в определенном порядке. Порядок выполнения операций называют порядком старшинства или приоритетом операций. Приоритеты выполнения операций приведены в табл.7.
Стоящие рядом в выражении операторы умножения и деления, сложения и вычитания, а также операторы сравнения выполняются слева направо. Операторы внутри круглых скобок всегда выполняются раньше, чем операторы вне скобок. Порядок выполнения операторов, стоящих внутри скобок, определяется приоритетом операций.
Оператор присваивания
Оператор присваивания осуществляет присваивание результата вычисления некоторого выражения переменной или константе.
Синтаксис:
<идентификатор> = <выражение>
Элементы синтаксиса:
идентификатор –
бязательный. Идентификатор переменной, константы или свойства объекта, удовлетворяющий стандартным правилам именования.
выражение –
бязательный. Любое выражение, удовлетворяющее требованиям его составления.
Оператор присваивания предписывает сначала вычислить значение выражения, заданное в его правой части, и присвоить полученный результат идентификатору, имя которого указано в левой части оператора. В результате, например, действия следующих операторов присваивания
x=3
y=2+x-x^2
переменной y будет присвоено значение, равное -4.
Ограничений на тип идентификатора и выражения в операторе присваивания нет. Т.е. идентификатору может быть присвоено значение любого выражения, даже если их типы не совпадают. Исключение: значение строкового выражения нельзя присвоить идентификатору не строкового типа.
При вычислении значения выражения тип результата выбирается в зависимости от типа того компонента выражения, который позволяет получить наиболее точное значение. Затем результат полученного вычисления преобразуется в соответствии с типом идентификатора.
Порядок численных типов от наименее до наиболее точного: Byte, Integer, Long, Single, Currency.
Например, переменным
Dim x As Integer, y As Single, s As String
x, y и s соответственно целого, вещественного и строкового типа присвоим следующие значения
x=3
y=5.1
s= “Город”
С помощью оператора присваивания переопределим значения объявленных переменных.
1. Переменная x
x=x+1
x=y
После выполнения первого оператора присваивания значение переменной x будет равно 4, после второго – 5. Вещественное значение 5.1 округлено до ближайшего целого.
Присваивание
x=s
недопустимо. Такая инструкция приведет к аварийному завершению работы процедуры.
2. Переменная y
y=y+1
y=x+1
Значение переменной y после выполнения первого оператора присваивания будет равно 6.1, после второго – 4. Во втором случае результат вычисления выражения – целый, был преобразован в соответствии с типом переменной у – в вещественный тип.
Присваивание переменной у значения строкового выражения, например,
y=s
недопустимо.
3. Переменная s
s=y
s=x
В первом случае строковой переменной будет присвоено вещественное значение, а во втором – целое, но в обоих случаях они преобразуются в строку.
Структура программы
Решение задач с помощью VBA требует создания проекта.
Проект – это совокупность нескольких элементов. Основными из них являются: приложение (в нашем случае это Excel), среда разработки VBA (редактор VBA) и совокупность модулей, в которых записывается программный код (совокупность программных единиц – процедур проекта).
Любая процедура представляет собой последовательность инструкций. Инструкция - это синтаксически полный компонент программы, представляющий собой операцию, описание или определение. Инструкция может содержать ключевые слова, операторы, переменные, константы и выражения.
В VBA различают три типа инструкций:
1. Инструкции объявления. Они используются для объявления процедур, переменных, массивов и констант.
2. Инструкции присваивания. Эти инструкции присваивают значение, результат выполнения функции или результат вычисления выражения переменной или константе. Инструкция присваивания всегда содержит символ «=».
3. Выполняемые инструкции. Инструкции этого типа выполняют какие-либо действия. Например, выполнение разветвления, повторяющихся действий, метода и т.д.
Основной единицей программного кода проекта VBA является процедура. Существует три вида процедур. Самый распространенный тип - процедура Sub. Набор текста процедуры начинается с ее объявления.
Упрощенный синтаксис объявления процедуры Sub имеет следующий вид:
Sub <ИмяПроцедуры>([<Список параметров>])
<Тело процедуры>
End Sub
Элементы синтаксиса:
Sub –
Обязательный. Ключевое слово заголовка процедуры.
ИмяПроцедуры –
Обязательный. Идентификатор процедуры (имя процедуры).
Список параметров –
Необязательный. Используется для передачи данных в процедуру или из нее.
Тело процедуры –
Обязательный.Последовательность описаний, инструкций и операторов, реализующих конкретные действия, выполняемые данной процедурой.
End Sub –
Обязательный. Ключевое слово конца процедуры.
Например, с помощью процедуры Demo() можно присвоить значение 156 переменной С:
Sub Demo()
C = 156
End Sub
Тело данной процедуры состоит всего из одной инструкции присваивания.
Правила оформления кода
VBA не накладывает на структуру программы (процедуры) каких-либо особых ограничений. Однако желательно придерживаться следующих рекомендаций:
1. В соответствии с правилами хорошего стиля программирования размещать инструкции описания в начале процедуры, т.е. структурно выделив в ней описательную и исполнительную части.
2. Использовать комментарии.
Комментарии, т.е. пояснения к фрагменту текста процедуры, не являются программным кодом и поэтому компилятором игнорируются. Комментарии выполняют две важные функции:
- Делают программу легко читаемой, поясняя смысл кода и алгоритма. Комментарии могут располагаться в любом месте процедуры. Закомментированный текст в начале программы используется для указания действия, выполняемого ею, и краткой справке об авторе программы. Комментарии по тексту процедуры обычно используются для пояснения ключевых фрагментов кода.
- Временно отключают от выполнения закомментированные фрагменты программы, что бывает очень полезно при ее отладке.
Для ввода комментариев используется символ (´) апостроф. Его можно использовать в любом месте строки. При этом все символы, начиная от апострофа до конца строки, будут восприниматься компилятором как комментарий.
Например:
Sub Lab1 ()
´программирование линейных алгоритмов
´задание 2.2
´выполнил студент гр. МТ-11
´Иванов И.И.
Dim S As Integer ´S – сумма положительных чисел
Dim i As Byte ´i – переменная цикла
…
End Sub
3. Перенос строк кода.
Длинные инструкции можно размещать в нескольких строках. Для этого используют признак продолжения строки, состоящей из двух символов: пробела и подчеркивания(_).
Например,
y = 2 * Sqr(x+3) - (log(x^2) +2) _
/ (sin(x-1))
При переносе строк необходимо помнить:
- Нельзя разбивать переносом строковые константы. Если строковая константа длинная, и ее все же необходимо разбить, следует использовать операцию конкатенации (сцепления).
Например,
y= “В обрабатываемом массиве нет” & _
“ положительных чисел”
- За признаком продолжения строки нельзя ставить комментарий.
- Допустимо не более семи продолжений одной и той же строки.
- Строка не может состоять более чем из 1024 символов.
4. Расположение нескольких операторов в одной строке.
Использование знака двоеточия (:) позволяет разместить несколько операторов (инструкций) на одной строке. Это всегда короткие операторы, как правило, операторы присваивания. Например, конструкции
x=x+a
y=x-b
эквивалентны такой
x=x+a: y=x-b
5. Выделение логических уровней кода отступами.
Любая информация воспринимается лучше, если она имеет иерархическую структуру (процедура, цикл, вложенный цикл, ветвление, вложенное ветвление, описательные инструкции и т.д.). В VBA такая структура создается с помощью отступов в коде в нужных местах. Это не только облегчит чтение кода, но и поможет увидеть его структуру.
Правила отступа просты. Основной текст программы набирайте с отступом, например, в три пробела. Каждый вложенный блок (например, инструкции, расположенные внутри оператора цикла) сдвиньте еще на три пробела и т.д.
2. ОРГАНИЗАЦИЯ ВВОДА – ВЫВОДА ДАННЫХ
Для обмена информацией с пользователем в Windows используются специальные формы, которые называются диалоговыми окнами.
В проектах VBA при организации диалога с пользователем используются две разновидности встроенных диалоговых окон: окна сообщений и окна ввода.
Окно ввода (InputBox) обеспечивает ввод информации, а окно сообщений (MsgBox) выводит сообщения для пользователя.
Кроме того, в программах VBA, написанных для приложения MS Excel, есть возможность ввод и вывод данных осуществить непосредственно из ячеек (в ячейки) рабочего листа.
2.1. ОКНО СООБЩЕНИЯ. Стандартная процедура MsgBox
Вывод – это процесс переноса информации из оперативной памяти компьютера на внешний носитель (экран, принтер, файл).
Практически любое информационное сообщение или предупреждение пользователь может вывести в специальном диалоговом окне.
Программная поддержка окна сообщения осуществляется встроенной процедурой MsgBox, которая
- выводит на экран диалоговое окно, содержащее сообщение и одну или более кнопок (см. рис.1-5). Кнопка OK выводится всегда. Остальные кнопки – по усмотрению разработчика.
- устанавливает режим ожидания нажатия кнопки пользователем.
Сокращенный синтаксис процедуры MsgBox:
MsgBox сообщение [, атрибуты] [, заголовок]
Элементы синтаксиса:
сообщение –
Обязательный. Строковое выражение, отображаемое как сообщение в диалоговом окне. Максимальная длина строки 1024 символа.
атрибуты –
Необязательный. Числовое выражение, с помощью которого можно установить
Ø число и тип отображаемых кнопок;
Ø тип используемого информационного значка;
Ø основную кнопку.
Значение по умолчанию этого параметра равняется 0. Значения констант, определяющих число, тип кнопок и используемых значков, (табл.8. – 9).Для вывода в окне сообщения нескольких кнопок и информационных значков значения констант указываются в виде элементов операции конкатенации. Например:
vbOKCancel + vbExclamation
заголовок -
Необязательный. Строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот параметр опущен, то в строку заголовка помещается имя приложения (рис.1).
Наличие запятых, соответствующих отсутствующим не последним аргументам, является обязательным.
Таблица 8 | ||
Значения параметра Buttons процедуры и функции MsgBox, определяющие отображаемые кнопки в окне сообщения | ||
Константа | Значение | Отображаемые кнопки |
vbOKOnly | OK | |
vbOKCancel | OK, Отмена | |
vbAbortReplyIgnore | Стоп, Повтор, Пропустить | |
vbYesNoCancel | Да, Нет, Отмена | |
vbYesNo | Да, Нет | |
vbReplyCancel | Повтор, Отмена |
Таблица 9 | ||
Значения параметра Buttons процедуры и функции MsgBox, определяющие отображаемые информационные значки в окне сообщения | ||
Константа | Значение | Значок сообщения |
vbCritical | ||
vbQuestion | ||
vbExclamation | ||
vbInformation |
Параметры атрибуты и заголовок могут отсутствовать. Однако если в процедуре используется параметр заголовок, то перед ним необходимо указать два разделительных символа “,” (запятая).
Пример 2.1. Вывод простого информационного сообщения.
Процедура Pr_1:
Sub Pr2_1()
' Простое информационное сообщение
MsgBox "Привет!!!"
End Sub
Результатом работы данной процедуры является информационное сообщение, выведенное в виде диалогового окна (рис.2.1.). Поскольку в процедуре MsgBox отсутствуют параметры атрибуты и заголовок, то в диалоговом окне выведена только одна обязательная кнопка OK, которая используется для закрытия окна, и в заголовке окна выведено имя приложения – Microsoft Excel.
Для ввода в строке заголовка окна сообщения личного заголовка (например, такого, как на рисунке 2), необходимо изменить процедуру MsgBox:
MsgBox “Привет!!!”,, “Пример”
Усложним выводимое информационное сообщение. На рис.2.2 б) показан результат вывода строковой константы “Привет!!!” и значения строковой переменной Name. Для их вывода в качестве единого информационного сообщения использована операция конкатенации (сцепления). Данный вывод реализован с помощью следующей процедуры.
Sub Pr2_1_б()
' Простое информационное сообщение
' с выводом заголовка
Dim Name As String
Name = "Анна"
MsgBox "Привет!!!" & Name, , "Пример"
End Sub
Для вывода сообщения в нескольких строчках используется стандартная функция Сhr(). Онапозволяет получать символы, генерируемые при нажатии различных клавиш. Например, Chr(9) – соответствует нажатию клавиши Tab, Chr(13) – клавиши Enter.
Поскольку символы, используемые для начала новой строки являются очень важными при форматировании сообщений и других строковых данных, которыми манипулирует VBA-процедуры, VBA имеет несколько предопределенных констант для этих символов, чтобы не было необходимости использовать функцию Chr():
Ø vbCr – символ возврата каретки, эквивалент выражения Chr(13);
Ø vbTab – символ табуляции, эквивалент выражению Сhr(9). Символы табуляции включают в строки для выравнивания данных в столбцах.
На рис.2.2 в) приведены результаты работы процедуры Pr2_1_в().
Sub Pr2_1_в()
' Простое информационное сообщение
' с выводом заголовка
Dim Name As String
Name = "Анна"
MsgBox "Привет!!! " & Chr(13) & Name, , "Пример"
End Sub
Пример 2.2. Вывод информационного сообщения совместно с информационным значком в окне сообщения.
Процедура Pr2_2 осуществляет вывод диалогового окна, представленного на рис.2.3.
Sub Pr2_2()
' Вывод сообщения в сочетании с
' предупреждающим информационным значком
MsgBox "Процент выполнения плана выпуска продукции -" & _
vbCr & " незначительный", vbExclamation, _
"Пример"
End Sub
Для вывода информационного значка (Предупреждение) используется в качестве параметра атрибуты встроенная константа vbExclamation (см. табл.9).
Пример 2.3. Вывод диалогового окна с кнопками ОК (основная), Отмена и со значком (Предупреждающий запрос).
Данное окно (рис.2.4) можно вывести с помощью следующей процедуры
Sub Pr2_3()
' Вывод сообщения с двумя кнопками ОК и Отмена
'в сочетании с
' предупреждающим информационным значком.
' Кнопка ОК является основной
MsgBox "Процент выполнения плана выпуска продукции -" & _
Chr(13) & " незначительный", vbOKCancel + _
vbQuestion + vbDefaultButton1, "Пример"
End Sub
2.2. ОКНО ВВОДА. Стандартная функция InputBox()
Ввод – это процесс переноса информации с внешнего носителя (клавиатура, файл) в оперативную память компьютера.
Программная поддержка окна ввода обеспечивается функцией InputBox(), которая
Ø Выводит на экран диалоговое окно, содержащее сообщение, поле ввода и две кнопки: ОК и Cancel (см. рис.2.5);
Ø Устанавливает режим ожидания ввода текста пользователем и нажатия кнопки;
Ø Возвращает значение типа String по нажатию кнопки ОК, содержащее текст, введенный в поле ввода;
Ø Возвращает пустую строку (значение Empty) при нажатии кнопки Cancel.
Сокращенный синтаксис:
InputBox (сообщение [, заголовок] [, умолчание]
Элементы синтаксиса:
сообщение –
Обязательный. Строковое выражение, отображаемое как сообщение в диалоговом окне. Может содержать несколько строк. Максимальная длина строки 1024 символа.
заголовок -
Необязательный. Строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот параметр опущен, то в строку заголовка помещается имя приложения.
умолчание –
Необязательный. Строковое выражение, отображаемое в поле ввода. Используется по умолчанию, если пользователь не введет другую строку. Если параметр опущен, то поле ввода изображается пустым.
Наличие запятых, соответствующих отсутствующим не последним аргументам, является обязательным.
Например, с помощью инструкции
x = InputBox("Введи значение х", "Пример 3.5")
с помощью окна ввода (рис.2.5) осуществляется ввод некоторого значения с клавиатуры. Затем введенное значение преобразуется в соответствии с типом переменной x.
При вводе вещественных чисел используется знак десятичная запятая (“,”). Например, как на рис.2.6.
2.3. Ввод/вывод данных с/на рабочий лист Excel
Для организации ввода/вывода данных непосредственно с/на рабочий лист приложения MS Excelиспользуется объект Range (Диапазон ячеек) или свойство Cells (Ячейка) объекта Worksheet (Рабочий лист). С их помощью можно работать с любой ячейкой рабочего листа Excel.
Используя объект Cells, можно содержимое ячейки рабочего листа присваивать в качестве значения переменной и наоборот, значение выражения выводить в любой ячейке.
Например,
Ø x=Cells(5,3).Value
или
x=Cells(5,3)
или
x = Range("C5")
Переменной x присваивается значение свойства Value ячейки С5.
Ø x=Cells(1+i, 1+j)
Переменной x присваивается значение ячейки, номер строки и столбца которой определяется значениями выражения 1+i и 1+j соответственно.
Ø Cells(8,4)=x+2*y
В ячейке D8 выводится значение выражения x+2y.
Ø p = InputBox("Введи номер строки")
q = InputBox("Введи номер столбца")
Cells(p,q) = a + Range("A1")
В ячейку рабочего листа, расположенную в p строке и q столбце выводится значение выражения a + Range("A1"). Номера строки и столбца вводятся с клавиатуры.
Пример 2.4. Вычислить значение функции . Ввод/вывод данных осуществить с/на рабочий лист.
Фрагмент рабочего листа с исходными данными представлен на рис.2.7 а). Расчеты получены с помощью процедуры Pr2_4() и выведены на тот же рабочий лист (рис.2.7 б)).
Sub Pr2_4 ()
Dim a As Byte, b As Byte, x As Integer, y As Single
a = Cells (2, 3): b = Cells (3, 3): x = Cells (4, 3)
y = (x + 3) ^ 2 + (2 * a - 3 * b) / (x ^ 2 - 2.8)
Cells(6, 1) = "Значение функции:"
Cells (7, 3) = y
End Sub