Программирование VBA. Федеральное агентство по образованию государственное образовательное учреждение высшего профессионального образования
Скачать 2.93 Mb.
|
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЭКОНОМИКИ И ФИНАНСОВ» КАФЕДРА ИНФОРМАТИКИ А.М. ВЛАСОВЕЦ ВВЕДЕНИЕ В VBA УЧЕБНОЕ ПОСОБИЕ ИЗДАТЕЛЬСТВО САНКТ-ПЕТЕРБУРГСКОГО ГОСУДАРСТВЕННОГО УНИВЕРСИТЕТА ЭКОНОМИКИ И ФИНАНСОВ 2010 2 ББК 32.81 В 58 Власовец А.М. Введение в VBA: Учебное пособие. – СПб.: Изд-во СПбГУЭФ, 2010. – 135 с. В учебном пособии изложены основные сведения об объектно-ориенти- рованном языке программирования, позволяющем автоматизировать решение задач в среде приложений в MS Office. Содержание учебного пособия соответствует программам учебных дисци- плин «Информатика и программирование» и «Информатика». Пособие предна- значено для студентов специальности «Прикладная информатика в экономике» и может быть использовано студентами других факультетов СПбГУЭФ. Рецензенты: д-р техн. наук, проф. Е.П. Истомин д-р экон. наук, проф. В.П. Чернов © Издательство СПбГУЭФ, 2010 3 1. Объектно-ориентированное программирование VBA – это языковый процессор интерпретирующего типа, который построчно анализирует исходную программу и одновременно выполняет предписанные действия. “Язык программирования – формальная знаковая система, предна- значенная для записи программ. Программа обычно представляет собой некоторый алгоритм в форме, понятной для исполнителя. Язык програм- мирования определяет набор лексических, синтаксических и семантиче- ских правил, используемых при составлении компьютерной программы. Он позволяет программисту точно определить, на какие события будет реаги- ровать компьютер, как будут храниться и передаваться данные, а также какие именно действия следует выполнять над этими данными при раз- личных обстоятельствах” [Материал из Википедии – свободной энцикло- педии]. Язык программирования VBA (Visual Basic for Application) пакета Mi- crosoft Office предназначен для автоматизации разработки документов при решении задач, использующих приложения этого пакета: Excel, Word, Ac- cess, 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, E R Integer и т.п., ER VBA выделяет синим цветом и первую букву делает прописной. Текст программы на языке VBA состоит из последовательности предложений, каждое из которых представляет собой комбинацию ключе- вых слов и идентификаторов. Строка – произвольная последовательность символов алфавита, заключенная в двойные кавычки (“”). Если строка включает символ кавыч- ки, перед ним ставится еще один такой же символ, чтобы отличить его от символа конца строки, например “ОАО ““Океан””. Число используется для представления дробных и целых чисел. Це- лое число записывается в виде последовательности цифр. Для записи де- сятичных чисел в качестве разделителя десятичных знаков используется точка “.”. Для записи чисел можно использовать экспоненциальную форму. Строка – произвольная последовательность символов алфавита, заключенная в двойные кавычки (“”). Если строка включает символ кавыч- ки, перед ним ставится еще один такой же символ, чтобы отличить его от символа конца строки, например “ОАО ““Океан””. |