Word docvariable как изменить

Для версии 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: » не мог исправить ничего, кроме данных форм…

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

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

Pоwerеd by рhpВB © 2001, 2005 рhpВB Grouр
Русская поддержка phрВB

ИТ-записки Чорнага кашака

Язык программирования самого высокого уровня содержит всего несколько команд для управления программистами

15 мар. 2010 г.

Использование полей и закладок при работе с MS Word из Delphi

В предыдущей заметке «Поиск и замена текста в документе MS Word из Delphi» я рассказывал, как дорабатывал старый модуль, который генерирует клиентам компании письма в формате MS Word с помощью поиска и замены текста. Сдав модуль заказчикам, я в свободное от работы время, переделал его. Вместо поиска и замены использовал поля с переменными (DocVariable).
В шаблон письма с помощью макроса добавил переменные

Sub AddFields()
ThisDocument.Variables.Add «FIO», «FIO»
ThisDocument.Variables.Add «ADDRESS», «ADDRESS»
.
End Sub

и расставил поля по тексту шаблона. В макросе у метода Add первый параметр – название переменной, а второй – ее значение. Я специально сделал их одинаковыми, чтобы пользователям было проще и нагляднее редактировать шаблоны.
Затем внес изменения в методы модуля работающие с MS Word. Если опустить все детали и различную логику, то упрощенно работа с MS Word выглядит так:

Var
wa: WordApplication;
ovDotName, ovFileName: OleVariant;
i: Integer;
q: TSDQuery;
.
begin
.
wa := CreateComObject(CLASS_WordApplication) as _Application;
ovDotName := ‘какой то шаблон.dot’;
wa.Documents.Add(ovDotName, EmptyParam, EmptyParam, EmptyParam);

For i := 0 to q.FieldCount-1 do
MSWordSetVariable(q.Fields[i].FieldName, q.Fields[i].AsString);
.
ovFileName := ‘письмо любимому клиенту.doc’;
wa.ActiveDocument.SaveAs(ovFileName, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
.

Вот такая логика у индусов, писавших этот кусок MS Word.

После присвоения значений всем переменным, осталось только дать команду полям обновиться новыми значениями переменных. Для этого в VBA у коллекции объектов полей (Fields) есть метод Update:

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

У каждого структурного элемента документа (заметки, колонтитула, сноски и т.д.) своя коллекция объектов полей, поэтому, если документ, как у меня, состоит из разных структурных элементов, то методы Update и Unlink необходимо вызвать для каждого из этих элементов. Для этого перебираем все элементы коллекции StoryRanges.

procedure MSWordUpdateStoryRanges;
Var
StoryRanges: Word2000.StoryRanges;
StoryRange: Word2000.Range;
iStoryIndex: integer;
Begin
StoryRanges := wa.ActiveDocument.StoryRanges;
For iStoryIndex := wdMainTextStory to wdFirstPageFooterStory do
Try
StoryRange := StoryRanges.Item(iStoryIndex);
If StoryRange <> nil then
begin
StoryRange.Fields.Update;
StoryRange.Fields.Unlink;

While (StoryRange.NextStoryRange <> nil) do
begin
StoryRange := StoryRange.NextStoryRange;
StoryRange.Fields.Update;
StoryRange.Fields.Unlink;
end;
end;
Except
StoryRange := nil;
End;
End;

И вызываю ее перед сохранением документа.

Все бы ничего, но часть текста передаваемого из программы в MS Word необходимо было выводить жирным шрифтом. А это через переменные не сделать 🙁 В подобном случае «поиск и замену текста» можно заменить на «переход к закладке и вывод текста». Например, в шаблон вставляем закладку с именем ‘писать текст сюда’, а в программе пишем:

Вот и все 🙂
Раннее связывание и использование полей/закладок дало существенный рост скорости генерации писем. Если на 500-х различных документах этого было почти не заметно, то при генерации 15 000 документов, прирост скорости составил 30% (специально проверил несколько раз на одних и тех же исходных данных).

Оценка статьи:

2 звезды3 звезды4 звезды5 звезд5 звезд

Загрузка…

Adblock
detector

    msm.ru

    Нравится ресурс?

    Помоги проекту!

    Популярные разделы FAQ:    user posted image Общие вопросы    user posted image Особенности VBA-кода    user posted image Оптимизация VBA-кода    user posted image Полезные ссылки


    1. Старайтесь при создании темы указывать в заголовке или теле сообщения название офисного приложения и (желательно при работе с Office 95/97/2000) его версию. Это значительно сократит количество промежуточных вопросов.
    2. Формулируйте вопросы как можно конкретнее, вспоминая (хотя бы иногда) о правилах ВЕЛИКОГО И МОГУЧЕГО РУССКОГО ЯЗЫКА, и не забывая, что краткость — сестра таланта.
    3. Не забывайте использовать теги [сode=vba] …текст программы… [/code] для выделения текста программы подсветкой!
    4. Темы с просьбой выполнить какую-либо работу полностью за автора здесь не обсуждаются и переносятся в раздел ПОМОЩЬ СТУДЕНТАМ.

    >
    Работа с полями(WORD)
    , никак не пойму как сделать…

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему



    Сообщ.
    #1

    ,
    18.03.08, 07:33

      Есть документ, в нем есть поля. Допустем вот содержание:
      Имя {DOCVARIABLE str1 * MERGEFORMAT}
      Номер {DOCVARIABLE str2 * MERGEFORMAT}
      как мне из VB вместо str1 и str2 вставить свое значени? Получить я могу, а вот как свое воткнуть…

      Profi

      Old Bat



      Сообщ.
      #2

      ,
      18.03.08, 12:42

        Moderator

        *****

        Рейтинг (т): 128

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

        ExpandedWrap disabled

          ActiveDocument.Variables(x).Delete

          ActiveDocument.Variables.Add …


        Bubaylo



        Сообщ.
        #3

        ,
        18.03.08, 12:44

          Old Bat
          А как мне быть в моем случае? :
          Имя str1
          Номер str2

          как мне разместить эти переменные напротив нужной строки и предовать им мои значения?

          Profi

          Old Bat



          Сообщ.
          #4

          ,
          18.03.08, 12:56

            Moderator

            *****

            Рейтинг (т): 128

            для изменения значения работай с переменными как описано выше, затем вставляй соотв. поле в документ (Вставка-поле..), в качестве имени DOCVARIABLE указывай имя созданной переменной


            Bubaylo



            Сообщ.
            #5

            ,
            18.03.08, 13:44

              Old Bat
              Т.е. мне нужно сначала в самом документе созать переменную, потом ее связать с полем или можно просто добавить переменную к документу, а потом их связать? Правильно?

              Я весь мозг себе уже взорвал…

              Profi

              Old Bat



              Сообщ.
              #6

              ,
              18.03.08, 15:59

                Moderator

                *****

                Рейтинг (т): 128

                Цитата Bubaylo @ 18.03.08, 13:44

                нужно сначала в самом документе созать переменную, потом ее связать с полем

                Member

                kosten



                Сообщ.
                #7

                ,
                05.11.14, 14:23

                  Подниму тему.
                  Коллеги, подскажите, как получить список всех DocVariable документа?

                  Monster

                  Akina



                  Сообщ.
                  #8

                  ,
                  05.11.14, 15:01

                    А перебрать коллекцию ActiveDocument.Variables не судьба? у каждого итема есть свойства Name и Value, читай не хочу…

                    Member

                    kosten



                    Сообщ.
                    #9

                    ,
                    06.11.14, 18:16

                      Цитата Akina @ 05.11.14, 15:01

                      А перебрать коллекцию ActiveDocument.Variables не судьба? у каждого итема есть свойства Name и Value, читай не хочу…

                      Спасибо.
                      Я не знаток VBA поэтому и спрашиваю про элементарные вещи.

                      Monster

                      Akina



                      Сообщ.
                      #10

                      ,
                      07.11.14, 05:44

                        ExpandedWrap disabled

                          Dim var As Variable

                          For Each var In ActiveDocument.Variables

                            Debug.Print var.Name, var.Value

                          Next

                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                        0 пользователей:

                        • Предыдущая тема
                        • VB for Application
                        • Следующая тема

                        Рейтинг@Mail.ru

                        [ Script execution time: 0,0311 ]   [ 16 queries used ]   [ Generated: 14.04.23, 20:45 GMT ]  

                        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

                        Понравилась статья? Поделить с друзьями:
                      • Word documents to pdf free
                      • Word documents to jpg
                      • Word documents page numbers
                      • Word editor for website
                      • Word editor for free