- •Введение в vba для приложений ms office
- •1. Базовые элементы языка vba
- •1.1. Алфавит, словарь, идентификаторы
- •1.2. Типы данных
- •1.3. Переменные
- •Dim имяПеременной [As тип] [, имяПеременной [As тип] …
- •1.4. Константы
- •1.5. Операции и операторы vba
- •1.7. Выражения
- •1.8. Приоритеты операций
- •1.9. Оператор присваивания
- •1.10. Структура программы
- •1.11. Правила оформления кода
- •2. Организация ввода – вывода данных
- •2.1. Окно сообщения. Стандартная процедура MsgBox
- •2.2. Окно ввода. Стандартная функция InputBox()
- •InputBox (сообщение [, заголовок] [, умолчание])
- •2.3. Ввод/вывод данных с/на рабочий лист Excel
- •3. Программирование линейных алгоритмов
- •4. Программирование разветвляющихся алгоритмов
- •4.1. Условный оператор If…Then
- •4.2. Условный оператор If…Then…Else
- •4.3. Условный оператор If…Then…ElseIf
- •4.4. Примеры использования оператора условного перехода If
- •5. Программирование циклических алгоритмов
- •5.1. Оператор цикла While…Wend
- •5.2. Оператор цикла For…Next
- •5.3. Табулирование функции
- •6. Литература
1.2. Типы данных
Понятие типа является одним из фундаментальных понятий любого языка программирования. При решении любой задачи требуются данные. Каждый элемент данных или объект (константа, переменная, выражение, функция), которым оперирует программа, относится к определенному типу.
Тип данных переменной определяет:
1) множество значений, которые может принимать переменная;
2) совокупность операций, допустимых над переменной;
3) объем выделяемой памяти и форму представления данных в ней.
В VBA можно обрабатывать числа, строки, логические значения, даты и объекты, использовать наиболее общий тип данных – тип Variant, а также создавать собственные типы данных. Наиболее часто используемые типы данных представлены в табл.1.
Тип Variant, использованный для описания некоторой переменной, позволяет присваивать и обрабатывать с ее помощью данные разных типов. С одной стороны это хорошо: не надо помнить об ограничениях на множество допустимых значений и операций. Но это чревато ошибками, значительно увеличивает время обработки переменных и необходимые для выполнения программы ресурсы памяти.
|
|
|
Таблица 1 |
Тип данных |
Описание |
Размер, байт |
Диапазон |
Byte |
Байт |
1 |
От 0 до 255 |
Boolean |
Логический |
2 |
True илиFalse |
Integer |
Целое |
2 |
От -32 768 до 32 767 |
Long |
Длинное целое |
4 |
От -2 147 473 648 до 2 147 483 647 |
Single |
С плавающей точкой обычной точности |
4 |
От -3,402823Е38 до - 1,401298Е-45 для отрицательных чисел От 1,401298Е-45 до 3,402823Е38 для положительных чисел |
Currency |
Денежный |
8 |
От -922337230685477,5808 до 922337203685477,5807 |
Double |
С плавающей точкой двойной точности |
8 |
|
Date |
Даты и время |
8 |
С 1 января 1900 года до 31 декабря 9999 года |
String |
Строковый |
|
|
Variant |
Числовые подтипы |
16 байт + Nбайт (согласно типу) |
Переменная любого числового типа |
1.3. Переменные
Переменными называются элементы данных, значения которых при выполнении программы могут принимать различные значения в соответствии с указанным типом.
Для объявления переменных обычно используется инструкция объявления Dim.
Синтаксис:
Dim имяПеременной [As тип] [, имяПеременной [As тип] …
Элементы синтаксиса:
имяПеременной –
Обязательный. Имя переменной, удовлетворяющее стандартным правилам именования переменных.
тип –
Необязательный. Тип данных переменной. Для каждой описываемой переменной следует использовать отдельное предложение As тип. В случае отсутствия параметра переменная будет иметь тип Variant.
Например, инструкции
Dim A As Integer, B As Single
Dim C As Boolean
описывают переменные А – целого, В – вещественного и С – логического типа.
Это же объявление переменных можно выполнить с помощью одной инструкции Dim:
Dim A As Integer, B As Single, C As Boolean
При объявлении любой переменной VBA выполняет ряд действий:
В памяти выделяется область, размер которой определяется в соответствии с типом объявляемой переменной.
Выделенная область памяти связывается с идентификатором объявляемой переменной. При обращении к переменной фактически происходит обращение к области памяти, где хранится текущее значение переменной.
Переменная инициализируется, т.е. в соответствии с типом объявляемой переменной ей присваивается начальное значение. Число инициализируются значением 0, переменные Boolean – значением False, строки – пустыми строками (не содержат символов).
Объявить переменную можно в любом месте программы, но обязательно до ее использования. Однако правила хорошего стиля программирования все-таки предписывают делать это в самом начале программы в ее, так называемой, описательной части.
Переменные, описанные с помощью инструкции Dim, называются явно описанными.
Переменные являются неявно описанными, если 1) они используются в программе без объявления их с помощью инструкции Dim или 2) в инструкции объявления типа переменной был опущен параметр тип. Неявно описанные переменные связываются с типом Variant, а затем они используются как любые другие переменные этого типа. Однако, при этом, во-первых, потребуется больше ресурсов памяти по сравнению с другими типами данных и времени, т.к. компилятор вынужден сначала определить настоящий тип переменной, затем преобразовать его к этому типу, и только потом использует в вычислениях. При работе с достаточно большими программами это может привести к значительной потере во времени и ресурсах. Во-вторых, не описывая переменные явно можно получать неправильные ответы или ситуацию «бесконечный цикл» всего лишь из-за орфографической ошибки или описки.
Например, при написании процедуры Prim допущена описка: вместо инструкции K=K+10 введена инструкция K=K1+10. В результате будет искажен результат.
С переменной будет связан тип Variant и тогда, когда при объявлении переменной была допущена ошибка.
Например, инструкции
Dim A, В, С As Integer
Dim D As Variant
описывают переменные A, В и D типа Variant. Причем переменная D описана явно, а переменные A и В неявно. Для того чтобы все три переменные первой инструкции были объявлены как целые, необходимо было написать такую инструкцию:
Dim A As Integer, В As Integer, С As Integer
Чтобы избежать части ошибок, VBA позволяет наложить требование на явное описание всех переменных в модуле. В этом случае при использовании необъявленной переменной, во время компиляции генерируется ошибка, которую можно легко исправить.
Чтобы наложить требование на явное описание переменных, необходимо в разделе описаний модуля указать директиву компилятора Option Explicit:
Option Explicit
Sub Prim()
Dim K As Byte
K=K+10
. . .
End Sub