Автоматическое обновление полей (Microsoft Word)
Уильяму нужно вставить имя файла в таблицу, которая находится в текстовом поле в нижнем колонтитуле документа (это требуется от клиента).
Он хочет, чтобы это имя файла автоматически обновлялось каждый раз, когда он сохраняет документ, или, по крайней мере, когда он использует «Сохранить как» для создания нового файла.
Уильям вставил поле FILENAME, но ему все равно нужно не забыть открыть нижний колонтитул, щелкнуть там и нажать F9, чтобы обновить его. Он предпочел бы, чтобы это делалось автоматически.
Исторически Word создавался с учетом того, что ваши документы в конечном итоге будут напечатаны. (Это было до того времени, когда большинство задач выполнялось онлайн, в электронном виде.) Один из артефактов, связанных с этим историческим пониманием, заключается в том, что Word не обновляет поля, пока вы не пойдете на печать. Таким образом, поля не обновляются при выполнении других задач, таких как сохранение или использование «Сохранить как».
Помня об этом, вы можете сделать несколько вещей. Во-первых, заставить Word думать, что вы печатаете. Однако перед этим «обманом» вы должны выполнить следующие шаги:
-
Откройте диалоговое окно «Параметры Word». (В Word 2007 нажмите кнопку «Office», а затем выберите «Параметры Word». В Word 2010 и более поздних версиях откройте вкладку «Файл» на ленте и нажмите «Параметры».)
-
В левой части диалогового окна нажмите «Показать». (См. Рис. 1.)
-
Убедитесь, что установлен флажок «Обновить поля перед печатью».
-
Щелкните «Дополнительно» в левой части диалогового окна.
-
Прокрутите вниз, пока не увидите раздел Печать. (См. Рис. 2.)
-
Убедитесь, что установлен флажок Разрешить поля, содержащие отслеживаемые изменения, обновлять перед печатью.
-
Нажмите ОК, чтобы сохранить изменения.
Теперь все, что вам нужно сделать, когда вы хотите обновить поля, — это нажать Ctrl + P. Откроется диалоговое окно «Печать» (Word 2007) или параметры печати (более поздние версии Word). Как только вы дойдете до этого момента, поля в документе должны быть обновлены, потому что Word ожидает, что вы собираетесь печатать. Вы можете нажать клавишу Esc или щелкнуть вкладку «Главная» на ленте, чтобы отказаться от печати, и вы должны отметить, что все поля в вашем документе обновляются.
Вы также можете использовать макрос для выполнения этих задач. Следующий макрос не изменяет настройки в диалоговом окне «Параметры Word», но выполняет последовательность печати ровно настолько, что заставляет Word обновить поля.
Sub UpdateAllFields() With ActiveDocument .PrintPreview .ClosePrintPreview End With End Sub
При желании вы можете воспользоваться другим макро-подходом. Этот подход позволяет обойти любые уловки и, вместо этого, пройти через каждую из «историй»
в документе и обновляет все поля, найденные в этих историях. («Историю»
лучше всего рассматривать как слой в вашем документе. Главный документ — это одна история, верхние и нижние колонтитулы — другая, графика — другая и т. Д.) На самом деле в этом подходе используются два макроса; вы должны запустить макрос UpdateAllFields, чтобы начать процесс обновления.
Sub UpdateAllFields() Dim objStory As Range Dim objTOC As TableOfContents Dim objTOA As TableOfAuthorities Dim objTOF As TableOfFigures Dim objIndex As Index Application.ScreenUpdating = False Application.DisplayAlerts = wdAlertsNone For Each objStory In ActiveDocument.StoryRanges UpdateFieldsInStory objStory While Not (objStory.NextStoryRange Is Nothing) Set objStory = objStory.NextStoryRange UpdateFieldsInStory objStory Wend Next For Each objTOC In ActiveDocument.TablesOfContents objTOC.Update Next For Each objTOA In ActiveDocument.TablesOfAuthorities objTOA.Update Next For Each objTOF In ActiveDocument.TablesOfFigures objTOF.Update Next For Each objIndex In ActiveDocument.Indexes objIndex.Update Next Application.DisplayAlerts = wdAlertsAll Application.ScreenUpdating = True End Sub
Private Sub UpdateFieldsInStory(iobjStory As Range) Dim objShape As Shape With iobjStory .Fields.Update Select Case .StoryType Case wdMainTextStory, wdPrimaryHeaderStory, _ wdPrimaryFooterStory, wdEvenPagesHeaderStory, _ wdEvenPagesFooterStory, wdFirstPageHeaderStory, _ wdFirstPageFooterStory For Each objShape In .ShapeRange With objShape.TextFrame If .HasText Then .TextRange.Fields.Update End With Next End Select End With End Sub
Если вы хотите узнать больше об обновлении полей с помощью макросов, вы можете посетить эту страницу на сайте Грега Макси; обратите особое внимание на раздел «Обновление полей»:
http://gregmaxey.mvps.org/word_tip_pages/word_fields.html
Как вы понимаете, не всегда просто обновить все поля в документе. Казалось бы, Microsoft легко могла бы добавить такую возможность, но даже после многих лет работы в Word такая возможность все еще отсутствует. Если вы хотите, чтобы Microsoft добавила эту возможность, вы можете посетить их форум UserVoice и проголосовать за такую возможность:
https://word.uservoice.com/forums/304924-word-for-windows-desktop-application/suggestions/11685894
_Примечание: _
Если вы хотите знать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах WordTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / wordribbon-WordTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
WordTips — ваш источник экономичного обучения работе с Microsoft Word.
(Microsoft Word — самая популярная программа для обработки текстов в мире.) Этот совет (13475) относится к Microsoft Word 2007, 2010, 2013 и 2016.