Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Informatics.doc
Скачиваний:
6
Добавлен:
21.08.2019
Размер:
1.33 Mб
Скачать

2.1. Типы переменных

В отличие от стандартного Q-Бейсика в VBA допустимы типы:

Boolean (2 байта) со значением True, False,

Byte (1 байт) - целое без знака от 0 до 255,

Currency (8 байт) - денежный, вычисление с фиксированной запятой,

диапазон от - N + 0.0001 до N, где N = 922 337 203 685 477.5807,

Date (8 байт) - значение даты и времени от 1 января 100 года до 31 де-

кабря 9999 года,

Integer (2 байта) - целые от -215 до 215 - 1,

Long (4 байта) - длинные целые от - 231 до 231 -1,

Single (4 байта) - действительные числа с модулем в пределах от n до

m, где n = 1.401298E-45 , m = 3.402823E38, или ноль,

Double (8 байт) - длинные действительные числа с модулем в пределах

от n до m, где

n = 4.94065645841247E-324, m = 1.79769313486232E308, или 0,

String (1 байт / символ) - строки, содержащие от 0 до 2109 символов,

Variant (16 байт + 1 байт / символ) - данные произвольного типа (кро-

ме типа пользователя),

Object ( 4 байта) - для ссылки на объекты Excel, Word и т. д., может

принимать конкретный вид (по типу объекта).

Если тип переменной не указан, то по умолчанию она относится к ти-пу Variant . Не указанный пользователем тип требует от системы бóль-

ших ресурсов и бóльшего времени (плата за "универсальность"). Для

небольших программ это несущественно, но при разработке приложе-

ний это может привести к замедлению работы. В программных моду-лях обычно требуется явное описание типов переменных с помощью операторов DEFINT, DEFSTR и т.д. и оператора DIM (в одном опера-торе DIM можно описывать несколько переменных, но каждая со сво-им ключевым словом AS и указателем типа, разбив описания запяты-ми). Тип OBJECT требует иной формы оператора присваивания:

Set ‹ имя › = ‹ объект ›

Пример 1. Запишем целое случайное число в ячейку А1 рабочего листа Excel.

DIM CT AS OBJECT

SET CT = Worksheets(1). Range("A1")

CT.Value = INT(1000 * RND) ' Запись числа в ячейку A1,

MsgBox CT.Value ' Вывод числа на экран.

Во второй строке присваивается объект, в третьей - число.

Работа с типом пользователя облегчается использованием констру-

кции With ... End With (как, например, в Паскале)

Пример 2. Создадим пользовательский тип и занесем информа-

цию в переменную нового типа.

TYPE Person

Pname AS String

Page AS Integer

PbirthDate AS Date

END TYPE

DIM Friend AS Person

WITH Friend

.Pname = "Лисицын В."

.Page = 18

.PbirthDate = #9/28/82#

END WITH 'Запись данных в переменную Friend.

2.2. Использование массивов

а) Стандартное определение, как в Бейсике (размерность до 60); б) Явное определение с ключевым словом ARRAY(список эле-ментов массива через запятые), при этом не требуется использование оператора DIM. Это избавляет от необходимости использования опе-ратора DATA.

Пример 1. A = ARRAY("Николаев", 23, "холост", 288105, #11/14/77#). В этом случае переменная А должна быть описана типом VARIANT.

Индексация по умолчанию начинается (как и в Бейсике) с нуля, но оператор OPTION BASE 1 позволяет начать ее с 1 (при явном опи-сании массива диапазон индексов можно указывать с разумной произ-вольностью: например, DIM T(5 TO 11) AS INTEGER позволяет инде-

ксам массива Т меняться от 5 до 11). Функции LBound и UBound возв-ращают нижний и верхний предел изменения индексов массива.

В отличие от Бейсика в VBA границы индексов массива нельзя указывать именами переменных (нельзя, например, определить массив строкой DIM A(n), где n - ранее определенное целое число). Границы индексов должны быть числами. Можно обойти эту трудность, вводя динамические массивы, определив их в начале программы формально, затем с помощью оператора REDIM определить их в зависимости от вычисленных параметров.

Пример 2. Определим массив в зависимости от введенного пара-

метра: SUB TEST()

DIM A() AS SINGLE 'определен динамический массив

DIM n AS integer

n = Val (InputBox ("Введите размер массива"))

REDIM A(n) . . .

END SUB

Для массивов фиксированного размера оператор REDIM также выполняет функцию очистки (засеивает массив нулями). Если в про-цессе работы программы обнаруживается, что размер массива недос-таточен, то его можно изменить с сохранением информации операто-ром REDIM PRESERVE, при этом добавленная часть массива запол-няется нулями. Оператор ERASE также очищает массив фиксирован-ного размера, но динамический массив уничтожается и освобождается его место в памяти.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]