Код VВА.

Код VВА хранится в проектах. Проекты содержат модули, а модули включают процедуры и функции. Процедуры и функции содержат описания и инструкции на языке VBA.

Каждое приложение MS Office хранит проекты по-своему: Word сохраняет проекты в шаблонах документа (DOT) и в документах (DOC); Excel сохраняет проекты в рабочих книгах (XLS); Access сохраняет проекты в файлах базы данных (MDB); PowerPoint сохраняет проекты в презентациях (PPT).

Для программирования на языке VBA нет необходимости в обязательном порядке устанавливать какую-либо версию транслятора VB (Visual Basic). Вполне достаточно, если на компьютере будет установлен пакет Microsoft Office 97 и выше. Для создания программы, которая называется макросом, необходимо загрузить Microsoft Word или Microsoft Excel. Далее: Главное меню-Сервис-Макрос-Редактор Visual Basic. В окне проекта первой строкой записывается оператор объявления процедуры (программы):

Sub имя() это стандартный заголовок макроса. Завершающей строкой процедуры является строка End Sub

Для запуска программы из редактора используется клавиша F5; для запуска программы из документа — alt+F8.

Элементы языка VBA. При написании кода VВА следует знать некоторые правила или соглашения, которых следует придерживаться, чтобы избежать ошибок выполнения кода. Первое соглашение — это соглашение по именам. Именовать нам придется переменные, константы, процедуры, функции, объекты и т. д., поэтому определим правила, которым будем следовать:

· длина имен не должна превышать 255 символов;

· имена должны начинаться с буквы и могут содержать комбинацию букв, цифр и символов;

· имена не должны совпадать со стандартными именами языка Visual Basic;

· имена не должны включать точек, пробелов и следующих символов: ! * / \ @ # $ %. Символ пробела можно заменить символом подчеркивания _.

Регистр букв в именах не имеет значения, т.е. следующие имена: РRIСЕ, Рriсе и price — эквивалентны.

 

Примеры правильной записи имен:

Н123, Price, Sale

Неправильно записанные имена:

21days - начинается с цифры;

Price Sale - содержит символ пробела;

Dim - совпадает со служебным словом языка.

 

Дадим также несколько определений элементам VBA.

Ключевые слова — это слово или символ, которые являются элементом языка программирования Visual Basic. Это может быть инструкция, имя функции, оператор, например: SUB, DIM, CONST.

Выражение — это комбинация ключевых слов, операций, констант. Результатом выражения может быть строка, логическое значение или число. Примеры выражений: Х+3; Z<>0; 11.

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

Типы данных языка VBA.Язык Visual Basic имеет 11 встроенных типов данных (табл 4.1.).

Таблица 4.1

Основные типы данных языка VBA

Тип данных Размер в байтах Разрядность цифр Описание Диапазон значений
Boolean логический True или False (да - нет, включен - отключен)
Integer целое От (-32768) до 32768
Long длинное целое От (-2147483648) до 2147483647
Single действительное одинарной точности От (–3.402823Е+38) до (–1.401298Е-45) и от 1.401298Е-45 до 3.402823Е+38
Double действительное двойной точности От ± 1.79769313486232Е+308 до ± 4.94065645841247Е-324
Currency денежный От (–922337203685477.5808) до 922337203685477.5807
Date - для дат и времени От 01.01.100 до 31.12.9999
String +1 символьный Длина строки - от 0 до 65535 символов
Object - объект Любой объект
Array Определяется количеством и размером элементов - массивы -
Variant Определяется записанными данными - Любой из встроенных типов данных -

 

Тип данных определяет, каким образом задаваемая величина хранится в памяти компьютера; сколько разрядов может содержать присваиваемое ей значение; насколько оно может быть велико и может ли иметь дробную часть. Рассмотрим типы данных VBA более подробно.

