Лабораторная работа 10 Тема: Методы и свойства объектов Microsoft Word

Основное преимущество программирования в VBA определяется возможностью автоматизировать процесс обработки документов с помощью -написания и использования собственных макрокоманд. Создавая интегрированную систему, включающую дизайн шаблона, пользовательские формы и совершенную технику программирования в VBA, вы можете сушественно изменить процесс создания документов. Чтобы использовать VBA с максимальной эффективностью, вам понадобятся все те знания, которые вы почерпнете в этом курсе — дизайн шаблона, использование кодов полей, закладок, гиперсвязей и создание собственных меню и панелей инструментов. Чем больше встроенных возможностей Word вы будете использовать, тем

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

 

.Планирование автоматизированного приложения для Word

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

Параметры документа. Каковы требования к размеру, ориентации страниц (книжная или альбомная), полям, верхним и нижним колонтитулам, а также к нумерации страниц?

Форматирование и стили. Какие шрифты будут использоваться в документе? Каковы различия между стилями абзацев, смещениями строк, заголовками тем, элементами нумерации, видами меток и другими характерными особенностями документа?

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

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

Тщательно продумав и проанализировав все характеристики автоматизируемого документа, вы сделаете большую часть работы. Например, если вам достаточно хорошо известны параметры страниц и правила форматирования документа, но вы не знакомы со специфическими требованиями к тексту или же не знаете, где именно должен размещаться текст, — в таком случае, скорее всего, нужно создать ; шаблон, определяющий правила форматирования. При этом вы можете обойтись без или малым количеством программного кода VBA. С другой стороны, если требования к вводимым данным весьма строги и абсолютно негибки, ваше приложение только выиграет от применения пользовательских форм, позволяющих вводить данные только строго определенного типа, а также от VBA-программы, которая расположит их в определенных частях документа.

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

Подробнее о Шаблонах

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

Каждый документ Word основан на определенном шаблоне. Можете считать, что вам сильно повезло, если все ваши документы основаны на глобальном шаблоне, который называется Обычный (хранится в Normal.dot). Обычным шаблоном можно пользоваться для хранения общецелевых макросов, для установки каких-либо конкретных параметров, а специализированные шаблоны могут содержать строго определенные характеристики специальных документов: заголовок факса, фирменный бланк, письмо или договор о купле-продаже.

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

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

Стили. Преобразуйте требования к шрифтам и форматированию абзацев вашего приложения с учетом встроенных стилей шаблона.

Текст и графика. Многие приложения могут содержать текстовые фрагменты, например, заголовки писем, которые должны находиться в строго определенном месте документа. Кроме того, во многих приложениях вы встретите различные графические изображения, например, логотип компании. Таким образом в шаблон можно поместить и текст, и графику, тогда они будут присутствовать в каждом документе, основанном на данном шаблоне.

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

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

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

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

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

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

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

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

Пример компоновки записки, которая используется в корпорации ABC, приведен на рис. 10.1. Рассмотри несколько основных моментов, которые необходимо принять во внимание при разработке шаблона.

Рисунок 10.1Компановка документа-зписки в корпорации АВЦ

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

Личная записка,

Секретная записка,

Обычная записка.

Заголовки Кому, От, Дата и Тема должны быть выровнены по правому краю.

Дата в поле Дата должна вводиться автоматически, но необходимо, чтобы пользователь имел возможность ее изменить.

Поле Копия является необязательным. Если в этом поле информации нет, тогда метка поля не должна присутствовать в документе.

По стандарту необходимо использовать шрифт Arial, кегль 12. Абзацы должны быть выровнены по правому краю, после каждого абзаца идет пустая строка.

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

На рис. 10.2 показан промежуточный этап разработки шаблона для записок в корпорации ABC.

 

Рисунок 10. 2 Для выравнивания заголовков применяется таблица

 

Элементы, входящие в состав заголовка документа, необходимо вводить в таблицу; ширина колонок таблицы подобрана так, чтобы выполнялись соответствующие требования к шаблону. Область для ввода информации в поле Копия создана путем объединения нескольких ячеек.

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

После определения базовых параметров, совсем не плохо было бы сохранить этот документ. Чтобы сохранить файл как шаблон, необходимо выполнить следующее.

1. Выберите из меню Файл команду Сохранить как. Появится (рис. 10.3) диалоговое окно Сохранение документа.

2. В поле Имя файла введите имя шаблона.

3. В раскрывающемся списке Тип файла установите Шаблон документа.

4. Щелкните на кнопке ОК, чтобы завершить команду.

Рисунок 10. 3. Чтобы сохранить шаблон воспользуйтесь командой Сохранить как

 

Можно пометить некоторые ключевые области вашего шаблона, установив зактадку. Закладки дают (возможность вашей VBA-программе быстро и безошибочно переходить к данной части документа. Такой подход обеспечивает быстрое выполнение различных действий в выделенной области, например, ввод текста, применение различных команд форматирования или перемещение точки вставки или курсора в то место, где пользователь должен ввести текст.

На рис. 10.4 показан шаблон корпорации ABC для записки с тремя закладками, которые будут необходимы для написания нашего макроса.

Рисунок 10. 4. Закладки указывают ключевые точки, необходимые для автоматизации макроса

Закладка ccLabel определяет положение поля Копии. Если пользователь решит не вводить информацию в список дополнительной рассылки, в этом случае данную метку нужно удалить из документа. Закладка позволяет легко удалять текст из этого поля.

Закладка ccText расположена там, где будет введен список дополнительной рассылки, при этом будет использоваться код поля DocVariable. Необходимо, чтобы макрокоманда автоматически удалила этот код поля, если пользователь решит не вводить информацию в поле Копии.

Закладка Body указывает место, куда по завершению макроса будет помещена точка вставки. Именно здесь пользователь должен ввести текст отчета.

Чтобы создать закладку в шаблоне, выполните следующие действия.

1. Укажите место для закладки, переместив сюда точку вставки или выделив какой-либо текст.

2. В меню Вставка выберите команду Закладка. Появится диалоговое окно Закладка, показанное на рис. 10.5.

3. Введите имя закладки в поле Имя закладки.

4. Чтобы установить закладку, щелкните на кнопке Добавить.

Рисунок 10. 5. С помощью диалогового окна Закладка вы сможете установить или удалить закладку в своем документе или шаблоне

Для ввода в отчет текста заголовков, которые необходимы при создании,

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

Коды полей DocVariable предлагают удобный и надежный способ отображения текста, вводимого служащим в пользовательскую форму. Вместо того чтобы вносить текст непосредственно в документ, наша Макрокоманда будет хранить его в специальных переменных. Переменные документа могут быть изменены только вашей программой, а не самим пользователем, конечно, пока он для этого не напишет свой собственный макрос. Таким образом, случайно удалить информацию из таких переменных нет никакой возможности.

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

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

ПРЕДОСТЕРЕЖЕНИЕ

Коды полей не могут обновляться сами по себе, т.е. автоматически, поэтому совсем необязательно, что DocVariable будет отражать самые "свежие" значения переменных документа. Чтобы обновить значение DocVariable, как и для остальных видов кодов полей в Word, выделите необходимый код поля и нажмите клавишу <F9>. После усовершенствования макрокоманда сможет автоматически выполнять обновление кодов полей.

 

Чтобы вставить код поля DocVariable, выполните следующие действия.

1. Установите курсор в том месте документа или шаблона, где вы хотите вставить код поля.

2. Из меню Вставка выберите команду Поле. Появится диалоговое окно Поле, показанное на рис. 10.6.

3. В списке Категории выберите параметр Автоматизация документа, затем в списке Поля выберите параметр DocVariable.

Рисунок 10. 6. Диалоговое окно Поле используется для вставки кода поля в документ или шаблон

 

4. В текстовом поле Код поля, после надписи DocVariable, в кавычках введите имя переменной, которую вы хотите отобразить. На рис. 5.6 Author — это имя переменной документа и ее значение будет отображено в документе.

5. Щелкните на кнопке ОК, чтобы завершить команду и вставить код поля в документ.

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

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

1. Нажмите комбинацию <Alt+F9>, чтобы включить отображение кодов полей.

2. Нажмите <Alt+F9> еще раз, чтобы отключить отображение и показывать только значение кодов полей.

На рис. 10.7 показан шаблон для записок корпорации ABC с отображением кодов полей после установки кодов DocVariable для вводимой пользователем информации.

Рисунок 10. 7. Коды полей DocVariable в шаблоне для записок корпорации ABC указывают положение введенной пользователем информации

 

Замечание. Когда вы перешли в режим отображения кодов полей (комбинация <Alt+F9>), документ переформатируется таким образом, чтобы предоставить достаточно места для показа содержимого кодов. Это может испортить общий вид документа. Однако такое искажение временное и будет исправлено, когда вы вернетесь в предыдущий режим, еще раз нажав <Alt+F9>. Чтобы временно спрятать данный код поля, выделите код поля и нажмите <Shift+F9>.

. Разработка пользовательского интерфейса

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

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

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

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

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

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

Пользовательские диалоговые окна, или так называемые формы, разрабатываются с помощью Редактора Visual Basic или VBE (Visual Basic Editor). Используя в формах разнообразные элементы управления, такие как текстовые поля, кнопки команд, списки, переключатели, вы усовершенствуете свои макрокоманды. Стандартная поставка VBE содержит множество таких элементов, а установка дополнительного коммерческого программного обеспечения позволит вам более профессионально работать с VBA.

Рис. 10.8. Диалоговое окно, появляющееся в процессе создания формы, позволяет пользователю легко вводить информацию

 

Однако, прежде чем приступать к разработке форм, необходимо продумать саму форму, например, рассмотреть все виды информации, которые вам нужно получить от пользователя. Также необходимо определить, какие элементы управления процессом создания документа можно предоставить пользователю. На рис. 10.8 показана форма, которой пользуются в корпорации ABC для сбора информации у сотрудников.

Это диалоговое окно, или если хотите форма, содержит следующие элементы управления.

Текстовые поля используются для ввода данных Кому, От, Дата, Тема и Копии. Текстовые поля позволяют вводить непосредственно текст.

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

С помощью флажка опции Копии можно активизировать поле Передать копии. Установив флажок пользователь тем самым указывает, что необходимо активизировать это поле, и наоборот.

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

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

1. Откройте ваш шаблон и перейдите в Редактор Visual Basic, нажав комбинацию клавиш <Alt+F11>.

2. Откройте окно проекта, если оно еще не открыто.

3. Выберите TemplateProject, соответствующий шаблону, с которым вы работаете.

4. Выберите команду Вставка, UserForm. Новая форма будет добавлена в проект и открыта для редактирования.

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

1. Если окно свойств не присутствует на экране, выберите из меню Вид команду Окно свойств или нажмите клавишу <F4>.

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

§ Свойство Name идентифицирует форму в вашей программе. Необходимо по возможности задавать описательное имя формы, чтобы код программы был более понятен. Например, в шаблоне ABC для отчетов форма названа MemoForm.

Свойство Caption содержит текст, который будет присутствовать в строке заголовка формы. Это должен быть тест, который позволит пользователю легко узнать данное диалоговое окно.

На рис. 10.9 показана новая форма после изменения свойств Name и Caption. Например, для этой формы установите следующие свойства.

Для свойства Name задайте MemoForm.

Для свойства Caption формы введите ABC Corp. Memo.

 

Добавление управляющих элементов в форму

Для добавления управляющих элементов в форму используется панель элементов. Если эта панель не присутствует на экране. В меню Вид выберите команду Панель элементов. Панель элементов показана на рис. 10.10.

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

1. Щелкните на необходимом элементе на панели элементов.

2. Щелкните в форме в том месте, где вы хотите разместить управляющий элемент.

3. Измените его размер.

При выполнении следующей последовательности шагов будем считать, что свойства формы Name и Caption уже установлены, так как это было показано в предыдущем разделе.

Рис. 10.9. Окно свойств используется для установки свойств формы или свойств управляющих элементов формы

Рис. 10.10. Панель элементов используется для добавления управляющих элементов в форму в Редакторе Visual Basic

 

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

1. Щелкните на форме, чтобы активизировать ее. Если панель элементов отсутствует на экране, выберите из меню Вид команду Панель элементов,

2. Используя мышь, щелкните на элементе Надпись, как показано на рис, 10.11.

3. Переместите указатель в то место формы, где вы хотите разместить выбранный элемент. Указатель мыши примет вид крестика, как показано на рис. 10.12.

Рис. 10.11, Пользователь выбирает управляющий элемент Надпись перед тем, как добавить его в форму

Рис.10.12. Пользователь указывает место, где хочет разместить элемент Надпись

 

4. Щелкните на форме. Управляющий элемент появится в форме.

5. С помощью мыши измените размеры или положение элемента. Для изменения размеров воспользуйтесь размерными маркерами, т.е. квадратиками, которые появляются вокруг элемента, чтобы растянуть или сжать его, как показано на рис. 10.13.

6. Теперь вы можете сменить надпись (рис. 10.14). Если окно свойств не присутствует на экране, нажмите клавишу <F4>.

7. Убедитесь в том, что элемент Надпись является активным, после чего измените его свойство Caption на Тип записки:.

Рис. 5.13. Использование размерных маркеров для изменения размеров управляющего элемента формы

Рис. 10.14. Использование окна свойств для изменения свойства Caption управляющего элемента Надпись

 

Следующий управляющий элемент, который вы добавите в форму, поле со списком для выбора типа чета.

1. Щелкните в форме, чтобы активизировать ее и выведите на экран панель элементов.

2. Щелкните на элементе Поле со списком на панели, как показано на рис. 10.15.

3. Разместите указатель в том месте формы, где должен быть расположен элемент. Указатель мышц примет форму крестика.

4. Щелкните в форме. Управляющий элемент появится в форме.

5. Измените размеры элемента.

6. Теперь можно изменить имя элемента. Если окно свойств не присутствует на экране, нажмите клавишу <F4>, чтобы открыть его.

7. Убедитесь в том, что этот элемент активен, после чего измените его свойство Name. Введите имя cmbxMemo Type.

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

1. Расположите надпись для текстового поля прямо под надписью для поля со списком.

2. Измените свойство Caption элемента на Кому:.

Затем добавьте текстовое поле, в которое будет введено имя человека, которому предназначен отчет.

1. Щелкните на форме, чтобы активизировать ее. Если панель элементов не присутствует на экране, выберите из меню Вид команду Панель элементов.

2. Выберите элемент Поле на панели, как показано на рис. 10.16.

3. Разместите указатель в том месте формы, где должен находиться элемент. Указатель мыши примет форму крестика.

4. Щелкните в форме. Управляющий элемент появится в форме.

5. С помощью мыши измените размеры элемента.

6. Теперь можно изменить имя поля. Если окно свойств не присутствует на экране, нажмите <F4>.

7. Убедитесь в том, что элемент активен, после чего измените свойство Name. Введите имя txtTo.

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

1. Добавьте элемент Надпись и измените его свойство Caption на От:.

2. Добавьте текстовое поле ниже уже существующих и измените его свойство Name на txtfrom.

3. Добавьте элемент Надпись и измените его свойство Caption на Дата:.

4. Добавьте текстовое поле и измените его свойство Name на txtDate.

5. Добавьте элемент Надпись и измените его свойство Caption на Тема:.

6. Добавьте текстовое поле и измените его свойство Name на txtSubject.

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

1. Щелкните на форме, чтобы активизировать ее, и выведите на экран панель элементов.

2. Щелкните на элементе Флажок на панели, как показано на рис. 10.17.

3. Переместите указатель в то место формы, где должен находиться элемент. Указатель мыши примет форму крестика.

4. Щелкните в форме. Управляющий элемент появится в форме.

5. С помощью мыши измените размеры элемента.

6. Теперь измените имя элемента. Если окно свойств не присутствует на экране, нажмите клавишу <F4>, чтобы открыть его.

7. Убедитесь в том, что элемент является активным, после чего измените его свойство Caption. Введите имя Копии.

8. Измените свойство Name флажка на chkIncludeCC.

Теперь можно добавить в форму все остальные элементы.

1. Добавьте элемент Надпись в правой части формы и измените его свойство Caption на Передать копии:. Затем измените его свойство Name на lblCCList.

2. Добавьте в форму элемент Поле и измените его свойство Name на txtCCList.

3. Поскольку в этом поле, возможно, будут введены несколько имен, увеличьте его высоту, чтобы оно было достаточно вместительным.

4. Чтобы в данном поле можно было ввести несколько строк текста, измените его свойство MultiLine на True.

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

1. Чтобы активизировать форму, щелкните в ней и выведите на экран панель элементов.

2. Щелкните на элементе Кнопка на панели инструментов, как показано на рис.10.18.

3. Разместите указатель в том месте формы, где будет находиться элемент. Указатель мыши примет форму крестика.

4. Щелкните в форме. Управляющий элемент появится в форме.

5. С помощью мыши, измените размеры элемента и его местоположение, если это необходимо.

6. Установите значение свойства Name в OkButton, а свойство Caption — в ОК.

7. Повторите пп. 1—5, чтобы добавить еще одну кнопку.

8. Установите значение свойства Name в CancelButton, а свойства Caption — в Cancel.

; Рис. 10.15. Пользователь выбирает управляющий элемент Поле со списком, чтобы добавить его в форму

Рис. 10.16. Пользователь выбирает управляющий элемент Поле, чтобы добавить его в форму

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

Рис. 10.18. Пользователь выбирает управляющий элемент Кнопка, чтобы добавить его в форму

На рис. 10.19 показан результат размещения необходимых элементов в форме. Здесь активизировано поле Кому. Свойства Name, установленные для управляющих элементов, будут использованы в VBA-программе, которую вы напишете для автоматизации работы формы.

Написание VBA-программы

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

Макрос для отображения формы. В нашем шаблоне это будет процедура, которая запускается при создании нового документа.

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

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

Каждый шаблон содержит модуль с именем ThisDocument, который является частью содержимого папки Microsoft Word Объекты окна проекта. Чтобы открыть модуль документа, который содержит в себе процедуры документа, дважды щелкните на ThisDocument. Для каждого документа обязательно задаются три процедуры.

Document_New выполняется каждый раз при создании нового документа с заданным шаблоном.

Document_Ореn выполняется каждый раз, когда открывается документ с заданным шаблоном.

Document_Close выполняется перед тем, как документ с заданным шаблоном будет закрыт.

Чтобы отобразить форму, вы должны вызвать метод Show. Поскольку вам необходимо, чтобы диалоговое окно появлялось на экране каждый раз при создании нового документа, именно поэтому в процедуру Document_New модуля ThisDocument необходимо добавить текст листинга 10.1. Единственное выражение процедуры вызывает метод Show для формы MemoForm.

Рис. 10.19. Шаблон для отчетов использует форму MemoForm для получения информации от пользователя

Листинг 10.1. ABCMEMO.DOT - процедура Document_New запускается каждый раз при создании новой формы ]

Private Sub Document_New()

MemoForm.Show

End Sub

 

Ответы на происходящие в форме события

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

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

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

Чтобы открыть модуль формы, выведите окно проекта и выберите форму, код которой вы хотите отредактировать. Щелкните дважды на имени формы или выберите из меню Вид команду Программа.

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

1. Вызовите окно Программа своей формы.

2. В раскрывающемся списке Объект окна Программа установите параметр UserForm.

3. В раскрывающемся списке Процедура окна Программа установите параметр Initialize. Появится код процедуры UserForm_Initialize.

В листинге 10.2 приведен код процедуры, который вы можете использовать в своей процедуре UserForm_Initialize, чтобы она выполнялась каждый раз при вызове диалогового окна АВС_записка. Этот код выполняет несколько функций.

Метод AddItem поля со списком вызывается пять раз для описания данных из раскрывающегося списка Тип записки.

Свойство Text поля со списком устанавливает начальное значение.

Поля Кому, От и Тема изначально пусты.

В качестве начального значения в поле Дата установлена текущая дата. Вся вводимая здесь информация должна иметь специальный формат даты.

Флажок chkIncludeCC установлен в значение False, а элементы txtCCList и lblCCList изначально невидимы на экране. Если пользователь устанавливает флажок опции, управляющие элементы становятся видимыми.

