Tim đã tạo một macro đơn giản để cập nhật tất cả các trường trong một mẫu. Macro bao gồm một bước chọn toàn bộ tài liệu, giống như nhấn Ctrl + A. Bước này không chọn đầu trang và chân trang, và Tim sợ rằng có thể có các trường cần được cập nhật ở những vị trí đó. Anh ấy tự hỏi liệu có cách nào để bao gồm đầu trang và chân trang khi chọn tất cả hay có cách nào khác để macro của anh ấy cập nhật các trường trong vùng đầu trang hoặc chân trang hay không.

Câu trả lời đơn giản là bạn cần sửa đổi mã macro của mình để mã hiển thị trong tất cả các vùng Word khác nhau mà có thể có các trường. Vấn đề với việc sử dụng cách tiếp cận “chọn tất cả” là nó chỉ chọn văn bản trong tài liệu chính. Đầu trang, chân trang và một loạt các phần tử khác được duy trì trong các lớp riêng biệt của chúng, ngăn chúng được chọn cùng với tất cả văn bản của tài liệu.

Nếu bạn chỉ muốn cập nhật các trường trong văn bản chính và trong đầu trang và chân trang, thì bạn nên sử dụng một kỹ thuật như sau:

Sub MyUpdateFields1()

ActiveDocument.StoryRanges(wdMainTextStory).Fields.Update     ActiveDocument.StoryRanges(wdPrimaryFooterStory).Fields.Update     ActiveDocument.StoryRanges(wdPrimaryHeaderStory).Fields.Update End Sub

Lưu ý rằng các lớp khác nhau của tài liệu được gọi là “câu chuyện” và được duy trì trong bộ sưu tập của riêng chúng. Mặc dù macro đơn giản này cập nhật rất nhanh các trường trong các câu chuyện có chứa văn bản chính, phần cuối trang và phần đầu, có những câu chuyện (lớp) khác

nơi có thể có các trường yêu cầu cập nhật. Macro sau đây xem xét từng câu chuyện, bất kể loại của nó và cập nhật điều kiện cần thiết:

Sub MyUpdateFields2()

Dim story As Word.Range

Next End Sub

Tuy nhiên, nếu bạn thực sự muốn hoàn thành, bạn cần phải xem qua nhiều tầng câu chuyện khác nhau. Ví dụ: có thể có một số trường chứa trong hộp văn bản cần cập nhật. Một macro toàn diện hơn là cần thiết để xử lý tất cả những nơi khác mà các trường có thể được đặt. Trong ví dụ sau, hãy lưu ý nhiều phần tử khác nhau của tài liệu có thể được kiểm tra cho các trường.

Sub MyUpdateFields3()

Dim doc As Document ' Pointer to Active Document     Dim wnd As Window ' Pointer to Document's Window     Dim lngMain As Long ' Main Pane Type Holder     Dim lngSplit As Long ' Split Type Holder     Dim lngActPane As Long ' ActivePane Number     Dim rngStory As Range ' Range Objwct for Looping through Stories     Dim TOC As TableOfContents ' Table of Contents Object     Dim TOA As TableOfAuthorities 'Table of Authorities Object     Dim TOF As TableOfFigures 'Table of Figures Object     Dim shp As Shape

' Set Objects     Set doc = ActiveDocument     Set wnd = ActiveDocument.ActiveWindow

' get Active Pane Number     lngActPane = wnd.ActivePane.Index

' Hold View Type of Main pane     lngMain = wnd.Panes(1).View.Type

' Hold SplitSpecial     lngSplit = wnd.View.SplitSpecial

' Get Rid of any split     wnd.View.SplitSpecial = wdPaneNone

' Set View to Normal     wnd.View.Type = wdNormalView

' Loop through each story in doc to update     For Each rngStory In doc.StoryRanges         If rngStory.StoryType = wdCommentsStory Then             Application.DisplayAlerts = wdAlertsNone             ' Update fields             rngStory.Fields.Update             Application.DisplayAlerts = wdAlertsAll         Else            ' Update fields            rngStory.Fields.Update         End If     Next

For Each shp In doc.Shapes         With shp.TextFrame             If .HasText Then                 shp.TextFrame.TextRange.Fields.Update             End If         End With     Next

' Loop through TOC and update     For Each TOC In doc.TablesOfContents         TOC.Update     Next

' Loop through TOA and update     For Each TOA In doc.TablesOfAuthorities         TOA.Update     Next

' Loop through TOF and update     For Each TOF In doc.TablesOfFigures         TOF.Update     Next

' Return Split to original state     wnd.View.SplitSpecial = lngSplit

' Return main pane to original state     wnd.Panes(1).View.Type = lngMain

' Active proper pane     wnd.Panes(lngActPane).Activate

' Close and release all pointers     Set wnd = Nothing     Set doc = Nothing End Sub

WordTips là nguồn của bạn để đào tạo Microsoft Word hiệu quả về chi phí.

(Microsoft Word là phần mềm xử lý văn bản phổ biến nhất trên thế giới.) Mẹo này (11489) áp dụng cho Microsoft Word 2007 và 2010. Bạn có thể tìm phiên bản của mẹo này cho giao diện menu cũ hơn của Word tại đây: