|
||||
|
Часть IIПрограммирование на VBA в Word Глава 5Вывод текста в документ Word 5.1. Основные объекты WordОбъект Word.ApplicationДополнительно ко всем возможностям программирования на VBA, рассмотренным в части I, можно добавить возможности вывода всех результатов вычислений, преобразований, сообщений в документ Word, с возможностью дальнейшего отправления на печать. Для этого необходимо рассмотреть основные объекты приложения Word. Ключевым в объектной модели Word является объект Application, так как он содержит все остальные объекты Word. Его элементами на разных уровнях иерархии являются около 180 объектов. Сам корневой объект Application имеет более сотни элементов: свойств, методов и событий. Свойства объекта Word.ApplicationСвойства любого объекта делятся на две группы: свойства-участники (объекты) и терминальные свойства (обычные переменные VBA). Единую систему организации панелей меню и инструментальных кнопок обеспечивает объект CommandBars, справок – Assistant, поиска – FileSearch. Центральными объектами Word являются коллекции Documents и Templates, точнее составляющие их элементы, сам документ и шаблоны. Рассмотрим объекты второго плана. Объект AutoCorrect поддерживает работу по автоматической коррекции набираемых текстов. Его возможности эквивалентны команде Автозамена меню Сервис. Объект Browser позволяет перемещать точку вставки, указывающую на объекты в документе. Коллекция объектов Dialogs представляет совокупность диалоговых окон, встроенных в Word. Добавлять новые или удалять элементы этой коллекции программным путем нельзя. Но соответствующие окна можно открыть и показать на экране дисплея и тем самым организовать диалог пользователем по теме, заданной соответствующим окном. Три объекта, связанные с проверкой грамматики и орфографии: Languages, Dictionaries, SpellingSuggestions, – позволяют установить нужный язык, выбрать словарь, в том числе пользовательские словари, а также работать со списком слов, предлагаемых для исправления при обнаружении ошибки правописания. Команды Правописание и Язык меню Сервис предоставляют аналогичные, функциональные возможности при работе с документом вручную. С помощью объекта Options можно программным путем установить различные опции приложения и документа аналогично тому, как если бы вы выбрали команду Параметры в меню Сервис. Работа с документами и класс DocumentКогда открывается приложение, создается коллекция документов Documents, содержащая все открытые документы. В начальный момент коллекция содержит минимум один новый или ранее существовавший документ. Новый документ добавляется методом Add, а уже существующий – методом Open объекта Documents. Чтобы добраться до нужного документа, достаточно указать его индекс – имя файла, хранящего документ, или его порядковый номер в коллекции. Для той же цели можно использовать и метод Item, но обычно он опускается. Метод Save позволяет сохранить документ, а метод Close, сохраняя документ в файле, закрывает его и удаляет из коллекции. Глобальное свойство Dialogs возвращает коллекцию диалоговых окон. Константа wdDialogFileOpen задает конкретное диалоговое окно – объект класса Dialog. Классы, задающие структуризацию текста документа Текст – это основа большинства документов. Его можно структурировать, оперируя различными единицами при решении тех или иных задач преобразования. Минимальной единицей текста обычно является символ. Кроме этого, существуют следующие единицы: слова, предложения, абзацы, а также более крупные образования: страницы, параграфы, главы. Классы Characters, Words, Statements, Paragraphs, Sections позволяют работать с последовательностями (коллекциями) символов, слов, предложений, абзацев и разделов. Самой крупной единицей после абзаца выступает раздел. Элементом коллекций Characters, Words и Statements является объект класса Range. Объект Range позволяет работать как с одним элементом, так и с произвольной последовательностью элементов. Документы, поддокументы, абзацы, разделы – все они имеют метод или свойство Range, возвращающее интервал, связанный с объектом. Поэтому работа с текстом так или иначе ведется через методы и свойства объекта Range. События объекта Document Объект Document может реагировать на три события, возникающие в результате действий пользователя. Таблица 16 События объекта DocumentДокумент и его частиРассмотрим основные классы, определяющие структуру документа. 1. Subdocuments (Subdocument) – коллекция и сам поддокумент. Есть некоторый разумный предел размера одного документа. Если в документе больше 10–20 страниц, работать с ним становится неудобно. В этом случае в нем выделяют главный документ и поддокументы. Главный документ в этом случае имеет коллекцию поддокументов, каждый из них является, по сути, документом, с которым можно работать независимо. Метод AddFromRange класса SubDocuments создает поддокумент, выделяя из главного документа область, заданную параметром Range. 2. Tables (Table), TablesOfAuthoritiesCategories (T.O.A.C), TablesOfAuthorities (TableOfAuthorities), TablesOfContents (TablesOfContent), TablesOfFigures (TablesOfFigure). Класс Table определяет «обычные» таблицы с произвольным количеством строк и столбцов и произвольным заполнением полей. Остальные классы задают таблицы специального вида. 3. Shapes(Shape), InlineShapes(InlineShape) – эти две коллекции с их элементами позволяют добавлять в документ рисунки, но не только их. ActiveX– и OLE-объекты также являются элементами этих коллекций. Элементы этих двух коллекций отличаются тем, как они привязаны к документу: первые могут свободно перемещаться, вторые жестко привязаны к заданной области документа. 4. Lists(List), ListParagraphs(ListParagraph), listTemplates (ListTemplate) – списки удобно вводить в документ, когда имеешь дело с перечислением. Списки можно оформлять в соответствии с шаблоном. Существуют две группы шаблонов: нумерованные списки и списки-бюллетени. Коллекция ListTemplates содержит шаблоны оформления списков, а класс ListTemplate описывает конкретный шаблон. Шаблон применяется к списку абзацев и придает ему структуру, заданную шаблоном. Коллекция Lists содержит те списки документа (списки абзацев), что оформлены как нумерованные списки или списки-бюллетени. Коллекция ListParagraphs представляет список абзацев всех списков документа. Свойством ListParagraphs, которое возвращает объект соответствующего класса, обладает не только документ, но и объекты List и Range. Так что при наличии списка – объекта List можно выделить список абзацев. Чаще приходится выполнять обратную операцию – применять к списку абзацев один из возможных шаблонов, придав ему «настоящую» структуру списка. Тогда используют объект ListFormat. 5. Comments(Comment), Bookmarks(Bookmark), FootNotes (FootNote), EndNotes(EndNote), Fields(Field) – эти коллекции и их элементы отражают независимые, но близкие по духу понятия. Это части документа, косвенно связанные с ним. При нормальном просмотре документа они могут быть и не видны. • Коллекция comments и класс comment задают комментарии. Комментарии, как известно, вводятся для пояснения тех или иных терминов или понятий документа. Формально они приписываются некоторой области – объекту range. • Большой документ, к отдельным частям которого приходится часто обращаться, стоит снабдить закладками. Коллекция bookmarks задает все закладки данного документа. • Еще один способ комментирования – сноски. Они могут быть двух видов: подстраничные (внизу страницы) и концевые (в конце документа). Первые собраны в коллекцию footnotes, вторые – endnotes. 6. Fields (Field) – эта коллекция позволяет работать с полями документа. Одна из особенностей полей состоит в том, что их значения обновляются автоматически в зависимости от изменившихся внешних условий или контекста. 7. Story Ranges (Range) – эта коллекция представляет совокупность частей документа, называемых фрагментами (Story). Количество различных фрагментов документа фиксировано. Нельзя добавлять элементы в эту коллекцию обычным способом, используя метод Add. Фрагменты появляются в коллекции, когда создается соответствующая часть документа. Фрагменты имеют тип, задаваемый константами из перечисления wdStoryType. Главный фрагмент – текст документа, тип которого задается константой wdMainTextStory. Комментарии, ссылки, колонтитулы составляют фрагменты других типов, т. е. сам фрагмент является объектом Range. Так что благодаря фрагментам можно, например, работать с коллекцией комментариев как с единой областью. 8. Variables (Variable) – с документом можно связать коллекцию переменных типа Variant. Это важная для программистов коллекция, так как время жизни переменных, в нее входящих, совпадает со временем жизни документа. Тем самым появляется возможность сохранять информацию о работе той или иной процедуры между сеансами. Например, можно иметь счетчики, подсчитывающие число вызовов макроса, и в зависимости от этого по-разному определять его дальнейшую работу. Объекты Range и SelectionОбъект Document имеет метод Range, возвращающий объект Range, и метод Select, создающий объект Selection. Метод Range – это функция, возвращающая как результат объект Range; метод Select – это процедура без параметров, которая создает объект Selection в качестве побочного эффекта. Объект Range имеет метод Select, превращающий область объекта Range в выделенную. Тем самым метод Select определяет новый объект Selection. Симметрично, объект Selection имеет свойство Range, возвращающее объект Range, соответствующий выделенной области. Большинство ранее описанных частей документа являются и частями (свойствами) объектов Range и Selection. Объект Range напоминает матрешку: в каждую область вложена область поменьше. Вот пример корректного (хоть и не самого эффективного) задания объекта Range: Работа с текстом Объекты Range и Selection позволяют выполнять основные операции над текстом: «выделить», «добавить», «заменить», «удалить». У наших объектов большой набор методов, позволяющих реализовать эти операции. Все рассматриваемые здесь методы принадлежат обоим объектам, если не сделана специальная оговорка. Выделение Выделить некоторую часть текста по существу означает определить объект Range или Selection. Объекты задают некоторую область в тексте документа, а их свойства Start и End позволяют установить начало и конец этой области. Меняя значения свойства, можно задать нужную область выделения. Move является основным методом перемещения точки вставки. Остальные методы этой группы – в той или иной степени его модификации. Метод Move(Unit, Count) сжимает область в точку, стягивая ее в начало или конец, а затем перемещает точку вставки. Параметр Unit определяет единицы перемещения, a Count – количество этих единиц (по умолчанию 1). Знак переменной Count задает направление стягивания и перемещения. Положительные значения этого параметра задают стягивание к концу и перемещение вперед, отрицательные – стягивание в начало и перемещение назад. Чистое стягивание без перемещения точки вставки задается как перемещение на одну единицу. Метод возвращает количество единиц, на которое фактически произошло перемещение, или 0, если оно не осуществлено. Параметр Unit принимает значения wdCharacter (по умолчанию), wdWord, wdSentence, wdParagraph, wdSection, wdStory, wdCell, wdColumn, wdRow и wdTable. Методы перемещения на сам текст не влияют – лишь изменяют область, заданную объектами Range и Selection. Поэтому эти методы применимы только к переменным типа Range, но не к фиксированным областям. Например, запись
не имеет эффекта, поскольку область первого абзаца – вещь неизменяемая. Метод Move стягивает область в точку, которая и перемещается, поэтому после его выполнения область исчезает, остается только точка вставки. Методы MoveStart и MoveEnd перемещают начальную или конечную точку области, обычно тем самым расширяя область. Удаление текста Метод Delete позволяет удалить текст. Вызванный без параметров, он удаляет вызывающий его объект Range или Selection. Если он применен в форме Delete(Unit,Count), удаляется часть текста в указанной области. Параметр Unit задает единицы, но при удалении возможны только два значения: wdWord и wdCharacter. Параметр Count задает количество удаляемых единиц. Если область стянута в точку, удаляются символы перед точкой вставки или после нее в зависимости от знака параметра Count. Вставка текста Группа методов Insert объектов Range и Selection позволяет осуществлять вставки в документ. Для вставки текста используются методы InsertBefore(Text) и InsertAfter(Text). Параметр text типа string задает текст, вставляемый до или после области, заданной объектами range или selection. После вставки текста область автоматически расширяется, включая в себя добавляемый текст. Свойство Text позволяет заменять текст в выделенной области, поэтому нет нужды вызывать метод Insert(Text). Методы InsertBefore и InsertAfter безопасны, так как текст добавляется, не изменяя содержимого области. Совсем иное дело – методы вставки, которые далеко не безопасны. При вставке внутрь области, например при использовании метода InsertSymbol или InsertParagraph, заменяется содержимое области. Работа с буфером Метод Сору, не имеющий параметров, копирует объект (содержимое области) в буфер. Метод cut, действуя аналогично, должен бы заодно и удалять объект. Но сам объект не удаляется – только стягивается в точку, так что над ним возможны дальнейшие операции. Иногда в буфер копируют не текст, а его формат. Этим занимается метод CopyFormat, копирующий формат по первому символу объекта selection. Если этот символ – метка абзаца, копируется формат абзаца. Методом CopyFormat обладает только объект selection. Метод Paste позволяет поместить («приклеить») содержимое буфера в область, заданную объектами Range и Selection. Эта операция опасна, так как происходит замена, а не добавление текста. Поэтому обычно метод Paste применяется к объектам Range и Selection, предварительно стянутым в точку вставки. Метод PasteFormat применяет форматирование, хранящееся в буфере, к объекту Selection. Например, создадим макрос, который вставляет список «урок, экзамен, сдал!», копирует его и помещает еще раз на лист.
5.2. Форматирование документаРабота с текстом (продолжение)Наиболее важной особенностью работы на VBA в Word является вставка текста в документ при работе с приложениями. Для этого служат объекты Range и Selection, которые являются главными для практически любых операций, которые можно выполнять с помощью Word VBA. Некоторые из этих действий можно применять к документам в целом, но в общем случае вам необходим диапазон или выделенная область, прежде чем вносить изменения. Мы, однако, рассмотрим действия с документом при его создании. Открытый документ Word уже содержит объекты Range, соответствующие многим его элементам. Каждый абзац, таблица, ячейка таблицы, комментарий и т. д. определяют диапазоны. Например, для того чтобы вставить некоторый текст в уже существующий документ, необходимо прописать код:
Причем данная строка будет расположена в конце существующего параграфа. С другой стороны, используя объект Selection, можно также вставить некоторый текст в документ, используя метод Add и присвоение свойства Text объекту Selection:
В результате выполнения данного программного кода в документе Word будет выведена строка: Изучение работы с текстом в документе Word является важной составной частью умения программировать в VBA, Светлана, и отвечает запросам всех программистов! Здесь имя Светлана, например, считано с текстового поля некоторой формы, имеющей всего одно поле ввода для имени и кнопку «Вывод текста» (рис. 64). Рис. 64. Форма ввода данных При работе с текстом на рабочем листе Word необходимо знать следующие коды: определение цвета
wdColorRed – красный wdColorDarkRed – бордовый wdColorDarkTeal – бирюзовый wdColorBlue – синий wdColorGreen – зеленый wdColorBlack – черный wdColorOrange – оранжевый определение жирности
wdToggle – жирность определение начертания
wdToggle – курсив определение выравнивания
wdAlignParagraphRight – выравнивание по правому краю wdAlignParagraphCenter – выравнивание по центру wdAlignParagraphJustify – выравнивание по левому краю вставка в текст конкретного предложения
вставка новой пустой строки
установка размера букв
Примечание. Для правильного оформления кода пользуйтесь возможностями создания макроса написания программы. Одним из элементов оформления диалоговых окон является элемент управления Image (рисунок). Его основные свойства: Autosize – изменяет размер рисунка на форме (автоматически или нет); Picture – отображает графический файл, выводимый на форму; pictureSizeMode – устанавливает масштабирование рисунка (не весь рисунок, вся поверхность объекта, целиком внутри объекта); PictureAligment – устанавливает расположение рисунка внутри объекта (слева, справа, вверху, внизу); pictureTilling – покрывает объект мозаикой из рисунка. Данные свойства либо устанавливаются в окне свойств объекта, либо прописываются в листинге. Пример 30. Создать программу, которая будет производить подсчет количества теплоты, выделяемой в проводнике при протекании в нем тока. Формула для расчета количества теплоты известна под именем закона Джоуля – Ленца: где Q – количество теплоты в Джоулях; U – напряжение в вольтах; t – время в секундах; S – площадь поперечного сечения проводника в квадратных миллиметрах; l – длина проводника в метрах; р – удельное сопротивление материала проводника в Ом ? мм2/м. Все исходные данные вводятся в текстовые поля формы. По итогам вычисления результат в виде объяснительной записки выводится в документ, а численный результат – в специальное окно формы. Технология выполнения Создайте форму по приведенному рис. 65. Рис. 65. Разработанная форма примера 30 в рабочем состоянии и вывод результирующих сведений в документ word При создании формы установите необходимые свойства элементов. Установите свойство Locked элемента TextBox6 как True, чтобы не допустить случайного ввода пользователем в него текста. Описание процедур
Примечание. При работе данного приложения все значения полей ввода должны быть числовыми. В VBA есть специальная функция для проверки того, является или нет введенная строка записью числа – IsNumeric. Для проверки отличия от нуля значений в последних двух полях ввода используется функция Val, которая переводит строковое выражение в числовое, если это строковое выражение содержит в своем начале цифры (или все состоит из них). Функция Str делает преобразование, обратное тому, что производит Val, – конвертирует числовое значение выражения в строковое, что позволяет этому значению в дальнейшем обрабатываться как строке. Таким образом, функции Val и Str преобразуют типы данных обрабатываемых ими переменных, соответственно, из строкового в числовой и из числового в строковый (см. главу 3). Создание кнопки или панели в WordНазначить форме кнопку или пункт меню для непосредственного вызова приложения из Word нельзя – это можно сделать только для модулей. Поэтому нужно применить следующий способ. Создайте макрос (Меню + Insert + Module) в открытом проекте:
Переименуйте этот макрос по своему усмотрению, например Teplo. И выполните следующие действия. 1. Щелкните правой кнопкой мыши в любом месте панели инструментов. 2. В этом меню выберите команду Настройка (или Сервис + Настройка). 3. В диалоговом окне Настройка щелкните на ярлыке вкладки Команды. 4. Прокрутите список Категории вниз и найдите пункт Макросы. Выберите этот пункт. В списке «Сохранить в» выберите имя вашего документа, в котором создан макрос (рис. 66). Рис. 66. Поиск макроса для создания кнопки 5. В правом окне найдите необходимый макрос (либо VBA-программу). 6. Перетащите имя этого макроса или программы на панель инструментов. 7. Создайте соответствующую надпись кнопки и, если нужно, рисунок (при помощи правой кнопки мыши). 8. Закройте диалоговое окно Настройка, чтобы завершить работу. По выполнении всех перечисленных пунктов будет создана кнопка запуска приложения. Задачи на закрепление материалаПример 31. Создать программу, позволяющую заполнять стандартные заявления студентов учебного заведения, если все необходимые данные заполняются в соответсвующих текстовых полях формы, а причина пропусков занятий выбирается из раскрывающегося списка (рис. 67, 68). Рис. 67. Разработанная форма примера 31 в рабочем состоянии Пример 32. Создать программу, позволяющую рассчитать сумму денег, затрачиваемых на бензин при поездке на дачу. При этом учесть следующее: условия поездки могут быть: в одну сторону, туда и обратно, можно сесть на чужую машину (данные условия учитываются в раскрывающемся списке «условия поездки» на создаваемой форме).
Рис. 68. Примерный формат вывода заявления в документ word Полученный результат вычисляется по формуле:
Учесть, что если выбрали условие поездки «на чужой машине», то цена бензина равняется 0 руб. Рис. 69. Разработанная форма примера 32 в рабочем состоянии Также учесть, что если при вычислении результат превысит 400 руб., то выдать сообщение «Может, пойдем на рынок?». При создании формы придерживаться рис. 69, при выводе текста в документ Word – рис. 70. При поездке на дачу, находящуюся на расстоянии 55 км, при цене бензина за литр 18,50 руб., потребление бензина составит 101,75 руб. Рис. 70. Примерный формат вывода расчетов в документ word Пример 33. Разработать программу, которая выдает Отчет о доходе вкладчика на настоящий момент. При этом учесть, что в интерфейсе формы процентная ставка выбирается из раскрывающегося списка (предусмотреть два вида процентов). Рис. 71. Разработанная форма примера 33 в рабочем состоянии При вычислении придерживаться следующих формул: если схема вычисления простая, то
если схема вычисления сложная, то
При разработке интерфейса формы опираться на приведенный рис. 71, а при выводе расчетов в документ Word – рис. 72. Отчет о доходе Рис. 72. Примерный формат вывода расчетов в документ word Результат вычислений с соответствующими пояснениями выводится в документ Word, а в поле формы выдается числовой результат произведенных расчетов. Пример 34. Разработать программу, позволяющую заполнять заявление на восстановление студенческого билета при его порче (украли, потерял, постирал и т. д.). Причину порчи предусмотреть в раскрывающемся списке создаваемой формы. При работе придерживаться приведенных рис. 73 и 74. Курсивом выделены выражения, вставляемые программой после того, как будут заполнены соответствующие текстовые поля разрабатываемой формы. Рис. 73. Разработанная форма примера 34 в рабочем состоянии Рис. 74. Примерный формат вывода заявления в документ word Глава 6Автоматизация стандартных документов 6.1. Встроенные диалоговые окнаДиалоговые окнаВ VBA существуют две возможности создания диалоговых окон, позволяющих вести интерактивный диалог с пользователями. Окно сообщений MsgBox выводит простейшие сообщения для пользователя, а окно ввода InputBox обеспечивает ввод информации. Функция InputBox выводит на экран диалоговое окно, содержащее сообщение и поле ввода, устанавливает режим ожидания ввода текста пользователем или нажатия кнопки, а затем возвращает значение типа String, содержащее текст, введенный в поле. Синтаксис:
Аргументы: сообщение – строковое выражение, отображаемое как сообщение в диалоговом окне. Может содержать несколько строк. Для разделения строк допускается использование символа возврата каретки (chr(13)), символа перевода строки (chr(10)) или комбинации этих клавиш (chr(13) & chr(10)); заголовок – строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот аргумент опущен, в строку помещается имя приложения; Default – строковое выражение, отображаемое в поле ввода как используемое по умолчанию, если пользователь не введет другую строку. Если этот аргумент опущен, поле ввода отображается пустым; Xpos – числовое выражение, задающее расстояние по горизонтали между левой границей диалогового окна и левым краем экрана; Ypos – числовое выражение, задающее расстояние по вертикали между верхней границей диалогового окна и верхним краем экрана. Чтобы передать эту информацию (введенное значение в поле ввода) программе, присвойте возвращенное функцией InputBox значение строковой переменной (рис. 75), например:
Рис. 75. Результат функции InputBox Процедура MsgBox выводит на экран диалоговое окно, содержащее сообщение, устанавливает режим ожидания нажатия кнопки пользователем, а затем возвращает значение типа Integer, указывающее, какая кнопка была нажата. Синтаксис:
Аргументы: сообщение – строковое выражение, отображаемое как сообщение в диалоговом окне; кнопки – числовое выражение, представляющее сумму значений, которые указывают число и тип отображаемых кнопок, тип используемого значка, основную кнопку и модальность окна сообщения. Значение по умолчанию равно 0. Все значения данного аргумента см. в табл. 17, 18; заголовок – строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот аргумент опущен, в строку помещается имя приложения; файл справки – строковое выражение, определяющее имя файла справки, содержащего справочные сведения о данном диалоговом окне. Если этот аргумент указан, необходимо наличие также аргумента context; раздел – числовое выражение, определяющее номер соответствующего раздела справочной системы. Таблица 17 Значения аргумента кнопки процедуры MsgBoxПримечание. Первые кнопки активны по умолчанию. Таблица 18 Значения аргумента кнопки процедуры MsgBoxЕсли в окне сообщения всего две кнопки, для выяснения, на какой из кнопок был щелчок, прекрасно подходит оператор If … then. Например:
Пример 35. Создать программу таким образом, чтобы при запуске формы, вводе имени в текстовое поле и нажатии на кнопку «Вывод текста» появлялось диалоговое окно, запрашивающее разрешение вывести текст (рис. 76). Рис. 76. Форма примера 35 в режиме конструктора Листинг работы формы
В результате запуска приложения (рис. 77) в документе Word появится предложение:
Рис. 77. Форма примера 35 в рабочем режиме Задачи на закрепление материалаПример 36. Создать форму, имитирующую простейшую игру в орла и решку (рис. 78). Игрок выставляет флажок вместо подбрасывания монеты, а компьютер после нажатия кнопки Бросание монеты запускает случайное число, соответствующее орлу или решке. При совпадении выигрывает компьютер, при несовпадении – игрок. Все действия сопровождаются всплывающими диалоговыми окнами. Технология выполнения 1. Создайте форму для реализации этой игры. 2. Описание процедур. Кнопка Бросание монеты
Рис. 78. Разработанная форма примера 36 в рабочем состоянии и диалоговое окно, реагирующее на результат игры
Кнопка Выход из игры
Пример 37. В разработанном игровом приложении предусмотреть создание окна «Банк», в котором будет выводиться результат очков игрока при остановке игры. Правила игры: при выигрыше игрока добавляется единица к сумме, лежащей в банке, при проигрыше – добавляется компьютеру (отнимается из суммы, лежащей в банке). Предусмотреть все необходимые диалоговые окна. Пример 38.[4] Смоделировать полную игру в орел и решку. Игрок вносит в банк определенную сумму денег. Во время игры нельзя добавлять деньги в банк. Игра состоит из последовательности шагов, априори конечных. На очередном шаге игрок загадывает либо орел, либо решку. Компьютер «бросает» монету. Если «монета падает той же стороной», которую задал игрок, то банк увеличивается на единицу, в противном случае – уменьшается на единицу. Игра заканчивается либо по желанию игрока, либо когда величина банка становится нулем или больше 10 000 руб. (определенная сумма). Игрок забирает себе содержимое банка. Можно предусмотреть максимальные и минимальные суммы, которые были в банке в течение всей игры. Примечание. Можно смоделировать бросание игральной кости, используя функцию Int(6* Rnd)+1. Правила меняются: выиграл тот, кто больше бросил. Технология выполнения Рассмотрим один из вариантов решения данной задачи. Усложним эту задачу тем, что каждое последующее окно вызывается соответствующим действием. 1. Пусть при запуске приложения появляется первое диалоговое окно (рис. 79). При нажатии на кнопку «Начать игру» появляются диалоговые окна, запрашивающие имя игрока и подтверждение начать игру (см. рис. 80). После чего появляется форма ввода ставок (см. рис. 81).
Данная форма производит начальный выбор ставки и запускает главную форму примера 38. Рис. 79. Диалоговое окно запуска игры примера 38 Рис. 80. Диалоговые окна начала игры Рис. 81. Диалоговое окно выбора ставки Кнопка Бросок имитирует подбрасывание монеты игроком, производит расчет выигрыша и проигрыша игрока, выводя соответствующие значения в текстовые окна с сообщением счета игры (рис. 82). Рис. 82. Главная форма примера 38, имитирующая игру в орел и решку Кнопка Бросок
Кнопка Выход завершает игру, выдает итоговые сообщения (см. рис. 83).
Рис. 83. Итоговые расчеты игры примера 38 Примечание. Для корректной работы игры необходимо создать модуль, в котором объявить глобальные переменные, содержащие сведения о значении начальной ставки и имени игрока, а также запускающий первую форму игры при помощи кнопки на панели инструментов. Кроме того, необходимо доработать все модули для соответствующих форм (рис. 84). Рис. 84. Объявление глобальных переменных и создание модуля запуска главной формы игры в примере 38 6.2. Создание и автоматическое заполнение бланков стандартных документовСоздание VBA-программПример 39. При оплате за обучение студент вносит деньги в кассу, где бухгалтер заполняет от руки квиток об оплате. Автоматизировать ручную работу бухгалтера, создав форму, заполняющую карточку оплаты, которую можно при необходимости отправить на печать. Технология выполнения Интерфейс шаблона и приложения В качестве интерфейса сначала рассмотрим самую простую форму приложения, отвечающего условиям задачи и включающего в себя соответствующие текстовые поля ввода и рабочие кнопки (рис. 85). Рис. 85. Форма примера 39 в рабочем состоянии Далее рассмотрим, как автоматизировать печать квитанции об оплате за обучение. Начнем с разработки бланка стандартного документа (печатной формы). Эту форму можно сделать на базе шаблона с текстовыми полями, в которые будут заноситься изменяющиеся сведения. Для этого выполните следующие команды: Файл + Создать. В правой части окна нового документа выберите раздел Шаблоны и гиперссылку На моем компьютере (рис. 86). После чего появится диалоговое окно Шаблоны (рис. 87), в котором на вкладке Общие необходимо выделить пиктограмму Новый документ и поставить переключатель Шаблон в рамке Создать. Включите панель Формы (Вид + Панели инструментов + Формы). Для дальнейшей работы понадобится только один элемент этой панели – Текстовое поле которое позволяет создать на форме изменяющееся поле (либо посредством кода, либо самим пользователем). Выбирая курсором место в документе Word для расположения соответствующего поля и расположив на нем элемент Поле, можно получить необходимую форму. Для того чтобы расширить поле, надо поставить в него курсор и несколько раз нажать Tab. Для того чтобы подчеркнуть поле, выделите его как текст и примените к нему подчеркивание. Рис. 87. Диалоговое окно Шаблоны Создайте шаблон документа, придерживаясь рис. 88. Рис. 88. Шаблон документа word, в который вносятся данные для печати В некоторых полях (поля выделены серым фоном) можно ввести значения по умолчанию. Значение по умолчанию устанавливается при помощи диалогового окна Свойства, которое можно вывести на экран следующим образом: • щелкнуть правой клавишей мыши по необходимому текстовому полю; • в появляющемся контекстном меню выбрать Свойства; • указать значение по умолчанию (рис. 89). Значения по умолчанию позволяют менять только те данные, которые должны изменяться нечасто. Например, оплата за обучение в основном одна и та же – 1500 руб., поэтому значение этого поля будет меняться не очень часто. Рис. 89. Установка параметров текстового поля «сумма_опл» Рассмотрим и другие необходимые элементы рабочего окна «Параметры текстового поля». В поле Тип указывается тип значения, которое можно помещать в поле. Можно заполнить поле Максимальная длина, хотя наиболее важным для дальнейшего использования кодом VBA является поле Закладка. Значение этого поля будет служить меткой, в которую должен устанавливаться курсор, перед помещением в документ очередной порции информации. Поэтому, как только все необходимые поля определены, нужно указать для каждого из них осмысленные метки. Для бланка документа Word, приведенного на рис. 86, зададим (последовательно) такие метки: Фамилия – фамилия студента; Имя – имя студента; Отчество – отчество студента; Группа – наименование группы; Месяц_опл – название месяца, за который вносится оплата; Сумма_опл – внесенная сумма; ФИО_бух – фамилия принявшего бухгалтера; Дата_опл – дата оплаты. После окончания разработки формы документа сохраним его под именем Оплата за учебу в каталоге Шаблоны. На рис. 88 представлен шаблон созданного документа с изменяющимися полями. Создание модуля Печать для шаблона документа Далее необходимо перейти в редактор VBA и создать форму приложения, отвечающего условиям задачи (рис. 85). В листинге представлен код процедуры печати бланка квитанции об оплате, сопутствующие и отладочные процедуры. Листинг (занести в Модуль1 проекта Оплата за учебу)
В связи с различием переменных, принимаемых и передаваемых на печать, объявим как Public переменные двух видов: получаемые интерфейсной частью приложения и печатаемые в форме шаблона. Обратите внимание на то, что здесь все данные имеют тип String. Такие однотипные данные позволяют записывать их в поля формы в цикле, содержащем всего два оператора (см. описание листинга). Создание модулей работы кнопок формы приложения Работа кнопки Выдать справку состоит в считывании введенной информации в текстовые поля формы приложения, передаче их значений переменным формы шаблона документа с дальнейшим выводом информации в шаблон документа.
Процедуры присваивания переменным формы приложения введенных значений в текстовые поля формы.
Откомпилируйте программу и запустите на проверку. Задача на закрепление материалаПример 40.[5] Разработать форму бланка почтового перевода для облегчения труда сотрудников, связанных с частым оформлением денежных переводов. Готовый шаблон документа и форма даются на рис. 90 и 91. Рис. 90. Пример упрощенного бланка почтового перевода с текстовыми изменяющимися полями (шаблон документа) Рис. 91. Форма Рассылка в режиме выполнения для примера 40 |
|
||
Главная | В избранное | Наш E-MAIL | Добавить материал | Нашёл ошибку | Наверх |
||||
|