Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Заполнение формы Word-документа из VB-кода

Для демонстрации заполнения формы из VB-кода необходимо создать простую форму. Создание шаблона не имеет никакого отношения к программированию на Visual Basic и зависит от вашего умения работать с инструментами Word. Если у вас нет достаточных для этого навыков, обратитесь к литературе по Word, в которой книжный рынок не испытывает недостатка. Одной из довольно объемных книг по Word является книга Ильиной М.М. издательства Бином, в которой можно найти часть информации по созданию и использованию форм.

Форма создается в новом шаблонном файле (или сохраняется после создания в шаблонном файле), для чего при создании нового документа следует указать в качестве типа файла тип Шаблон. Все элементы для создания формы расположены на панели Формы (выберите из меню Вид | Панели инструментов | Формы или аналог этих команд в нерусифицированной версии Windows — View | Toolbars | Forms), на которой вы найдете следующие кнопки (рис. 8.3): Текстовое поле (Text Form Field), Флажок (Chex Box Form Field), Поле со списком (Drop-Down Form Field), Параметры поля формы (Form Field Options), Нарисовать таблицу (Draw Table), Добавить таблицу (Insert Table), Вставить рамку (Infert Frame), Затенение полей формы (Form Field Shading), Очистить поля формы (Reset Form Fields) (в предыдущих версиях Microsoft Word при защите формы после внесения изменений все поля формы приводились к их исходному состоянию; в версии Word 2002 этого не происходит: вы должны вручную приводить поля к их исходному состоянию кнопкой Очистить поля формы), Защита формы (Protect Form).

Рис. 8.3

Панель Формы (кнопки подписать!!!)

Прежде всего, необходимо поместить в документ элементы оформления: текст, таблицы, графические элементы и так далее, которые не будут в дальнейшем меняться. После этого в документ можно поместить так называемые поля, информацию в которые будет записывать клиент формы (клиентом может быть пользователь или программа). Для помещения поля в нужное место установите на это место курсор вставки и щелкните кнопку Текстовое поле на панели Формы. Для простого поля, в которое будет вводиться некоторый текст, этого вполне достаточно. Однако у вас имеется возможность выполнить дополнительные настройки для более удобной работы с этим полем. В Word для каждого элемента, размещаемого на форме, имеется окно настройки. Например, окно настройки текстового поля (рис. 8.4) позволяет указать для поля тип информации (обычный текст, число, дата, текущая дата, текущее время, вычисляемая), информацию, вводимую по умолчанию, максимальную длину, формат данных, имя макроса для запуска при входе (при попадании курсора) в поле, имя макроса при выходе из поля, метку поля (для обращения к нему из макросов). В окне настройки поля имеются также два флажка: для разрешения внесения изменений в поле и вычислений при выходе. Если вам необходимо сообщить пользователю какую-либо информацию для работы с полем, можно создать некоторое подобие справки. Для этого в окне настройки поля имеется кнопка Текст справки, щелчок на которой позволит в диалоговом окне ввести текст справки и указать способ отображения справочного текста: при нажатии на кнопку F1 или безусловно в статусной строке. Чтобы начать работать с окном настройки, нужно выделить текстовое поле формы и при помощи правой кнопки мыши вызвать на экран меню, в котором выбрать опцию Свойства. Окно настройки можно вызвать и при помощи кнопки Параметры поля формы панели Формы. В этом случае после выделения элемента формы достаточно щелкнуть кнопку Параметры поля формы на панели Формы.

Рис. 8.4

Окно настройки параметров текстового поля

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

Рис. 8.5

Вид шаблонного документа, для заполнения из VB-кода

Текстовым полям слева направо, сверху вниз присвоим (в поле закладка окна Параметры текстового поля) имена, которые будут использоваться в VB-коде в качестве имен объектов с типом Bookmark, например, для номера доверенности можно использовать имя закладки ДоверенНомер, для фамилии (имени, отчества) лица, которому выдана доверенность, — КомуВыдана и т.д. С таблицей вообще не нужно связывать никаких имен, так как таблицы в Word автоматически попадают в коллекцию (о коллекциях будет речь в следующем разделе) Tables. Ссылка на таблицу имеет вид Tables(n), где n — номер таблицы в документе. После создания такой формы следует сохранить документ как шаблон, например, под именем dov.dot.

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

