Идентификаторы, инструкции и переменные VisualBasic for Application

Язык программирования базируется на строгих правилах, при которых указывается, как записываются идентификаторы, переменные и управляющие структуры. В этом смысле язык программирования и иностранный язык очень схожи. При несоблюдении этих правил Visual Basic for Application попросту не сможет исполнить введенную вами программу, также как и человек-носитель языка не поймет вас, если вы неправильно составите предложение. В очередной статье вы узнаете, что такое идентификаторы, зарезервированные слова, познакомитесь с различными типами данных, константами и переменными. Заметим, что Visual Basic for Application, несмотря на то, что встроен в приложения Microsoft Office, предоставляет полный набор инструментов для кодирования задач любой сложности (ограниченных, естественно, рамками офисных приложений).
Идентификаторы Visual Basic for Application

Идентификаторы — основа любого языка. Под идентификаторами понимаются имена констант, переменных, элементов управления, процедур и методов объектов. В Visual Basic for Application существует пять правил составления идентификаторов:— Первый символ идентификатора обязательно является буквой или символом подчеркивания. Например, идентификаторы First, _Var являются правильными, а 1st, 100 — неправильными. В середине или на конце идентификатора допускается использовать цифры, например: A1, A1B2 и др. — В идентификаторах не допускается использовать пробелы, а также специальные символы: знаки препинания, а также @, #, $, &. Идентификаторы My Var, New& являются неправильными. — Максимальная длина идентификатора не может превышать 255 символов. — Идентификатор не может совпадать с зарезервированными словами языка программирования Visual Basic for Application. — В пределах одного модуля или проекта недопустимо объявлять один и тот же идентификатор дважды. Зарезервированные слова Зарезервированные слова — это стандартные для языка программирования инструкции, позволяющие решать какие-то определенные действия: описывать процедуры, открывать циклы, объявлять переменные и др. В следующей таблице перечислены зарезервированные слова Visual Basic for Application. Ни одно из этих слов недопустимо использовать в качестве идентификатора.

Access Alias Any Append As Base Binary ByRef
ByVal Case Cdecl Compare Date Each Else ElseIf
Empty End If Error Explicit False For Get Global
In Input Is Len Let Lib Local Lock
Loop Me Mid Module New Next Nothing Null
On Option Optional Output ParamArray Preserve Print Private
Property Public Random Read Resume Seek Set Shared
Static Step String Text Then Time To True
TypeOf Until Wend WithEvents  

Что такое переменные
С помощью переменных можно временно сохранять значения выражений, чтобы использовать их в дальнейшем. В Visual Basic for Application используется большое количество типов данных, обеспечивающих обработку различных типов числовых, текстовых, календарных (дата, время), логических данных. Их перечень приводится в следующей таблице:

Тип данных Описание
Byte 8-разрядные (1 байт) числа без знака в диапазоне от 0 до 255. Тип данных можно использовать при анализе ASCII-кодов символов или простейших вычислениях, в том случае, если заранее известно, что результат не превысит значения 255. Например, с помощью переменной типа Byte можно хранить количество дней в месяце, поскольку максимальное значение не превышает числа 31.
Integer 16-разрядные целые числа в интервале от -32768 до 32767. Числовой тип данных Integer часто используется для доступа к элементам массива или коллекции.
Long 32-разрядные целые числа (4 байта) в интервале от -2147483648 до 2147483647. Переменные этого типа позволяют сохранять результаты арифметических выражений, в которых используются достаточно большие целые числа. Например, тип данных Long может потребоваться при расчете больших простых чисел, чисел Фибоначчи, факториала числа и т.д.
Decimal 96-разрядные (12 байт) числа без знака. В дробной части записывает степень числа. При этом количество знаков после запятой может изменяться в интервале от 0 до 28. В переменных типа Decimal можно хранить сверхбольшие целые числа в интервале от -79*10 28 до 79*10 28 .
Double 64-разрядные числа (8 байт) с плавающей точкой двойной точности для работы с числами в интервалах от -1,798E+308 до -4,941E-324 для отрицательных значений и от 4,941E-324 до 1,798E+308 для положительных значений.

Этот тип данных используется в тех случаях, когда необходима повышенная точность вычислений.
Singe 32-разрядные (4 байта) числа с плавающей точкой в диапазоне от -3,403E38 до -1,401E-45 для отрицательных чисел и от 1,401E-45 до 3,403E38 для положительных чисел.
String Тип данных служит для хранения строковых значения переменной (до 2 миллиарда символов) или постоянной (64К символов) длины.
Date Тип данных, позволяющий работать с календарными датами и временем. В памяти компьютера тип Date представляет собой 64-разрядное число с плавающей точкой, позволяющее хранить даты в диапазоне от 1 января 100 года до 32 декабря 9999 года и время в интервале от 0:00:00 до 23:59:59.
Boolean 16-разрядные числа, принимающие два значения True (все биты числа установлены в единицу, что соответствует -1) и False (все биты числа сброшены в ноль, что соответствует числу 0). Логические переменные используются при сравнении выражений, в условиях и некоторых видах циклов.
Variant Позволяет хранить данные любых типов — числа, строки, даты и пустые значения.

Для объявления новой переменной используется инструкция Dim, синтаксис которой таков:
Dim <идентификатор> [As <тип>], <идентификатор1> [As <тип>]...
<идентификатор> — имя переменной.
<тип> — допустимый тип данных. 

Например, следующая конструкция объявляет переменную V1: Dim V1 As Integer Тип переменной и соответственно конструкцию As можно опускать. В этом случае переменная является не типизированной. При одновременном объявлении нескольких переменных очень часто используется такая конструкция Dim A, B, C As Integer. Причем подразумевается, что все три переменные являются целыми. На самом деле это не так. Целой является лишь переменная C, а переменные B и C нетипизированы. Более правильный способ записи таков: Dim A As Integer, B As Integer, C As Integer 

Присваивание значения переменной
 

Начальное значение переменной равно 0 для числовых типов данных и пустой строке "" для строковых значений. В большинстве случаев это значение вполне подходит условиям задачи. Так, можно составить программу суммирования строк массива A, не обнуляя значение переменной S: Dim S

For I = 1 To 5
S = S + A[I]
Next

 Такая программа при исполнении не выдаст ошибки и правильно суммирует пять элементов массива. Но правила хорошего тона в программирования все-таки вынуждают перед использованием новой переменной присвоить ей начальное значение. К программе для суммирования элементов массива следует добавить еще одну строку: 

Dim S
S = 0
For I = 1 To 5
S = S + A[I]
Next 

Присвоить значение переменной можно двумя способами: в явной форме с помощью соответствующих инструкций языка Visual Basic for Application или в неявной форме, как, например, переменные цикла. В следующих примерах показаны различные способы присвоения значений переменным: ' числовая переменная

Dim Year As Integer
Year = 1999 ' логическая переменная
Dim IsTrue As Boolean
IsTrue = True ' переменная типа дата
Dim BD As Date
BD = #10/4/99# ' расчет значения выражения
B = (3*(3+4))/4 ' использование функций Visual Basic for Application
S = InputBox("Представьтесь, пожалуйста") ' начальное значение переменной равно 1, конечное — 5.
For I = 1 to 5
Debug.Print I
Next I

' переменная I может использоваться и по завершении цикла Совершенно иначе — при помощи инструкции Set — инициализируются объекты Microsoft Office. В следующей программе с помощью этой инструкции создается объектная переменная R типа Range, а затем свойствам Bold и Underline присваиваются значения. 

Dim R As Range
Set R = Application.Selection.Range
With R
.Bold = True
.Characters(1).Underline = wdUnderlineSingle
End 

Время жизни и область действия переменной
 

Каждая переменная характеризуется не только типом и значением, но и такими атрибутами, как время жизни и область действия. Время жизни — это тот период времени, в течение которого переменная возвращает значение. Интерпретатор программ на Visual Basic for Application при объявлении переменной выделяет зависящее от типа переменной количество байт памяти, и переменная начинает свою жизнь. Область действия переменной зависит от места своего объявления.

Различают локальные и глобальные переменные. Локальные переменные обычно привязаны к тем модулям или процедурам, в которых объявлены, и как только процедура завершает свою работу, все локальные переменные перестают существовать. Определить время жизни переменной и область ее действия можно с помощью специальных описателей. 

Объявление статических переменных
 

Инструкция Static делает переменную статической. Такие переменные обычно используются в процедурах и при их завершении не удаляются из памяти. При следующем вызове процедуры, можно воспользоваться ранее вычисленным значением. Процедура CntCall демонстрирует, как можно использовать статические переменные — при каждом ее вызове на экране появляется диалоговое окно с информацией о количестве ее вызовов: 
Sub CntCalls()
Static Cnt
Cnt = Cnt + 1
MsgBox "Количество вызовов процедуры " & Cnt
End Sub 

Внутри процедуры допускается использовать несколько статических переменных — в этом случае каждая переменная должна быть объявлена с помощью инструкции Static. Объявляя переменные, можно сделать все локальные переменные статическими:

Static Sub CntCalls()
Dim Cnt
Cnt = Cnt + 1
MsgBox "Количество вызовов процедуры " & Cnt
End Sub 

Объявление общедоступных переменных
 

Инструкция Public делает переменную общедоступной для всех процедур и модулей проекта. Объявленная ниже переменная globalvar доступна из любой процедуры и время ее жизни соответствует времени исполнения программы. Public globalvar As Integer Противоположная Public по принципу действия инструкция Private объявляет локальную переменную, то есть, переменную, доступную только в одном модуле. Переменную localvar, описанную далее, можно использовать во всех процедурах, определенных внутри текущего модуля. Попытка обратиться к ней из других модулей приводит к синтаксической ошибке. Private localvar As Integer 

Создание и использование констант
 

Переменная на протяжении всего времени своего существования принимает разные значения, но в некоторых случаях в выражениях используются постоянные величины. В таких случаях правильнее применять константы, позволяющие заменять трудно запоминаемые значения специальными идентификаторами. В Visual Basic for Application используются три типа констант: — Системные константы
— Внутренние константы языка программирования Visual Basic for Application
— Объявляемые вами константы. Системные константы определены в библиотеках Microsoft Office, подключаемых с помощью диалогового окна 

Ссылки


Такие константы обычно зависят от приложения, в котором работает тот или иной модуль. Их довольно много, но совсем не обязательно помнить их все, поскольку можно обратиться к справочной системе Visual Basic for Application и получить сведения о предназначении системной константы. Идентификаторы системных констант состоят из двух частей — приставки и основного имени. Причем приставка определяет назначение константы и обычно представляет собой двух- или трехсимвольное обозначение, например, vb — встроенная константа Visual Basic, ac — константа, используемая в Access, wd — константа, используемая в Word, mso — константа Microsoft Office общего назначения. Visual Basic for Application не предъявляет каких-либо особых требований по именованию константы, следует лишь учитывать общие правила составления идентификаторов Visual Basic for Application. В общем виде синтаксис инструкции Const таков: Const <имя> [As <тип>] = <значение>, <имя1> [As <тип>] = <значение1>... Например, число 3,1415926 можно заменить коротким идентификатором Pi или Пи, объявив новую константу: Const Pi = 3,1415926 В математических выражениях, где необходимо использовать число p, следует использовать объявленную выше константу Pi. 

Объявление и использование массивов
 

Массивы — это переменные особого типа, имеющие еще одну характеристику: размерность. С их помощью можно манипулировать сразу несколькими значениями. Для объявления массива, как и переменной, используются стандартные конструкции Dim или Static: Dim <массив> (<размерность1, размерность2...>) [As тип] При описании массива используются следующие обозначения:

<массив> — имя массива, образующееся как и другие идентификаторы.
<размерность, размерность2...> — длина каждой размерности массива.
<тип> — необязательный при описании массива тип данных. 

В программах обычно используются одномерные, двухмерные и трехмерные массивы. Причем, одномерные массивы иногда называются векторами, а двухмерные — таблицами. Следующий пример объявляет одномерный массив A: Dim A(6). Элементы массива обычно нумеруются с 0. Так, для массива A, объявленного выше, выделяется память для семи элементов: A(0), A(1), A(2), A(3), A(4), A(5) и A(6). Впрочем, совершенно не обязательно использовать элемент массива с нулевым индексом — можно ограничиваться значениями, хранящимися в оставшихся шести элементах с первого по шестой. Размерности массива, указываемые в круглых скобках после идентификатора, обычно представляют собой числовые константы. Однако можно изменить диапазон значений. При этом используется следующий синтаксис:

Dim <идентификатор> (<от> To <до>) [As тип] В описании указывается диапазон значений, описываемый числовыми выражениями <от> и <до>:
<от> — начальное значение диапазона
<до> — конечное значение диапазона Как и в случае с переменными, первое действие, которое следует выполнить в программе после объявления массива, — это присвоение значений элементам массива, например: Dim FirstArray(4) As Integer
FirstArray(0) = 20
FirstArray(1) = 16
FirstArray(2) = 15
FirstArray(3) = 23
FirstArray(4) = 11 Для манипуляции элементами массива наиболее подходящим является цикл For, в котором, к примеру, можно просуммировать элементы массива FirstArray: For I = 0 To 4
S = S + FirstArray(I)
Next I

Динамические массивы Если заранее затруднительно определить, сколько элементов должно находиться в массиве, то используются динамические массивы. При их объявлении используются инструкции Dim, но в скобках после имени массива не указывается его размерность. Например, в следующем описании создается строковый динамический массив DArray:
Dim DArray() As String 

Перед использованием динамического массива инструкцией ReDim необходимо определить первоначальную размерность массива: ReDim. Синтаксис инструкции ReDim совпадает с Dim:
ReDim [Preserve] массив(индексы) 

После ReDim можно использовать описатель Preserve, который сохраняет содержимое массива. Обычно к этому описателю прибегают при повторных изменениях размера массива, когда в нем уже содержатся какие-то значения. Так, следующий пример демонстрирует, как увеличить размер массива на один элемент и не потерять при этом значения уже существующих элементов:

arraysize = Ubound(DynArray) + 1
ReDim Preserve DynArray[arraysize] 

Чтобы быстрее изучить особенности использования переменных, констант и массивов, надо воспользоваться любой книгой по Бейсику, где приведены примеры различных программ, а затем попытаться реализовать их в среде Visual Basic for Application. Правда, для этого, помимо переменных и констант, вам потребуется и знание об управляющих структурах, таких как циклы, условия, ветвления, а также о встроенных математических, финансовых, строковых, служебных функциях языка программирования. 

Этим темам посвящены следующие статьи цикла, где, помимо теоритических сведений о синтаксисе и тонкостях использования конструкций языка, будут приведены и практические примеры использования.
Сергей Лосев


Компьютерная газета. Статья была опубликована в номере 02 за 2000 год в рубрике программирование :: разное

©1997-2024 Компьютерная газета