Загрузил lugovoy-v

Проекты VBA: Интегрированная среда разработки

ТЕМА 1.
БОТКИ VBA
ПРОЕКТЫ VBA. ИНТЕГРИРОВАННАЯ СРЕДА РАЗРА-
План
1.1.
1.2.
1.3.
Введение в Visual Basic для приложений.
Основные элементы проекта VBA.
Работа в редакторе VBA.
1.1.
Введение в Visual Basic для приложений
Visual Basic для приложений (Visual Basic for Applications или VBA) – это инструмент
разработки приложений. Подобно другим средствам разработки VBA позволяет создавать
полностью автоматические программные продукты. VBA – уникальная среда разработки, так
как она встраивается в другое приложение, расширяя его функциональные возможности,
позволяет использовать данные других прикладных программ, поддерживающих VBA, и
управлять их работой. Использование VBA для решения прикладных задач удобно потому,
что его поддерживает множество прикладных программ, в том числе и все программы популярного пакета Microsoft Office.
1.2.
Основные элементы проекта VBA
При программировании в VBA требуется создать проект. Проект включает следующие
основные элементы:
Основное приложение. Проекты VBA разрабатываются и выполняются совместно с другим приложением, которое называется основным. Программы на языке VBA всегда сохраняются в документе основного приложения. Однако программы могут использовать как возможности, так и данные других приложений.
Среда разработки VBA. Подобно другим средствам разработки VBA имеет собственную
единую интегрированную среду разработки (IDE), которая используется во всех приложениях, поддерживающих VBA.
Формы (диалоговые окна). Используются для ввода-вывода данных пользователя и могут быть легко встроены в проект VBA. Разработчик VBA программы может использовать в
формах множество различных элементов управления, а так же процедуры обработки возникающих в них событий.
Модули. Проект VBA может содержать один или несколько модулей, в которых хранятся
подпрограммы, выполняющие конкретные задачи.
Модули класса. VBA является объектно-ориентированным языком. Использование концепции объектов упрощает написание и понимание программ. В VBA возможно использование объектов различных прикладных программ, а также создание собственных объектов.
Объекты являются представлением в программе либо реальных предметов, либо абстрактных понятий, например списков, расчетов, таблиц, форм, элементов управления и т.д. Каждый модуль класса содержит полную информацию об одном типе объекта.
1.3.
Работа в редакторе VBA
Разработка проекта на языке Visual Basic для приложений выполняется практически полностью в редакторе VBA. В редакторе имеются различные инструменты, предназначенные
для разработки, выполнения, отладки, интеграции и сохранения приложения. На приведенном ниже рисунке показано окно редактора VBA с наиболее часто используемыми средствами.
Меню
Панель
инструментов
Стандартная
Панель
инструментов
Правка
Панель
инструментов
Отладка
Окно проекта
Окно свойств
Окно модуля
Конструктор форм
Окно отладки
Панель элементов
Окно проекта
В окне проекта выводятся в виде иерархической структуры все элементы проектов VBA
открытых в основном приложении документов. Для вывода на экран окна проекта используется команда Вид \ Окно проекта.
Проект включает модули, формы и объекты основного приложения. В окне проекта можно выбрать требуемый объект и открыть его для редактирования. Для редактирования объекта необходимо дважды щелкнуть по его имени или воспользоваться командой Объект или
Программа из его контекстного меню, причем в контекстном меню будут доступны только
команды, применимые к объекту данного типа.
Окно свойств
Окно свойств используется для просмотра и задания свойств объектов проекта. Для вывода на экран окна проекта используется команда Вид \ Окно свойств.
В окне свойств отображаются свойства текущего объекта. Для вывода свойств объекта
необходимо выбрать объект в окне проекта либо в списке, расположенном вверху окна
свойств. Свойства объекта можно вывести с группировкой по категориям или в алфавитном
порядке, используя соответствующие вкладки окна свойств. Чтобы изменить значение свойства, его необходимо выбрать в левом столбце окна, а затем задать или, если возможно, выбрать из списка нужную величину в правом столбце.
Объекты проекта
Свойства
Значения свойств
Окно модуля
Окно модуля используется при написании любой программы VBA. Для открытия модуля
имеющегося в проекте объекта необходимо дважды щелкнуть по имени объекта в окне проекта, либо выбрать в его контекстном меню команду Программа. Для добавления нового
модуля в проект необходимо в окне проекта выбрать проект, в который требуется добавить
модуль, и выбрать команду Вставка \ Модуль (либо Вставка \ Модуль класса,
если модуль должен содержать описание создаваемого пользователем объекта) в меню редактора VBA.
Под строкой заголовка окна модуля находятся два списка. В левом списке выводятся имена всех объектов модуля, а в правом – список процедур, связанных с выбранным объектом,
например всех процедур обработки событий. Эти списки можно использовать как для перемещения по процедурам модуля, так и для вставки новой процедуры обработки события.
Для вставки процедуры в модуль можно либо ввести ее описание с клавиатуры, либо воспользоваться командой Вставка \ Процедура.
Конструктор форм
Форма представляет собой диалоговое окно, которое можно использовать в одном или нескольких проектах VBA. Для добавления формы в проект используется команда Вставка \
Форма.
В конструкторе форм можно размещать, перемещать и выравнивать элементы управления
в форме. Свойства выбранного в конструкторе элемента управления можно просмотреть и
изменить в окне свойств.
Для создания процедуры обработки события, возникающего в элементе управления, нужно дважды по нему щелкнуть. При этом открывается окно модуля формы и текущей становится процедура обработки события, определенного для данного элемента по умолчанию.
Для редактирования или вставки процедуры обработки другого события необходимо выбрать его имя в правом списке, расположенном под строкой заголовка окна модуля.
Панель элементов
Панель элементов позволяет разместить ряд элементов управления в форме. Хотя набор
инструментов отображается автоматически при создании формы или ее открытии в режиме
конструктора может понадобиться его скрыть, чтобы освободить место на экране. Для вывода панели элементов используется команда Вид \ Панель элементов.
Кроме стандартного набора элементов управления в проекте VBA можно использовать и
множество дополнительных инструментов, поставляемых в виде отдельных файлов или при-
надлежащих другим программам. Для использования дополнительных элементов управления
их необходимо подключить к проекту с помощью диалогового окна Дополнительные элементы, открываемого по команде Сервис \ Дополнительные элементы.
Для размещения элемента управления в форме необходимо выбрать нужный элемент в
наборе и перетащить мышь по области формы, где он будет располагаться.
Окно отладки
В окне отладки отображается информация, получаемая от отладочных инструкций программы или от команд, вводимых непосредственно в окне. Чтобы вывести на экран окно отладки, используется команда Вид \ Окно отладки. Чтобы выполнить программную инструкцию в окне отладки, необходимо ее ввести и нажать клавишу ENTER.
Меню и панели инструментов
Как и во всех приложениях пакета Microsoft Office в окне редактора VBA можно управлять выводом и скрытием панелей инструментов и строки меню, настраивать их, размещая
дополнительные элементы управления. Для выполнения этих операций используется команда Вид \ Панели инструментов.
ТЕМА 2.
ПОНЯТИЯ ПРОЦЕДУРЫ И ФУНКЦИИ
План
2.1.
2.2.
2.3.
Понятие процедуры
Процедуры-подпрограммы
Функции
2.1.
Понятие процедуры
Программы VBA хранятся в проектах. Проекты состоят из модулей, включающих в себя
процедуры. Процедура – это набор описаний и инструкции, сгруппированные для выполнения. В VBA используются процедуры двух типов: процедура Sub (процедура-подпрограмма
или просто процедура) и процедура Function (функция).
2.2.
Процедуры-подпрограммы
Процедура-подпрограмма – это набор команд, с помощью которого можно решить определенную задачу. При запуске процедуры выполняются содержащиеся в ней инструкции, а
затем управление передается в приложение или процедуру, которая ее вызвала.
Синтаксис процедуры следующий:
[Public | Private] Sub имя ([аргументы])
Инструкции
[Exit Sub]
[Инструкции]
End Sub
Необязательные ключевые слова Public и Private используются для описания области видимости процедуры – во всех модулях проекта или только в том модуле, где процедура
описана.
Ключевые слова Sub и End Sub используются в описании любой процедуры.
Параметр имя определяет имя процедуры.
Необязательный параметр аргументы представляет собой список перечисленных через
запятую аргументов, передаваемых в процедуру.
Инструкция Exit Sub позволяет выйти из процедуры.
2.3.
Функции
Процедура-функция также представляет собой набор команд, который решает определенную задачу. Различие заключается в том, что функция обязательно возвращает значение и,
таким образом, может использоваться в любом выражении.
Упрощенный синтаксис функции:
[Public | Private] Function имя ([аргументы]) [As Тип]
Инструкции
имя = выражение
[Exit Function]
[Инструкции]
End Function
Основные различия в синтаксисе заключаются в следующем:
Ключевые слова Function и End Function используются в описании любой функции.
Параметр имя определяет имя функции.
Параметр тип позволяет явно задать тип данных, который возвращает функция. Если он
опущен, то по умолчанию возвращается значение типа Variant.
Внутри функции обычно имеется инструкция имя = выражение, которое используется
для задания возвращаемого значения. Параметр выражение определяет значение, которое
должно быть совместимым с объявленным в параметре As тип типом данных для функции.
Инструкция Exit Function позволяет выйти из процедуры-функции.
ТЕМА 3.
ВВЕДЕНИЕ В
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ
План
3.1.
3.2.
3.3.
3.1.
Основные понятия объектно-ориентированного программирования
Использование объектов приложения
Основные понятия объектно-ориентированного программирования
Объекты и относящиеся к ним понятия используются в VBA очень часто. За исключением стандартных типов данных, таких как числа, логические данные и т.д., все данные в VBA
представлены в виде объектов. Например, формы и элементы управления в формах рассматриваются как объекты. Чтобы получить доступ к приложению или его данным, также требуется использовать объекты. Рассмотрим основные понятия, используемые в объектноориентированном программировании (ООП):
Объект – это абстракция предмета реального мира, дающая информацию только о тех его
характеристиках, которые используются на уровне программы.
Класс объектов – это полное описание объектов одного типа, определяющее имя объекта,
его характеристики, а также действия, выполняемые объектом. Объект, созданный на основе
класса, называется экземпляром класса. Например, если проект – класс, то дом, построенный
на основе проекта, – экземпляр класса. Объекты, созданные на основе одного и того же класса, сначала абсолютно одинаковы, но внесение изменений в характеристики конкретного
объекта будут отличать его от других объектов того же класса.
Семейство (или коллекция) объектов – это набор существующих перечислимых объектов
одного класса. Доступ к каждому объекту-члену семейства осуществляется по его индексу –
порядковому номеру или имени объекта (значению свойства Name).
Каждый класс и семейство объектов обладают своим набором свойств и методов.
Свойства объекта – это характеристики (атрибуты), описывающие объект. Значения
большинства свойств можно получать и устанавливать при разработке или выполнении программы, некоторые свойства допускают только чтение своих значений. Свойства, как и переменные, могут использовать значения различных типов данных, в том числе и объектного
типа, т.е. представлять собой ссылку на другой объект со своими свойствами и методами.
Методы – это действия, которые выполняет объект. При вызове некоторых методов необходимо задать параметры (аналогично передаче параметров при вызове процедуры). Кроме
того, некоторые методы могут возвращать значения (как функции), которые можно сохранять в переменных для дальнейшего использования.
Событие представляет собой действие, распознаваемое объектом (например, щелчок мышью или нажатие клавиши), для которого можно запрограммировать отклик. События возникают в результате действий пользователя или программы, или же они могут быть вызваны
системой. Каждый класс объектов поддерживает свой набор событий. События обрабатываются в программе с помощью процедур обработки событий.
Свойства и методы не используются по отдельности: они указываются вместе с объектом:
Объект.Свойство
Объект.Метод
Здесь Объект – имя объектной переменной, ссылка на объект-член семейства или ключевое слово, однозначно описывающее конкретный экземпляр класса (например, ключевое
слово Selection однозначно дает ссылку на выделенный диапазон ячеек рабочего листа
Microsoft Excel или выделенный блок текста документа Microsoft Word).
Для получения значения свойства используется инструкция вида
Переменная = Объект.Свойство,
где Переменная – имя переменной, совместимой по типу с типом данных свойства.
Для присвоения нового значения свойству в программе следует использовать инструкцию
Объект.Свойство = значение,
где значение – любое выражение, возвращающее значение допустимого для свойства
типа.
При вызове метода объекта используется инструкция
Объект.Метод [параметр1][, параметр2] … [, параметрN]
Если метод, возвращает значение, то его необходимо присвоить совместимой с ним по типу переменной:
Переменная = Объект.Метод _
[([параметр1][, параметр2] … [, параметрN])]
3.2.
Использование объектов приложения
Для управления приложением, поддерживающим VBA, или данными, содержащимися в
его документах, требуется использовать объекты, их свойства и методы. В большинстве приложений число используемых классов объектов очень велико. Поэтому, прежде чем приступить к написанию программы, автоматизирующей работу с данным приложением, следует
ознакомиться с его моделью объектов. Модель объектов (иерархия классов) определяет взаимосвязь между объектами, содержащимися в библиотеке типов используемого приложения.
Самое верхнее место в иерархии любого приложения занимает объект приложения Application. Каждое приложение, поддерживающее VBA, поставляется с описанием иерархии
классов. Полные сведения о ней можно получить из справочной системы приложения или
воспользовавшись окном Просмотр объектов (по команде Вид/Просмотр объектов).
Чтобы использовать свойства или методы объекта, необходимо указать его имя. Однако
не во всех случаях требуется явно задать положение объекта в иерархии объектов. Если по
контексту ясно, о каком элементе идет речь, можно задать объект, не указывая его принадлежность вышестоящим объектам. Например, объект Selection (выделенный текст документа Word) является свойством объекта Document (документ), но если документ уже
известен, то вместо полной ссылки вида Documents(индекс).Selection допустима
неявная ссылка – просто Selection.
В программах VBA можно использовать объекты не только основного приложения, но и
любого другого, разрешающего доступ к своим средствам и данным с помощью механизма
OLE Automation.
Для того чтобы использовать в проекте VBA объекты другого приложения, необходимо
добавить проект ссылку на его библиотеку типов. Это можно сделать с помощью диалогового окна Ссылки редактора VBA, доступного по команде Сервис/Ссылки.
Элементы языка Visual Basic for Application
Алфавит
Буквы латинского алфавита:
A-Z, a-z
Арабские цифры:
от 0 до 9
Элементы данных
Ключевые слова
Переменные
Зарезервированные
Пользовательские
Константы
Массивы
Операторы
Функции
Функции
Функции
Процедуры
Знаки оперций отношения:
> < = <> >= <=
Выражения
Методы
объектов
Метки
Знаки разделители:
. , : ; " ' _ пробел
Свойства
объектов
Свойства
объектов
Знаки арифметических оперций:
+ - * / \ ^
Скобки:
( )
Специальные знаки:
? ! @ % & # $
Буквы алфавитов других языков
(русский, украинский и т.д.)
Методы
объектов
Свойства
объектов
ТЕМА 1.
НИЙ
ЭЛЕМЕНТЫ ЯЗЫКА VISUAL BASIC ДЛЯ ПРИЛОЖЕ-
План
1.1.
1.2.
1.3.
1.4.
1.5.
1.6.
Алфавит
Переменные
Константы
Массивы
Функции
Выражения
1.1.
Алфавит
В любом языке программирования для записи программ используется набор изобразительных средств, называемый алфавитом.
Алфавит языка VBA состоит из следующего набора символов:
– прописные и строчные буквы латинского алфавита;
– цифры от 0 до 9;
– знаки арифметических операций: + (плюс), – (минус), * (умножение), / (деление),
\ (целочисленное деление), ^ (возведение в степень);
– знаки операций отношения: < (меньше), > (больше), = (равно), <> (не равно), >= (не
меньше), <= (не больше);
– знаки разделители: . (точка) , (запятая) ; (точка с запятой) : (двоеточие) ' (апостроф)
" (кавычки) (пробел) _ (знак подчеркивания);
– круглые скобки: ( – открывающая скобка, ) – закрывающая скобка;
– специальные знаки: ! (восклицательный знак), ? (вопросительный знак)
@ (коммерческое "эт"), % (процент), & (амперсанд или коммерческое "и"), # (диез), $
(знак доллара);
– прописные и строчные буквы других алфавитов (русского, украинского и т.д.);
1.2.
Переменные
Переменная – именованная область памяти, отведенная для временного хранения данных, которые могут изменяться во время выполнения программы.
В VBA действуют следующие правила именования:
–
в имени можно использовать любую комбинацию букв, цифр и символов, но оно
должно начинаться с буквы;
–
количество символов в имени не должно превышать 255 символов;
–
имена не должны включать точек пробелов и следующих символов:
% & ! # @ $
–
имена должны быть уникальны внутри той области, где они определены;
–
не рекомендуется использовать имена, совпадающие с ключевыми словами языка.
Регистр букв в имени не имеет значения. Одно и тоже имя, написанное в разном регистре,
автоматически приводится к одному образцу.
В любой момент времени переменная может иметь только одно значение.
В VBA используются переменные следующих типов:
– числовые;
9
– строковые;
– логический;
– Дата/Время;
– Объектный;
– Variant – по умолчанию.
Синтаксис описания переменной:
Dim ИмяПеременой [As тип]
Static ИмяПеременой [As тип]
Private ИмяПеременой [As тип]
Public ИмяПеременой [As тип]
Ключевые слова Dim, Static, Private, Public влияют на область видимости
переменной.
1.2.1. Числовые типы данных
Числовые типы данных различаются размером и диапазоном допустимых значений. Размер – это количество байтов, которое занимает значение данного типа в памяти. Диапазон
допустимых значений определяет наибольшее и наименьшее значение для переменной данного типа.
Тип данных
(суфикс)
Размер
Byte
Integer
Long
Single
(%)
(&)
(!)
1 байт
2 байта
4 байта
4 байта
Double
(#)
8 байт
Currency (@)
8 байт
Decimal
14 байт
Диапазон допустимых значений
от 0 до 255
от –32 768 до 32 767
от –2 147 483 648 до 2 147 483 647
от –3,402823Е38 до –1,401298Е–45
для отрицательных чисел
от 1,401298Е–45 до 3,402823Е38
для положительных чисел
от –1,79769313486232Е308 до –4,94065645841247Е–324
для отрицательных чисел
от 4,94065645841247Е–324 до 1,79769313486232Е308
для положительных чисел
от –922 337 203 685 477,5808
до 922 337 203 685 477,5807
+/–79 228 162 514 264 337 593 543 950 335
без десятичной запятой
+/– 7,9228162514264337593543950335
с 28 знаками после запятой
Примечание:
Десятичный тип данных Decimal фактически является подтипом типа Variant. Переменные типа Decimal нельзя описывать явно. Их можно использовать только с помощью
функции CDec(), которая преобразует тип Variant в тип Decimal.
1.2.2. Строковые типы данных
Строковые типы данных используется для хранения строк переменой или фиксированной
длины.
Тип данных
Размер
Максимальная длина
(суфикс)
Строка переменной длины
Длина строки плюс
~ 2 млрд символов
10
String
($)
Строка фиксированной длины
String * число_символов
10 байтов
Длина строки
~ 65 400 символов
1.2.3. Логический тип данных
Переменные логического типа данных (Boolean) хранят логические значения True (Истина) или False (Ложь). Кроме того, имеется возможность использовать в логических выражениях числа, или можно преобразовывать числа в значения типа Boolean. При этом
значение 0 интерпретируется как False, а любое другое – как True. При обратном преобразовании значение True рассматривается как –1.
1.2.4. Тип данных Дата/время
Переменные типа Date являются числами с плавающей точкой двойной точности и могут
хранить как дату, так и время. Целая часть такого числа представляет дату, а дробная – время
дня. Например, значение 0.5 интерпретируется как 12:00, а 0.75 – как 18:00.
Минимальное значение целой части переменной типа Date равно –647 434, которое интерпретируется как 1 января 100 г. н.э., а максимальное значение – 2 958 465 как 31 декабря
9999 г. н.э. Значение 0 соответствует 30 декабря 1899 г.
При присвоении литерала переменной типа Date требуется использовать символ #. При
этом значения можно указать в любом допустимом формате, например, #1 Jul 1994# или
#7/1/94#. При использовании только двух последних цифр года, вместо первых двух подставляются цифры текущего столетия.
1.2.5. Объектный тип данных
Переменные объектного типа данных представляют собой указатели на объекты. Наиболее общий объектный тип данных – Object. Переменная типа Object может представлять
объект любого типа (класса). Кроме того, можно сразу же описывать переменную как принадлежащую определенному классу, например Application (приложение) или Range
(диапазон ячеек).
1.2.6. Тип данных Variant
Тип данных Variant применяется по умолчанию: если использовать переменную, не
описывая ее или явно не указывая ее тип данных, то эта переменная получит тип данных
Variant. Кроме того, можно явно задать тип данных Variant. Переменные типа Variant содержат данные любого типа, исключая строки фиксированной длины и типы, определенные пользователем.
Использование типа данных Variant удобно, так как позволяет упростить обработку
данных, однако, этого по возможности следует избегать из соображений рационального использования памяти и повышения производительности программы.
1.3.
Константы
Константа – это именованный элемент, сохраняющий постоянное значение в течение
выполнения программы.
Существует две разновидности констант: встроенные и пользовательские. Встроенные
константы VBA предлагаются самой системой и предназначены для хранения различной
информации. Для создания пользовательской константы необходимо с помощью оператора
Const имени пользовательской константы присвоить литерал.
Синтаксис описания константы:
11
Const ИмяКонстанты [As тип] = Литерал
Литерал – это простое выражение, определяющие значение некоторого типа не изменяющееся в процессе выполнения программы.
Примеры литералов:
150
3.14
-.15326
1Е-4 – экспоненциальная форма записи числа 0,0001
”Это текстовая константа”
#02/04/2007#
Примеры пользовательских констант:
Const blnFlag as Boollean = False
Const intMaxRow as Integer = 1024
1.4.
Массивы
Наряду с переменными и константами, в качестве объектов обработки могут использоваться массивы.
Массив – упорядоченная последовательность элементов, обращение к каджому из котрых
осуществляется по одному имени и индексу (порядковому номеру элемента в последовательности) .
Существует две разновидности массивов: статические и динамические.
Статические массивы не могут изменять свой размер во время выполнения программы.
Динамические массивы позволяют изменять верхнюю границу массива, т.е. увеличивать или
уменьшать размерность массива.
1.5.
Функции
В VBA поддерживается два вида функций: встроенные, имена которых являются элементами языка, и внешние (пользовательские).
Функции наравне с переменными, константами и элементами массивов выступают в качестве элементов данных. Синтаксически каждая функция определяется своим именем, за которым в круглых скобках следует аргумент или аргументы. В качестве аргументов могут
быть переменные, константы, элементы массивов, литералы, выражения.
Пример математических функций:
Функция
VBA
Математическая
функция
ATN(x)
arctg x
Арктангенс
COS(x)
cos x
Косинус
SIN(x)
sin x
Синус
TAN(x)
tg x
Тангенс
Описание
12
EXP(x)
ex
SQR(x)
ln x
TAN(x)
x
Экспонента
Натуральный логарифм
Квадратный корень
RND(x)
ABS(x)
Датчик случайных чисел
|x|
Модуль
FIX(x)
INT(x)
Отсечение дробной части
Наибольшое целое число, не
превосходящее Х
Округление числа Х с точностью до А десятичных знаков
[x]
ROUND(x, a)
SGN(x)
x0
1,

x0
0,
 1,
x0

Определение знака числа
Выражения
1.6.
Выражение – это комбинации операндов (переменных, констант, литералов, элементов
массивов, функций и свойств объектов), объединенных знаками операций, результатом которых является строка, число или логическое значение. Соответственно типу выражений подразделяются и операции.
Операции используются для объединения простых выражений в более сложные. В состав
VBA входят арифметические, символьные (строковые), логические операции и операции отношения. В приведенных ниже примерах выражений в качестве операндов используются литералы, вместо которых можно использовать выражения соответствующего типа:
Название операции
Знак
Пример
Результат
Арифметические операции
Возведение в степень
^
10 ^ 2
100
Умножение
*
10 * 2
20
Деление
/
20.4 / 2
10.2
Целочисленное деление
\
20.4 \ 2
10
Целый остаток от деления
MOD
17 MOD 5
2
Сложение
+
5 + 2
7
Вычитание
-
5 – 2
3
Символьные операции
&
“ЭК” & “-” & “101”
“123” & “456”
“ЭК-101”
“123456”
+
“ЭК” + “-” + “101”
“123” + “456”
“ЭК-101”
“123456”
Конкатенация
13
Операции отношения
Равно
=
5 = 6
False
Меньше
<
10 < 3
False
Больше
>
10 > 3
True
Не равно
<>
10 <> 3
True
Больше или равно
>=
1 >= -1
True
Меньше или равно
<=
10 <= 10
True
Логические операции
Отрицание
NOT
NOT True
False
Логическое И
AND
True AND False
False
Включающее ИЛИ
OR
True OR False
True
Исключающее ИЛИ
XOR
True XOR True
False
Эквивалентность
EQV
True EQV True
True
Импликация
IMP
True IMP True
True
Все вычисления производятся с соблюдением стандартных приоритетов выполнения операций. Если приоритеты операций равны, то вычисления выполняются последовательно –
слева направо. Для изменения стандартного приоритета операций используются скобки.
Методы и свойства – атрибуты объектов, которыми управляет программа. Методы –
это действия, которые выполняются объектом, а свойства – это атрибуты, описывающие характеристики объекта, значения которых можно получать и устанавливать в программе.
Например, выражение Selection.Font указывает на свойство Font (шрифт) выделенного в документе приложения блока текста (объекта Selection).
Ключевое слово – это слово или символ, распознаваемый как элемент программирования, например инструкция, оператор, имя функции, метка в программе, метод или свойство
объекта.
Инструкции (или операторы) – это программные единицы, выполняющие действия или описывающие данные.
ТЕМА 2.
ОПИСАНИЕ И ИСПОЛЬЗОВАНИЕ ПЕРЕМЕННЫХ,
КОНСТАНТ И МАССИВОВ
План
2.1.
2.2.
2.3.
2.4.
Описание и использование переменных
Описание и использование массивов
Описание и использование констант
Использование префиксов типов данных в именах переменных
2.1.
Описание и использование переменных
14
VBA не требует явного описания переменных перед их использованием. Переменные, которые сразу используются в программе без предварительного описания, называются неявно
описанными. Неявно описанным переменным присваивается тип данных Variant. Однако
рекомендуется явно описывать все переменные, так как это способствует увеличению скорости выполнения программы и упрощает ее отладку. Для описания переменных в VBA используются операторы Dim, Public, Private и Static.
Синтаксис:
Dim | Public | Private | Static имя_переменной _
[([индексы])][As тип] [, ...]
Параметр имя_переменной – имя описываемой переменной. Необязательные скобки и
параметр индексы используются для описания массивов. Дополнительный параметр As
тип позволяет назначить переменной тип данных. Если необходимо явно задать тип, то это
надо сделать для каждой переменной списка.
Область видимости и время жизни переменной определяется тем, где и как была описана
переменная:
– Личная переменная уровня процедуры описывается с помощью инструкции Dim, размещенной в процедуре. Такая переменная сохраняет свое значение только при выполнении
процедуры, а при повторном запуске процедуры ее необходимо инициализировать заново.
– Переменная уровня процедуры, описанная с помощью инструкции Static, также доступна только в той процедуре, где она описана. Однако при выходе из процедуры ее значение сохраняется.
– Личная переменная уровня модуля описывается с помощью инструкции Dim или
– Private, размещенной в разделе описаний модуля.
– Общая переменная, доступная во всех модулях проекта, описывается с помощью инструкции Public в разделе описаний модуля.
Для того чтобы VBA требовал явного описания каждой используемой переменной, в раздел описаний модуля необходимо включить инструкцию Option Explicit.
Пример:
Dim Value1 As String
Dim Value1 As String, Value2 As Integer
Dim Value1, Value2, Value3 As Integer
2.2.
Описание и использование массивов
Описание массива производится с помощью тех же операторов и подчиняется тем же правилам, что и описание обычной переменной.
Пример:
Dim strNames(10) As String
данная инструкция описывает одномерный массив с именем strNames, состоящий из 11
элементов (с 0 по 10); допустимые данные: строки переменной длины типа String.
В VBA можно создавать и многомерные массивы.
15
Пример:
Dim intNames(9, 14) As Integer
данная инструкция описывает двумерный массив с именем intNames, состоящий из
150 элементов, расположенных в 10 строках и 15 столбцах; допустимые данные: целые
числа типа Integer.
Dim intNames(1 To 9, 1 To 14) As Integer
данная инструкция описывает двумерный массив с именем intNames, состоящий из
126 элементов, расположенных в 9 строках и 14 столбцах; допустимые данные: целые
числа типа Integer.
Для изменения используемой по умолчанию нижней границы индексов используется инструкция Option Base, которая размещается в разделе описаний модуля:
Синтаксис:
Option Base {0 | 1}
Пример:
Option Base 1
Dim strNames(10) As String
данная инструкция описывает одномерный массив с именем strNames, состоящий из 10
элементов (с 1 по 10); допустимые данные: строки переменной длины типа String.
2.3.
Описание и использование констант
Константа, подобно переменной, является именованной областью памяти, хранящей информацию, используемую в программе. Однако, в отличие от переменной, изменение значения константы во время выполнения программы не допускается. В VBA можно как описывать собственные константы, так и использовать стандартные.
Синтаксис:
[Public | Private] Const имя_константы [As тип] = значение
При описании константы ей можно присвоить литерал, но нельзя присвоить значение переменной или значение, возвращаемое какой-либо функцией.
В VBA имеется множество встроенных констант. Хотя вместо имен встроенных констант
можно использовать и их значение, использование имен предпочтительнее, так как улучшает
понимание текста программы, а также потому, что фактические значения констант в отличие
от имен могут измениться в будущих версиях языка.
Пример:
Const intMaxCount As Integer = 30
Const blnFlagStart As Boolean = False
Const strMsgRus As String = “Введите значение параметра”
Const dtmStartFinYear As Date = #01/01/2005#
2.4.
Использование префиксов типов данных в именах переменных
16
Префикс
Тип данных
bln
byt
cur
dbl
dtm
int
lng
obj
str
sng
vnt
g
Пример
Boolean
Byte
Currency
Double
Date
Integer
Long
Object
String
Single
Single
Глобальная переменная
ТЕМА 3.
ЖЕНИЙ
План
3.1.
3.2.
3.3.
3.4.
3.5.
3.6.
3.7.
3.8
blnFlagStart
bytMaxCount
curMaxCost
dblMaxCount
dtmStartFinYear
intMaxCount
lngMaxValue
objMainForm
strMsgVarning
sngMaxCount
vntTempValue
g_intMaxCount
ИНСТРУКЦИИ ЯЗЫКА VISUAL BASIC ДЛЯ ПРИЛО-
Оператор присваивания
Условный оператор
Оператор выбора
Оператор цикла Do … Loop
Оператор цикла со счетчиком (For … Next)
Оператор цикла For Each … Next
Оператор With … End With
Оператор безусловного перехода
Инструкция (или оператор) – это элементарная языковая конструкция, указывающая, что должно быть выполнено или как воспринимать следующие за ней данные. В состав
оператора входят одно или несколько ключевых слов, а также, возможно, параметры. Несколько операторов, расположенных в одной программной строке, отделяются друг от друга
двоеточием.
3.1.
Оператор присваивания
Оператор присваивания используется для присваивания элементу данных языка (переменной, константе, элементу массива, свойству объекта) значения.
С использованием оператора присваивания описывается конструкция блок-схем, представленная на рис.1.
М := (А + В)/2
Рис.1
Оператору присваивания соответствует знак =(равно).
17
Синтаксис:
ИмяПеременной = Выражение
После выполнения оператора присваивания переменной с именем ИмяПеременной будет присвоено значение, полученное в результате вычисления выражения, стоящего справа
от знака =(равно).
Тип данных переменной ИмяПеременной должен быть совместим с типом данных вычисленного выражения.
Допускается запись нескольких операторов в строке. В качестве разделителя операторов
используется знак :(двоеточие).
Пример:
М = (А + В) / 2
М = (А + В) / 2 : С = К : D = 5
3.2.
Условный оператор
Условный оператор выполняет определенные инструкции в зависимости от значения
условия и может быть использован для описания конструкций блок-схем представленных на
рис.2.
нет
Условие
да
а) Обход
Действие
нет
Условие
да
б) Ветвление
Действие 2
Действие 1
да
Действие 1
Условие 1
нет
Условие 2
да
Действие 2
нет
Действие 3
Рис.2
18
в) Множественное
ветвление
Условный оператор имеет две формы синтаксиса: строчную и блочную.
Синтаксис строчной формы:
If <условие> Then <инструкции 1> [Else <инструкции 2>]
Условие представляет собой логическое выражение или набор логических выражений
объединенных логическими операциями.
При возвращении условием значения True, выполняются инструкции, следующие за
ключевым словом Then, а при возвращении условием значения False, выполняются инструкции, следующие за ключевым словом Else.
Примеры:
If A>B Then P=A : A=B : B=P
If A>B And R=0 Then C=A+B : К=1 Else C=A*B : К=2
If A>B Then C=A+B Else If A<B Then C=A*B Else C=0
Синтаксис блочной формы:
If <условие_1> Then
[инструкции_1]
[ElseIf <условие_2> Then
[инструкции_2]]
...
Направление
проверки условий
[ElseIf <условие_N> Then
[инструкции_N]]
[Else
[инструкции_else]]
End If
При возвращении условием_1 значения True, выполняются операторы, расположенные в нижеследующих строках, после чего управление передается в строку, следующую за
ключевым словом End If, а при возвращении условием_1 значения False управление
передается в строку, содержащую условие_2. Выполнение последующих проверок осуществляется аналогично. Если ни одно из условий не равно True, то выполняются операторы, расположенные в строках после ключевого слова Else, либо, если ключевое слово
Else отсутствует, то управление передается в строку, следующую за ключевым словом
End If.
Примеры:
' Пример 1 – это комментарий
If A > B Then
P = A
A = B
B = P
End If
' Пример 2
19
If K = 1 Then
C = A + B
ElseIf K = 2 Then
C = A - B
ElseIf K = 3 Then
C = A * B
Else
C = 0
End If
3.3.
Оператор выбора
Оператор выбора, подобно оператору If … Then … Else, используется для выполнения тех или иных инструкций в зависимости от значения условия.
Синтаксис:
Select Case переменная
Case список_значений_1
[инструкции_1]
[Case список_значений_2
[инструкции_2]]
...
[Case список_значений_n
[инструкции_n]]
[Case Else
[инструкции_else]]
End Select
В операторе выбора вместо вычисления логического условия выполняется сравнение значения переменой с каждой из величин, заданных параметром список_значений.
Величины для сравнения, входящие в список_значений, могут быть заданы в виде:
–
списка значений, перечисленных через запятую;
–
диапазона значений в виде начальное_значение To конечное_значение;
–
выражения сравнения в виде Is оператор_сравнения значение.
В инструкции может быть произвольное число блоков Case. Если ни одно из условий не
является истинным, то выполняются инструкции блока Case Else.
Пример:
Select Case K
Case 1
C = A + B
Case 2
C = A - B
Case 3
C = A * B
Case Else
C = 0
End Select
20
3.4.
Оператор цикла Do … Loop
Оператор цикла организует выполнение одних и тех же инструкций (тела цикла) до тех
пор пока выполняется (или, наоборот, не выполняется) какое-то условие.
Оператор Do … Loop может быть использован для описания конструкций блок-схем
представленных на рис.3.
нет
Условие 1
а) Цикл с предусловием
да
Тело
цикла
да
б) Цикл с постусловием
Тело
цикла
нет
Условие 1
Рис. 3
Оператор Do … Loop имеет две формы организации цикла: с предусловием и с постусловием.
Синтаксис оператора Do … Loop с предусловием:
Do [While | Until условие]
[инструкции]
[Exit Do]
[инструкции]
Loop
Оператор Do … Loop с предусловием организует проверку условия перед каждым входом в цикл и выполнение инструкций, входящих в тело цикла до тех пор, пока условие истинно, если оно записано после ключевого слова While, или ложно, если оно записано после ключевого слова Until.
Оператор Exit Do завершает выполнение цикла и передает управление оператору, следующему за инструкцией Loop.
Синтаксис оператора Do … Loop с постусловием:
21
Do
[инструкции]
[Exit Do]
[инструкции]
Loop [While | Until условие]
Оператор Do … Loop с постусловием организует проверку условия после каждого выполнения тела цикла. Если условие, записанное после ключевого слова While, истинно, или
условие, записанное после ключевого слова Until, ложно, то управление передается на
первый оператор тела цикла, иначе выполняется оператор, следующий за инструкцией Loop.
Примеры:
' Пример - 1
' цикл с предусловием
' будет выполняться до тех пор пока Х < 5
x=0
Do While x < 5
x = x + 1
Loop
' Пример - 2
' цикл с предусловием
' будет выполняться до тех пор пока Х не станет равным 5
x=0
Do Until x = 5
x = x + 1
Loop
' Пример - 3
' цикл без условия
' выход из тела цикла при Х равном 5
x=0
Do
if x = 5 then Exit Do
x = x + 1
Loop
3.5.
Оператор цикла со счетчиком For … Next
Оператор For … Next позволяет циклически выполнить набор утверждений заданное
количество раз.
Синтаксис:
For счетчик = нач_значение To конеч_значение [Step шаг]
[инструкции]
[Exit For]
[инструкции]
Next [счетчик]
22
Параметр счетчик – это числовая переменная, автоматически изменяющая свое значение
на величину шаг после каждого повтора цикла. Цикл выполняется до тех пор, пока счетчик  конеч _значение при положительном значении параметра шаг или до тех пор,
пока счетчик  конеч_значение при отрицательном значении параметра шаг. Если
параметр Step шаг опущен, то по умолчанию приращение переменной-счетчика полагается равным 1.
Оператор Exit For завершает выполнение цикла и передает управление оператору, следующему за ключевым словом Next.
Примеры:
' заполнение значениями элементов одномерного массива A размером N
n = 5
For i = 1 To n
A(i) = i ^ 2
Next i
' заполнение значениями элементов двумерного массива A размером N x M
n = 5 : m = 4
For i = 1 To n
For j = 1 To m
A(i, j) = i + j
Next j
Next
i
3.6.
Оператор цикла For Each … Next
Цикл For Each … Next позволяет повторить выполнение группы инструкций для каждого элемента массива или семейства.
Синтаксис:
For Each элемент In группа
[инструкции]
[Exit For]
[инструкции]
Next [элемент]
Параметр элемент – это переменная, которая представляет элемент семейства или массива. Аргумент группа – имя массива или семейства. Инструкции выполняются только
один раз для каждого члена группы. Использование инструкции удобно потому, что не требуется заранее знать, сколько элементов содержится в массиве или семействе.
Перечисленные выше операторы If … End If, Select … Case, Do … Loop,
For … Next, For Each … Next представляют собой группу управляющих инструкций,
которые изменяют порядок выполнения команд. Управляющие инструкции могут быть вложены друг в друга в любой последовательности.
3.7.
Оператор With … End With
Большинство действий в VBA производится с использованием свойств и методов объек23
тов, которые при написании отделяются от имени объекта точкой. При многократном обращении к одному и тому же объекту первая часть утверждений будет, таким образом, повторяться, что затрудняет восприятие текста программы. Для упрощения ссылок на свойства и
методы объектов используется инструкция With … End With.
Синтаксис:
With объект
[инструкции]
End With
Параметр объект – это имя требуемого объекта. Любые инструкции внутри блока With
… End With, в которых используются данный объект, могут содержать название его свойства или метода без имени, начиная с точки.
3.8.
Оператор безусловного перехода
Оператор безусловного перехода позволяет перейти к заданной строке активной процедуры. В программе следует по возможности избегать использования операторов безусловного
перехода, так как они нарушают логическую структуру программы и затрудняют ее отладку.
Синтаксис:
GoTo метка_строки
Параметр метка_строки представляет собой уникальное имя метки внутри процедуры
или функции, заканчивающееся двоеточием.
Оператор безусловного перехода применяется в VBA главным образом для обработки
ошибок (совместно с оператором On Error).
ТЕМА 4.
НЫХ
СТАНДАРТНЫЕ ФУНКЦИИ ВВОДА-ВЫВОДА ДАН-
План
7.1
Функция InputBox.
7.2
Функция MsgBox.
7.3
VBA содержит множество встроенных функций. К наиболее часто используемым относятся функции InputBox() и MsgBox(), предназначенные, соответственно, для ввода
данных пользователя и для вывода сообщений.
4.1.
Функция InputBox
Функция InputBox выводит на экран диалоговое окно, содержащее сообщение и поле
ввода, устанавливает режим ожидания ввода текста пользователем или нажатия кнопки, а
затем возвращает значение типа String, содержащее текст, введенный в поле.
Синтаксис функции:
InputBox(prompt[, title] [, default] [, xpos] [, ypos] _
[, helpfile, context])
24
Единственный обязательный аргумент функции prompt задает строковое выражение,
отображаемое как сообщение в диалоговом окне. Следующие аргументы указывают соответственно заголовок окна, значение, отображаемое в поле ввода по умолчанию, координаты
вывода левого верхнего угла окна по горизонтали и вертикали, имя файла справки и контекстный номер раздела справки.
Пример использования функции InputBox
s = InputBox(“Укажите значение параметра X”, “Ввод параметров”)
Данная инструкция выведет на экран диалоговое окно:
При щелчке пользователя по кнопке OK в переменной s будет сохранено текстовое значение, введенное в поле ввода. Если пользователь щелкнет по кнопке Отмена, то функция вернет пустую строку.
4.2.
Функция MsgBox
Функция MsgBox выводит на экран диалоговое окно, содержащее сообщение, устанавливает режим ожидания нажатия кнопки пользователем, а затем возвращает значение типа
Integer, указывающее, какая кнопка была нажата.
Синтаксис функции:
MsgBox(prompt [, buttons] [, title] [, helpfile, context])
Одноименные аргументы имеют тот же смысл, что и для функции InputBox(). Аргумент buttons содержит числовое выражение, которые указывают число и тип отображаемых кнопок, тип используемого значка, основную кнопку и модальность окна сообщения.
Обычно этот аргумент задается как сумма встроенных констант. Его значение по умолчанию
равняется 0 и соответствует выводу модального на уровне приложения окна сообщения без
значка с одной кнопкой OK.
Пример использования функции MsgBox
n = MsgBox("Недопустимые параметры. Продолжить?", _
vbYesNo+vbCritical, "Ввод параметров")
Данная инструкция выведет на экран модальное на уровне приложения диалоговое окно
со значком критического сообщения и двумя кнопками: Да, Нет.
25
При щелчке пользователя по одной из кнопок в переменной n будет сохранено числовое
значение, соответствующее нажатой кнопке.
ТЕМА 5.
ИСПОЛЬЗОВАНИЕ ОБЪЕКТА RANGE
В MICROSOFT EXCEL
План
9.1
9.2
9.3
5.1.
Назначение и использование объекта Range
Некоторые свойства объекта Range
Назначение и использование объекта Range
В модели объектов Excel имеются более 100 объектов и семейств, которые позволяют манипулировать всеми его возможностями и данными. Одним из наиболее широко используемых объектов в Excel является объект Range, представляющий собой ссылку на ячейку,
строку, столбец, несколько расположенных как рядом, так и отдельно ячеек, или трехмерный
диапазон. На объект указывают свойства Range, Cells, ActiveCell, Selection объектов Application, Worksheet (объект рабочего листа) или Range.
При использовании свойства Range применяется синтаксис:
выражение.Range(диапазон),
где выражение – ссылка на объект перечисленных выше типов. При неявной ссылке (отсутствии параметра выражение) подразумевается ActiveSheet.Range, т.е. ссылка на
объект Range активного рабочего листа. Параметр диапазон – строковое выражение, задающее адрес диапазона ячеек или одной ячейки или именованный диапазон, например:
Range(“G20”), Range(“A1:B10”), Range(“Итоги”).
Свойство Cells возвращает ссылку на единственную ячейку (объект Range):
выражение.Cells(строка, столбец),
где строка и столбец – соответственно номера строки и столбца.
Свойство ActiveCell указывает на активную ячейку, а свойство Selection – на выделенный диапазон, который, в том числе, включает и активную ячейку.
5.2.
Некоторые свойства объекта Range
Ниже описаны некоторые наиболее часто используемые свойства объекта Range.
Свойство Value используется для установки или чтения содержимого ячейки. Это свой26
ство используется по умолчанию, поэтому инструкции Range(“A1”).Value = 10 и
Range(“A1”) = 10 эквивалентны.
Свойство Name используется для задания или чтения имени диапазона, например,
Range(“A1:A20”).Name = “Товары”.
Свойство Formula используется для задания или чтения формулы в стиле A1, например,
Range(“A1”).Formula = “=Sum(C1:C6)”.
Свойство CurrentRegion указывает на объект Range, включающий диапазон ячеек,
ограниченный пустой строкой и пустым столбцом.
Свойство Offset возвращает ссылку на объект Range, отстоящий от заданного на указанное количество строк и столбцов, например, инструкция
ActiveCell.Offset(5, 1).Copy копирует в буфер обмена содержимое ячейки, отстоящей на 5 строк ниже и на 1 столбец правее активной.
27