Đọc sách Bài viết về Kiến thức của Microsoft về vấn đề này đưa ra câu trả lời bực bội rằng đây là do thiết kế, vì vậy bạn cần viết một macro để làm điều này. Handily họ cung cấp một Macro cập nhật các trường khi bạn mở các tập tin, thay vì lưu. Điều này thực sự có ý nghĩa hơn đối với một số lĩnh vực, vì vậy miễn là bạn sử dụng LASTSAVEDBY và SAVEDATE thì những điều này sẽ có ý nghĩa.
Chỉ cần nhớ rằng bạn sẽ không thấy các bản cập nhật được áp dụng cho đến khi bạn mở lại tài liệu. Đối với footer điều này là hoàn toàn tốt.
Và vì đây là Macro nên bạn chắc chắn cần lưu dưới dạng dotm.
Đối với bất cứ ai cần cập nhật các trường về lưu, có một cuộc thảo luận tại diễn đàn VBA Express hoặc bạn chỉ có thể điều chỉnh macro từ Tài liệu của Microsoft .
Cập nhật Các vbscript từ Microsoft là tốt, nhưng kết quả là một tài liệu luôn nghĩ rằng nó đã được chỉnh sửa, vì vậy luôn luôn nhắc nhở để lưu khi đóng. Hầu hết người dùng sẽ luôn nhấp vào đây, điều này sẽ dẫn đến các giá trị LASTSAVEDBY và SAVEDATE hiển thị khi tài liệu được đọc lần cuối và bởi ai.
Vì vậy, tôi đã thêm một dòng để đánh dấu ngay tài liệu là không thay đổi sau khi cập nhật các trường. Bất kỳ chỉnh sửa nào khác đối với tài liệu sẽ thiết lập lại điều này, đưa ra dấu nhắc lưu khi đóng.
Đây là mã 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
Cập nhật Đoạn mã trên hoạt động tốt, trừ khi bạn lưu mã này vào mẫu Normal.dotm của bạn, trong trường hợp đó, nó chạy mỗi khi bạn mở bất kỳ tài liệu nào. Nếu tài liệu được mở trong Chế độ xem được bảo vệ (tức là tài liệu đã được tải xuống từ internet hoặc đến dưới dạng tệp đính kèm email) thì ActiveDocument không khả dụng. Giải pháp là kiểm tra xem tài liệu không ở Chế độ xem được bảo vệ trước khi chạy các chức năng bên trong macro. Dưới đây là mã macro được cập nhật, bao gồm câu lệnh If để kiểm tra tài liệu không ở Chế độ bảo vệ:
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