Статьи из блога

Статьи из блога

Автоматическое обновление полей при открытии документа

Рубрика: Макросы, Стили и форматирование
Метки: | |
Вторник, 25 марта 2008 г.
Просмотров: 24408
Подписаться на комментарии по RSS
Версия для печати

[Ссылки на статью]

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

 

Однако редактор Word не имеет стандартных возможностей обновления всех полей в документе одновременно и без лишних мышедвижений (если не считать использование сочетаний клавиш для выделения всего текста - «Ctrl+A» и последующего обновления с помощью клавиши «F9»).

 

Тем не менее, есть решение: можно воспользоваться специальным макросом, который будет автоматически обновлять все ваши поля при каждом открытии документа.

 

Для этого разместите приведенный ниже код макроса в ваш шаблон Normal.dot (Normal.dotm), на основе которого вы создаете свои документы, или в конкретный документ (P.S.: макрос обновлен 27.03.2008, так как Оглавление в документе не обновлялось, если это не сделать явным образом).

 

Sub AutoOpen()
'Автообновление всех полей документа при его открытии
Dim aStory As Range
Dim aField As Field
Dim myTOC As TableOfContents
For Each aStory In ActiveDocument.StoryRanges
  For Each aField In aStory.Fields
    aField.Update
  Next aField
Next aStory
For Each myTOC In ActiveDocument.TablesOfContents
   myTOC.Update
Next myTOC
End Sub

Если вы желаете обновлять поля вручную, то измените наименование макроса, создайте для него кнопку и разместите ее на панели инструментов (для Word 2003) или на панели быстрого доступа (для Word 2007).

 

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

Создание макроса из готового кода

Автоматическая запись макроса

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru rutvit.ru myspace.com technorati.com digg.com friendfeed.com pikabu.ru blogger.com liveinternet.ru livejournal.ru memori.ru google.com bobrdobr.ru mister-wong.ru yahoo.com yandex.ru del.icio.us

Еще записи по вопросам использования Microsoft Word:

Комментариев: 7

  1. vorky
    31.07.2008 в 19:28 | #1

    Имеется колонтитул в котором нумерация страниц и поле - "имя файла". К сожалению ваш код не помог обновить поля в колонтитуле

  2. vorky
    31.07.2008 в 19:50 | #2

    При включении макросов код заработал. вопрос снят :)

  3. Veryprosto
    22.05.2009 в 07:10 | #3

    Панель инструментов

    Слияние(появится встроеное меню)

    кнопка с желтым конвертом. "Выбрать тип документа"

    точка должна(как правила там и стоит) стоять на "Обычный документ word"

    ОК.

    все обновляется. 100%

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

  4. Oasisby
    02.03.2010 в 14:11 | #4

    У меня не обновляются поля в колонтитулах. В тексте теже поля обновляются. как это можно исправить?

  5. 02.03.2010 в 14:44 | #5

    Ищем через поиск по сайту:

    Макрос обновления полей в колонтитулах

  6. Oasisby
    02.03.2010 в 16:24 | #6

    Пошерстил wordexpert и составил макрос обновляющий все и во всем поля:

    Sub RegenPoley()
    'Автообновление всех полей документа при его открытии
    Dim aStory As Range
    Dim aField As Field
    Dim myTOC As TableOfContents
    For Each aStory In ActiveDocument.StoryRanges
      For Each aField In aStory.Fields
        aField.Update
      Next aField
    Next aStory
    For Each myTOC In ActiveDocument.TablesOfContents
       myTOC.Update
    Next myTOC
    'Обновление полей в надписях, содержащихся в колонтитулах
    Application.ScreenUpdating = False
    ActiveDocument.PrintPreview
    ActiveDocument.ClosePrintPreview
    Application.ScreenUpdating = True
    End Sub

    Спасибо всем за помощь!

  7. 02.03.2010 в 17:16 | #7

    Поскольку поля обновляются перед предварительным просмотром, то можно сделать так:

    Sub UpdateAllFields()
      Application.ScreenUpdating = False
      ActiveDocument.PrintPreview
      ActiveDocument.ClosePrintPreview
      Application.ScreenUpdating = True
    End Sub

Оставьте комментарий!

(обязательно)

^ Наверх