Jay有一种情况,他在文档的文本框中插入了文档属性字段。使用Ctrl + A,然后按F9键,将更新文档中的所有属性文档字段,但是Jay的操作不会更新此字段。更新页眉和页脚中的字段的过程也不会更新文本框中的字段。

Jay想知道是否可以使用键盘手动更新字段,或者是否可以使用宏来更新字段。

字段可以放置在许多文档元素中。例如,它们可以在主文档文本,文本框,页眉或页脚,自选图形或特殊表中。当按Ctrl + A将选择所有文档时,按F9不会更新所有文档元素中的字段。相反,您需要使用宏进行更新。

如果您只希望宏更新任何文本框中的字段,那么这样做就很容易了。以下宏逐步浏览了文档中的每个形状(包括文本框和自选图形)

并且,如果形状包含文本,则更新它包含的任何字段。

Sub UpdateTBFields()

Dim shp As Shape

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

可以将该宏分配给键盘快捷方式,以便您可以通过触摸快捷方式轻松地更新字段。当然,您可能想开发一个包含更多内容的宏,以更新所有字段,无论它们位于何处。 (请记住,字段可以位于任意数量的文档元素中。)在这种情况下,请考虑以下宏的版本。

Public Sub UpdateAllFields()

Dim doc As Document     Dim wnd As Window     Dim lngMain As Long     Dim lngSplit As Long     Dim lngActPane As Long     Dim rngStory As Range     Dim TOC As TableOfContents     Dim TOA As TableOfAuthorities     Dim TOF As TableOfFigures     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

'Loop through text boxes and update     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_网站上的任何其他页面)中描述的宏,我准备了一个包含有用信息的特殊页面。

_WordTips_是您进行经济有效的Microsoft Word培训的来源。

(Microsoft Word是世界上最流行的文字处理软件。)本技巧(12344)适用于Microsoft Word 2007、2010、2013、2016、2019和Office 365中的Word。您可以找到此技巧的版本,以用于Word的旧菜单界面在这里: