Mẫu Word 2010 với các trường được cập nhật tự động


2

Tôi muốn tạo mẫu Word 2010 cho nhóm của mình để đảm bảo rằng mọi trang đều có chân trang hiển thị thông tin sau:

  • Ai lưu tập tin cuối cùng
  • Khi tập tin được lưu lần cuối
  • Đường dẫn và tên tệp nơi tệp được lưu trữ

Vì vậy, tôi đã tạo một tệp mẫu (dotx) với chân trang có chứa các mã trường sau:

  • {LASTSAVEDBY * Mũ * MERGEFORMAT}
  • {TIẾT KIỆM \ @ "d MMM yyy" * MERGEFORMAT}
  • {FILENAME -p}

Tuy nhiên, khi tôi lưu mẫu này và tạo một tài liệu mới (sau đó lưu nó), các trường không được cập nhật. LASTSAVEDBY hiển thị dưới dạng trống, SAVEDATE hiển thị 0 XXX 0000 và FILENAME hiển thị Document1.

Tôi cũng đã thử lưu mẫu này dưới dạng mẫu dotm trong trường hợp có một số macro ẩn, nhưng kết quả vẫn như vậy.

Câu trả lời:


5

Đọ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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.