Листинг 8.4. Программа заполнения Word-формы

1 Private Sub FormWrite(masText(), masVar(), _

2 masGoogs1(), masGoogs2(), masGoogs3())

3 ' запись информации из массивов в Word-форму

4 ' masText - имена закладок

5 ' masVar - значения для записи в поля формы

6 ' masGoogs1 - наименования товаров

7 ' masGoogs2 - единицы измерения товаров

8 ' masGoogs3 - количества для каждого наименования

10 Dim wordApp As Word.Application

11 Dim wordDoc As Word.Document

12 Dim sel As Word.Selection

14 Set wordApp = CreateObject("Word.Application")

15 wordApp.Documents.Add Template:="dov.dot"

16 Set wordDoc = wordApp.ActiveDocument

18 wordApp.Visible = True

20 For i = 0 To UBound(masText)

21 wordDoc.Bookmarks(masText(i)).Select

22 Set sel = Word.Selection

23 sel.TypeText masVar(i)

24 Next

26 'запись в таблицу данных о товарах

27 For i = 0 To UBound(masGoogs1) -1

28 'номер по порядку (первый столбец таблицы)

29 wordDoc.Tables(1).Cell(i + 1, 1).Select

30 Set sel = Word.Selection

31 sel.TypeText Str(i+1)

33 'наименование товара (второй столбец таблицы)

34 wordDoc.Tables(1).Cell(i + 1, 2).Select

35 Set sel = Word.Selection

36 sel.TypeText masGoogs1(i)

38 'единица измерения товара (третий столбец таблицы)

39 wordDoc.Tables(1).Cell(i + 1, 4).Select

40 Set sel = Word.Selection

41 sel.TypeText masGoogs2(i)

43 'количество товара (четвертый столбец таблицы)

44 wordDoc.Tables(1).Cell(i + 1, 4).Select

45 Set sel = Word.Selection

46 sel.TypeText masGoogs3(i)

48 Next

50 End Sub

Процедура FormWrite принимает в качестве аргументов пять массивов (каждый массив содержит несколько значений одной переменной, которые можно извлекать из массива и заносить в него независимо друг от друга). Как описано в комментариях (строки 4–7), массив masText содержит имена закладок (например, ДоверенНомер, КомуВыдана и т.д.), массив masVar содержит значения для записи в поля формы (например, “5”, “Мухоплясов Иван Егорович” и т.д.), массив masGoogs1 содержит наименования товаров (например, “Плата взломщика кодов”, “Плата дж. Simba-168 шнур”), массив masGoogs2 содержит единицы измерения товаров (например, “шт.”, “шт.” и т.д.), массив masGoogs3 содержит количества для каждого наименования (например, “2000”, “3000” и т.д.).

В строках 10–12

10 Dim wordApp As Word.Application

11 Dim wordDoc As Word.Document

12 Dim sel As Word.Selection

описаны объектные переменные для ссылок на Word-объекты: на само Word-приложение, документ и выделенный диапазон в документе.

В строках 14–18

14 Set wordApp = CreateObject("Word.Application")

15 wordApp.Documents.Add Template:="dov.dot"

16 Set wordDoc = wordApp.ActiveDocument

18 wordApp.Visible = True

создается (при помощи функции CreateObject) новый экземпляр Word-приложения, к коллекции Documents добавляется новый документ, основанный на шаблоне dov.dot, (конечно, имя и путь к файлу шаблона можно было задавать в качестве аргумента процедуры, но цель привести пример универсальной процедуры записи не ставилась), новый документ становится активным и видимым.

Структура в строках 14–18

20 For i = 0 To UBound(masText) -1

21 wordDoc.Bookmarks(masText(i)).Select

22 Set sel = Word.Selection

23 sel.TypeText masVar(i)

24 Next

описывается в следующей главе и называется циклом, который выполняет операторы строк 21–23 столько раз, сколько элементов содержится в массиве masText. В этом массиве передаются наименования закладок нашей формы. Их количество известно и равно 10, но в программе количество определяется при помощи функции UBound, которая возвращает длину массива. В строке 21 выполняется метод Select для очередной закладки, имя которой берется из массива masText. Таким образом происходит поиск тех мест в документе, в которые вставляются данные из массива masVar () с использованием метода TypeText для объектной переменной sel.

Структура в строках 27–48

27 For i = 0 To UBound(masGoogs1) -1

28 'номер по порядку (первый столбец таблицы)

29 wordDoc.Tables(1).Cell(i + 1, 1).Select

30 Set sel = Word.Selection

31 sel.TypeText str(i+1)

33 'наименование товара (второй столбец таблицы)

34 wordDoc.Tables(1).Cell(i + 1, 2).Select

35 Set sel = Word.Selection

36 sel.TypeText masGoogs1(i)

38 'единица измерения товара (третий столбец таблицы)

39 wordDoc.Tables(1).Cell(i + 1, 3).Select

40 Set sel = Word.Selection

41 sel.TypeText masGoogs2(i)

43 'количество товара (четвертый столбец таблицы)

44 wordDoc.Tables(1).Cell(i + 1, 4).Select

45 Set sel = Word.Selection

46 sel.TypeText masGoogs3(i)

48 Next

выполняет операторы строк 28–46 столько раз, сколько элементов содержится в массиве masGoogs1. При этом происходит заполнение таблицы формы. В строке 29 текущим выделенным диапазоном становится первый столбец (с заголовком “№ п/п”) и (i+1)-ая строка таблицы. В стоке 30 объектной переменной sel назначается ссылка на выделенный диапазон, а в строке 31 с использованием метода TypeText для объектной переменной sel выполняется запись номера позиции очередного наименования товара.

В строках 33–36 выполняется запись из массива masGoogs1 во вторую колонку таблицы (с заголовком “Товарно-материальные ценности”), в строках 38–41 — из массива masGoogs2 в третью колонку (с заголовком “Ед. измерения”), в строках 43–46 — из массива masGoogs3 в последнюю колонку (с заголовком “Количество”).

Если последний пример окажется для вас довольно сложным, вернитесь к нему после прочтения глав с описанием массивов и циклических структур. Возможно, тогда вы поймете, как удобно управлять записью данных в редакторе Word из кода на языке Visual Basic, особенно, если при этом информация выбирается из диалоговых окон или баз данных.

Пример записи информации из VB-кода в Excel будет приведен при рассмотрении баз данных далее в этой книге.

Ссылка на объекты с помощью With…End With

Visual Basic имеет особую структуру (оператор) — With…End With, позволяющую ссылаться на свойства или методы, которые принадлежат одному и тому же объекту, без задания всей объектной ссылки при каждом использовании свойства или метода объекта.

Структура With…End With имеет следующий синтаксис:

Синтаксис

With Object

'операторы, использующие свойства и методы Object

End With

Object — это любая допустимая объектная ссылка.

Если в конце процедуры из листинга 8.4 записать следующие операторы:

With wordApp

.PrintOut

.Quit

End With

текущий Word-документ приложения будет отправлен на печать (методом PrintOut) и само приложение будет закрыто.

Передача объектов в процедуры в качестве аргументов

Объектные переменные, как и обычные переменные можно передавать в процедуры и функции в качестве аргументов. Очень часто бывает нужно использовать списки (элемент управления ListBox) со свойством Style, равным 1 (Checkbox). На рис. 8.2 можно увидеть пример такого списка. Следующая функция возвращает значение True, если в таком списке выделен хотя бы один элемент:

Function FunSelectList(ObjList As Object) As Boolean

' проверка наличия выделенных элементов в списке List

Dim i As Integer

FunSelectList = False

For i = 0 To ObjList.ListCount - 1

If ObjList.Selected(i) Then

FunSelectList = True

Exit For

End If

Next

End Function

Ссылка на объект передается в функцию FunSelectList как параметр (ObjList As Object). Перед выполнением цикла от 0 до ObjList.ListCount – 1 значению функции присваивается значение False (нет выделенных элементов). В цикле проверяется, выделен ли i -й элемент списка. Как только такой элемент найден, значению функции присваивается значение True и выполняется оператор выхода из цикла.




Дата добавления: 2015-09-12; просмотров: 66 | Поможем написать вашу работу | Нарушение авторских прав

Объекты | Использование объектов | Использование объектных переменных | Создание пользовательских классов | Создание свойств класса |


lektsii.net - Лекции.Нет - 2014-2024 год. (0.016 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав