Поэтому, читая статью Microsoft KnowledegeBase по этому вопросу, вы получите исчерпывающий ответ, что это сделано специально , поэтому для этого вам нужно написать макрос. Удобно они предоставляют Макрос, который обновляет поля при открытии файла, а не сохраняет. На самом деле это имеет больше смысла для ряда полей, поэтому, пока вы используете LASTSAVEDBY и SAVEDATE, они будут иметь смысл.
Просто помните, что вы не увидите примененные обновления, пока не откроете документ снова. Для нижних колонтитулов это абсолютно нормально.
А поскольку это макрос, вам определенно нужно сохранить его как dotm.
Для тех, кому нужно обновить поля при сохранении, есть обсуждение на форумах VBA Express, или вы можете просто адаптировать макрос из документа Microsoft.
Обновление vbscript от Microsoft - это хорошо, но в результате получается документ, который всегда думает, что он был отредактирован, поэтому всегда предлагает сохранить при закрытии. Большинство пользователей всегда будут нажимать на это, что приведет к значениям LASTSAVEDBY и SAVEDATE, показывающим, когда документ был последний раз прочитан, и кем.
Поэтому я добавил строку, чтобы сразу пометить документ как неизмененный после обновления полей. Любое дальнейшее редактирование документа сбрасывает это, давая подсказку сохранения при закрытии.
Вот код макроса:
Sub AutoOpen()
'
' AutoOpen Macro
'
'
Dim aStory As Range
Dim aField As Field
For Each aStory In ActiveDocument.StoryRanges
For Each aField In aStory.Fields
aField.Update
Next aField
Next aStory
' set document as unchanged (prevents save dialog popping up when closing)
' further edits will set this back to false and restore
' the save dialog on close
ActiveDocument.Saved = True
End Sub
Обновление Приведенный выше код работает нормально, если вы не сохраните его в своем шаблоне Normal.dotm, и в этом случае он запускается каждый раз, когда вы открываете какой-либо документ. Если документ открыт в режиме защищенного просмотра (т. Е. Он был загружен из Интернета или был вложен в электронное письмо), ActiveDocument недоступен. Решение состоит в том, чтобы проверить, что документ не находится в режиме защищенного просмотра, прежде чем запускать функции внутри макроса. Вот обновленный код макроса, включая оператор If для проверки того, что документ не находится в защищенном режиме:
Sub AutoOpen()
'
' AutoOpen Macro
'
'
Dim aStory As Range
Dim aField As Field
' Check that document is not in Protected View before doing anything
If Application.ActiveProtectedViewWindow Is Nothing Then
For Each aStory In ActiveDocument.StoryRanges
For Each aField In aStory.Fields
aField.Update
Next aField
Next aStory
' set document as unchanged (prevents save dialog popping up when
'closing) - further changes will set this back
ActiveDocument.Saved = True
End If
End Sub