Листинг 10.2. ABCMEMO.DOT - процедура UserForm_lnitialize выполняется при первом запуске формы

Private Sub UserForm_Initialize()
Me.cmbxMemoType.AddItem "Оффисная"
Me.cmbxMemoType.AddItem "Личная"
Me.cmbxMemoType.AddItem "Финансовая"
Me.cmbxMemoType.AddItem "Управляющая"
Me.cmbxMemoType.AddItem "Секретная"
Me.cmbxMemoType.Text = "Введите тип записки"
Me.txtTo.Text = ""
Me.txtDate.Text = Format(Date, "mmm d, yyyy")
Me.txtFrom.Text = ""
Me.txtSubject.Text = ""
Me.chkIncludeCC = False
Me.lblCCList.Visible = False
Me.txtCCList.Visible = False
Me.txtCCList.Text = ""

End Sub

Когда пользователь устанавливает флажок опции chkIncludeCC, VBA должен сделать соответствующие надпись IblCCList и текстовое поле txtCCList видимыми. Если пользователь снимет этот флажок, тогда VBA должен сделать их невидимыми. Обратите внимание: если значение флажка опции равно True, для поля txtCCList необходимо вызвать метод SetFocus. Это сделано специально, чтобы точка вставки автоматически переместилась в поле Передать копии:.

