7.1.5
Области видимости переменных и констант
Переменная может быть доступна для всей программы или только для
одной или нескольких ее частей. Область программы, в которой может быть использована переменная, называется
областью видимости переменной. Переменные могут быть видимы в одной процедуре, в
любой процедуре какой – либо формы или во всей программе. Если переменная
видима, то она доступна и, следовательно, существует. Переменная может существовать и быть
доступной для некоторых частей программы и при этом быть недоступной
(“невидимой”) для других частей программы.
Пример:
Option
Explicit
Dim strФамилия As String *
18 ‘Глобальная
переменная
Dim strИмя As String * 10
‘Глобальная переменная
Private Sub
UserForm_Initialize()
Dim strАдрес As String * 30 ‘Локальная переменная
strФамилия =
“Петров”
strИмя =
“Леонид”
strАдрес = “Москва, Кронштадская, дом
Вывод strАдрес
End
Sub
Sub Вывод(strD As
String)
Dim strФамилия As String * 18 ‘Локальная
переменная
strФамилия = “Это уже не
Петров!”
MsgBox
strФамилия
MsgBox
strИмя
MsgBox
strD
End Sub
В результате выполнения этой программы в окнах
вывода будет следующий текст:
Это уже не Петров!
Леонид
Москва, Кронштадская, дом
37.
Приведем пояснения: strФамилия и
strИмя объявлены как глобальные переменные и существуют пока программа
выполняется. StrАдрес и strD являются локальными переменными и существуют лишь
тогда, когда выполняется процедура Вывод, в которой они объявлены. В момент
вызова этой процедуры глобальная переменная strФамилия существует, но является
недоступной, так как ее область видимости перекрыта одноименной локальной
переменной, поэтому в окно вывода будет выдано значение той переменной
strФамилия, которая объявлена в процедуре Вывод. Переменная strИмя также
является глобальной, но она доступна для процедуры Вывод. Переменная strАдрес
объявлена в процедуре UserForm_Initialize, но она доносит значение до окна вывода, так как
передается в процедуру Вывод в качестве параметра.
Область видимости переменной
задается при ее декларации одним из ключевых слов:
Dim – объявляет локальные
переменные, существующие только во время вызова процедур или функций, в которых
они объявлены. Если переменная объявляется в разделе глобальных объявлений
модуля или формы, то она доступна для всех процедур и функций этого модуля. Для
других модулей она будет не видна.
Private - не может объявлять
переменную внутри процедуры или функции, при объявлении в разделе глобальных
объявлений модуля Dim и Private равнозначны.
Public- объявленная таким
образом переменная является глобальной на уровне приложения и доступна из всех
его модулей.
Различают динамические и
статические переменные. Статические
переменные объявляются внутри процедуры или функции и вне их недоступны. В
отличие от обычных локальных переменных они не инициализируются при входе в
процедуру или функцию, где они объявлены. Для создания статической переменной
необходимо при ее объявлении вместо ключевого слова Dim указать слово
Static:
Static intNumber As Integer
7.1.6
Декларация
массивов
В Visual Basic различают два
вида переменных – простые переменные и переменные структурного типа. Простые
переменные служат для идентификации и резервирования памяти под одно данное.
Переменные структурного вида предназначены для идентификации и резервирования
памяти для нескольких данных. Частным случаем переменной структурного вида
является массив. Массив представляет собой структуру, все элементы которой имеют
одинаковый тип. Например, это могут
быть данные, определяющие вектор или матрицу. Массивы могут быть одномерными и
многомерными. Так, для отображения вектора может быть использован одномерный
массив, а для отображения матрицы – многомерный.
Декларация массива имеет
следующий вид:
[Public/ Private] Dim Имя_Массива(индексы) As
Тип_Данных
где Dim– ключевое слово,
указывающее, что объявляется переменная;
Имя_Массива – идентификатор,
определяющий имя массива;
Индексы – значение индекса
(номера) последнего элемента в массиве, считая с нулевого;
As – ключевое слово,
предваряющее указание типа элементов массива;
Тип_Данных – любой,
действительный для Visual Basic тип данных – базовый, или созданный
пользователем.
Например, декларация одномерного
массива из восьми элементов выглядит следующим образом:
Dim
MyArray(7) As Integer ‘ Одномерный массив из 8 _
элементов
При декларации многомерного
массива в поле индекса указывается несколько индексов, в соответствии с
размерностью массива. Например, двумерный массив из шести столбцов и пяти строк
декларируется следующим образом:
Dim strMyArray(4,5) As
String ‘ Двумерный массив
_
из
5 строк и 6 столбцов
По умолчанию значение нижней
границы массива при таком
объявлении равно нулю. В этом случае говорят, что 0 – базовый индекс массива. При
необходимости базовый индекс можно изменить путем использования ключевого слова
To при объявлении массива:
Dim
MyArray (3 To 10) As String
В этом примере базовому индексу
массива установлено значение 3. Подобным образом можно устанавливать как
положительные, так и отрицательные базовые индексы:
Dim
MyArray (-3 To 4) As String
Иногда в процессе выполнения
программы размер массива требуется изменить. В этом случае первоначально массив
декларируют как динамический. Для этого в декларации не указывается размерность,
например:
Dim MyArray () As
String
Количество элементов в
динамическом массиве и его размерность в процессе выполнения программы можно
переопределить с помощью ключевого слова ReDim. Синтаксическая конструкция
переопределения массива имеет вид:
ReDim [Preserve]
ИмяМассива(индексы) [As ТипДанных],
где ReDim – ключевое слово,
указывающее, что переопределяются размеры массива;
Preserve – необязательное ключевое слово,
с помощью которого дается указание, чтобы все элементы переопределяемого массива
сохранили свое значение;
индексы – размерности массива
(до 60).
Пример:
Dim
MyArray () As String ‘Декларация динамического _
массива
Dim
ValArray As Integer ‘Декларация переменной, _
для хранения размерности
массива
ValArray=9
‘Инициализация значения
ReDim strMyArray (intValArray) ‘Одномерный массив
_
из 10 элементов (базовый индекс равен
0)
ReDim MyArray (3 To ValArray, 1
To ValArray) ‘ Двумерный _ массив с базовыми индексами, отличными
от нуля