
Косарев_Экомическая информатика
.pdfПрограммирование |
401 |
П р и м е р :
Const PI As Single = 3.1415 ' Объявлена именованная числовая_ 'константа для хранения значения_ числа Pi
Области видимости переменных и констант Переменная может быть доступна всей программе или только
для одной или нескольких ее частей. Область программы, в кото рой может быть использована переменная, называется областью видимости переменной. Переменные могут быть видимы в одной процедуре, в любой процедуре какой-либо формы или во всей программе. Если переменная видима, то она доступна и, следова тельно, существует. Переменная может существовать и быть дос тупной для некоторых частей программы и при этом быть недо ступной (невидимой) для других частей программы.
П р и м е р :
Option Explicit
Dim 81гФамилия As String * 18 Dim эггИмя As String * 10 Private Sub UserForm_Initialize()
Dim strAflpec As String * 30 з1гФамилия = «Петров» вггИмя = «Леонид»
strAflpec = «Москва, Кронштадтская, дом 37» Вывод strAflpec
End Sub
Sub BbiBOfl(strD As String)
Dim в1гФамилия As String * 18 в^Фамилия = «Это уже не Петров!» MsgBox вггФамилия
MsgBox strliMfl MsgBox strD
End Sub
В результате выполнения этой программы в окна сообщений будут выведены следующие строки:
Это уже не Петров! Леонид
Москва, Кронштадтская, дом 37.
402 |
Глава 8 |
Здесь Б^Фамилия и в^Имя объявлены как глобальные пере менные и существуют, пока программа выполняется. StrАдрес и strD - локальные переменные, они существуют лишь тогда, ког да выполняется процедура Вывод, в которой они объявлены. В момент вызова этой процедуры глобальная переменная в^Фамилия существует, но она недоступна, так как ее область видимости перекрыта одноименной локальной переменной, по этому в окно сообщения будет выдано значение той переменной в^Фамилия, которая объявлена в процедуре Вывод. Переменная strliMH также является глобальной, но она доступна для процеду ры Вывод. Переменная strAflpec объявлена в процедуре UserForm_Initialize(), но она доносит значение до окна сообще ния, так как передается в процедуру Вывод в качестве параметра.
Область видимости переменной задается при ее декларации одним из ключевых слов:
Dim - объявляет локальные переменные, существующие толь ко во время вызова процедур или функций, в которых они объяв лены. Если переменная объявляется в разделе глобальных объяв лений модуля или формы, то она доступна для всех процедур и функций этого модуля. Для других модулей она будет не видна;
Private - не может объявлять переменную внутри процедуры или функции, при объявлении в разделе глобальных объявлений модули Dim и Private равнозначны;
Public - объявленная таким образом переменная является гло бальной на уровне приложения и доступна из всех его модулей.
Различают динамические и статические переменные. Стати ческие переменные объявляются внутри процедуры или функции и вне их недоступны. В отличие от обычных локальных перемен ных они не инициализируются при входе в процедуру или функ цию, где они объявлены. Для создания статической переменной необходимо при ее объявлении вместо ключевого слова Dim ука зать слово Static:
Static intNumber As Integer
Перечни
Перечни служат для декларации группы констант, объединен ных общим именем и принадлежащих к типу Enumeration (Пере чень). Перечень может быть объявлен только в разделе глобаль ных объявлений модуля или формы. Синтаксис объявления пе речня:
Программирование |
403 |
[Public/Private] Enum ИмяПеречня ИмяКонстанты1 [=значение] ИмяКонстанты2 [=значение]
ИмяКонстантыИ [=значение] End Enum
Синтаксис обращения к константам перечня:
Имя Перечня. Имя Константы
Если при объявлении перечня значения констант не определя ются, то им по умолчанию присваиваются порядковые номера в соответствии с последовательностью объявления.
П р и м е р перечня:
Public Enum Ряд
А
В
С
Z = 28
End Enum
В этом перечне константа А получит значение 0, В - значение 1, С -значение 2. Константе Z установлено значение 28.
Чтобы получить значение элемента перечня, используют сле дующий синтаксис:
Имя перечня.Имя элемента
П р и м е р :
Textl.Text= Перечень.В ' Свойству Text объекта Textl 'устанавливается 'значение 1.
Декларация массивов
В системе VBA различают два вида переменных - простые пе ременные и переменные структурного вида. Простые переменные служат для идентификации и резервирования памяти под одно данное. Переменные структурного вида предназначены для иден тификации и резервирования памяти для нескольких данных. Ча стным случаем переменной структурного вида является массив. Массив представляет собой структуру, все элементы которой име-
404 |
Глава 8 |
ют одинаковый тип. Например, это могут быть данные, опреде ляющие вектор или матрицу. Массивы могут быть одномерными и многомерными. Так, для отображения вектора может быть ис пользован одномерный массив, а для отображения матрицы - многомерный.
Декларация массива имеет следующий вид:
Dim | Public | Private Имя_Массива (индексы) As Тип
где Dim | Public | Private |
- ключевые слова, декларирующие массив |
|
Имя_Массива |
- |
и область его видимости; |
идентификатор, определяющий имя массива; |
||
индексы |
- |
значение индекса (номера) последнего элемен |
As |
|
та в массиве, считая с нулевого; |
- ключевое слово, предваряющее указание типа |
||
Тип |
- |
элементов массива; |
любой, действительный для VBA тип данных - |
||
|
|
базовый или созданный пользователем. |
Например, декларация одномерного массива, состоящего из восьми элементов, выглядит следующим образом:
Dim MyArray(7) As Integer' Одномерный массив_ из 8 элементов
При декларации многомерного массива в поле индекса ука зывается несколько индексов, в соответствии с размерностью мас сива. Например, двумерный массив из двух столбцов и трех строк декларируется следующим образом:
Dim strMyArray(l ,2) As String' Двумерный массив_
из 3 строк и 2 ' столбцов
По умолчанию значение нижней границы массива при таком объявлении равно нулю. В этом случае считают, что 0 - базовый индекс массива. При необходимости базовый индекс можно из менить путем использования ключевого слова То при объявле нии массива:
Dim strMyArray (3 To 10) As String
В этом примере базовому индексу массива установлено зна чение 3. Подобным образом можно устанавливать как положи тельные, так и отрицательные базовые индексы:
Программирование |
405 |
Dim strMyArray (-3 To 4) As String
Иногда в процессе выполнения программы размер массива требуется изменить. В этом случае первоначально массив декла рируют как динамический. Для этого в декларации не указывает ся размерность, например:
Dim strMyArray () As String
Количество элементов в динамическом массиве и его размер ность в процессе выполнения программы можно переопределить с помощью ключевого слова ReDim. Синтаксическая конструк ция переопределения массива имеет вид:
ReDim [Preserve] ИмяМассива(индексы) [As ТипДанных]
где ReDim - |
ключевое слово, указывающее, что переопределяются |
Preserve - |
размеры массива; |
необязательное ключевое слово, с помощью которого |
|
|
дается указание, чтобы все элементы переопределяемого |
индексы - |
массива сохранили свое значение; |
размерности массива (до 60). |
П р и м е р : |
|
Dim strMyArray 0 As String |
'Декларация динамического массива |
Dim intValArray As Integer |
'Декларация переменной, для хране_ |
|
ния' размерности |
IntValArray=9 |
'Инициализация значения |
ReDim strMyArray (IntValArray) 'Одномерный массив
из 9 элементов ' (базовый индекс равен 0)
ReDim strMyArray (3 То IntValArray, l To IntValArray) ' Двумерный_
'массив с базовыми индексами,_ отличными от нуля
Типы данных, определяемые пользователем
Выше упоминалось, что VBA позволяет создавать собствен ные типы данных. Они являются типами структурного вида. Эти типы создаются на основе базовых типов VBA. Возможность со здавать свои типы данных полезна в тех случаях, когда програм-
406 |
Глава 8 |
ма работает с группой элементов различного базового типа, но связанных между собой по смыслу.
Создание нового типа осуществляется следующей конструк цией:
Туре ИмяТипа
Имя 1 As Type' Структурный элемент типа - базовый тип Имя2 As Type ' Структурный элемент типа - базовый тип
ИмяЫ As Type' Структурный элемент типа - базовый тип End Type
где Туре |
- |
ключевое слово, которое указывает, что создается |
ИмяТипа |
- |
новый пользовательский тип данных; |
имя создаваемого типа (идентификатор); |
||
NameN As Type - |
описание структурного элемента создаваемого типа; |
|
End Type |
- |
ключевые слова, завершающие описание нового типа. |
Например, пользовательский тип данных, предназначенный для хранения фамилии, даты рождения и даты поступления на работу сотрудника, может быть объявлен следующим образом:
Туре Сотрудник
strOaMiurra As String' Структурный элемент для хранения_ фамилии
ДатаРождения As Date' Структурный элемент для хранения_ даты 'рождения
Дата Поступления As Date' Структурный элемент_ для хранения ' даты поступления на работу
End Type
Созданный тип данных может быть использован в програм ме. Для этого нужно объявить переменную такого типа. Объявле ние переменной выполняется аналогично, как и в случае базовых типов:
Dim ^Служащий As Сотрудник ' Объявлена переменная
' пользовательского типа_ Сотрудник
Обращение к элементу пользовательского типа имеет синтаксис:
ИмяПеременнойПользовательскогоТипа._ ИмяСтруктурногоЭлемента
Программирование |
407 |
П р и м е р :
искСлужащий.81гФамилия=«Иванов»
Пользовательский тип данных может содержать структурные элементы, тип которых также является пользовательским. Кроме того, можно декларировать массив, элементы которого принад лежат к определяемому пользовательскому типу.
8.4.2. ОПЕРАТОРЫ, ВЫРАЖЕНИЯ И ОПЕРАЦИИ
Строка с кодом в исходном тексте программы называется про граммным оператором. Он может представлять собой любую ком бинацию ключевых слов, свойств, функций, операций и симво лов, совокупность которых представляет собой конструкцию, рас познаваемую компилятором. Завершенный программный оператор может состоять из единственного ключевого слова, на пример Веер, или же комбинаций элементов, например следую щий оператор, присваивающий значение системного времени свойству Caption (надпись) объекта Label:
Label 1.Caption = Time
Программный оператор может включать выражения. Выра жение - это комбинация знаков операций и операндов, а также скобки. Назначение любого выражения - получение некоторого значения. Синтаксическая конструкция выражения может быть представлена в виде
Операнд 1 [операция Операнд 2 [операция Выражение]]
Например, вычисление площади круга может быть записано выражением:
(3.14159 * DA2)/4
Так как результатом вычисления выражения является некото рое значение, то в программном операторе выражение может быть представлено непосредственно значением, например:
Pi = 3.14159
408 |
Глава 8 |
В зависимости от типа формируемых значений определяются типы выражений. Например, если значениями выражения явля ются целые и вещественные числа, то говорят об арифметических выражениях.
Для формирования и последующего вычисления выражений служат операции. Для записи операций используются знаки опе раций, которые воспринимаются транслятором как отдельные лексемы. Каждая операция имеет свой приоритет (ранг). Опера ции ранга 1 имеют наивысший приоритет и в программном опе раторе выполняются первыми. Операции одного ранга в выраже ниях выполняются в соответствии с правилами ассоциативности (слева направо или наоборот).
П р и м е р программного оператора для вычисления накоп ленной стоимости:
dblHC = <1ЫПВ+ dblllB * dblHII/100
Запись dblIlB+ dblllB * dblHIT/lOO представляет собой ариф метическое выражение, в котором операндами являются неиме нованная числовая константа 100, а также переменные dblHC - для хранения величины накопленной стоимости, dblllB - для хра нения величины начального вклада и dblHIl - для хранения нор мы прибыли. Операнды связаны между собой знаками операций.
Операция присваивания
Значение переменной после декларации может оказаться про извольным. Для того чтобы присвоить переменной нужное значе ние, используется операция присваивания. Синтаксическая конст рукция присваивания:
ИмяПеременной = Выражение
где ИмяПеременной - имя переменной (идентификатор);
Выражение - значение (например, число) либо комбинация переменных, констант и функций, связанных знаками операций, например:
intl = 6 ' Переменной intl целого типа присваивается значение 6
В следующем операторе структурной составляющей Фами лия пользовательского типа Служащий присваивается фамилия Иванов:
Программирование |
409 |
Служащий. Фамилия = «Иванов» TxtFirstName.Text = FirstName
В последнем операторе значение переменной FirstName при сваивается элементу Text пользовательского типа данных с име нем TxtFirstName.
Математические операции
Математические операции применяются для записи формул. Формула представляет собой программный оператор, содержа щий числа, переменные, операторы и ключевые слова или же ком бинацию этих элементов и вычисляющий новое значение. Спи сок математических операций VBA и их рангов приведен в табл. 8.3.
Таблица 8.3
Математические операции
Операция
[Операнд1]+ [Операнд2] [Операнд 1] - [Операнд2] -[Операнд 1]
Математическое |
Ранг |
действие |
(приоритет) |
Сложение |
7 |
Вычитание |
7 |
Присвоение числу отри |
3 |
цательного значения |
|
[Операнд1] *[Операнд2] |
Умножение |
4 |
[Операнд 1] / [Операнд2] |
Деление |
4 |
[Операнд 1] \ [Операнд2] |
Целая часть от деления |
5 |
[Операнд1] Mod [Операнд2] |
Остаток от деления |
6 |
[Операнд!] Л [Операнд2] |
Возведение в степень |
2 |
Операции сложения, вычитания, умножения и деления назы вают основными математическими операциями и пояснений не требуют.
Остальные математические операции называются дополни тельными. Они применяются в специальных математических фор мулах и при обработке текстовой информации.
П р и м е р ы :
Result = 10 \ 3 (результат 3 - целая часть от деления); Result =10 Mod 3 (результат 1 - остаток от деления); Result = 3Л2 (результат 9);
Result = 9Л 0.5 (результат 3);
Result = 2Л -2 (результат 0.25).
410 |
Глава 8 |
Общие правила применения математических операций опре деляются следующим синтаксисом:
Result = Операнд1 Операция Операнд2 [ ...Операция Операнде
где Result |
- |
переменная, содержащая результат выпол |
Операнде ..., Операнды |
- |
нения оператора; |
переменные, константы, числовые значе |
||
|
|
ния, функции. |
Последовательность вычислений в программном операторе определяется приоритетом операций. Если в программном опе раторе некоторые выражения заключены в круглые скобки, то такие выражения вычисляются первыми.
П р и м е р :
Result = (25+45) + 10Л2* 9
В этом программном операторе в первую очередь будет вы числено выражение в скобках (25+45), затем число 10 будет воз ведено в степень 2 и результат умножен на 9. Последним будет выполнено действие сложения. Результат вычисления - 970.
Операции отношения
В отличие от математических операций, результатом выпол нения которых может быть любое значение, операция отноше ния может иметь только два результирующих значения - True (ис тина) и False (ложно), которые могут быть присвоены перемен ным типа Boolean или определенному свойству объекта. Перечень операций отношения VBA приведен ниже.
Операция |
Описание |
[Операнд 1]= [Операнд2] |
Равно. Результат - True, если первый |
[Операн1]о [Операнде] |
операнд равен второму |
Не равно. Результат - True, если |
|
|
первый операнд не равен второму |
[Операнд1]> [Операнд2] |
Больше. Результат -True, если пер |
[Операнд1]< [Операнд2] |
вый операнд больше второго |
Меньше. Результат -True, если пер |
|
|
вый операнд меньше второго |