yshindin пишет:Я отправил Evgen238 еще два макроса (в макросе, что я применяю в своей практике, я использую оба подхода):
Ваш второй макрос, назначение которого залазить в колонтитулы и обновлять в них все поля, не обновляет поля в надписях. Это наглядно видно, если заменить .Update на .Unlink; перекрестные ссылки в надписях остаются серыми (если включено затенение полей).
А вот первый макрос обновляет поля в надписях, но только он не обрабатывает колонтитулы.
Обновление полей «на стероидах», по вашей ссылке, работает отлично и обновляет поля как тексте документа, так и в колонтитулах, внутри и вне надписей. Непонятно, почему вы не используете это «стероидное» обновление, и вместо одного макроса используете два, второй из которых не полностью выполняет свои обязанности (вне надписей он все же работает, вроде).
Теперь по делу
Макрос "на стероидах" обновляет все поля, кроме оглавления (поле TOC). На всякий случай приведу этот макрос здесь:
Public Sub UpdateAllFieldsOnSteroids()
' Обновление всех полей "на стреоидах" в тексте и в колонтитулах, внутри и вне надписей
'http://www.vbaexpress.com/kb/getarticle.php?kb_id=1100
Dim rngStory As Word.Range
Dim lngJunk As Long
Dim oShp As Shape
lngJunk = ActiveDocument.Sections(1).Headers(1).Range.StoryType
For Each rngStory In ActiveDocument.StoryRanges
'Iterate through all linked stories
Do
On Error Resume Next
rngStory.Fields.Update
Select Case rngStory.StoryType
Case 6, 7, 8, 9, 10, 11
If rngStory.ShapeRange.Count > 0 Then
For Each oShp In rngStory.ShapeRange
If oShp.TextFrame.HasText Then
oShp.TextFrame.TextRange.Fields.Update
End If
Next
End If
Case Else
'Do Nothing
End Select
On Error GoTo 0
'Get next linked story (if any)
Set rngStory = rngStory.NextStoryRange
Loop Until rngStory Is Nothing
Next
End Sub
А вот этот макрос обновляет поля TOC разных видов (оглавление или перечни):
Sub UpdateRefTables()
' Обновление оглавлений и перечней рисунков и таблиц
'http://www.office-forums.com/threads/vba-to-update-toc.1861901/
Dim TOC As TableOfContents ' Table of Contents Object
Dim TOA As TableOfAuthorities ' Table of Authorities Object
Dim TOF As TableOfFigures ' Table of Figures Object
With ActiveDocument
' The following routines update TOC, TOA or TOF contents.
' Loop through Tables Of Contents and update
For Each TOC In .TablesOfContents
TOC.Update
Next
' Loop through Tables Of Authorities and update
For Each TOA In .TablesOfAuthorities
TOA.Update
Next
' Loop through Tables Of Figures and update
For Each TOF In .TablesOfFigures
TOF.Update
Next
End With
End Sub
По-моему, приведенная пара процедур обновит в документе ВСЕ поля. По крайне мере, начальное тестирование показало, что все очень здорово. И я доволен как слон. Нажатием одной кнопки можно обновить сразу все.
Мой шаблон/макросы для автоматической нумерации Word 2003, 2007, 2010 и т.д. (стили, названия, перекрестные ссылки, LISTNUM). Делюсь: http://vk.com/club_alex_bir