Тим создал простой макрос для обновления всех полей в шаблоне. Макрос включает шаг, который выбирает весь документ, как при нажатии Ctrl + A. На этом шаге не выбираются верхние и нижние колонтитулы, и Тим опасается, что в этих местах могут быть поля, которые нужно обновить. Он задается вопросом, есть ли способ включить верхние и нижние колонтитулы при выборе всего, или есть ли другой способ для его макроса обновить поля в областях верхнего или нижнего колонтитула.

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

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

Sub MyUpdateFields1()

ActiveDocument.StoryRanges(wdMainTextStory).Fields.Update     ActiveDocument.StoryRanges(wdPrimaryFooterStory).Fields.Update     ActiveDocument.StoryRanges(wdPrimaryHeaderStory).Fields.Update End Sub

Обратите внимание, что разные слои документа называются «историями» и хранятся в их собственной коллекции. Хотя этот простой макрос очень быстро обновляет поля в историях, содержащие основной текст, нижние колонтитулы и заголовки, есть и другие истории (слои)

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

Sub MyUpdateFields2()

Dim story As Word.Range

For Each story In ActiveDocument.StoryRanges         Do             story.Fields.Update             ' Check linked stories as linked stories are not independent             Set story = story.NextStoryRange         Loop Until (story Is Nothing)

Next End Sub

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

Sub MyUpdateFields3()

Dim doc As Document ' Pointer to Active Document     Dim wnd As Window ' Pointer to Document's Window     Dim lngMain As Long ' Main Pane Type Holder     Dim lngSplit As Long ' Split Type Holder     Dim lngActPane As Long ' ActivePane Number     Dim rngStory As Range ' Range Objwct for Looping through Stories     Dim TOC As TableOfContents ' Table of Contents Object     Dim TOA As TableOfAuthorities 'Table of Authorities Object     Dim TOF As TableOfFigures 'Table of Figures Object     Dim shp As Shape

' Set Objects     Set doc = ActiveDocument     Set wnd = ActiveDocument.ActiveWindow

' get Active Pane Number     lngActPane = wnd.ActivePane.Index

' Hold View Type of Main pane     lngMain = wnd.Panes(1).View.Type

' Hold SplitSpecial     lngSplit = wnd.View.SplitSpecial

' Get Rid of any split     wnd.View.SplitSpecial = wdPaneNone

' Set View to Normal     wnd.View.Type = wdNormalView

' Loop through each story in doc to update     For Each rngStory In doc.StoryRanges         If rngStory.StoryType = wdCommentsStory Then             Application.DisplayAlerts = wdAlertsNone             ' Update fields             rngStory.Fields.Update             Application.DisplayAlerts = wdAlertsAll         Else            ' Update fields            rngStory.Fields.Update         End If     Next

For Each shp In doc.Shapes         With shp.TextFrame             If .HasText Then                 shp.TextFrame.TextRange.Fields.Update             End If         End With     Next

' Loop through TOC and update     For Each TOC In doc.TablesOfContents         TOC.Update     Next

' Loop through TOA and update     For Each TOA In doc.TablesOfAuthorities         TOA.Update     Next

' Loop through TOF and update     For Each TOF In doc.TablesOfFigures         TOF.Update     Next

' Return Split to original state     wnd.View.SplitSpecial = lngSplit

' Return main pane to original state     wnd.Panes(1).View.Type = lngMain

' Active proper pane     wnd.Panes(lngActPane).Activate

' Close and release all pointers     Set wnd = Nothing     Set doc = Nothing End Sub

WordTips — ваш источник экономичного обучения работе с Microsoft Word.

(Microsoft Word — самая популярная программа для обработки текстов в мире.) Этот совет (522) применим к Microsoft Word 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Word (Word 2007 и позже) здесь:

link: / wordribbon-Including_Headers_and_Footers_when_Selecting_All [Включая верхние и нижние колонтитулы при выборе всего].