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

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

Жанры

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

Обычно в VBA используются массивы с нулевой базой. В системе нумерации с нулевой базой индекс для первого элемента в любом измерении массива является равным 0; массив с 10 элементами имеет индексы от 0 до 9.

Было бы гораздо удобнее, если бы элементы массива нумеровались начиная с 1, а не с 0. VBA позволяет задавать начальное число для элементов массива, используя директиву компилятора Option Base для указания того, должна ли нумерация индексов начинаться с 0 или с 1.

Директива компилятора Option Base имеет следующий синтаксис:

Option Base 0 | 1

Если оператор Option Base не используется, VBA начинает нумерацию индексов массива с 0 (по умолчанию). Необходимо помещать оператор Option Base в область объявлений модуля перед объявлениями любых переменных, констант или процедур. Нельзя помещать оператор Option Base внутри процедуры. Можно иметь только один оператор Option Base в модуле; оператор Option Base влияет на все массивы, объявляемые в модуле, независимо от того, являются ли они локальными в процедуре или объявляются на модульном уровне.

Например:

Option Base 0 'установка по умолчанию с нуля

Option Base 1 'индексы массивов начинаются с 1

Пример 11. Создать программу, организующую три двумерных массива. Первые два массива определены поэлементно в программе. Третий массив А организуется путем суммирования соответствующих членов массивов В и С (рис. 24).

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

Листинг примера 11

Private Sub CommandButton1_Click

Dim B(1 To 2, 1 To 2) As Integer

Dim c(1 To 2, 1 To 2) As Integer

Dim A(1 To 2, 1 To 2) As Integer

B(1, 1) = 5

B(1, 2) = 4

B(2, 1) = 8

B(2, 2) = 10

c(1, 1) = 0

c(1, 2) = 1

c(2, 1) = 5

c(2, 2) = 10

For i = 1 To 2

For j = 1 To 2

A(i, j) = B(i, j) + c(i, j)

Next j

Next i

Label1.Caption = «a(1,1)=» & A(1, 1) & « a(1,2)=» & A(1, 2)& « a(2,1)=» & A(2, 1) & « a(2,2)=» & A(2, 2) Label2.Caption = «b(1,1)=» & B(1, 1) & « b(1,2)=» & B(1, 2) & « b(2,1)=» & B(2, 1) & « b(2,2)=» & B(2, 2)

Label3.Caption = «c(1,1)=» & c(1, 1) & « c(1,2)=» & c(1, 2) & « c(2,1)=» & c(2, 1) & « c(2,2)=» & c(2, 2)

End Sub

Рис. 24. Форма примера 11 в режиме конструктора и в рабочем состоянии

Пример 12. Создать программу, создающую два двумерных массива: один массив вводом числовых элементов в соответствующие текстовые поля формы, второй – вводом четырех произвольных фамилий в соответствующие текстовые поля формы (рис. 25, 26). В результате все элементы первого массива увеличиваются на 10 и выводятся в соответствующую метку на форме. Элементы же второго строкового массива организуют вывод предложений типа: работник фамилия Иванов, где Иванов (например) берется из строкового массива, введенного в соответствующие текстовые поля. Данные результаты получаются после нажатия на кнопку Вывод пользовательского диалогового окна.

Рис. 25. Форма примера 12 в режиме конструктора

Рис. 26. Форма примера 12 в рабочем режиме

Листинг примера 12

Private Sub CommandButton1_Click

Dim B(1 To 2, 1 To 2) As String

Dim c(1 To 2, 1 To 2) As String

Dim A(1 To 2, 1 To 2) As String

Dim d(1 To 2, 1 To 2) As Integer

Dim k(1 To 2, 1 To 2) As Integer

B(1, 1) = TextBox5.Text

B(1, 2) = TextBox6.Text

B(2, 1) = TextBox7.Text

B(2, 2) = TextBox8.Text

d(1, 1) = Val(TextBox1.Text)

d(1, 2) = Val(TextBox2.Text)

d(2, 1) = Val(TextBox3.Text)

d(2, 2) = Val(TextBox4.Text)

For i = 1 To 2

For j = 1 To 2

k(i, j) = d(i, j) + 10

Next j

Next i

For i = 1 To 2

For j = 1 To 2

c(i, j) = «фамилия» + B(i, j)

Next j

Next i

For i = 1 To 2

For j = 1 To 2

A(i, j) = «работник» + c(i, j)

Next j

Next i

Label3.Caption = «a(1,1)=» & A(1, 1) & « a(1,2)=» & A(1, 2) & « a(2,1)=» & A(2, 1) & « a(2,2)=» & A(2, 2)

Label6.Caption = «k(1,1)=» & k(1, 1) & « k(1,2)=» & k(1, 2) & « k(2,1)=» & k(2, 1) & « k(2,2)=» & k(2, 2)

End Sub

3.2. Работа с различными типами данных

Тип, определяемый пользователем

VBA позволяет пользователю определять свои собственные типы данных. Определенный пользователем тип нужен, когда одной переменной необходимо обозначить несколько связанных по смыслу элементов данных, причем эти элементы данных могут быть разных типов. Пример структурного типа приведен на рис. 27. Тип Book состоит из трех элементов: Title (название книги) имеет тип String, Content – динамический массив строкового типа, содержащий название глав книги, Author (автор книги), который, в свою очередь, тоже является структурным типом, состоящим из двух простых элементов – Name (имя) и Birthday (день рождения).

Рис. 27. Пример структурного типа, определяемый пользователем

Для объявления такого типа данных используется оператор Туре:

Туре <имяТипа>

…<имяЭлемента1> [([<размер1>])] As <типДанных1>

…<имяЭлемента2> [([<размер2>])] As <типДанных2>

End Туре

Элементами типа могут быть простые переменные и массивы встроенных типов, а также переменные и массивы других определенных пользователем типов. Типы Book и Person (см. рис. 27) могут быть объявлены следующим образом:

Type Person

Name As String

Birthday As Date

End Type

Type Book

author As Person

Title As String

Content as String

End Type

Объявление переменных структурного типа выполняется так же, как и обычных переменных:

Dim MyBook As Book, Editor As Person

Обращение к элементу структурного типа выполняется следующим образом:

MyBook.Title = «Учебник»

ReDim MyBook.Content (0 to 10)

MyBook.Content(0) = «От автора»

Перечисляемый тип

Еще одним видом структурного типа данных является перечисляемый тип. Элементами перечисляемого типа являются все его значения. Определяется перечисляемый тип с помощью оператора Enum:

Enum <имяТипа> <имяЗначения1> [=<Константа>] <имяЗначения2>

[=<Константа>]

End Enum

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

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

Шакалы

Леонов Николай Иванович
18. Гуров
Детективы:
полицейские детективы
7.36
рейтинг книги
Шакалы

Санта-Хрякус

Пратчетт Терри Дэвид Джон
20. Плоский мир
Фантастика:
юмористическая фантастика
9.04
рейтинг книги
Санта-Хрякус

Огненный зверь (сборник)

Джордан Роберт
Фантастика:
фэнтези
5.00
рейтинг книги
Огненный зверь (сборник)

Князь Андер Арес 2

Грехов Тимофей
2. Андер Арес
Фантастика:
рпг
аниме
фэнтези
фантастика: прочее
5.25
рейтинг книги
Князь Андер Арес 2

Мясной Бор

Гагарин Станислав Семенович
Проза:
военная проза
историческая проза
7.50
рейтинг книги
Мясной Бор

Избранное

Скоп Юрий Сергеевич
Проза:
советская классическая проза
6.25
рейтинг книги
Избранное

Валентин Катаев

Катаев Валентин Петрович
Юмор:
юмористическая проза
прочий юмор
5.00
рейтинг книги
Валентин Катаев

Личник

Валериев Игорь
3. Ермак
Фантастика:
альтернативная история
6.33
рейтинг книги
Личник

Перекрестья

Вилсон Фрэнсис Пол
7. Наладчик Джек
Фантастика:
ужасы и мистика
8.11
рейтинг книги
Перекрестья

Радищев

Форш Ольга Дмитриевна
Проза:
историческая проза
5.20
рейтинг книги
Радищев

Статьи из "Арабесок"

Гоголь Николай Васильевич
Другие редакции
Документальная литература:
публицистика
4.75
рейтинг книги
Статьи из Арабесок

Гримуар темного лорда II

Грехов Тимофей
2. Гримуар темного лорда
Фантастика:
фэнтези
попаданцы
аниме
5.25
рейтинг книги
Гримуар темного лорда II

Архонт

Прокофьев Роман Юрьевич
5. Стеллар
Фантастика:
боевая фантастика
рпг
7.85
рейтинг книги
Архонт

Вино грез

Дик Филип Киндред
Фантастика:
научная фантастика
6.25
рейтинг книги
Вино грез