Word переменная в полях

Для версии Microsoft Word 2000 в данной статье см.
209227.
Для версии Microsoft Word 97 в данной статье см.
181816.
Для версии Microsoft Word 7.0 в данной статье см.
106388.

Обзор

В данной статье описывается, как хранить и извлекать переменные документа при использовании Microsoft Word.

Дополнительные сведения

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

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

290140 OFFXP: запуск кода примера из статей базы знаний
Задавать и извлекать содержимое строковой переменной в документ или шаблон можно использовать Visual Basic для приложений Microsoft коллекции переменных .

Кроме того можно использовать поле DocVariable для извлечения значения переменной документа после его для отображения в документе Word.

Как задавать и извлекать значения переменной документа

Следующий пример макроса использует свойство переменные для хранения, а затем извлечь значение строковой переменной с именем «FullName» с текущим документом.

Sub GetSetDocVars()

Dim fName As String
fName = "Jeff Smith"
' Set contents of variable "fName" in a document using a document
' variable called "FullName".
ActiveDocument.Variables.Add Name:="FullName", Value:=fName
' Retrieve the contents of the document variable.
MsgBox ActiveDocument.Variables("FullName").Value

End Sub

Примечание: Если в документе уже задано имя переменной появляется следующее сообщение об ошибке:

Ошибка во время выполнения «5903»: Имя переменной уже существует.

Необходимо удалить имя или просто сбросить значение аргумента.

Удаление переменной документа

Следующий пример макроса использует свойство Variables в первом наборе и получить значение переменной документа и затем удалить переменную из активного документа.

Sub GetSetDeleteDocVars()

Dim fName As String
fName = "Jeff Smith"
' Set contents of variable "fName" in a document using a document
' variable called "FullName."
ActiveDocument.Variables.Add Name:="FullName", Value:=fName
' Retrieve the contents of the document variable.
MsgBox ActiveDocument.Variables("FullName").Value
' Delete the variable.
ActiveDocument.Variables("FullName").Delete

End Sub

Как извлечь значение переменной документа с помощью поля DocVariable

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

Sub GetSetDocVars()

Dim fName As String
fName = "Jeff Smith"
' Set contents of variable "fName" in a document using a document
' variable called "FullName."
ActiveDocument.Variables.Add Name:="FullName", Value:=fName

End Sub

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

  1. В меню Вставка щелкните поле.

    Примечание. В Microsoft Office Word 2007 выберите в группе текст на вкладке ВставитьЭкспресс-блоки и выберите поле.

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

  3. В списке поле выберите DocVariable.

  4. В поле Новое имя в разделе свойств полявведите имя переменной документа.

    Примечание: Если вы видите Дополнительные свойства поля , а не
    Свойства полянажмите кнопку Скрыть коды.

  5. Нажмите кнопку ОК.

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

  • Свойство PrivateProfileString используется для хранения значений в файле настройки закрытого.

    Дополнительные сведения о свойстве PrivateProfileString в редакторе Visual Basic нажмите кнопку Справки Microsoft Visual Basic в меню Справка выберите Свойство PrivateProfileString введите в поле помощника Office или мастера ответов, а затем Нажмите кнопку Поиск для просмотра раздела.

  • Используйте свойство переменные для хранения значений в документе.

    Дополнительные сведения о свойстве переменные в редакторе Visual Basic меню Справка выберите команду Справка по Microsoft Visual Basic , введите Свойство Variables в поле помощника Office или мастера ответов и нажмите кнопку поиска Просмотрите раздел.

  • Использование Visual Basic для приложений операторы Ввода-вывода для записи в текстовый файл (например, написать инструкцию или инструкции Print ).

    Дополнительные сведения о записи данных в файлы, в редакторе Visual Basic выберите команду Справка по Microsoft Visual Basic в меню Справка , введите запись данных в файлы в поле помощника Office или мастера ответов и нажмите кнопку поиска Просмотрите раздел.

  • Использование объекта AutoTextEntry для хранения значений в элемент автотекста.
    Дополнительные сведения об объекте AutoTextEntry в редакторе Visual Basic меню Справка выберите команду Справка по Microsoft Visual Basic , объектом AutoTextEntry введите в поле помощника Office или мастера ответов и нажмите кнопку поиска для просмотра раздела.

Нужна дополнительная помощь?

Я делал так (пользовался формами).
1. MSWord -> RClick на панелях инструментов Ворда -> «Формы» (чтобы отобразить панель инструментов «Формы»)
2. На панели инструментов «Формы» — LClick «Текстовое поле» -> В документе появится текстовое поле (серенькое, если затенение полей формы включено)
3. RClick на появившемся поле в документе -> Свойства
4. В окне «Параменты текстового поля» -> «Параменты поля/Закладка:» вводим, например, «MyTextField1» -> ОК
5. В текстовом поле документа (сереньком) вводим какой-нибудь текст, например, «QWERTY»
6. В ВБА (Alt+F11) -> пишем:

Код: Выделить всё

Sub tt()
    MsgBox ThisDocument.FormFields.Item("MyTextField1").Range.Text
End Sub

7. F5 на макросе и видим на экране «QWERTY» ! Или «ЙЦУКЕН», как у меня, что в общем-то тоже радует глаз!

Я, кстати, ещё и защиту документа включал, чтобы «никто :wink: » не мог исправить ничего, кроме данных форм…

Пойдёт? Извиняюсь, что так подробно, вдруг всё-таки кто-ньть читать будет :)

What is a DOCVARIABLE in Microsoft Word 2003? How do I set it? How do I make it display in my Word document?

Gottlieb Notschnabel's user avatar

asked Oct 15, 2008 at 15:30

joe's user avatar

You can use the Microsoft Visual Basic for Applications Variables collection to set and retrieve the contents of a string variable in a Word document or template.

Also, you can use the DocVariable field to retrieve the value of a document variable after it has been set to display within a Word document.

Source: How to store and retrieve variables in Word documents

Sub GetSetDocVars()

Dim fName As String
fName = "Jeff Smith"
' Set contents of variable "fName" in a document using a document
' variable called "FullName".
ActiveDocument.Variables.Add Name:="FullName", Value:=fName
' Retrieve the contents of the document variable.
MsgBox ActiveDocument.Variables("FullName").Value

End Sub

Community's user avatar

answered Oct 15, 2008 at 15:38

Chris Serra's user avatar

Chris SerraChris Serra

13.1k3 gold badges25 silver badges25 bronze badges

2

How do I make it display in my word document:

Insert->Field->Category:DocumentAutomation->Field Names:DocVariable->Field COdes Button-> Then enter the name of the variable.

answered Oct 15, 2008 at 16:07

joe's user avatar

joejoe

16.9k36 gold badges94 silver badges131 bronze badges

0

I was also looking for an answer to this question.
Created a small script to display all ActiveDocument.Variables

Here is it:

Sub GetVariables()
    ' Declaration of output variavle, which is a string
    Dim output As String
    output = ""

    For Each Variable In ActiveDocument.Variables
        ' & is used for string concatenation.
        output = output & Variable.Name & " = " & Variable & vbNewLine
    Next

    MsgBox output
End Sub

answered Jul 23, 2019 at 8:59

wojtekc's user avatar

wojtekcwojtekc

611 silver badge2 bronze badges

January 24 2014, 22:06

Category:

  • IT
  • Cancel

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

Время на прочтение
11 мин

Количество просмотров 124K

– А ларчик просто открывался.
И.А. Крылов

О чём эта статья

В настоящей работе описываются способы автоматической организации нумерованных объектов при написании статей, рефератов, докладов, диссертаций и пр. При написании подобного рода материалов неизбежно возникает необходимость нумеровать те или иные объекты, например, формулы или пункты в списке используемой литературы. При этом многие авторы пользуются при написании текстовым редактором Microsoft Word.
В случае тривиальной «ручной» организации, при которой каждый номер прописывается непосредственно руками (обычно, в самом конце, когда текст полностью готов), автор работы может ошибиться в каком-либо номере, и все дальнейшие номера окажутся неверными. Более того, после рецензии те или иные части работы могут быть вставлены в текст или убраны из него. Последнее, зачастую, требует полной перенумерации объектов в документе. Таким образом, цель настоящей статьи состоит в доведении до читателя способов автоматической организации нумерации объектов, позволяющих избежать вышеописанные ситуации.
Предупреждение: в данную статью вошли лишь те приёмы, с которыми автор столкнулся при написании кандидатской диссертации. Описываемые способы организации нумерованных объектов не претендуют на единственность, полноту и оптимальность. Имеются другие интересные способы, например, в TeX. Несомненно, читатель сможет найти и иные способы достижения сформулированной цели. В любом случае, ознакомиться с подходами автора (хотя бы на досуге) следует любому заинтересованному читателю.

Основы работы с полями MS Word

В данном разделе описываются основные поля текстового редактора MS Word, необходимые для организации списков и ссылок на них, а также методы работы с ними.
Поле MS Word – это объект, принимающий то или иное значение в зависимости от ключевых слов и параметров этого поля. Для вставки поля в текст необходимо нажать сочетание клавиш Ctrl + F9 или выбрать соответствующее меню на ленте.
image
После вставки поля в тексте появятся серые фигурные скобки.
image

Отличить поля в тексте очень легко – достаточно выделить нужный блок текста. Все поля в выделенном фрагменте будут подсвечены серым цветом.
image

После того, как поле вставлено в текст, необходимо задать значение этого поля. Для задания значения тому или иному полю необходимо написать определённые ключевые слова, рассмотренные в разделе 2, внутри поля. После задания полю значения необходимо выделить блок текста, содержащий это поле, и нажать F9. Если в выделенном фрагменте окажутся несколько полей, то все они будут обновлены. Для обновления полей во всём документе необходимо выделить всё (Ctrl + a) и нажать F9. Обновить поле можно также с помощью нажатия на соответствующий пункт контекстного меню.
NB! Бывает, что все поля необходимо обновить два раза: первое обновление переупорядочит списки, а второе – расставит нужные значения ссылок.
Значение того или иного поля может быть изменено в любой момент. Для этого необходимо лишь выделить поле (или фрагмент текста, содержащий поля) и выбрать пункт «Коды/значения полей» контекстного меню.
image

Основные поля MS Word, необходимые для автоматической организации нумерованных объектов

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

SEQ

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

Пример задания поля SEQ

{ SEQ pic_chap1 }

NB! Желательно использовать осмысленные имена переменных, например: pic_chap1 – рисунки первой главы, fn_intro – формулы во введении и т.п. Авторы могут использовать любые имена переменных, но именно осмысленные имена позволят быстро сориентироваться в тексте и исправить его.
Важные ключи поля SEQ. Ключ «с» используется для вывода текущего значения переменной. В частности, с помощью закладки (SET) со значением поля с ключом «c» можно организовать автоматический вывод количества таблиц, рисунков, формул и других объектов, что будет показано ниже. Ключ «h» увеличивает значение переменной в том месте, где задано поле, не отображая само поле. Использование ключей «h» и «c» совместно, очевидно, допустимо, но не имеет смысла. Автор рекомендует воздержаться от подобного.

Примеры использования ключей поля SEQ

{ SEQ pic h }, { SEQ tables c }

SET

Поле SET устанавливает закладку в данном месте документа.

Пример использования поля SET

{ SET lit_Z2009 “1” }

Здесь lit_Z2009 – имя закладки, а «1» – текст закладки. Наиболее существенным является возможность использования вложенных полей, т.е. полей внутри полей. В частности, их можно использовать в качестве текста закладки. Для этого надо вставить поле вышеописанным способом, находясь внутри поля.

Пример

{ SET lit_Z2009 “{SEQ lit c}” }

REF

Поле REF используется для создания ссылок и гиперссылок на закладки. Если закладка была определена где-либо в тексте, то сослаться на неё можно, например, так:

После обновления данного поля на его место будет вставлен текст закладки. Ключ «h» используется для задания гиперссылки на закладку. При нажатии на гиперссылку пользователь будет перемещён в место, заданное ссылкой. Ключ «* MERGEFORMAT» сбрасывает формат текста исходной ссылки, преобразуя его в формат текущей части текста.

PAGEREF

Поле PAGEREF работает так же, как и поле REF, за тем исключением, что текстом ссылки является номер страницы, на котором находится соответствующий объект, а не номер объекта.

Организация автоматической нумерации в документах

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

Нумерация в названиях глав и разделов

Для названия глав и разделов можно воспользоваться стилями MS Word, после чего вставить автооглавление. Тем не менее, если вторая глава вдруг станет третьей или раздел 2.2 станет разделом 2.3, то перенумерация большого числа формул, таблиц и рисунков окажется хлопотным делом. Особые трудности вызовет перенумерация списка литературы, организованного в порядке появления. Чтобы избежать вышеописанного, рекомендуется задать каждой главе уникальное имя (исходя, вероятно, из её смысла). Кроме того, для глав необходимо определить уникальную переменную – имя поля SEQ. Например, именем настоящей главы может быть CHAP_USING_FIELDS, а переменная-счётчик глав – CHAP.

После определения того, как именовать и нумеровать главы, в заголовке пишется следующая (одна из следующих) строка:

  1. { SEQ CHAP }. Организация автоматической нумерации в документах
  2. { SEQ CHAP h }{ SET CHAP_USING_FIELDS “{ SEQ CHAP c }”}{ SEQ CHAP c }. Организация автоматической нумерации в документах

Разберём эти строки подробнее. Первая строка приводит к тому, что значение переменной CHAP увеличивается на единицу. После обновления поля, на его месте появится текущий номер главы. Такой способ нумерации подходит для объектов, ссылка на которые не планируется в тексте (например, для промежуточных формул). Если же требуется ссылка на объект, то необходимо использовать вторую конструкцию. В ней первое поле увеличивает значение переменной CHAP без вывода на экран, второе поле устанавливает закладку с именем CHAP_USING_FIELDS, задавая ей текст третьего поля – текущего значения (уже увеличенной на 1) переменной CHAP, а четвёртое поле выводит в данном месте текущее значение (уже увеличенной на 1) переменной CHAP. Следует обратить внимание на то, что третье поле вложено во второе поле. Такая конструкция используется потому, что нет чёткого понимания, какое поле обновится раньше и в каком случае – вложенное или идущее после, если бы только у одного из них был ключ «c». Опыт показал, что увеличение переменной в фоновом режиме и использование текущего значения приводит к желаемому результату. На этом приёме и построены все дальнейшие рассуждения.

Для нумерации разделов внутри главы необходимо задать переменную (уникальную для каждой главы, иначе в следующей главе разделы начнутся с номера n+1), а для каждого раздела необходимо определить уникальное имя.

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

{ SEQ CHAP h } { SET CHAP_USING_FIELDS “{ SEQ CHAP c }”}{ SEQ CHAP c }. Организация автоматической нумерации в документах
{ SEQ SUBCHAP_FIELDS h }{ SET SUBCHAP_USING_REF “{ SEQ CHAP c }.{ SEQ SUBCHAP_FIELDS c }”}{ SEQ CHAP c }.{ SEQ SUBCHAP_FIELDS c }. Использование REF

После обновления ссылок этот фрагмент текста превратится в
3. Организация автоматической нумерации в документах
3.1. Использование REF

В данном примере используется второй приём, описанный в нумерации глав, только теперь вложенными и идущими после оказываются два поля. Первое поле { SEQ SUBCHAP_FIELDS h } в фоновом режиме обновляет соответствующую переменную, определённую под разделы данной главы, поля 2-4 { SET SUBCHAP_USING_REF “{ SEQ CHAP c }.{ SEQ SUBCHAP_FIELDS c }”} задают ссылку со значением «ТЕКУЩАЯ ГЛАВА.ТЕКУЩИЙ РАЗДЕЛ», а поля 5-6 { SEQ CHAP c }.{ SEQ SUBCHAP_FIELDS c } вставляют в данное место документа значение «ТЕКУЩАЯ ГЛАВА.ТЕКУЩИЙ РАЗДЕЛ».
Следует ещё раз повторить, что для каждой главы и раздела (подглавы, параграфа) необходимо определить свои уникальные имена для задания ссылок на них, если это необходимо.

Автосодержание

Средства MS Word позволяют организовать автосодержание, однако рекомендуется использовать поля REF для задания ссылок на номера глав и поля PAGEREF для ссылок на страницы. Располагать их лучше в таблицах со скрытыми границами размера Nx3, где N — число элементов в автосодержании: разделы, подразделы и пр. В первом столбце будут содержаться номера пунктов, получаемые из полей REF. Во втором столбце будут содержаться имена элементов. (Увы и ах! Их придётся записать руками). В третьем столбце будут содержаться номера страниц, на которых находится соответствующее поле SET. Получение значений производится через PAGEREF.

Нумерация формул

Для нумерации формул нужно использовать те же конструкции, что и для нумерации глав и подразделов. Автор рекомендует размещать формулы в таблицах Nx2, где N – число формул, следующих подряд, скрывая границы таблиц и выставляя нужное выравнивание.

Пример показан здесь

x = a + b (3.5)

Здесь (3.5) – это значение поля, которое в исходных кодах записывается следующим образом:
({ SEQ FN_CHAP_FIELDS h }{ SET FN_AX2_BX_C “{ SEQ CHAP c }.{ SEQ FN_CHAP_FIELDS c }”}{ SEQ CHAP c }.{ SEQ FN_CHAP_FIELDS c })
Здесь FN_CHAP_FIELDS – имя переменной для нумерации формул текущей главы, { SEQ CHAP c }.{ SEQ FN_CHAP_FIELDS c } – номер соответствующей формулы.

NB! При конвертации документа в pdf формулы часто отображаются неверно. В финальной версии диссертации автор заменил все формулы соответствующими рисунками через старый-добрый PrintScreen – MS Paint.

Нумерация таблиц и рисунков

Нумерация таблиц и рисунков делается так же, как и нумерация формул. Разница лишь в том, что соответствующим объектам лучше давать иные имена и придумывать для них другие переменные-счётчики, например, PIC_CHAP2, TABLE_BETTER_NPV и т.д.

Приведём пару примеров.

Пример 1, таблицы

Таблица { SEQ TAB_CH2 h }{ SET TAB_CH2_SHOPS “{ SEQ CHAP c }.{ SEQ TAB_CH2 c }”}{ SEQ CHAP c }.{ SEQ TAB_CH2 c }. Сравнение склад/рынок по магазинам.
Магазин 1 Магазин 2
Склад 100 180
Рынок 16 29

Здесь TAB_CH2 – переменная-счётчик таблиц второй главы, TAB_CH2_SHOPS – выбранное автором имя для данной таблицы. Пусть данная глава имеет номер 3, и в ней уже было 3 таблицы. Тогда данная формула, как несложно показать, будет преобразована в следующий текст:

Таблица 3.4. Сравнение склад/рынок по магазинам.
Магазин 1 Магазин 2
Склад 100 180
Рынок 16 29

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

Пример 2, изображения

Рисунок { SEQ PIC_CH2 h }{ SET PIC_CH2_EXPONENT “{ SEQ CHAP c }.{ SEQ PIC_CH2 c }”}{ SEQ CHAP c }.{ SEQ PIC_CH2 c }. Экспонента, косинус и синус.

Аналогично таблицам, здесь PIC_CH2 – переменная-счётчик рисунков второй главы. Опять же, очевидно, что в результате будет получено нечто подобное:

image
Рисунок 3.10. Экспонента, косинус и синус.

Организация списка используемой литературы

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

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

Итак, в тексте возникла необходимость сделать ссылку на книгу, статью, журнал и т.п. Если они должны идти единым списком, оформление следует делать подряд по алфавиту. Если они должны идти по типам источников, то нужно записывать сперва книги по алфавиту, потом статьи по алфавиту и т.д. В смысле автонумерации это не имеет значения. Важен лишь порядок, в котором эти источники будут записаны, после чего им будут присвоены номера.
NB! Каждому источнику надо задать уникальное имя, которое будет использоваться для задания ссылок в тексте. Автор при написании диссертации пользовался форматом «lit_ИНИЦИАЛЫ_АВТОРОВ_ГОД» или «lit_ИНИЦИАЛЫ_АВТОРОВ_ПОСТФИКС_ГОД». Постфикс нужен для того, чтобы разделить те или иные работы, которые автор(ы) мог выпустить в течение одного года. Храните этот список уникальных имён перед глазами, т.к. к нему придётся часто обращаться.
При добавлении новых источников достаточно лишь вставить их в нужное место списка используемой литературы, сохраняя порядок, и дважды обновить документ. Обновление дважды требуется для обновления вложенных полей и внешних полей. Двойное обновление документа гарантирует как обновление списка литературы, так и обновление ссылок на него.

Пример части списка с развёрнутыми формулами указан ниже

{ SEQ LIT h }{ SET lit_CHR2011 “{ SEQ LIT c }”}{ SEQ LIT c }. Christofides N. Graph Theory: An Algorithmic Approach. Academic Press Inc., London, 1975. – 400 p.
{ SEQ LIT h }{ SET lit_CHVATAL1983 “{ SEQ LIT c }”}{ SEQ LIT c }. Chvatal V. Linear Programming. W. H. Freeman and Company, 1983. – 425 p.
{ SEQ LIT h }{ SET lit_ERL1978 “{ SEQ LIT c }”}{ SEQ LIT c }. Erlenkotter D. A Dual-Based Procedure for Uncapacitated Facility Location. J. Operations Research, 26, 1978. – pp. 992-1009.

Нетрудно показать, что данный список преобразуется в
15. Christofides N. Graph Theory: An Algorithmic Approach. Academic Press Inc., London, 1975. – 400 p.
16. Chvatal V. Linear Programming. W. H. Freeman and Company, 1983. – 425 p.
17. Erlenkotter D. A Dual-Based Procedure for Uncapacitated Facility Location. J. Operations Research, 26, 1978. – pp. 992-1009.

Если между авторами Chvatal [16] и Erlenkotter [17] нужно вставить какую-либо работу, то всё, что требуется сделать, это добавить пустую строку, скопировать в неё уже имеющийся пункт литературы (например, Chvatal [16]), заменить уникальное имя работы, заменить текстовое описание работы и дважды обновить весь документ.

Оформление ссылок на элементы списка используемой литературы в тексте

Теперь, пожалуй, очевидно, как сделать ссылки на литературу в тексте.

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

Из решения классической задачи транспортного типа [{ REF lit_MEELIT1972 h }] следует, что любой базис такой задачи содержит ровно m+s-1 элементов. Из теоремы Данцига [{ REF lit_CHVATAL1983 h }] следует, что все элементы базиса в сформулированной задаче будут являться либо нулями, либо натуральными числами.

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

Из решения классической задачи транспортного типа [26] следует, что любой базис такой задачи содержит ровно m+s-1 элементов. Из теоремы Данцига [16] следует, что все элементы базиса в сформулированной задаче будут являться либо нулями, либо натуральными числами.

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

Если предыдущий метод оказался понятен, то оформление списка литературы в порядке появления также не составит особого труда. Ссылки, задававшиеся в конце, теперь надо размещать непосредственно в тексте. Если данный источник встретился впервые, то указать конструкцию вида [{ SEQ LIT h }{ SET lit_ERL1978 “{ SEQ LIT c }”}{ SEQ LIT c }, стр. 18]. Если данный источник уже встречался ранее, то указать конструкцию вида [{ REF lit_ERL1978 h }, стр. 95]. В сам список, разумеется, нужно помещать поля { REF lit_ERL1978 h } – ссылки на появления источников в тексте. Вся трудность заключается в ручной расстановке полных названий источников. Однако если где-то в тексте произойдут изменения в порядке появления ссылок, то (после двукратного обновления) это сразу отразится на порядке в списке литературы, что может быть быстро исправлено вырезанием и вставкой. Дополнительный плюс: проверка порядка следования источников в данном случае является «контрольной суммой». Ошибки в порядке следования либо отсутствуют, либо, если таковые будут иметь место, очевидны.

Выгрузка документа в формат pdf с сохранением ссылок

Ну вот, пожалуй, и финал данной истории. Документ готов. Можно заняться его распространением, но не хочется отдавать оригинал. Имеются два способа. Первый состоит в замене ссылок их значениями средствами MS Office. Достигается это нажатием Ctrl+Shift+F9, однако автор крайне не рекомендует так делать.

Куда более интересной является выгрузка документа в формат pdf. При выгрузке можно заменить поля значениями, разбив тем самым ссылки на объекты, или оставить их. Преимущество второго случая (зачем всё это вообще делалось) состоит в том, что при чтении текста читатель может нажать на ту или иную ссылку для перемещения к нужной формуле, таблице, рисунку или элементу списка литературы. Включить или выключить данную опцию можно при сохранении в pdf: Create bookmarks using: Word bookmarks.
image

Logo Море(!) аналитической информации!

2006 г.

Word и его объекты
Лекция из курса «Основы офисного программирования и документы Word»

Биллиг Владимир Арнольдович
Интернет-Университет Информационных Технологий, INTUIT.ru

Назад Оглавление Вперёд

Работа с полями документа

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

  1. Поля могут хранить в документе некоторую обновляемую информацию. Такими полями являются поля Date и Time из категории Date and Time, хранящие текущую дату и текущее время. В полях Author, FileName, KeyWords, NumPages и других полях из категории Document Information содержится подробная информация о документе авторе документа, файле, в котором он находится, числе занимаемых страниц. В полях UserName и UserAddress из категории User Information хранится информация о фамилии и адресе владельца компьютера, используемая по умолчанию для создания поля Author документа, для создания обратного адреса по умолчанию при работе с конвертами. Эта роль полей достаточно понятна. Ясно, как программно и вручную можно работать с такими полями. Заметим, что значения некоторых из упомянутых полей меняются автоматически, например, время, дата, число страниц документа (число страниц документа — 57, число символов — 149609, дата — 01.07.2006, время — 9:27 )

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

  2. Поля играют важную роль при создании документов с помощью слияния. Зачастую возникает необходимость создания группы однотипных документов, отличающихся лишь небольшими деталями. Типичным примером такого рода является группа рассылаемых писем, отличающихся адресом, названием компании и другими деталями. В этом случае создается главный документ, содержащий шаблон письма с полями и документ, хранящий источник данных. Поля главного документа задают переменную часть письма адрес, название компании и другие данные. Значения этих данных хранятся в источнике данных, который может быть таблицей Word, Access или Excel. Слияние главного документа с одной записью источника данных (строкой таблицы) приводит к появлению нового документа (письма). В слиянии могут участвовать как все записи источника данных, так и только часть из них, выбранная по запросу. В результате возникает необходимая совокупность писем. Имена полей в этом случае могут быть произвольными и представляют имена столбцов в таблице, задающей источник данных. Помимо этих полей в главном документе могут встречаться и поля Word из тех 9 категорий, о которых я уже говорил. В ситуациях слияния часто используются такие поля как Ask и Fill-In, позволяя в момент слияния запросить и добавить в документ индивидуальную информацию, не хранящуюся в записях источника данных. Поле Fill-In позволяет запросить данные при создании документа и сделать полученный ответ значением этого поля. Поле Ask работает аналогичным образом, за тем исключением, что ответ не становится значением поля, а связывается с некоторой создаваемой в этот момент закладкой. Затем эту закладку можно использовать в документе различными способами, принятыми для закладок. На деталях работы вручную останавливаться не буду, но пример такого главного документа приведу:

    Главный документ с полями разных типов
    Рис. 1.14.  Главный документ с полями разных типов

    Заметьте, поля в главном документе подсвечены и среди них есть как поля, заданные источником данных, так и общие для Word поля, Ask, Fill-In, Formula, Date. Вот как выглядит источник данных, с которым я проводил эксперименты:

    Источник данных для слияния документов

    увеличить изображение: увеличить изображение,
    Рис. 1.15.  Источник данных для слияния документов

    Чтобы картина была полной, взгляните на один из документов, полученных в результате слияния главного документа и источника данных:

    Документ, полученный слиянием главного документа и источника данных
    Рис. 1.16.  Документ, полученный слиянием главного документа и источника данных

  3. Еще одним видом документа Word, использующим поля, является электронная форма. Необходимость в таких документах возникает, например, при пересылке анкет по электронной почте. Получатель формы заполняет поля анкеты, которые могут быть элементами управления: обычными текстовыми окнами ввода, флажками или выпадающими списками. Как поля они имеют имена: FormTextBox, FormCheckBox, FormDropDown.
  4. Говоря о полях, нельзя не упомянуть о таком важном и интересном поле, как поле Formula, позволяющее организовывать вычисления в документах Word. Эти вычисления, чаще всего, организуются в ячейках таблиц Word, но могут быть вставлены и в произвольное место документа. Пример такого поля приведен в главном документе. Строятся формулы аналогично формулам Excel и могут работать как с закладками, используемыми в качестве имен переменных, так и с ячейками таблиц Word. При вычислениях можно использовать некоторые из встроенных функций, допустимых в Excel. Тема вычислений в документах Word , его таблицах заслуживает, конечно, более подробного освещения, чем эти несколько строчек. Но обо всем сказать, нам не дано.
  5. Есть и другие случаи применения полей в документах Word. Например, поля автоматически создаются при создании таблиц ссылок, о которых я рассказывал ранее.

Я постарался кратко описать достаточно сложную тему работы с полями в документах Word. Конечно, обычно работа с полями выполняется вручную. Вряд ли, например, есть смысл создавать документ слияния программным путем. Поэтому, говоря о программировании работы с полями, я ограничусь достаточно простыми примерами. В основе программной работы с полями лежит работа с коллекцией полей Fields(Field). В следующем примере анализируются (печатаются) основные свойства объекта Field:

Public Sub FieldsAnalise()
'Анализирует характеристики полей активного документа
   Dim MyField As Field
   With ActiveDocument
      Debug.Print "Число полей - ", .Fields.Count
      For Each MyField In .Fields
         With MyField
            Debug.Print "Код поля - ", .Code, _
            "Вид поля - ", .Kind, _
            "Тип поля - ", .Type, _
            "Результат поля - ", .Result
         End With
      Next MyField
   End With
End Sub

Листинг 1: html, txt

Приведем результаты отладочной печати для главного документа, имеющего обширную коллекцию полей разного типа:

Листинг 1: html, txt

Большинство полей в этом документе это поля слияния (MergeField), значения которых берутся из источника данных в момент слияния главного документа с записями источника данных. Обратите внимание, ситуация с полями напоминает ситуацию с ячейками Excel, с одной стороны в ячейке содержится формула (в поле код поля), с другой стороны вычисленное по формуле значение (результат поля). По желанию всегда можно включить просмотр в полях либо кода поля, либо результата. По умолчанию, также как и для ячеек Excel, показывается результат поля. Свойство Kind, которое для всех полей нашего документа имеет одинаковое значение, указывает на то, как происходит автоматическое обновление значения поля, имеет ли поле результат.

Для программного создания полей используется, как обычно, метод Add коллекции Fields. Он имеет следующий синтаксис:

Листинг 1: html, txt

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

Рассмотрим теперь пример программного добавления полей в документ. Я ограничусь достаточно простой ситуацией. Добавим в начало документа три поля, задающие автора документа, дату и время:

Листинг 1: html, txt

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

Листинг 1: html, txt

Работа с фрагментами

StoryRanges(Range) — эта коллекция представляет совокупность частей документа, называемых фрагментами (Story). Количество различных фрагментов документа фиксировано. Нельзя добавлять элементы в эту коллекцию обычным способом, используя метод Add. Фрагменты появляются в коллекции, когда создается соответствующая часть документа. В этот момент определяется и тип фрагмента. Фрагменты имеют тип, задаваемый константами из перечисления wdStoryType. Главный фрагмент, конечно, — текст документа, тип которого задается константой wdMainTextStory. Фрагментами других типов являются комментарии, ссылки, колонтитулы. Заметьте: сам фрагмент является объектом Range. Так что благодаря фрагментам можно, например, работать с коллекцией комментариев, как с единой областью.

Приведем пример, где анализируются типы фрагментов активного документа:

Листинг 1: html, txt

Тестовый документ состоит из фрагментов четырех типов, так как он, кроме текста, содержит комментарии и два типа ссылок. Вот результаты отладочной печати:

Начало текста:				Vladimir Billig
Подстраничные ссылки:		 документ DocTwo используется для экспериментов.
Концевые ссылки:		документ DocThree используется для экспериментов.
Комментарии:	Page: 2	Программный проект этого документа содержит примеры главы 1

Листинг 1: html, txt

Переменные, которые живут долго

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

Однако и локальные и глобальные переменные «умирают» по окончании сеанса работы. Для того чтобы сохранять данные между сеансами работы, необходимо использовать файлы, базы данных и другие внешние источники даных. Замечу, что, конечно, есть еще возможность хранить данные, как часть самого документа, например, в таблицах Word или Excel. Но сейчас мы поговорим еще об одной интересной возможности, предоставляемой при работе с офисными документами. С каждым из документов можно связать коллекцию переменных типа Variant коллекцию Variables(Variable). Эта коллекция для программистов важна — ведь время жизни входящих в нее переменных совпадает со временем жизни документа. По существу речь идет о некотором специальном файле переменных, жестко связанном с самим документом и хранящимся вместе с ним. Тем самым появляется возможность сохранять информацию о работе документе между сеансами. Применения этого полезного средства могут быть самыми разными. Можно сохранять предпочтения, сделанные пользователем при первом сеансе работы с документом, различные настройки документа и так далее. Другое применение связано с предоставлением документа во временное владение с ограничением числа возможных запусков. Например, можно иметь счетчики, подсчитывающие количество вызовов некоторой процедуры и в зависимости от значения счетчика по-разному определять дальнейшую работу с данным документом. Переменные, входящие в коллекцию Variables, создаются не так, как обычные переменные, нет необходимости в их описании в разделе объявлений какого либо модуля. Они имеют фиксированный тип Variant и создаются методом Add, типичным для создания элементов коллекций. Этот метод имеет достаточно прозрачный синтаксис:

Листинг 1: html, txt

В момент создания задается имя переменной и, возможно, инициализирующее ее значение. Тип, как я уже говорил, установлен по умолчанию.

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

Public Sub CreateVar()
   'Создание переменных - хранителей информации
   With ActiveDocument.Variables
      If Not ExistVar("Counter") Then
         'Добавляем переменную
         .AddName:="Counter", Value:=0
      End If
   End With

End Sub

Public Function ExistVar(Name As String) As Boolean
   'Определяет наличие переменнойName в коллекции Variables
   Dim MyVar As Variable
   ExistVar = False
   For Each MyVar In ActiveDocument.Variables
      If MyVar.Name =Name Then
         ExistVar = True: Exit For
      End If
   Next MyVar
End Function

Листинг 1: html, txt

При попытке повторного добавления одной и той же переменной в коллекцию Variables возникает ошибка. В тоже время процедура, в которой происходит добавление, может выполняться многократно. Поэтому я предусматриваю соответствующую проверку на существование переменной с заданным именем в коллекции Variables. Может возникнуть вопрос, куда поместить процедуру CreateVar, создающую переменную. Я поместил ее в процедуру, обрабатывающую событие «Open» документа, но можно упрятать этот вызов и более глубоко. Рассмотрим теперь, как происходит работа с переменной Counter:

Public Sub CheckCounter()
   Const Limit = 10
   'Счетчик Counter может быть использован в любой процедуре,
   'позволяя следить за числом ее выполнения
   With ActiveDocument
      If .Variables("Counter") > Limit Then
         'Исчерпан лимит нормальной работы демо-версии
         Call MsgBox("Исчерпан лимит работы демо-версии", _
               vbCritical, "Конец работы!")
      Else ' продолжаем нормальную работу
         Dim myLocal As Integer
         'Локальные переменные могут работать с глобальным счетчиком
         myLocal = .Variables("Counter")
         Debug.Print "Счетчик = "; myLocal
         
         'В конце работы увеличиваем значение счетчика
         myLocal = myLocal + 1
         .Variables("Counter") = myLocal
      End If
   End With
End Sub

Листинг 1: html, txt

Экспериментируя с тестовым документом, я открывал и закрывал его многократно, время от времени, вызывая процедуру CheckVar. После 11 ее запусков нормальное выполнение было прервано и выдалось предупреждающее сообщение:

Документ в момент выдачи предупреждающего сообщения.

увеличить изображение: увеличить изображение,
Рис. 1.17.  Документ в момент выдачи предупреждающего сообщения.

Назад Оглавление Вперёд


Обратная связь
Информация для авторов

Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum

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

Like this post? Please share to your friends:
  • Word перекрестные ссылки на формулы
  • Word перенос одной строки на другую
  • Word перекрестные ссылки на закладки
  • Word перенос названия таблицы на следующую страницу
  • Word перекрестная ссылка текста