Boolean использует для хранения значения 2 байта памяти, как и тип Integer, хотя может принимать значения либо 0 (ложь - False), либо 1 (True – правда). Для хранения этой информации достаточно 1 бита, а занимается 16 бит.

Integer предназначен для хранения смещенного целого числа, т. е. с указанием знака числа “+” или “-”. Из 16 бит 1 используется для хранения знака, а остальные используются для значащих цифр.

Long используется для хранения смещенного целого числа с двойным разрешением по сравнению с Integer и соответственно занимает в два раза больше памяти. Из 32, занимаемых в памяти бит, 1 предназначается для хранения знака, 31 – для хранения самого числа.

Single используется для вычислений с плавающей точкой. Переменные данного типа обеспечивают точность до 6-го знака после десятичной точки.

Double предназначен для хранения действительного числа с плавающей точкой двойной точности по отношению к Single. Для хранения требует вдвое больше памяти, но и диапазон значений расширяется в 8 раз.

Currency предназначен для хранения действительного числа с фиксированной точкой, которая всегда располагается между 4 и 5 цифрами справа. Этот тип специально предназначен для получения минимальных ошибок округления и чаще всего используется в бухгалтерских расчетах.

Пример: 0.0021 46.7280.

Dateпредназначен для хранения дат и времени с точностью до секунды. Машиной даты записываются следующим образом: целая часть – количество дней, прошедших от начала отсчета 01.01.1900, а дробная часть – время.

Пример: 05.03.1994 18.00 запишется как 34398.75. При работе с Excel следует помнить, что в нем диапазон используемых дат – от 01.01.1900 до 31.12.2078. Сам VBA позволяет оперировать датами в диапазоне 01.01.100 – 31.12.9999.

String используется для хранения текста по одному байту на символ, добавляя к этому количеству еще один для обозначения конца строки.

Object предназначен для ссылок на любой объект VBA.

Arrayопределяет индексный список величин одного и других типов - массив.

Variant используется по умолчанию. Он задается VBA, если вы сами не укажете этот тип. При этом производится проверка значения, вводимого в память и его идентификация, поэтому резко возрастает и время выполнения программы, и объем памяти.

Переменные. Переменная — это область памяти, которая предназначена для временного хранения данных и которой присвоено имя. Содержимое переменной может быть изменено в процессе выполнения программы. Данные, хранимые в переменных, могут быть различного типа: числовые данные, строковые, логические и т. д. Тип данных определяет тип переменной.

Область определения переменной определяет, где можно использовать переменную. В VВА есть три уровня определения переменных.

1. Уровень процедуры. Переменные используются только в процедуре, в которой они описаны. Переменная описывается с помощью инструкции DIM, размещенной в теле процедуры.

Например:

Dim x As Single ‘переменная x описана как действительная одинарной точности;

Dim I As Integer ‘переменная I описана как целая.

2. Уровень модуля. Переменные используются только в процедурах модуля, в которых они описаны, но не в других модулях проекта. Переменная описывается с помощью инструкции DIM, размещенной в разделе описаний модуля.

3. Общие переменные. Переменные используются во всех модулях и процедурах проекта. Переменная описывается с помощью инструкции PUBLIC, размещенной в разделе описаний модуля.

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

Если переменная не описана, то ей присваивается тип Variant при вводе имени переменной.

Константы. Константа — это именованная область памяти для хранения данных, изменение которых во время работы программы не допускается. Константа может иметь числовой, логический или строковый тип.

Константа описывается ключевым словом CONST, и при описании константы требуется присвоить ей значение. Попытка изменить в ходе выполнения программы значение константы вызывает ошибку.

Примеры описания констант:

………………………………………

Const Pi as Double = 3.1415926 описана константа Pi

Const Name = "Visual Basic" описана константа строкового типа.

………………………………………

Операции. Операции производятся над выражениями, переменными, константами, литералами.

Арифметические операции.

Арифметические операций языка Visual Basic описаны в порядке убывания приоритета в таблице 4.2.

Правила записи арифметических выражений в языке Бейсик:

Все арифметические операции записываются в одну строку.

Если в числителе или знаменателе дроби стоит многочлен, его следует заключить в скобки.

При записи десятичных дробей для отделения целой части от дробной используется десятичная точка.

Знаки арифметических операций опускать нельзя.

Если в десятичной дроби нет целой части, то ноль перед десятичной точкой можно опустить.

 

 

Таблица 4.2

Арифметические и строковые операции языка VBA

Математические и строковые операции VBA в порядке убывания приоритета. Выполняемое действие
^ Возведение в степень
- Отрицание
? Умножение
/ Деление
\ Целочисленное деление
Mod Определение остатка от деления
+ Сложение
- Вычитание
& Объединение (конкатенация) строк

 

Арифметические операции выполняются слева направо в порядке приоритета. Для изменения естественного приоритета операций применяются скобки (так же, как в арифметике). В Бейсике существуют стандартные функции, при применении которых не требуется никаких дополнительных библиотек или определений.

 
Логические операции.

Логические выражения в математической логике оперируют с логическими переменными. Логические переменные имеют в современных языках программирования тип Boolean, что означает — булева(я) или логическая. Логическая переменная в процессе выполнения программы может принимать только два значения — "True" или "False". Определить логическую переменную можно, присвоив ей значение логического выражения.

Логическое выражение — выражение, в котором присутствуют операции отношения или знаки логических операций.

Операции отношения:

· =(равно),

· (не равно) ,

· <(меньше),

· (больше),

· <=(меньше или равно),

· >=(больше или равно),

Например: а>b и b< =а+2 .

Логические выражения могут быть связаны знаками логических операций:

· OR - логическое сложение (ИЛИ),

· AND - логическое умножение (И),

· NOT - логическое отрицание (НЕ),

· XOR - исключающее ИЛИ,

· EQV - логическая эквивалентность,

· IMP - логическая импликация.

Операция конкатенации.

Операция используется для сцепления двух или нескольких строк, обозначается знаком «+». Результатом будет строка, состоящая из строк – операндов.

Например:

операнд1=”язык”

операнд2=”Visual Basic”

результатом операции

“язык” + “Visual Basic”

будет строка

“язык Visual Basic”.

Математические функции VBA.

Математические функции языка VBA представлены в таблице 4.3.

 

Таблица 4.3

Математические функции языка VBA

Функция Выполняемое действие
Atn(x) Возвращение арктангенса угла в радианах arctg x
Sin(x) Возвращение синуса угла в радианах sin x
Cos(x) Возвращение косинуса угла в радианах cos x
Tan(x) Возвращение тангенса угла в радианах tg x
Exp(x) Возвращение значения ex, где x - значение переменной или введенное число
Log(x) Возвращение натурального логарифма числа ln x
Sqr(x) Возвращение квадратного корень числа
Abs(x) Возвращение абсолютного значения числа (по модулю)|x|

 

Функции преобразования типов Str() и Val().

Str(число) - возвращает значение типа Variant (String), являющееся строковым представлением числа. Обязательный аргумент число может задаваться любым допустимым числовым выражением. При преобразовании числа в строку в начале строки обязательно резервируется позиция для знака числа. Если число является положительным, возвращенная строка будет содержать пробел на месте знака.

Заметим, что в качестве допустимого десятичного разделителя функция Str воспринимает только точку (.). При наличии другого десятичного разделителя (например, запятой) для преобразования чисел в строки следует использовать функцию CStr.

Val(cтрока) - возвращает числа, содержащиеся в строке, как числовое значение соответствующего типа.

Обязательный аргумент строка является любым допустимым строковым выражением. Функция Vа1 прекращает чтение строки на первом символе, который она не может распознать в качестве части числа. В качестве разделителя целой и дробной части распознается только точка (.). Пробелы, символы табуляции и символы перевода строк удаляются из значения аргумента.

В следующем примере возвращается числовое значение 1615198:

Vаl(" 1615 198-я ул. Н.Й.").

Организация ввода/вывода информации. При создании макрокоманд требуется организовать обмен информацией между макросом и пользователем, между макросом и документом. Эта задача решается с помощью функций InputBox, MsgBox.

Функция InputBox - выводит на экран диалоговое окно, содержащее сообщение и поле ввода, устанавливает режим ожидания ввода текста пользователем или нажатия кнопки, а затем возвращает значение типа String, содержащее текст, введенный в поле. Синтаксис функции InputBox:

InputBox (сообщение [, заголовок] [, текст по умолчанию] )

Сообщение — текст в диалоговом окне.

Заголовок — строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот аргумент опущен, в строку заголовка помещается имя приложения.

Текст по умолчанию — строковое выражение, отображаемое в поле ввода, если пользователь не введет другую строку. Если этот аргумент опущен, поле ввода изображается пустым.

Если пользователь нажимает кнопку ОК или клавишу ENTER, функция InputBox возвращает содержимое поля ввода.

Пример. Ввести значение X=0.5.

………………………………….

X=Val(InputBox(“Введите X”))

…………………………………..

В диалоговом окне ввести с клавиатуры 0.5.

ФункцияMsgBox позволяет выводить результаты счета программы в диалоговом окне.

Синтаксис:

MsgBox(сообщение [, кнопки] [, заголовок] ).

Сообщение — строковое выражение, отображаемое в диалоговом окне.

Кнопки — числовое выражение, представляющее сумму значений, которые указывают число и тип отображаемых кнопок, тип используемого значка, основную кнопку. Значение по умолчанию этого аргумента равняется 0.

Заголовок — строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот аргумент опущен, в строку заголовка помещается имя приложения.

Будем использовать в качестве аргумента функции только сообщение, представляющее собой конкотенацию (сцепление)(+) двух строк: комментария к результату, взятого в кавычки, и строки, полученной из числового выражения с помощью функции Str.

Пример. Вывести результат на экран монитора.

…………………………………………

MsgBox(“Ответ=” + Str(y))

…………………………………………

 

Использование окна отладки. Окно отладки можно вывести на экран при помощи команды Вид - Окно отладки или нажав клавиши <Ctrl>+<G> .

Для вывода текущих значений в окно Проверка непосредственно из макроса необходимо ввести в нужном месте кода макроса команду Debug с единственным методом Print. Синтаксис

Debug.Print выражение.

В месте, где установлена эта команда, произойдет прерывание выполнения макроса, и в окне Проверка появится текущее значение переменной или выражения.

Пример.

…………………….

Debug.Print y

……………………

Использование объектов Excel. Объект WorkSheet – это лист рабочей книги. Он входит в коллекцию всех листов рабочей книги - семейство Sheets. Этот объект можно использовать для ввода/вывода данных. В этом случае к этому объекту можно применить метод Select, позволяющий выбирать конкретный лист.

Пример.

Sheets (“Лист1”) . Select

Если макрос написан для определенного листа, то удобно исходные данные поместить в соответствующие ячейки данного листа. В этом случае метод Select можно не использовать. При этом результаты счета будут помещены на этот же листе автоматически.

Поскольку одиночная ячейка не представлена собственным объектом, то доступ к ячейке можно осуществить с помощью свойства Cells, указывая номер строки и столбца. Для присвоения некоторой переменной x значения, находящегося в ячейке A2 используем оператор:

X=Cells(2,1)

Пример. Вывести значения переменных s и p во вторую и третью строки второй колонки (столбец В) третьего листа соответственно.

…………………………………………………………………….

Sheets(“Лист3”).Select ‘переходим на третий лист

Cells(2,8)=s ‘выводим s

Cells(3,8)=p ‘выводим p

…………………………………………………………………….

Часто используется свойство Value, возвращающее содержимое ячейки.

Пример.

Cells(2,8).Value=s ‘выводим s