Чтобы удовлетворить вышеуказанным требованиям, программа VBA должна выполнить процедуру Click для флажка. Отредактируйте свою процедуру — для этого выполните следующие действия.

1. Вызовите окно Программа этой формы.

2. В списке Объект окна Программа выберите параметр chkIncludeCC.

3. В списке Процедура окна Программа установите параметр Click. Появится код процедуры chkIncludeCC_Click.

Листинг 10.3. ABCMEMO.DOT - процедура chkIncludeCC_Click отображает или прячет надпись и текстовое поле Передать копии

Private Sub chkIncludeCC_Click()
If Me.chkIncludeCC = True Then
Me.lblCCList.Visible = True
Me.txtCCList.Visible = True
Me.txtCCList.SetFocus
Else
Me.lblCCList.Visible = False
Me.txtCCList.Visible = False
End If
End Sub

Перенос данных из пользовательской формы в документ

Чтобы ввести в наш документ данные из пользовательского диалогового окна, программа VBA должна выполнить определенные действия по закрытию окна. Поскольку кнопки OkButton и CancelButton используются для закрытия окна, вам нужно добавить процедуры обработки и управления процессом переноса данных. Кроме того, начальные значения переменных, отображаемых в форме, до их переноса в документ необходимо изменить соответственно с выбором пользователя.

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

Процедура начинается с объявления целой переменной OkToClose с начальным значением True. Такое значение соответствует тому случаю, когда все готово к закрытию заполненной формы. Далее функция Len проверяет длину введенных строк в поля Кому, От, Дата и Тема. Если хотя бы одно из полей будет пустым, переменная OkToClose должна принять значение False.

Если значение OkToClose равно True, вызывается метод Hide, чтобы убрать форму с экрана, а глобальная переменная CreateMemo примет значение True. В противном случае на экран выводится сообщение, напоминающее пользователю, что необходимо заполнить форму до конца.

Чтобы выполнить все вышеуказанные действия, программа VBA должна проработать процедуру Click для кнопки OkButton. Для этой процедуры выполните следующие действия..

1. Вызовите окно Программа формы.

2. В раскрывающемся списке Объект окна Программа установите параметр OkButton.

3. В раскрывающемся списке Процедура окна Программа установите параметр Click. Появится код процедуры OkButton_Click.

Листинг 10.4. ABCMEMO.DOT - код OkButton _Click проверяет, вся ли необходимая информация была сена в форму перед ее закрытием

Private Sub OkButton_Click()
Dim OkToClose As Integer
OkToClose = True
If Len(Me.txtTo.Text) = 0 Then OkToClose = False
If Len(Me.txtFrom.Text) = 0 Then OkToClose = False
If Len(Me.txtDate.Text) = 0 Then OkToClose = False
If Len(Me.txtSubject.Text) = 0 Then OkToClose = False
If OkToClose = True Then
CreateMemo = True
Me.Hide
Else
MsgBox "Ошибка ввода данных. Необходимо внести информацию_во все поля формы.", vbOKOnly + vbExclamation, "ABC Memo Error"
End If
End Sub

Листинг 10.5 содержит код обработки щелчка на кнопке CancelButton, которая просто закрывает форму и устанавливает значение переменной CreateMemo равной False.

Чтобы выполнить описанные действия, VBA-программа должна выполнить процедуру click для кнопки CancelButton. Отредактируйте процедуру, а для этого выполните следующие действия.

1. Вызовите окно Программа формы.

2. В раскрывающемся списке Объект окна Программа выберите параметр CancelButton.

3. В раскрывающемся списке Процедура окна Программа выберите Click. Появится код процедуры CancelButton_Click.

 

Листинг 10.5. ABCMEMO.DOT - код CancelButton Click просто закрывает диалоговое окно формы

 

Private Sub CancelButton_Click()
Me.Hide
CreateMemo = False
End Sub

Глобальная переменная CreateMemo используется для единственной цели — определить, на какой из кнопок, OkButton или CancelButton, щелкнул пользователь. Чтобы использовать эту переменную как глобальную для всего шаблона, в стандартный модуль шаблона необходимо добавить следующую строку:

Public CreateMemo As Integer

Теперь, если пользователь решит создать отчет, программа должна внести в документ информацию из формы. Процедуру Document_New нужно изменить так, как показано в листинге 10.6, чтобы информация автоматически вносилась в документ.

После вызова метода Show для формы процедура ожидает щелчка на одной из кнопок, и в зависимости от выбора пользователя ее поведение будет различным. В данном случае она должна проверить значение переменной CreateMemo и определить, на какой кнопке щелкнул пользователь. Если значение переменной будет равно True, необходимо создать документ-отчет, если же ее значение равно False, активный документ должен быть закрыт без сохранения.

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

1. Переменные, соответствующие кодам полей Doc Variable, принимают значения, заданные в форме. Например, следующая строка программы присваивает переменной "То" содержимое свойства Text управляющего элемента txtTo:

ActiveDocument.Variables("Koмy") = MemoForm.txtTo.Text

2. Программа проверяет значение флажка chklncludeCC. Если оно равно True, обновляется переменная документа "cc". Если же значение равно False, процедура последовательно переходит по закладкам "ccLabel" и "ccText" и удаляет их содержимое.

3. Все поля в документе обновляются и отображают текущие значения.

4. После перехода на закладку "Body" пользователь может начинать вводить информацию.

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

Листинг 10.6. ABCMEMO.DOT - процедура Document_New выводит форму на экран и отвечает на вводимую информацию

Public CreateMemo As Integer
Private Sub Document_New()
Dim fld As Field
CreateMemo = True
MemoForm.Show
If CreateMemo = True Then
MemoForm.Hide
ActiveDocument.Variables("MemoType") = MemoForm.cmbxMemoType.Text
ActiveDocument.Variables("To") = MemoForm.txtTo.Text
ActiveDocument.Variables("Author") = MemoForm.txtFrom.Text
ActiveDocument.Variables("MemoDate") = MemoForm.txtDate.Text
ActiveDocument.Variables("Subject") = MemoForm.txtSubject.Text
If MemoForm.chkIncludeCC = True Then
ActiveDocument.Variables("cc") = MemoForm.txtCCList.Text
Else
ActiveDocument.Bookmarks("ccLabel").Select
Selection.Delete
ActiveDocument.Bookmarks("ccText").Select
Selection.Delete
End If
For Each fld In ActiveDocument.Fields
fld.Update
Next
ActiveDocument.Bookmarks("Body").Select
ActiveWindow.View.TableGridlines = True
ActiveWindow.ActivePane.View.ShowAll = True
ActiveWindow.View.ShowFieldCodes = True
ActiveWindow.View.ShowBookmarks = True
Unload MemoForm
Else
'MsgBox "Error again", vbOKCancel
'Пользователь выбрал Cancel, поэтому нужно
'закрыть документ без сохранения.
Unload MemoForm
ActiveDocument.Close SaveChanges:=False
End If
End
Sub

 

Распространение приложения

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

10.7.Инсталяция шаблонов

Поскольку макросы хранятся в шаблонах, необходимо ясно представлять себе, где именно нужно установить шаблоны, чтобы обеспечить наиболее простую их инсталяцию И поддержку как в сети, так и на отдельных компьютерах. Прежде всего, вы должны различать три категории шаблонов, существующих в Word. Ca-мый простой способ в них разобраться — это изучить установки вкладки Расположение диалогового окна Параметры (рис. 10.20). Чтобы вызвать это диалоговое окно, выполните команду Сервис, Параметры и щелкните на ярлыке Расположение.

На вкладке Расположение присутствуют четыре параметра, предназначение которых необходимо знать для правильной инсталяции:

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

Шаблоны пользователя. Эта папка содержит шаблон Normal.dot, а также любой другой созданный пользователем шаблон. В любом случае, это должна быть личная папка при работе в сети или папка на жестком диске вашего компьютера.

ПРЕДОСТЕРЕЖЕНИЕ

Папка Шаблоны: Пользователя должна быть недоступна другим пользователям сети, кроме того, не рекомендуется разрешать сетевой доступ к файлу Normal.dot. Word разработан таким образом, чтобы каждый пользователь мог сохранять свои установки и макросы только в одном шаблоне Обычный, файл которого должен быть открытым для записи. Если же вы хотите позволить другим сотрудникам использовать ваш глобальный макрос, сохраните глобальный шаблон в каталоге Startup, как описано дальше.

Рис. 10.20. Чтобы упростить процесс инсталяции ваших шаблонов, воспользуйтесь вкладкой Расположение диалогового окна Параметры

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

Замечание .Если у вас уже накопилось слишком много шаблонов, чтобы хранить их папках Шаблоны пользователя и Общие шаблоны, создайте для них отдельную папку и рассортируйте их там по категориям. Если в папках Шаблоны пользователя и Общие шаблоны вы создадите вложенные папки, они тотчас же появятся в виде дополнительных ярлыков в диалоговом окне Создать из меню Файл (рис. 10.21).

Автозагружаемые. Эта папка может использоваться для хранения шаблонов, которые загружаются автоматически при запуске Word. Шаблоны из этой папки запускаются автоматически и в режиме только для чтения, а макрокоманды и панели инструментов шаблона становятся доступными для использования. Такие шаблоны иногда называют "другие глобальные шаблоны" в противовес шаблону Обычный, который известен большинству пользователей как "глобальный шаблон". В сети папка Автозагружаемые может быть доступна для использования другими пользователями "только для чтения", что минимизирует число копий шаблонов, которые вам придется установить.

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

Рис.10.21. Диалоговое окно Создать содержит ярлыки, соответствующие вложенным папкам Шаблоны пользователя и Общие шаблоны

Создание пользовательских меню и панелей инструментов

Автоматизированный шаблон АВС_записка, который был создан выше, должен запускаться каждый раз при создании нового документа, основанного на этом шаблоне. Пользователь создает новый документ-записку, выполнив команду Файл, Создать и выбрав шаблон АВС_записка. Однако, создав пользовательские меню или панели инструментов, можно упростить этот процесс.

Пользовательские меню или панели инструментов используются для запуска простой макрокоманды, которая создает новый документ с шаблоном АВС_записка. Код такого макроса приведен в листинге 10.7. Этот макрос создает новый документ, основанный на указанном шаблоне, добавляя его к списку уже открытых документов.

Поскольку новый документ основан на шаблоне АВС_записка, процедура Document_New в данном шаблоне запускается автоматически при создании нового документа. В процессе выполнения процедура Document_New отображает форму MemoForm, заставляя таким образом запускаться процедуру UserForm_Initialize. Подобная цепочка событий весьма типична для программирования в VBA. Макрокоманда NewABCMemo может быть записана в модуле шаблона Обычный или модуле других глобальных шаблонов.

Листинг 10.7. ABC.DOT - макрос NewABCMemo создает новый документ с шаблоном ABC записка

Sub NewABCMemo ()

Document.Add Template:="АВС_записка"

End Sub

Макрoc NewABCMemo является хорошим примером того, как в глобальном шаблоне можно хранить макрокоманду. По примеру корпорации ABC, вы создаете свой шаблон с именем ABC.DOT и записываете его в папку Автозагружаемые. После этого в шаблоне можно создавать новые макрокоманды.

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

1. Откройте шаблон, в котором вы хотите изменить панели инструментов или меню.

2. Выберите команду Файл, Параметры,Настройка ленты. Появится диалоговое окно Настройка, как показано на рис. 10.22.

3. Установите флажок около имени тех панелей инструментов, которые вы хотите изменить. В этом списке вы найдете элемент Строка меню. Он соответствует всем меню, расположенным в верхней части окна приложения (Файл, Правка, Вид, Формат и т.д.).

4. Щелкните на ярлыке Команды. С помощью этой панели вы сможете выбрать команды и макрокоманды, которые необходимо включить в меню и панели инструментов.

Рис. 10.22. Команда Настройка позволит вам изменить отображаемые в Word панели

Рис. 10.23. Вкладка Команды диалогового окна Настройкаленты используется для добавления кнопок на панели инструментов и команд меню

 

5. В списке Категории выберите параметр Макросы, а затем в списке Команды найдите макрокоманду, которую вы хотите добавить.

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

6. Убедитесь в том, что в раскрывающемся списке Сохранить в указан правильный шаблон, в котором вы сохраните изменения.

7. Щелкните на имени необходимой вам макрокоманды и, не отпуская кнопку мыши, перетащите ее из списка Команды в соответствующее место на панели инструментов. На рис. 10.24 показана макрокоманда NewABCMemo в виде кнопки на панели инструментов Стандартная. На рис.10.25 показана новая команда на панели инструментов после того, как пользователь отпустил кнопку мыши.

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

1. Если диалоговое окно Настройка ленты не открыто, в меню Файл выберите команду Параметры, Настройка ленты.

2. Щелкните правой кнопкой мыши на кнопке, которую вы хотите изменить. Появится контекстное меню

3. Выберите команду, с помощью которой вы хотите отредактировать вид кнопки.

 

· Щелкните в поле Имя, чтобы изменить надпись на кнопке.

· Команда Выбрать значок для кнопки позволят выбрать значок для кнопки из стандартной библиотеки изображений.

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

· Выберите команду Основной стиль, если вы хотите, чтобы кнопка выводилась в виде значка на панели инструментов или в виде надписи и значка в меню.

· Выберите команду Только текст (всегда), чтобы и в списке, и на панели отображалась только надпись кнопки.

· Выберите команду Только текст (в меню), чтобы надпись присутствовала только в меню.

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

· Щелкните на команде Начать группу, чтобы разделитель находился как раз перед текущей кнопкой или командой меню.

· Щелкните на кнопке Закрыть диалогового окна Настройка, чтобы завершить изменения и вернуться к основному режиму.