Смекни!
smekni.com

Организация документооборота с помощью "Visual Basic for Application" (стр. 3 из 22)

Дерево каждого проекта в развернутом виде имеет как минимум один узел под названием Microsoft Excel Objects. В этом узле содержатся элементы каждого рабочего листа и лист диаграмм рабочей книги (рабочий лист считается объектом), а также объект под названием ЭтаКнига, представляющий объект Active Workbook. Если в проекте используются модули VBA, то в дереве отображается также узел Modules, в котором перечислены модули. Проект может также содержать узел Forms, содержащий объекты UserForm (пользовательские фор­мы, известные как пользовательские диалоговые окна). Если в проекте находятся модули классов, то в дереве отображается узел под названием Class Modules.

В Excel 2002 при добавлении ссылки на проект (с помощью команды ToolsAReferences) в дереве проекта появляется еще один узел: References. Каждая ссылка является отдельным объектом. Объекты, перечисленные в этом узле, не имеют окна кода.

Добавление нового модуля VBA

Чтобы добавить в проект новый модуль VBA, выделите название проекта в окне Project Explorer и выберите команду lnsert - Module (Вставка - Модуль). Также можно щелкнуть правой кнопкой мыши на названии проекта и выбрать команду Insert - Module в контекстном меню. При записи макроса Excel автоматически вставляет модуль VBA для хранения записанного кода.

Удаление модуля VBA

Чтобы удалить из проекта модуль VBA или модуль класса, выделите название модуля в окне Project Explorer и используйте команду File - Remove ххх (где ххх— название моду­ля). Кроме того, вы можете щелкнуть правой кнопкой мыши на названии модуля и выбрать команду Remove ххх из контекстного меню.

Экспорт и импорт объектов

За исключением объектов, перечисленных в узле References, каждый объект в проекте можно сохранить в отдельном файле. Сохранение отдельного объекта в проекте называется экспортом. Соответственно, вы можете также импортировать объекты в проект. Экспорт и импорт объектов полезен, если уже существующий объект (например, модуль VBA или фор­му UserForm) можно использовать в другом проекте.

Чтобы экспортировать объект, выберите его в окне Project Explorer и выполните команду File - Export File (или нажмите <Ctrl+E>). При этом отображается диалоговое окно, запра­шивающее имя файла. Обратите внимание, что сам объект остается в проекте (а экспортиру­ется только его копия). Если вы экспортируете объект UserForm, экспортируется также весь код, связанный с формой UserForm.

Чтобы импортировать файл в проект, выберите имя проекта в окне Project Explorer и вы­полните команду File - Import File. Появится диалоговое окно, в котором необходимо указать имя файла. Вы можете импортировать только те файлы, которые экспортированы с помощью команды File—Export File.

Если вы решили скопировать в другой проект модуль или объект UserForm, не обязательно использовать функции экспорта и импорта. Убедитесь, что оба проек­та открыты, затем активизируйте окно Project Explorer и перетащите необходимый объект из одного проекта в другой.

Работа с окнами кода

Каждому объекту в проекте соответствует свое окно кода. Такими объектами могут быть:

• сама рабочая книга (ЭтаКнига в окне Project Explorer);

• рабочий лист или лист диаграмм рабочей книги (например. Лист1 или Диаграмме 1 в окне Project);

• модуль VBA;

• модуль класса (специальный тип модуля, позволяющий создавать новые классы объектов);

• форма UserForm.

Сохранение программы VBA

Как правило, окно кода содержит четыре типа кода.

• Процедуры (процедуры Sub). Процедура — это набор инструкций, выполняющих оп­ределенное действие.

• Процедуры функции. Функция — это набор инструкций, возвращающий значение или массив значений (концепция функции VB А подобна такой же функции Excel).

• Процедуры свойств. Специальные процедуры, используемые в модулях классов.

Объяснение — это информация о переменной, предоставляемая VBA. Например, мож­но объявить тип данных для переменных, которые вы планируете использовать в коде.

В отдельном модуле VBA может храниться любое количество процедур, функций и объ­явлений. Способ организации модуля VBA зависит только от вашего желания. Некоторые предпочитают записывать весь код VBA приложения в одном модуле VBA; другие разделяют код на несколько разных модулей.

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

Введение кода VBA

Для того чтобы выполнить одно из действий программным образом, необходимо напи­сать программу VBA в окне кода. Код VBA располагается в процедуре. Процедура состоит из операторов VBA. На данном этапе (для примера) остановимся только на одном типе окна ко­да: модуль VBA.

Вы можете добавить код в модуль VBA тремя способами.

• Ввести код традиционным способом: с клавиатуры.

• Использовать функцию записи макросов в Excel, чтобы записать действия и преобра­зовать их в код VBA.

• Скопировать текст программы из другого модуля и вставить его в модуль, над кото­рым работаете.

Ввод кода вручную

Иногда самый простой путь является наилучшим. Непосредственное введение кода связа­но с использованием клавиатуры, т.е. вы вводите код программы с помощью клавиатуры. Клавиша <Таb> при этом используется с целью задать отступ в строках, которые логически принадлежат одной группе (например, условные операторы If и End If)- Это совершенно не обязательно, но помогает быстрее освоить программу, анализируя ее блочную структуру. Именно поэтому подобный подход в программировании называется '"хорошим стилем".

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

Отдельная инструкция в VBA может иметь произвольную длину. Однако, чтобы обеспе­чивать удобочитаемость кода, длинные инструкции лучше разбить на две или более строк. Для этого следует в конце строки ввести пробел и символ подчеркивания, а затем нажать <Enter> и продолжить инструкцию в следующей строке. Например, ниже приведен один опе­ратор VBA, разбитый на четыре строки.

MsgBox "Невозможно найти" & UCase(SHORTCUTMENUFILE) _

& vbCrLf & vbCrLf & "Файл должен находиться в _

" & ThisWorkbook.Path & vbCrLf & vbCrLf & _

"Возможно, требуется переустановить BudgetMan", v b С г i t i с a 1, APPNAME

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

Как и в Excel, в VBE есть несколько уровней отмены выполненных операций. По­этому, если вы по ошибке удалили инструкцию, можете несколько раз щелкнуть на кнопке Undo (Отменить) или нажать <Ctrl+Z>, и инструкция вновь появится в коде. После отмены операции можно щелкнуть на кнопке Redo (Вернуть), чтобы вернуть изменения, которые ранее отменены. Эта функция поможет исправить критически важные ошибки, поэтому не пренебрегайте ее использованием.

Использование функции записи макросов

Одним из способов создания кода модуля VBA является запись последовательности дей­ствий с помощью специальной функции записи макросов Excel.

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

1. Активизируйте рабочий лист в книге (подойдет любой лист).

2. Выберите команду Сервис – Макрос - Начать запись.
При этом Excel отображает диалоговое окно Запись макроса.

3. Щелкните на кнопке ОК. чтобы принять параметры по умолчанию.

Excel автоматически вставляет новый модуль VBA в проект. Начиная с этого момента Excel, преобразовывает ваши действия в код VBA. При записи в строке состояния отображается слово Запись, кроме того, в окно добавляется небольшая плавающая панель инструментов, содержащая две кнопки (Остановить запись и Относительная ссылка).

4. Выполните команду Файл - Параметры страницы.
Excel отображает диалоговое окно Параметры страницы.

Выберите переключатель Альбомная и щелкните на кнопке ОК, чтобы закрыть диа­логовое окно.

Щелкните на кнопке Остановить запись на панели инструментов (или выберите Сервис—Макрос - Остановить запись).

Excel прекращает записывать ваши действия.

Чтобы просмотреть макрос, запустите VBE (проще всего нажать <Alt+F11>) и найдите проект в окне Project Explorer. Щелкните на узле Modules, чтобы развернуть его. Затем щелкните на элементе Module 1. чтобы отобразить окно кода (если в проекте уже присутство­вал модуль Module1, новый макрос будет находиться в модуле Module2). Код, созданный одной командой, представлен в листинге 1. Если вы используете не Excel 2002, а иную вер­сию, текст программы может немного отличаться.

Листинг 1. Макрос изменения ориентации страницы на альбомную

Sub Макрос1()

‘ Макрос1 Макрос

1 Макрос записан 19.08.2003

With ActiveSheet.PageSetup

.PrintTitleRows = ""

.PrintTitleColumns = ""

End With

ActiveSheet.PageSetup.PrintArea = "" With ActiveSheet.PageSetup .LeftHeader = "" .CenterHeader = "" .RightHeader = "n .LeftFooter = "" .CenterFooter = " .RightFooter = ""

.LeftMargin = Application JInchesToPoints (0 . 787401575) .RightMargin = Application.InchesToPoints(0.787401575) .TopMargin = Application.InchesToPoints(0.984251969) .ButtonMargin = Application.InchesToPoints(0.984251969) . HeaderMargin = Application. InchesToPoints (0.5) .FooterMargin = Applicatior.InchesToPoints (0.5) .PrintHeadings = False .PrintGridlines = False .PrintComments = xlPrintNoComments •PrintQuality = 1200 •CenterHorizontally = False . Center-Vertically = False .Orientation - xlLandscape .Draft = False .PaperSize • xlPaperA4 . FirstPageNumber - xlAutoma tic .Order = xlDownThenOver .BlackAndWhite = False

Zoom = 100

.PrintErrors = xlPrintErrorsDisplayed

End With

End Sub

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