Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Косарев_Экомическая информатика

.pdf
Скачиваний:
170
Добавлен:
03.05.2015
Размер:
9.05 Mб
Скачать

Программирование

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, если пер­

 

вый операнд меньше второго