Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОСНОВЫ ОФИСНОГО ПРОГРАММИРОВАНИЯ И ЯЗЫК VBA - 1....doc
Скачиваний:
59
Добавлен:
17.12.2018
Размер:
1.88 Mб
Скачать

Массивы

Простейший и самый распространенный структурный тип - массив - упорядоченная совокупность данных одного типа. Порядок на элементах массива задается индексами его элементов. В VBA массивы могут быть одномерными и многомерными. Удивительно, сколь высока допустимая размерность массива, - число измерений доходит до 60. За всю свою многолетнюю практику не припомню случая использования более чем трехмерных массивов.

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

{Dim | Private | Public | Static }<имя переменной> (<список размерностей>)

[ As <имя типа>]

Синтаксически каждое измерение в списке отделяется запятой и определяется заданием нижней и верхней границы изменения индексов. По историческим причинам в Бейсике нижняя граница была фиксирована и равна 0. Затем ввели специальную опцию OptionBase, позволяющую устанавливать эту границу равную 1 или 0. Подумав еще, разрешили задавать нижнюю и верхнюю границу, причем и та и другая могут быть выражениями при одном ограничении - это должны быть константные выражения, не содержащие переменных. Вот "классическое" объявление одномерного массива и работа с ним:

Public Sub MyArray()

Const LowBound As Integer = -5, HighBound As Integer = 5

Dim MyArr(LowBound To HighBound) As Byte

Dim I As Integer

Debug.Print "Элементы массива MyArr:"

For I = LowBound To HighBound

MyArr(I) = I + 6

Debug.Print MyArr(I)

Next I

End Sub

При печати элементов этого массива будут напечатаны числа от 1 до 11 по числу его элементов.

При объявлении массива всегда задавайте нижнюю границу, исходите из того, что граничная пара, задающая размерность, должна удовлетворять синтаксису:

<граничная пара> ::= <константное выражение> To <константное выражение>

Не используйте Option Base. Это ненадежное средство.

Программист Бэдли (не "наш" программист), зная, что массивы положено объявлять, дал следующее объявление:

Dim BadArr(10)

Запись получилась короткой, он написал ее быстро и был горд собой. Могу подтвердить, Бэдли действительно быстро пишет программы, жаль только, что они не всегда правильно работают. Вот еще один пример его работы:

'Option Base 0

Option Base 1

Dim Vector(10)

Dim A1(5), A2(5) As Integer

'Бэдли добавил новое объявление массива Matrix

'При работе с матрицей ему удобно было, чтобы индексы начинались с 1,

'поэтому он изменил опцию Base, отменив предыдущее соглашение

'Ранее работавшая процедура War перестала работать

Dim Matrix(10, 20) As Double

Public Sub War()

Dim i

For i = 0 To 5

A1(i) = i: A2(i) = i + 5

Vector(i) = A1(i): Vector(i + 5) = A2(i)

Next i

End Sub

Каждая строчка этого быстро написанного текста должна быть переписана при хорошем программировании.