Создание приложения в VBA в Access для автоматизации формирования договоров в Word
Курсовой проект
Создание приложения в VBA в Access для автоматизации формирования договоров в Word
Брест 2012
СОДЕРЖАНИЕ
ВВЕДЕНИЕ 3
1 ДОГОВОР КАК ПРАВОВОЙ ДОКУМЕНТ 4
1.1 Значение договора 4
1.2 Классификация договоров 4
1.3 Содержание договора 6
2 ЯЗЫК VBA И ЕГО ВОЗМОЖНОСТИ 7
2.1 Понятие VBA 7
2.2 Объектная структура языка VBA 7
2.3 Использование языка VBA в Access 9
3 АВТОМАТИЗАЦИЯ ПРИЛОЖЕНИЙ 10
3.1 Понятие автоматизации 10
3.2 Создание ссылок на объекты 10
3.3 Создание
объектов на сервере
3.3.1 Использование функции CreateObject 12
3.3.2 Использование функции GetObject 13
3.3.3 Использование раннего связывания 13
3.4 Взаимодействие с приложением Word 14
4 Пример создания приложения
для автоматизации
ЗАКЛЮЧЕНИЕ 21
Список использованных источников 22
1 ДОГОВОР КАК ПРАВОВОЙ ДОКУМЕНТ
Договор – в первую очередь взаимная сделка, основание возникновения гражданских прав и обязанностей. В этом смысле договор – это юридический факт. Но договор не сводится только к сделке, договор – это еще и возникающее из соглашения обязательство. Кроме того, договор – это документ, фиксирующий акт возникновения обязательства по воле всех его участников.
1.1 Значение договора
- является основанием возникновения гражданских прав и обязанностей;
- основной способ оформления связей участников гражданского оборота;
- определяет объем прав и обязанностей участников гражданских правоотношений, порядок и условия исполнения обязательства, ответственность за их неисполнение или ненадлежащее исполнение;
- позволяет правильно определить спрос и предложение;
- стабилизирует отношения гражданского оборота, делает их предсказуемыми, обеспечивает формирование уверенности в том, что предпринимательская деятельность будет обеспечена всем необходимым;
- стимулирует инициативу субъектов гражданских правоотношений, а значит и способствует и развитию производства.
1.2 Классификация договоров
В зависимости от цели, на которую направлено волеизъявление сторон, выделяют:
- предварительный договор (стороны обязуются заключить в будущем договор о передаче имущества, выполнении работ или оказании услуг (основной договор) на условиях, предусмотренных предварительным договором). Предварительный договор заключается в форме, установленной для основного договора, а если форма основного договора не установлена, то в письменной форме, а также должен содержать условия, позволяющие установить предмет и другие существенные условия основного договора. Несоблюдение правил о форме предварительного договора влечет его ничтожность;
- основной договор (заключен во исполнение предварительного договора. Направлен на непосредственное возникновение прав и обязанностей по передаче имущества, выполнению работ или оказанию услуг).
В зависимости от того, у кого возникает право требовать исполнения по договору, выделяют:
- договор в пользу его сторон;
- договор в пользу третьего лица (договор, в котором стороны установили, что должник обязан произвести исполнение не кредитору, а указанному или не указанному в договоре третьему лицу, имеющему право требовать от должника исполнения обязательства в свою пользу).
По характеру распределения прав и обязанностей выделяют: одностороннеобязывающие договоры и взаимные договоры.
В зависимости от присутствия воли сторон при заключении договора выделяют:
- свободные договоры (заключение договора и определение его условий полностью зависит от волеизъявления сторон);
- обязательные (в случаях предусмотренных законом или договором заключение договора является обязательным для одной или обеих сторон).
В зависимости от наличия
встречной имущественной
В зависимости от наличия возможности обоюдостороннего участия в определении условий договора выделяют:
- взаимосогласованные договоры (в определении условий договора участвуют обе стороны);
- договоры присоединения (условия договора определены одной из сторон в формулярах или иных стандартных формах и могут быть приняты другой стороной не иначе как путем присоединения к предложенному договору в целом. Присоединившаяся к договору сторона вправе потребовать расторжения или изменения договора, если договор присоединения хотя и не противоречит закону и иным правовым актам, но лишает эту сторону прав, обычно предоставляемых по договорам такого вида, исключает или ограничивает ответственность другой стороны за нарушение обязательств либо содержит другие явно обременительные для присоединившейся стороны условия, которые она, исходя из своих разумно понимаемых интересов, не приняла бы при наличии у нее возможности участвовать в определении условий договора).
1.3 Содержание договора
Условия, на которых достигнуто соглашение сторон, составляют содержание договора. По своему юридическому значению все условия делятся на существенные, обычные и случайные.
Существенными признаются условия, которые необходимы и достаточны для заключения договора. Для того чтобы договор считался заключенным, необходимо согласовать все его существенные условия.
Существенные условия:
- предмет договора (например, условие о предмете в договоре купли-продажи);
- условия, которые названы в законе или иных правовых актах как существенные или необходимые для договоров данного вида (например, условие о цене в договоре купли-продажи недвижимости; договор страхования невозможен без определения страхового случая);
- условия, которые необходимо согласовать по требованию одной из сторон.
Обычные условия не
нуждаются в согласовании
Случайными называются такие условия, которые изменяют либо дополняют обычные условия. Они включаются по усмотрению сторон.
Содержание договора может определяться типовыми договорами. Типовые договоры утверждаются в порядке, предусмотренном законом, компетентными государственными органами. Типовые договоры носят обязательный характер для участников. В связи с этим условия конкретных договоров, заключенных на основании типовых, не должны противоречить последним.
Содержание договора
может определяться и
2 ЯЗЫК VBA И ЕГО ВОЗМОЖНОСТИ
2.1 Понятие VBA
VBA (Visual Basic for Application) — это язык программирования, поддерживаемый всеми приложениями пакета Microsoft Office, в состав которого входят такие популярные приложения, как Microsoft Access, Microsoft Excel, Microsoft PowerPoint, Microsoft Word и др. Это относительно несложный язык программирования, который очень прост и удобен в освоении и позволяет быстро получить ощутимые результаты — конструировать профессиональные приложения для решения практически любых задач в среде Microsoft Windows. Можно сказать, что язык VBA является прямым наследником языка программирования Basic, но тем не менее, по сравнению с ним, он шагнул далеко вперед. Поэтому и возможностей, как его внутренних (например, в части вывода на экран всевозможных форм), так и взаимодействия с другими приложениями, у него гораздо больше. Изучив язык Visual Basic for Application, становится ясно, что создавать собственные офисные приложения с его помощью гораздо проще и быстрее, чем с помощью других языков программирования.
Следует заметить, что, являясь развитым языком программирования, VBA также включает в себя полноценную интегрированную среду разработки с полным набором специализированных окон, упрощающих проектирование, отладку и тестирование программ. Интегрированная среда разработки VBA представлена приложением, называемым редактором Visual Basic. Этот редактор имеет типичное для приложений Windows окно с панелью меню и набором панелей инструментов, которые позволяют получить доступ к ряду окон, предоставляющих инструментальные средства, необходимые для создания программ. Кроме того, редактор VBA включает специализированные средства для быстрого создания пользовательского интерфейса, что превращает его в визуальную среду разработки приложений.
2.2 Объектная структура языка VBA
Главное преимущество языка VBA состоит в том, что он относится к языкам объектно-ориентированного программирования. В основу программирования на VBA положено такое понятие, как объект. Объект позволяет инкапсулировать данные, описывающие некоторый элемент, вместе с программным кодом, предназначенным для обработки этих данных, т.е. объединить их в нечто целое, называемое объектом. В каждом VBA-приложении есть свой уникальный набор объектов с их собственными свойствами (характеристиками данного элемента) и методами (командами для той или иной обработки этих свойств). В результате доступ к свойствам объекта (т.е. характеристикам состояния некоторого элемента в приложении) возможен только с помощью его собственных методов (т.е. специально подготовленных команд обработки этих свойств). Управление состоянием элемента осуществляется с помощью посылаемых ему сообщений, указывающих объекту на необходимость выполнить тот или иной метод для достижения требуемого результата. Сами сообщения генерируются системой в ответ на действия пользователя или действия других функционирующих в системе программ, называемых в этом случае событиями.
Одно из важнейших понятий объектно-ориентированного программирования — это понятие класса, описывающее типовую структуру сходных по назначению элементов. В системе хранится программное описание каждого используемого класса, на основании которого при необходимости создаются экземпляры объектов, представляющих конкретные элементы программной среды. Например, в программе может быть описан класс кнопки, отображаемой в окнах приложения. Каждая отдельная кнопка (экземпляр объекта этого класса) в любом окне приложения создается на основании этого описания, но отличается от других своими свойствами (размером, цветом, надписью, выполняемой после щелчка операцией и т.д.).
В языке VBA класс обычно описывается как определенный прототип, на основе которого создается конкретный объект. Класс определяет назначение объекта, его свойства и те действия, которые могут быть выполнены над этим объектом. С точки зрения программы, сам по себе объект не представляет большого интереса, гораздо важнее то, какие действия можно совершить над этим объектом и какими свойствами он обладает. Действия, выполняемые над объектом, определяются набором его методов, а свойства данного объекта определяют его различные характеристики (размер, цвет, положение на экране и т.д.). Управлять характеристиками объекта программа может только с помощью его же методов, предоставляющих доступ к свойствам этого объекта.
Кроме методов и свойств объекта, существует такое понятие, как событие. Событие — это некоторое действие, которое может быть выполнено в отношении объекта и на которое, следовательно, необходимо запрограммировать ответную реакцию данного объекта (отклик). Например, событием может быть щелчок на изображении объекта, нажатие клавиши на клавиатуре или перемещение указателя мыши над изображением объекта. Другими словами, события в системе возникают в результате действий пользователя, действий данной или другой программы либо действий самой операционной системы. На каждое возможное событие в программе должен быть описан соответствующий отклик, иначе программа не сможет отреагировать на данное событие, и оно останется безответным. В целом, суть программирования на языке VBA состоит в создании кода программ (методов), которые генерируют необходимые отклики на интересующие нас события.
2.3 Использование языка VBA в Access
Язык VBA позволяет автоматизировать практически любую операцию, доступную в приложении и базах данных Access. Вот список операций, которые позволяет выполнить язык VBA:
- автоматизация ввода данных в формы Access;
- добавление новых элементов в списки;
- компоновка данных, помещаемых в отчеты;
- работа с данными без открытия форм;
- автоматизация других приложений из Access;
- импорт и экспорт данных из файлов XML.
Все эти операции являются лишь небольшим срезом практически безграничных возможностей языка VBA.
3 АВТОМАТИЗАЦИЯ ПРИЛОЖЕНИЙ
3.1 Понятие автоматизации
Microsoft Access является составной частью пакета Microsoft Office — группы продуктов, созданной для совместного использования. Именно здесь раскрывается понятие автоматизации. Создавая программы автоматизации, можно использовать одно приложение (например, Microsoft Access) для управления другим (таким как Word, PowerPoint или Excel). В то же время эта способность не ограничивается одним лишь пакетом Microsoft Office. Существуют сотни других приложений, от AutoCAD до XMLSpy, которыми можно управлять посредством автоматизации.
Программы автоматизации всегда работают с двумя приложениями: клиентским и серверным. Клиентским называют приложение, в котором запускается на выполнение код VBA (в нашем случае это Access); серверным же — приложение, которое поставляет функциональность программе автоматизации. Клиент создает один или несколько объектов из сервера, а после этого использует свойства и методы этих объектов для выполнения собственных задач.
К примеру, приложение Microsoft Access может использовать автоматизацию с приложением Microsoft Word в качестве сервера для создания нового документа Word. Создав такой документ (т.е. новый объект Word. Document), программа Access получает доступ ко множеству его свойств добавления и форматирования текста, а также сохранения с конкретным именем файла. Результатом станет создание файла документа Word (с расширением .doc) из среды приложения Access.
Автоматизация не переносит объекты из одного приложения в другое. Вместо этого она позволяет одному приложению управлять объектами, созданными другим приложением. И в этом заключено их главное различие. К примеру, если вы используете Microsoft Word в качестве сервера автоматизации, то пользователь должен иметь на своем компьютере это приложение установленным. В то же время пользователю не придется запускать приложение и манипулировать им вручную — за него это сделает программа автоматизации.
3.2 Создание ссылок на объекты
Клиентам автоматизации
нужен способ определения того, какие
именно объекты конкретного сервера
автоматизации они могут
- объектах;
- методах;
- свойствах;
- событиях.
Несмотря на то, что для использования объектов из сервера автоматизации совсем не требуется обязательное наличие библиотеки типов, она станет неплохим подспорьем. Рекомендуется всегда использовать библиотеку типов. Для использования же библиотеки типов при автоматизации на них нужно установить ссылки.
- Открываем редактор VBA, нажав в Access комбинацию клавиш Alt+F11.
- Выбираем пункт References в меню Tools. Откроется диалоговое окно ссылок (рис. 3.1).
Рисунок 3.1 – Добавление ссылок на библиотеки типов
- Находим в списке пункт Microsoft Word 12.0 Object Library и устанавливаем на нем флажок.
- Щелкаем на кнопке ОК, и ссылки на эти библиотеки типов будут добавлены в текущую базу данных Access.
После того как ссылки на библиотеки типов добавлены, можно найти их объекты в «Обозревателе объектов». Чтобы запустить этот обозреватель, нужно нажать клавишу F2. После этого выбрать нужную библиотеку типов в комбинированном списке Project/Library.
3.3 Создание объектов на сервере автоматизации
Для работы с объектами из другого приложения их нужно вначале создать в тексте программы Access. Существует три способа реализовать эту операцию:
- использование функции CreateObjесt;
- использование функции GetObject;
- использование раннего связывания.
3.3.1 Использование функции CreateObject
Функция CreateObject позволяет определить объект по его имени и создать один его экземпляр. Вот краткий пример ее использования:
Sub CreateObjectDemo()
' Использование Word в качестве сервера автоматизации
' с помощью функции CreateObject
Dim objWord As Object
Set objWord = CreateObject("Word.
objWord.Visible = True
objWord.Quit
End Sub
В данном примере для ссылки на создаваемый объект используется переменная специального типа Object. Это тип переменных, которые могут ссылаться на любые объекты: на документ Word, на диаграмму Excel, на форму Access.
Функция CreateObject преобразовывает обобщенную переменную объекта в конкретный тип объекта. Аргументом функции CreateObject является то, что известно под именем ProgID (идентификатор объекта). Это - уникальное значение, сопоставленное с типом создаваемого объекта. Большинство идентификаторов объекта можно получить, объединив имя приложения с именем его объекта. Так, идентификатор Word.Application соответствует объекту Applilcation приложения Word (а не собственному объекту Application приложения Access).
После того как строка программы с вызовом функции CreateObject отработала, переменная objWord уже ссылается на экземпляр объекта Application приложения Word. Этот объект представляет собой сессию работы с Microsoft Word (равно как объект Application приложения Access представляет сессию работы с последним). Однако если установить на этой строке контрольную точку и остановиться в этом месте, нигде не найдется запущенного приложения Word. Это происходит потому, что Word, равно как и большинство других серверов автоматизации, запускается в невидимом режиме при вызове из программы автоматизации. В следующей строке программы свойству видимости приложения Word присваивается значение True, в результате чего окно этого приложения отображается на экране.
И наконец, вызывается метод Quit объекта Application приложения Word. Это — эквивалент вызова команды «Выход» в меню «Файл».
Кроме новой функции CreateObject в данном примере отсутствует какой-либо новый синтаксис. После того как извлекается объект автоматизации, можно использовать его свойства и методы точно так же, как и в любом объекте Access.
3.3.2 Использование функции GetObject
Функция GetObject очень близка к функции CreateObject. Вот пример ее использования:
Sub GetObjectDemo()
' Использование Word в качестве сервера автоматизации
' с помощью функции GetObject
Dim objWord As Object
Set objWord = GetObject("", "Word.Application")
objWord.Visible = True
objWord.Quit
End Sub
Если запустить на выполнение эту процедуру, то обнаруживаем, что она работает в точности так же, как и CreateObjectDemo. В то же время, между функциями CreateObject и GetObject отмечается два существенных различия:
- Функция CreateObject всегда создает новый экземпляр сервера автоматизации. Функция GetObject может использовать тот экземпляр, который уже запущен в системе.
- Функция GetObject имеет первый, необязательный параметр, задающий документ. Если вызвать ее следующим образом: GetObject («с:\temp\doc1.doc», «Word.Application»), то при необходимости будет создан экземпляр объекта Aplication, и в это приложение будет загружен документ, находящийся в заданном файле.
Функцию GetObject лучше использовать тогда, когда нужно работать с определенным документом или когда вы столкнулись с проблемой минимизации влияния приложения автоматизации на задействованные в системе ресурсы (это больше относится к компьютерным системам с ограниченными ресурсами памяти), так как в данном случае не запускается несколько дополнительных копий приложения сервера автоматизации.
3.3.3 Использование раннего связывания
Функции CreateObject и GetObject используют то, что в программировании называют поздним связыванием. При позднем связывании в тексте программы явно не указывается, какой тип объекта будет использоваться. Вместо этого используется объект общего типа Object, а интерпретатор VBA в ходе выполнения программы уже сам решает, какой тип объекта создавать. Третьим способом создания объектов является использование раннего связывания, которое позволяет применять родные типы переменных сервера автоматизации непосредственно в коде VBA.
Далее представлен пример создания объекта, преобразованный в метод раннего связывания:
Sub EarlyBindingDemo()
' Использование Word в качестве сервера автоматизации
' с помощью раннего связывания
Dim objWord As Word.Application
Set objWord = New Word.Application
objWord.Visible = True
objWord.Quit
End Sub
При раннем связывании в коде VBA используют родной тип объекта. Этот режим становится возможным благодаря установленной ссылке на библиотеку типов сервера автоматизации. После того как ссылка установлена, можно объявлять и инициализировать объект автоматизации в точности так же, как и любой собственный объект Access.
Рекомендуется использовать раннее связывание по нескольким причинам:
- Не придется запоминать два разных синтаксиса создания объектов.
- Получаем все преимущества механизма IntelliSense при написании программы, а это значит, что можно будет выявить ошибки еще до того, как их обнаружат пользователи программы.
- Раннее связывание работает быстрее функций CreateObject и GetObject.
3.4 Взаимодействие с приложением Word
Приложение Access обладает множеством достоинств, однако оно не предоставляет хороших средств создания договоров, содержащих произвольный текст и форматирование. С помощью средств автоматизации это ограничение обойти довольно просто: приложение Microsoft Word идеально подходит для создания профессионального договора, именно это приложение можно выбрать в качестве сервера автоматизации.
Создадим простую форму Access, позволяющую вводить произвольный текст и имя файла. На этой форме создадим кнопку «Создать документ Word». После щелчка на кнопке создается документ, содержащий введенный текст и сохраненный под именем, введенным в нижнем текстовом поле формы.
Текст процедуры обработки щелчка на кнопке довольно прост:
Private Sub cmdCreate_Click()
' Копируем текст в документ Word
Dim objWord As Word.Application
' Инициируем Word и новый документ
Set objWord = New Word.Application
objWord.Documents.Add
' Вставляем текст после области по умолчанию
' Это - начало документа
objWord.ActiveDocument.Range.
' Сохраняем файл
objWord.ActiveDocument.SaveAs (txtFileName.Value)
' и отображаем его
objWord.Visible = True
End Sub
Единственной сложностью в этой задаче является необходимость хорошего знания объектной модели Word, чтобы заставить ее делать то, что нужно. Ключевыми действиями являются создание документа и добавление в него текста. Для создания документа вызывался метод Add коллекции Documents. Добавление текста — несколько более сложная задача. Документы Word содержат объект Range, который представляет выделенную в настоящий момент область текста. Объект Range имеет массу методов добавления текста, в том числе InsertAfter и InsertBefore. Сразу после создания документа текста в нем еще нет, поэтому объект Range просто указывает на начало документа. Вставляя текст после этой точки, вставляем его в самое начало документа — что как раз и нужно.
4 Пример создания приложения для автоматизации формирования договоров
- Создание базы данных и необходимых таблиц:
Запускаем Microsoft Access и в меню «Файл» выбераем «Создать». В окне «Создание файла» выбераем «Новая база данных». Сохраняем созданную базу данных. В данном примере база данных будет находиться в корневом каталоге диска C: и называться Dogovors.mdb. В открывшемся окне базы данных переходим на вкладку «Таблицы» и щелкаем два раза мышью по строке «Создание таблицы в режиме конструктора». В созданной таблице определяем три столбца ( рис. 4.1).
Рисунок 4.1 – Структура таблицы «Шаблоны»
Сохраняем эту таблицу как «Шаблоны» и закрываем окно конструктора. В окне базы данных на вкладке «Таблицы» еще раз щелкаем по строке «Создание таблицы в режиме конструктора». Набор столбцов для новой таблицы должен выглядеть так:
Имя столбца
Тип данных
Размер
НомерДоговора
Текстовый (первичный ключ)
10
Город
Текстовый
30
Дата
Дата/время
50
Организация
Текстовый
50
Представитель
Текстовый
50
Должность
Текстовый
50
ЮрОснование
Текстовый
100
Сохраняем эту таблицу с именем «Договоры» и закрываем окно конструктора таблицы.
На вкладке «Таблицы» окна базы данных щелкнем два раза мышью по созданной таблице «Шаблоны», чтобы открыть ее в режиме ввода данных. В первую строку этой таблицы в столбец «Описание» вводим «Шаблон договора», а затем выделяем ячейку в столбце «Шаблон» и в меню «Вставка» выбираем «Объект». В открывшемся окне переставляем переключатель в положение «Создать из файла», затем нажимаем на кнопку «Обзор» и выбираем шаблон C:\ DogovorTemplate. dot. Затем нажимаем на кнопку OK, чтобы поместить шаблон внутрь базы данных.
- Создание формы Access и программного кода для формирования файла договора:
В окне базы данных переходим на вкладку «Формы» и щелкаем два раза мышью по строке «Создание формы с помощью мастера». Откроется окно мастера создания форм. На первом экране мастера в списке «Таблицы» и «Запросы» выбираем «Таблица: Договоры», затем помещаем в список «Выбранные поля» все поля из этой таблицы и нажимаем на кнопку «Далее». На следующем экране выбираем внешний вид формы в один столбец и нажимаем на кнопку «Далее». На следующем экране выбираем стиль и нажимаем на кнопку «Далее». На последнем экране в окне определения имени формы вводим имя формы «Форма для занесения договоров», переставляем переключатель в положение «Изменить макет формы» и нажимаем на кнопку «Готово». Форма будет открыта в режиме конструктора. Произведем расстановку и дооформление созданных элементов на форме средствами конструктора.