Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование VBA.pdf
Скачиваний:
373
Добавлен:
03.05.2015
Размер:
3.07 Mб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЭКОНОМИКИ И ФИНАНСОВ»

КАФЕДРА ИНФОРМАТИКИ

А.М. ВЛАСОВЕЦ

ВВЕДЕНИЕ В VBA

УЧЕБНОЕ ПОСОБИЕ

ИЗДАТЕЛЬСТВО САНКТ-ПЕТЕРБУРГСКОГО ГОСУДАРСТВЕННОГО УНИВЕРСИТЕТА

ЭКОНОМИКИ И ФИНАНСОВ

2010

2

ББК 32.81 В 58

Власовец А.М.

Введение в VBA: Учебное пособие. – СПб.: Изд-во СПбГУЭФ, 2010. –

135с.

Вучебном пособии изложены основные сведения об объектно-ориенти- рованном языке программирования, позволяющем автоматизировать решение задач в среде приложений в MS Office.

Содержание учебного пособия соответствует программам учебных дисциплин «Информатика и программирование» и «Информатика». Пособие предназначено для студентов специальности «Прикладная информатика в экономике» и может быть использовано студентами других факультетов СПбГУЭФ.

Рецензенты: д-р техн. наук, проф. Е.П. Истомин

д-р экон. наук, проф. В.П. Чернов

© Издательство СПбГУЭФ, 2010

3

1.Объектно-ориентированное программирование

VBA – это языковый процессор интерпретирующего типа, который построчно анализирует исходную программу и одновременно выполняет предписанные действия.

“Язык программирования – формальная знаковая система, предназначенная для записи программ. Программа обычно представляет собой некоторый алгоритм в форме, понятной для исполнителя. Язык программирования определяет набор лексических, синтаксических и семантических правил, используемых при составлении компьютерной программы. Он позволяет программисту точно определить, на какие события будет реагировать компьютер, как будут храниться и передаваться данные, а также какие именно действия следует выполнять над этими данными при различных обстоятельствах” [Материал из Википедии – свободной энциклопедии].

Язык программирования VBA (Visual Basic for Application) пакета Microsoft Office предназначен для автоматизации разработки документов при решении задач, использующих приложения этого пакета: Excel, Word, Access, PowerPoint, Outlook, – начиная с проектирования простых документов и кончая автоматизацией документооборота. VBA разработан на основе языка Visual Basic, является языком программирования высокого уровня, и в нем широко используются элементы объектно-ориентированного и собы- тийно-управляемого программирования. VBA предоставляет пользователю возможность создания экранных форм со стандартным набором эле-

ментов управления и написания процедур, обрабатывающих события,

которые возникают при тех или иных действиях системы и конечного пользователя.

При разработке приложений в VBA можно использовать средства

процедурного программирования и объектно-ориентированного про-

граммирования.

Процедурное программирование является отражением архитекту-

ры традиционных ЭВМ, которая была предложена фон Нейманом в 40-х годах. Теоретической моделью процедурного программирования служит алгоритмическая система под названием «машина Тьюринга».

Программа на процедурном языке программирования состоит из последовательности операторов (инструкций), задающих процедуру решения задачи. Основным является оператор присваивания, служащий для изменения содержимого областей памяти. Выполнение программы сводится к последовательному выполнению операторов с целью преобразования значений исходных данных в результаты. Примерами процедурных языков программирования являются Assembler, Pascal, C, PL/1, FORTRAN.

Объектно-ориентированное программирование (ООП) – это сово-

купность подходов, методов, стратегий, идей и понятий, определяющая стиль написания программ, в которой основными концепциями являются понятия объектов и классов.

4

Объект – это некоторая сущность, обладающая определённым состоянием и поведением, имеет заданные значения атрибутов и операций. Как правило, при рассмотрении объектов выделяется то, что объекты принадлежат одному или нескольким классам, которые в свою очередь определяют поведение объекта.

Класс – это тип, описывающий устройство объектов. Понятие “класс” подразумевает некоторое поведение и способ представления. Обычно классы разрабатывают таким образом, чтобы их объекты соответствовали объектам конкретной предметной области.

Класс является обобщением понятия типа данных и задает свойства и поведение объектов класса – экземпляров класса. Каждый объект при-

надлежит некоторому классу. Отношение между объектом и его классом такое же, как между переменной и ее типом. Класс – это объединение данных и обрабатывающих их процедур и функций. Данные называются также переменными класса, а процедуры и функции – методами класса.

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

