- •Bведение
- •1. Основы языка Basic
- •1.1. Основные структуры
- •1.2. Операторы ввода, вывода, позиционирования
- •1.3. Числа
- •1.4. Строки
- •1.5. Операторы def, dim, пользовательский тип
- •1.6. Разветвление и альтернатива
- •1.7. Циклы
- •If k then print "пароль принят" else print "ошибка пароля"
- •Input "Введите произвольный текст : ", txt
- •Input X
- •1.8. Программные стэки
- •1.9. Массивы
- •If I and jb then
- •Input n
- •1.10. Функции, подпрограммы
- •1.11. Файлы
- •1.12. Сегментирование программы
- •Input n
- •1.13. Работа с графической информацией
- •If nu then gosub Move 'перемещение рисунка
- •1.14. Звуковое воспроизведение
- •2. Элементы vba
- •2.1. Типы переменных
- •2.2. Использование массивов
- •2.3. Разветвление и циклы
- •2.4. Работа с ячейками листа
- •If y X Then
- •If Check Then
- •2.5. Элементы управления
- •If X 0 Then
- •2.6. Пользовательские классы
- •If IsEmpty(Text2) Then Exit Sub
- •2.7. Построение графиков в excel
- •2.8. Построение графиков и таблиц в word
- •3. Ключи в word
- •4. Гипертекстовая разметка
- •4.1. Основные тэги html
- •4.2. Форматирование таблиц
- •4.3. Фреймы
- •5. Основы программирования в среде MathCad
- •5.1. Особенности языка MathCad
- •5.2. Некоторые вычислительные модели
- •5.2.1. Системы уравнений
- •5.2.1.1. Системы линейных уравнений
- •Iter(a, b, e) n Last (b)
- •5.2.1.2. Нелинейные уравнения и системы
- •5.2.2. Определенный интеграл
- •5.2.3. Функции на дискретном множестве
- •5.2.4. Обыкновенные дифференциальные уравнения
- •5.2.5. Минимизация функций
- •5.2.5.1. Функции одной переменной
- •5.2.5.2. Функции многих переменных
- •5.2.6. Pазностная модель и прогноз
- •1 Otherwise (коэффициенты непрерывной модели)
- •5.2.7. Сглаживание и осреднение рядов
- •Задания
- •Литература
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 до 2109 символов,
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 также очищает массив фиксирован-ного размера, но динамический массив уничтожается и освобождается его место в памяти.