William需要在文件页脚的文本框中的表中插入文件名(这样做是客户的要求)。

他希望文件名在每次保存文档时自动更新,或者至少在他使用“另存为”创建新文件时自动更新。

William插入了一个FILENAME字段,但是他仍然必须记住要打开页脚并单击,然后按F9进行更新。他希望它只是自动执行。

从历史上看,Word的开发是基于您最终将打印文档的理解。 (这是在网上以电子方式执行大多数任务的日子之前。)与这种历史理解有关的工件之一是Word在您打印之前不会更新字段。因此,当您执行其他任务(例如保存或使用另存为)时,不会更新字段。

考虑到这一点,您可以做几件事。首先是欺骗Word认为您正在打印。但是,在执行此“触发”操作之前,您需要遵循以下步骤:

。显示“ Word选项”对话框。 (在Word 2007中,单击Office按钮,然后单击Word选项。在Word 2010和更高版本中,显示功能区的“文件”选项卡,然后单击“选项”。)

。在对话框的左侧,单击显示。 (请参见图1。)

。确保选中“在打印之前更新字段”复选框。

。单击对话框左侧的“高级”。

。向下滚动,直到看到“打印”部分。 (请参见图2。)

。确保选中“允许包含跟踪更改的字段在打印前更新”复选框。

。单击确定保存更改。

现在,要更新字段,您需要做的就是按Ctrl + P。这将显示“打印”对话框(Word 2007)或打印选项(Word的更高版本)。至此,文档中的字段应更新,因为Word预期您将要打印。您可以按Esc键或单击功能区的“主页”选项卡以放弃打印,并且应注意文档中的所有字段均已更新。

您也可以使用宏执行这些任务。下面的宏不会更改“ Word选项”对话框中的设置,但会执行足够的打印顺序,从而诱使Word更新字段。

Sub UpdateAllFields()

With ActiveDocument         .PrintPreview         .ClosePrintPreview     End With End Sub

如果需要,可以采用另一种宏方法。这种方法绕过了任何骗局,而是逐步遍历每个“故事”

|。在文档中进行更新,并更新这些故事中找到的所有字段。 (“故事”

最好视为文档中的一层。主文档是一个故事,另一个是页眉和页脚,另一个是图形,依此类推。)实际上,此方法中使用了两个宏;例如,您将运行UpdateAllFields宏以启动更新过程。

Sub UpdateAllFields()

Dim objStory As Range     Dim objTOC As TableOfContents     Dim objTOA As TableOfAuthorities     Dim objTOF As TableOfFigures     Dim objIndex As Index

Application.ScreenUpdating = False     Application.DisplayAlerts = wdAlertsNone

For Each objStory In ActiveDocument.StoryRanges         UpdateFieldsInStory objStory

While Not (objStory.NextStoryRange Is Nothing)

Set objStory = objStory.NextStoryRange             UpdateFieldsInStory objStory         Wend     Next             For Each objTOC In ActiveDocument.TablesOfContents         objTOC.Update     Next

For Each objTOA In ActiveDocument.TablesOfAuthorities         objTOA.Update     Next

For Each objTOF In ActiveDocument.TablesOfFigures         objTOF.Update     Next

For Each objIndex In ActiveDocument.Indexes         objIndex.Update     Next

Application.DisplayAlerts = wdAlertsAll     Application.ScreenUpdating = True End Sub
Private Sub UpdateFieldsInStory(iobjStory As Range)

Dim objShape As Shape

With iobjStory         .Fields.Update

Select Case .StoryType             Case wdMainTextStory, wdPrimaryHeaderStory, _               wdPrimaryFooterStory, wdEvenPagesHeaderStory, _               wdEvenPagesFooterStory, wdFirstPageHeaderStory, _               wdFirstPageFooterStory

For Each objShape In .ShapeRange                     With objShape.TextFrame                         If .HasText Then .TextRange.Fields.Update                     End With                 Next         End Select     End With End Sub

如果您想了解有关使用宏更新字段的更多信息,则可能需要在Greg Maxey的站点上访问此页面。请特别注意标题为“更新字段”的部分:

http://gregmaxey.mvps.org/word_tip_pages/word_fields.html

如您所知,更新文档中的所有字段不一定很容易。微软似乎可以轻松地添加这样的功能,但是即使经过多年的努力,Word仍然缺乏这样的功能。如果您希望Microsoft添加该功能,则可以访问其UserVoice论坛并对这种功能进行投票:

https://word.uservoice.com/forums/304924-word-for-windows-desktop-application/suggestions/11685894

注意:

如果您想知道如何使用此页面(或_WordTips_网站上的任何其他页面)上描述的宏,我准备了一个包含有用信息的特殊页面。

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

(Microsoft Word是世界上最流行的文字处理软件。)本技巧(13475)适用于Microsoft Word 2007、2010、2013和2016。