Чтение онлайн

на главную - закладки

Жанры

Офисное программирование
Шрифт:

Dim ТрехММассив (X, Y, Z) As ТипДанных

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

Выбор размера массива может быть затруднен, если неизвестно, сколько данных будет введено в массив, или если объем данных, собираемых для массива, значительно меняется. Для подобных ситуаций VBA поддерживает особый тип массивов, называемый динамическим (dynamic) массивом.

Динамические массивы создаются с помощью оператора Dim, Private, Public или Static, причем список размерностей опускается, затем их размер устанавливается с помощью оператора ReDim во время выполнения процедуры.

Оператор ReDim имеет следующий синтаксис:

ReDim [Preserve] varname (subscripts) [As type] [, varname (subscripts) [As type]],

где необязательное ключевое слово Preserve приводит к тому, что VBA сохраняет данные в имеющемся массиве, когда изменяется размер массива с помощью ReDim;

varname – имя существующего массива;

subscripts – измерения массива (синтаксис для оператора subscripts в операторе ReDim такой же, как для оператора Dim);

type – любой тип VBA или определенный пользователем тип.

Необходимо использовать отдельный оператор As type для каждого массива, который вы определяете.

Примеры:

1) Dim Month As String – объявляет динамический массив Month;

2) ReDim Month(1 to 30) – изменяет размер массива до 30 элементов;

3) ReDim Month(31) – изменяет размер массива до 31 элемента;

4) ReDim Preserv Month(1 to 31) – изменяет размер массива до 31 элемента, сохраняя содержимое;

5) Dim Table As Integer – объявляет динамический массив;

6) ReDim Table(3, 15) – делает массив двумерным;

7) ReDim Table(4, 20) – изменяет размер двумерного массива;

8) ReDim Preserv Table(4, 25) – только изменяет последний размер массива;

9) Dim Mas as Variant – объявляет переменную типа Variant;

10) ReDim Mas(20) As Integer – создает массив 20 целых чисел в Variant.

Выводы:

1) можно изменять только последнее измерение многомерного массива, когда используется ключевое слово Preserv;

2) можно использовать ReDim для создания типизированного массива внутри переменной типа Variant.

Массив в программе можно также определить поэлементно. Например, следующий код

Dim B(l to 2, 1 to 2) as single

В(1,1)=2

В(1,2)=5

В(2,1)=4

В(2,2)=3

создает двумерную таблицу

При работе с массивами бывает полезно применять следующие функции и процедуры.

1. Array (списокАргументов)

Создает массив типа Variant. Аргумент в скобках представляет разделенный запятыми список значений, присваиваемых элементам массива.

Пример:

Dim День As Variant

День=Array(«Пн»,"вт","ср",….)

2. VBA имеет две функции, которые отслеживают верхний и нижний индексы предела массива, – функции Lbound и ubound. Эти функции возвращают нижнее и верхнее граничные значения индексов статического или динамического массива.

Синтаксис:

Lbound (имяМассива [, размерность])

Ubound (имяМассива [, размерность]),

где ИмяМассива – имя переменной массива;

Размерность – целое число, указывающее размерность массива, нижнюю или верхнюю границу которой возвращает функция. Для первой размерности следует указать 1, для второй – 2 и т. д. Если аргумент размерность опущен, подразумевается значение 1.

3. Использование оператора Erase для очистки или удаления массивов.

Оператор Erase позволяет выполнять одну из двух задач в зависимости от того, каким массивом манипулирует пользователь – статическим или динамическим. В случае статических массивов Erase позволяет очищать все элементы массива, в основном переустанавливая массив в то же самое состояние, какое он имел, когда VBA создавал его в оперативной памяти. В случае динамических массивов Erase позволяет полностью удалять массив и его содержимое из оперативной памяти.

VBA удаляет из памяти массивы, объявляемые локально в процедуре (так же, как и любые другие локальные переменные), каждый раз, когда процедура прекращает выполняться. Однако массивы, объявляемые на модульном уровне, существуют, пока любая процедура в этом модуле выполняется. Если программа большая, можно восстановить ресурс памяти, используемой динамическими массивами модульного уровня. Оператор Erase позволяет делать именно это.

Оператор Erase имеет следующий синтаксис:

Erase array1 [, array2, …]

Здесь array1 и array2 представляют любое допустимое имя массива VBA.

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

Поделиться:
Популярные книги

Дневники св. Николая Японского. Том V

Японский Николай
Религия и эзотерика:
православие
христианство
религия
5.00
рейтинг книги
Дневники св. Николая Японского. Том V

Войны мафии

Уоллер Лесли
Детективы:
триллеры
5.75
рейтинг книги
Войны мафии

Мятежник

Прокофьев Роман Юрьевич
4. Стеллар
Фантастика:
боевая фантастика
7.42
рейтинг книги
Мятежник

Среда обитания (сборник)

Высоцкий Сергей Александрович
Советский детектив
Детективы:
криминальные детективы
5.00
рейтинг книги
Среда обитания (сборник)

100 великих войн

Соколов Борис Вадимович
100 великих
Справочная литература:
энциклопедии
6.40
рейтинг книги
100 великих войн

Кодекс Охотника. Книга XXXIII

Винокуров Юрий
33. Кодекс Охотника
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Кодекс Охотника. Книга XXXIII

Локки 11. Потомок бога

Решетов Евгений Валерьевич
11. Локки
Фантастика:
героическая фантастика
боевая фантастика
фэнтези
юмористическое фэнтези
6.00
рейтинг книги
Локки 11. Потомок бога

Тень Нерона

Алферова Марианна Владимировна
3. Сыщик
Фантастика:
детективная фантастика
6.25
рейтинг книги
Тень Нерона

Кодекс Крови. Книга ХVI

Борзых М.
16. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.25
рейтинг книги
Кодекс Крови. Книга ХVI

Наследие Маозари 6

Панежин Евгений
6. Наследие Маозари
Фантастика:
попаданцы
постапокалипсис
рпг
фэнтези
эпическая фантастика
5.50
рейтинг книги
Наследие Маозари 6

Книгоедство

Етоев Александр Васильевич
Проза:
современная проза
5.00
рейтинг книги
Книгоедство

Исторический материализм

Коллектив авторов
Научно-образовательная:
история
философия
политика
5.00
рейтинг книги
Исторический материализм

Искушение чародея (сборник)

Булычев Кир
Фантастика:
научная фантастика
космическая фантастика
6.20
рейтинг книги
Искушение чародея (сборник)

Правь, Британия!

дю Морье Дафна
Проза:
современная проза
6.25
рейтинг книги
Правь, Британия!