идентифицирует строковые данные из строки 4 и столбца 6 в двумерном массиве строк.

Не забывайте, что числа или значения, которые вы должны указать в индексе для идентификации элемента массива, зависят от системы нумерации, указанной вами при объявлении массива. Если массив объявлен оператором Dim strSayings ( 10, 20 ) As String, то выражение strSayings (4, 6) идентифицирует данные из пятой строки седьмого столбца массива. Но если массив объявлен Dim strSayings ( 4 To 10, 6 То 50) As String, то же самое выражение означает данные из первой строки первого столбца.

В рамках описанной системы можно использовать элементы массива как обычные переменные. Вы можете сделать следующее:

* присвоить элементу массива значение; в следующем примере значение присваивается X конкретному элементу трехмерного массива данных типа Currency:

curBigDough ( 5, 8, 19 ) = 27.99

* присвоить значение, хранящееся в массиве, некоторой переменной, например:

datThatDate = datTheseDates ( 25,10)

* использовать значение элемента массива в выражении, например:

intA = 35 * ( intB + intCounts ( 3,2 ) )

Конечно, в индексах можно использовать не только буквальные значения. Задание индекса с помощью переменных позволяет выбрать в программе тот элемент массива, который нужен в данный момент. Это демонстрирует последняя строка следующего фрагмента программы:

Sub FortuneTeller()

Dim strTodaysFortune(1 To 10)

Dim intUserChoice As Integer

strTodaysFortune(1) = _

"Вы станете богатым и знаменитым на 15 минут . "

strTodaysFortune(2) = _

"Вам предстоит обед с высоким незнакомцем ."

strTodaysFortune(3) = "Стоимость ваших акций удвоится!"

strTodaysFortune(4) = _

"Вы вспомните, где положили свои ключи."

strTodaysFortune(5) = _

"Вы получите огромный букет от анонимного почитателя."

strTodaysFortune(6) = "Вы опоздаете на обед."

strTodaysFortune(7) = "Все ваши мечты сбудутся."

strTodaysFortune(8) = _

"Вам вернут взятые у вас библиотечные книги."

strTodaysFortune(9) = _

"Никто не заметит ваших разных носков."

strTodaysFortune(l0) = _

"Вы встретите своего старого друга в супермаркете."

intUserChoice = InputBox("Чтобы узнать свое будущее," _

& " введите число от 1 до 10")

MsgBox (strTodaysFortune(intUserChoice))

Кстати, этот программный код можно существенно улучшить, если добавить в него обработку неправильного ввода, возможного при ответе пользователя на запрос функции Input Box. О проблемах проверки данных при вводе говорилось в главе 10.

Чтобы выяснить, как много элементов может вместить некоторое измерение массива, используйте функцию Ubound, которая особенно полезна при работе с динамическими массивами, поскольку в разные моменты выполнения программы динамический массив может содержать разное число элементов. Синтаксис функции UBound следующий:

UBound [имя_массива, измерение]

Аргумент имя_массива, очевидно, задает имя массива, к которому нужно обратиться, а аргумент измерение задает целое число, которое подскажет VBA, какое измерение массива вас интересует. Если измерение не указано, функция UBound возвратит размер первого измерения массива.

При первом создании массива его элементы не содержат никакой действительной информации. В некоторый момент в программе вам необходимо будет заполнить вакантные места массива подходящими данными. Если нужно разместить сразу много данных, лучше всего для этого подойдут вложенные циклы For . . . Next, по одному на каждое измерение массива. Для счетчика цикла обычно выбирается временная переменная, объявляемая в процедуре, содержащей все эти циклы.

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

Const Size As Integer = 3

Dim dblMatrix (1 To Size, l To Size, l To Size) As Double

Sub ArrayFiller ( )

Dim I As Integer, J As Integer, К As Integer, X As Integer

X = 1

For I = 1 To Size

For J = 1 To Size

For К = 1 To Size

dbl Matrixf l, J, K) = X

X = X + 1

Next К

Next J

Next I

End Sub

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

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

Иллюстрация этого мысленного эксперимента показана на рис. 13.2.

Рис. 13.2. Этот чертеж представляет массив для хранения данных; стрелки с буквами соответствуют измерениям массива

Обратите внимание на то, что в главной строке этого программного кода, dblMatrix ( I, J, К) = X, переменные I, J и К представляют соответственно первое, второе и третье измерения массива. На рис. 13.2 я произвольным образом назначил эти буквы сторонам куба, задающим его измерения.

Теперь посмотрите, как эти переменные используются в циклах For . . . Next. Счетчиком внешнего цикла является I, следующего- J и последнего, внутреннего, - К. Нужно понять, что VBA начнет выполнение с внутреннего цикла, пройдя к нему сквозь все содержащие его циклы. Кубы на рис. 13.3 показывают два последовательных момента в самом начале заполнения массива из этого примера.

Л пока этот внутренний цикл выполняется, VBA не меняет значения переменных I и J. Когда внутренний цикл первый раз пройден полностью, первый раз получит возможность сделать шаг следующий

Вы читаете VBA для чайников
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату