Portanto, a leitura do artigo KnowledegeBase da Microsoft sobre isso fornece a resposta irritante de que isso ocorre por design, por isso é necessário escrever uma macro para fazer isso. Com muita facilidade, eles fornecem uma macro que atualiza os campos quando você abre o arquivo, em vez de salvá-lo. Isso realmente faz mais sentido para um número de campos, então, desde que você use LASTSAVEDBY e SAVEDATE, isso fará sentido.
Lembre-se de que você não verá as atualizações aplicadas até que você abra o documento novamente. Para rodapés isso é absolutamente bom.
E como esta é uma macro, você precisa salvar como dotm.
Para quem precisa atualizar os campos ao salvar, há uma discussão nos fóruns do VBA Express , ou você poderia simplesmente adaptar a macro do documento da Microsoft .
Atualizar O vbscript da Microsoft é bom, mas resulta em um documento que sempre acha que foi editado, por isso sempre pede para salvar ao fechar. A maioria dos usuários sempre clicará sobre isso, o que resultaria nos valores LASTSAVEDBY e SAVEDATE mostrando quando o documento foi lido pela última vez e por quem.
Por isso, adicionei uma linha para marcar imediatamente o documento como inalterado depois de atualizar os campos. Quaisquer outras edições no documento irão redefinir isso, dando o aviso de salvar ao fechar.
Este é o código da macro:
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
Atualizar O código acima funciona bem, a menos que você salve isso no seu modelo Normal.dotm, caso em que ele é executado toda vez que você abrir qualquer documento. Se o documento for aberto no Modo de Exibição Protegido (ou seja, foi baixado da Internet ou veio como anexo de email), o ActiveDocument não estará disponível. A solução é verifique se o documento não está no Modo de Exibição Protegido antes de executar as funções dentro da macro. Aqui está o código de macro atualizado, incluindo a instrução If para verificar se o documento não está no Modo protegido:
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