состояние объекта.

Наряду со свойствами и методами с классом связывается еще одно понятие – событие. Каждый класс имеет определенный набор событий, которые могут возникать при работе с объектами класса, чаще всего при определенных действиях пользователя, иногда как результат действия системы. При возникновении события, связанного с тем или иным объектом, система посылает сообщение объекту, которое может быть обработано методом – обработчиком события, специально созданным при конструировании объекта. События обеспечивают большую гибкость при работе с объектами. Методы класса выполняются одинаково для всех объектов класса, а на события каждый объект реагирует индивидуально, поскольку имеет собственный обработчик события.

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

вание.

Наследование – один из четырёх важнейших механизмов объектно-

ориентированного программирования наряду с инкапсуляцией, полимор-

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

5

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

Полиморфизм – это явление, при котором один и тот же программный код выполняется по-разному в зависимости от того, объект какого класса используется при вызове данного кода. Полиморфизм обеспечивается тем, что в классе-потомке изменяют реализацию метода классапредка с обязательным сохранением сигнатуры метода1. Это обеспечивает сохранение неизменным интерфейса класса-предка и позволяет осуществить связывание имени метода в коде с разными классами – из объекта какого класса осуществляется вызов, из того класса и берётся метод с данным именем. Такой механизм называется динамическим (или поздним) связыванием, в отличие от статического (раннего) связывания, осуществляемого на этапе компиляции.

Абстракция да́ нных– подход к обработке данных по принципу чёрного ящика. Чёрный ящик – термин, используемый в точных науках для обозначения системы, механизм работы которой очень сложен, неизвестен или неважен в рамках данной задачи. Такие системы обычно имеют некий “вход” для ввода информации и “выход” для отображения результатов работы. Состояние выходов обычно функционально зависит от состояния входов. Данные обрабатываются функцией высокого уровня с помощью вызова функций низкого уровня. Обычно такой подход используется в объектно-ориентированном программировании, что позволяет работать с объектами, не вдаваясь в особенности их реализации.

При разработке программ на VBA можно использовать методы и средства как процедурного программирования, так и объектноориентированного программирования. Практически все инструкции, включая работу с файлами на внешних носителях информации, и большинство функций языка VBA имеют аналоги в языках процедурного программирования таких, например, как Algol, Fortran, Pascal. Поэтому любую программу, написанную на этих языках, можно написать на VBA. Но поскольку VBA предназначен для программирования в среде MS Office, то доступ программам на этом языке может быть осуществлён только через приложе-

ния MS Office Excel, Word, Access и других приложений MS Office.

Объектно-ориентированное программирование предоставляет возможность применять при разработке приложений средства для использования в программе такие объекты как, например, рабочий лист, диапазон ячеек, пользовательская форма, таблица, диаграмма – в Excel; документ, шрифт, область в документе, стиль в документе, таблица – в Word.

1 Сигнатура метода – это сокращенная форма записи параметров метода и типов возвращаемого значения.

6

Упорядоченный набор однотипных объектов – экземпляров одного класса называется семейством. Семейство тоже является объектом. Одним из методов этого объекта является процедура, возвращающая ссылку на конкретный объект в семействе, а одним из свойств семейства – число объектов, хранящихся в нем. Например, совокупность листов в приложении Excel образует семейство Worksheets.

Объекты и семейства сгруппированы в виде иерархических структур, которые называются объектными моделями. В VBA определены специальные объектные модели для каждого приложения семейства Microsoft Office и объектные модели, общие для всех приложений Microsoft Office. Объектные модели VBA можно изучать, используя справочную систему и окно просмотра объектов. Окно просмотра объектов представляет собой специальное средство редактора Visual Basic, позволяющее просматривать содержимое библиотек объектов и производить поиск справочной информации. Каждое из приложений Microsoft Office предоставляет свои объектные модели в виде одноименной библиотеки объектов.

Принцип разработки документов с использованием VBA одинаков для всех приложений Microsoft Office. Наиболее развитой и чаще всего используемой является объектная модель Excel. Поэтому в дальнейшем методика разработки приложений в VBA будет производиться на примере Excel. Освоив применение VBA для Excel, не трудно сделать это и для других приложений Microsoft Office. Для этого необходимо изучить объектную модель соответствующего приложения.

С помощью VBA в Excel можно выполнять такие действия как, например:

автоматизировать решение повторяющихся задач;

настроить интерфейс Excel с помощью изменения существующих или создания новых панелей инструментов, меню и пользовательских форм;

добавить новые функции в Excel;

создавать сложные отчеты;

манипулировать данными и осуществлять анализ данных.

При применении процедурных языков программирования большая часть средств разработки приложений реализуется средствами работы с файлами: поиск, открытие, сохранение, печать и т.п., – а также возможностями работы с фрагментами файлов: вырезание, вставка, копирование. В Excel для создания кода программ все основные средства его разработки уже имеются в приложении: средства манипулирования файлами, редактирования данных и форматирования, и их можно использовать. VBA обеспечивает также доступ к библиотеке функций Excel, позволяет использовать такие средства, как Microsoft SQL Server, включая OLAP Services, или средства создания отчетов и форм Microsoft Access.

7

2.Основные понятия

Программный код в VBA состоит из инструкций. Инструкция или оператор (англ. statement – утверждение; сообщение) – наименьшая автономная часть языка программирования; команда. Инструкции хранятся в процедурах, которые подразделяются на процедуры типа Sub и процедуры типа Function. Процедуру типа Sub в Excel называют также макросом. Процедура отличается от функции тем, что функция возвращает вызвавшей ее программе единственное значение, которое там будет использовано. Инструкции состоят из ключевых слов, констант и операторов.

Процедуры хранятся в модулях, причём в одном модуле может храниться одна или несколько процедур. Модуль можно определить как совокупность объявлений переменных и процедур, хранящихся как единое целое. Совокупность модулей, предназначенных для решения одной задачи, образует проект. Различают два основных типа модулей: стандартные модули и модули классов.

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

Модуль класса – это модуль, в котором записывается программный код, реализующий работу созданных программистом классов. В окне структуры проекта такие модули группируются в папку Class Modules.

В большинстве случаев используются стандартные модули, называемые обычно просто модулями.

Формат процедуры имеет вид1:

[Public] [Private] [Static] Sub|Function <ИмяПроцедуры> ([Параметры]) [‘Комментарии] <Инструкции>

End Sub|Function

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

Public Sub План()

или Sub План ()

т.к. процедура определяется как Public по умолчанию. Если модуль объявлен как Private, например,

Private Sub Доход ()

1 Элемент, заключённый в квадратные скобки, не обязателен, а угловые скобки означают понятие.

8

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

В процедуре, объявленной как Static, например,

Private Static Sub Доход ()

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

Комментарий – любой текст, начинающийся с символа “одиночная кавычка ' ”. Его можно вводить в начале строки программного кода или за последним символом инструкции. Пустые комментарии, содержащие только символ “кавычка”, применяются для наглядного разделения процедуры на части.

Ввод программного кода можно производить с клавиатуры или использовать функцию записи макросов. В последнем случае в каждом новом сеансе работы с Excel автоматически создаётся новый модуль, идентифицируемый очередным порядковым номером – Модуль1, Модуль2 и т.д., если программист не назначил для записи процедуры существующий модуль. Обычно в одном модуле записывают логически связанные между собой процедуры, хотя каждую процедуру можно хранить в отдельном модуле.

2.1. Алфавит и словарь языка

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

Лексема – это единица текста программы, которую распознаёт компилятор и которая не может быть разбита в дальнейшем. В Visual Basic различают шесть классов лексем: идентификаторы; ключевые (зарезервированные) слова; константы; строки; операции (знаки операций); разделители.

В алфавит VBA входят:

буквы латинского алфавита прописные: A, B, C, D, E, F, … X, Y , Z

и строчные: a, b, c, d, e, … x, y, z;

буквы кириллицы прописные: А, Б, В, Г, В, Е … Э, Ю, Я

и строчные и строчные: а, б, в, г, д., е … э, ю, я;

цифры от 0 до 9;

символ подчеркивания “_”.

Данные символы используются для построения идентификаторов: имен переменных, констант, процедур, функций, меток переходов и имен типов. Использование строчных букв эквивалентно построению соответствующих конструкций из прописных букв и используются для стилистического оформления программы.

9

Кроме этих символов, в состав алфавита также входят:

неизображаемые символы, используемые для отделения лексем друг от друга (пробел, табуляция, переход на новую строку). Лексемы включают в себя зарезервированные слова, идентификаторы (стандартные и пользовательские), специальные символы и метки;

специальные символы, участвующие в построении конструкций языка (табл. 1).

 

Специальные символы

 

 

Таблица 1

+

плюс

<

меньше

[ ]

квадратные скобки

минус

_

подчёркивание

( )

круглые скобки

*

звёздочка

.

точка

^

тильда

/

дробная черта

,

запятая

апостроф

=

равно

:

двоеточие

$

знак доллара

>

больше

;

точка с запятой

<>

Не равно

<=

меньше или равно

>=

больше или равно

 

 

Из этих символов образуются слова языка VBA. Слова в программах отделяются друг от друга разделителями и специальными символами.

Разделителями являются:

пробел;

символ продолжения строки ( _ );

символ табуляции.

Специальные символы: +, – ,* , / , ’, . , =, <, >, : - используются для обозначения операторов и других языковых конструкций. Все слова языка VBA можно разделить на четыре группы:

имена (идентификаторы);

ключевые (зарезервированные) слова;

числа;

строки.

Имя (идентификатор) – произвольная последовательность букв латинского и русского алфавита и цифр, не превышающая 255 символов, которая обязательно должна начинаться с буквы на любом регистре букв (верхнем или нижнем). Идентификатор может включать также символы подчеркивания. В качестве идентификаторов нельзя использовать ключевые слова языка и имена стандартных объектов. Имя не может содержать точек, пробелов и следующих символов: %, .&,!, #, @, $. Рекомендуется идентификаторы, состоящие больше чем из одного слова, разделять символом подчёркивания или писать слитно, начиная каждое слово с прописной буквы, а остальную часть слова писать прописными. Имена должны быть уникальны внутри области, в которой они определены, и по возможности обозначать смысл идентификатора. Идентификаторы используются для обозначения переменных программного кода VBA. Примеры идентификаторов: Цена_товара, ЦенаТовара, Numero, Contador и т.д.

10

Идентификаторы применяются также для обозначения объектов, методов и свойств VBA, которые представляют собой однозначно определённые лексемы. Хотя VBA позволяет использовать эти лексемы в качестве идентификаторов переменных, тем не менее не рекомендуется это делать во избежание непредвиденных ошибок.

Ключевое (зарезервированное) слово – это слово, которое представляет целую языковую конструкцию или ее часть и может использоваться только в том виде, в каком оно указывается при описании синтаксиса языка. Никакое другое слово в программе не должно совпадать с ключевым словом. Обычно первая буква ключевого слова – прописная, но можно вводить слово только строчными буквами. Если при вводе программного кода в слове нет ошибки, редактор исправит его так, как это принято в языке. В противном случае VBA выдаёт сообщения об ошибке компиляции, например, такие:

Ключевые слова, используемые для построения инструкций, например, As, Dim, For, Integer и т.п., VBA выделяет синим цветом и первую букву делает прописной.

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

Строка – произвольная последовательность символов алфавита, заключенная в двойные кавычки (“”). Если строка включает символ кавычки, перед ним ставится еще один такой же символ, чтобы отличить его от символа конца строки, например “ОАО ““Океан””.

Число используется для представления дробных и целых чисел. Целое число записывается в виде последовательности цифр. Для записи десятичных чисел в качестве разделителя десятичных знаков используется точка “.”. Для записи чисел можно использовать экспоненциальную форму.

Строка – произвольная последовательность символов алфавита, заключенная в двойные кавычки (“”). Если строка включает символ кавычки, перед ним ставится еще один такой же символ, чтобы отличить его от символа конца строки, например “ОАО ““Океан””.

2.2. Переменные

Переменные предназначены для хранения данных в оперативной памяти. В программе перед использованием переменные нужно объявлять. При объявлении переменной надо задаётся её имя и тип. Тип указывает способ представления переменной. В переменных можно хранить

11

практически любые типы данных: числа, строк текста, экземпляры объектов, элементы управления и т.д. В VBA различают две группы типов данных: основные, называемые иногда базовыми или встроенными, и типы данных, определяемые пользователем.

Базовые типы переменных Visual Basic

Тип

 

Хранимая

 

 

Занимае-

Интервалы значений

 

 

 

информация

мая

 

 

 

 

 

 

 

 

 

 

 

 

память

 

 

 

 

 

 

Целочисленные типы

 

 

 

 

 

 

 

 

 

 

Byte

 

Целые числа

1 байт

 

от 0 до 255

 

 

Boolean

Логические

зна-

2 байта

 

True

(Истина)

или False

 

 

чения

 

 

 

 

 

(ложно)

 

 

 

Integer

Целые числа

2 байта

 

от -32768 до 32767

 

Long Integer

Длинные

 

целые

4 байта

 

+/-2.1E9

 

 

 

 

 

числа

 

 

 

 

 

 

 

 

 

 

Типы с плавающей точкой

 

 

 

 

 

 

 

Single

 

Вещественные

 

4 байта

 

от -3.402823Е38 до -

 

 

числа одинарной

 

 

 

1.401298Е-45 для отрица-

 

 

точности

с

пла-

 

 

 

тельных

чисел

и

от

 

 

вающей точкой

 

 

 

1.401298Е-45

 

до

 

 

 

 

 

 

 

 

3.402823Е38 для положи-

 

 

 

 

 

 

 

 

тельных

 

 

 

Double

Вещественные

 

8 байт

 

от -1.7976313486232Е308

 

 

числа

двойной

 

 

 

до -4.94065645841247Е-

 

 

точности

с

пла-

 

 

 

324

для

отрицательных

 

 

вающей точкой

 

 

 

чисел

 

и

 

от

 

 

 

 

 

 

 

 

4.94065645841247Е-324 до

 

 

 

 

 

 

 

 

1.7976313486232Е308

для

 

 

 

 

 

 

 

 

положительных

 

 

Строковые типы

 

 

 

 

 

 

 

 

 

 

String

(стро-

Текстовая

 

 

1 байт

на

От 1 до 65400

 

 

ка фиксиро-

информация

каждый

 

 

 

 

 

 

ванной дли-

(строка)

 

 

 

символ

 

 

 

 

 

 

ны)

 

 

 

 

 

 

 

 

 

 

 

 

String

(стро-

Текстовая

 

 

10 байт + 1

От 0 до двух миллиардов

ка перемен-

информация

байт

на

символов

 

 

 

ной

длины

(строка)

 

 

 

каждый

 

 

 

 

 

 

длины)

 

 

 

 

символ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Объектные типы

 

 

 

 

 

 

 

 

 

 

Object

 

Рисунок или

4 байта

 

Ссылка на объект

 

 

 

ссылка на любой

 

 

 

 

 

 

 

 

 

другой объект

 

 

 

 

 

 

 

Типы Variant

 

 

 

 

 

 

 

 

 

 

 

12

Variant

 

Значения любого

16

байт

Любое числовое или стро-

 

 

из

перечислен-

для чисел,

ковое значение

 

 

ных типов данных

22 байта +

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

байт на

 

 

 

 

 

 

 

 

каждый

 

 

 

 

 

 

 

 

символ для

 

 

 

 

 

 

 

 

строк

 

Прочие типы

 

 

 

 

 

 

 

 

Currency

 

Числа,

имеющие

 

8 байт

от

 

 

до

15

цифр

до

 

 

 

-922337203685477.5808

 

 

десятичной точки

 

 

 

 

 

и 4 цифры после

 

 

 

до 922337203685477.5808

 

 

нее

 

(денежные

 

 

 

 

 

единицы)

 

 

 

 

 

Date

 

Информация

о

 

8 байт

от 1 января 100 г. до

 

 

дате и времени

 

 

 

31-го декабря 9999 г.

 

 

 

 

 

 

 

 

 

Decimal

 

Десятичное

чис-

 

14 байт

Целое – 29 знаков

 

 

ло

 

 

 

 

 

 

Вещественное – 27 знаков

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

после запятой

Объявление переменных может быть явным или неявным.

Явное объявление

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

[Static|Public|Private] Dim <ИмяПеременной> [As <тип>] [,<ИмяПеременной>[As <тип>]]…

Здесь:

Dim – ключевое слово, которое означает, что объявляется переменная и резервируется область памяти для ее хранения;

ИмяПеременной – имя переменной (идентификатор);

As (Как) – ключевое слово, которое определяет тип данных для переменной;

Тип – тип данных для объявляемой переменной;

Private (Частный), Public (Общий) – ключевые слова, определяющие область видимости переменной;

Static (Статический)- ключевое слово, которое определяет, сохраняет ли переменная свое значение при завершении процедуры и

выходе из неё.

Примеры инструкций объявления переменных

Dim Товар As String*15

Dim Цена As Currency