我想要一种更新方法全部Word 2013 文档中的字段。(如果它在其他版本中有效,那就更好了;我最初在 Word 2007 中遇到了这个问题,从那时起似乎什么都没有改变。)这包括交叉引用、页码、目录、索引、标题等。如果可以通过按 进行更新F9,我希望它得到更新。
(理论上,更新字段可能会导致其他字段需要更新,例如,较长的目录会更改正文中的某些页码。处理常见情况对我来说已经足够了。事实上,如果我必须运行宏两到三次才能稳定下来,那就没问题了。我只想要一个可以找到所有内容的宏。)
到目前为止,我的尝试并未更新图形内文本框中的字段。我该如何更新它们?我还遗漏了什么?
编辑:将给出的答案与我已经得到的答案结合起来,可以得到一个似乎可以更新所有内容的宏(带有已知缺陷)。
'' Update all the fields, indexes, etc. in the specified document.
Sub UpdateAllFieldsIn(doc As Document)
'' Update tables. We do this first so that they contain all necessary
'' entries and so extend to their final number of pages.
Dim toc As TableOfContents
For Each toc In doc.TablesOfContents
toc.Update
Next toc
Dim tof As TableOfFigures
For Each tof In doc.TablesOfFigures
tof.Update
Next tof
'' Update fields everywhere. This includes updates of page numbers in
'' tables (but would not add or remove entries). This also takes care of
'' all index updates.
Dim sr As range
For Each sr In doc.StoryRanges
sr.Fields.Update
While Not (sr.NextStoryRange Is Nothing)
Set sr = sr.NextStoryRange
'' FIXME: for footnotes, endnotes and comments, I get a pop-up
'' "Word cannot undo this action. Do you want to continue?"
sr.Fields.Update
Wend
Next sr
End Sub
'' Update all the fields, indexes, etc. in the active document.
'' This is a parameterless subroutine so that it can be used interactively.
Sub UpdateAllFields()
UpdateAllFieldsIn ActiveDocument
End Sub
答案1
答案2
我只需按Ctrl+ A- 即可选择所有内容 - 然后然后 F9更新地段。
虽然,这会错过页眉和页脚,但它们会在您打印/打印预览 IIRC 时更新。
###更新
我找到了以下宏。在快速测试中,它更新了目录、段落内的字段、页眉和页脚内的字段以及浮动文本框图形内的字段。
希望这涵盖了您需要的所有内容,如果没有,请指出哪些内容仍无法更新。
Sub UpdateAll()
Dim oStory As Range
For Each oStory In ActiveDocument.StoryRanges
oStory.Fields.Update
If oStory.StoryType <> wdMainTextStory Then
While Not (oStory.NextStoryRange Is Nothing)
Set oStory = oStory.NextStoryRange
oStory.Fields.Update
Wend
End If
Next oStory
Set oStory = Nothing
End Sub
答案3
这页看起来很有趣:
如果您使用的是 Word 2007,则过程会有所不同:单击“Office”按钮,然后单击“Word 选项”。Word 将显示“Word 选项”对话框。单击对话框左侧的“高级”。(单击此处查看相关图形。)在“常规”区域(向下滚动一点即可看到),确保选中“打开时更新自动链接”复选框。单击“确定”。该设置应确保您的所有链接始终是最新的。如果您想在打开文档时更新字段,则需要使用宏来完成任务。具体来说,您需要使用 AutoOpen 或 AutoClose 宏,具体取决于您是在打开还是关闭文档时更新字段。以下是您可以使用的 AutoOpen 宏的示例。
Sub AutoOpen()
With Options
.UpdateFieldsAtPrint = True
.UpdateLinksAtPrint = True
End With
ActiveDocument.Fields.Update
End Sub
请注意,宏确保选项设置为在打印时强制更新字段和链接,然后它会更新文档中 Fields 集合的所有成员。如果您想在关闭时更新字段,可以使用此宏:
Sub AutoClose()
ActiveDocument.Fields.Update
End Sub
这个宏非常短,因为退出文档时不需要设置更新打印选项。退出文档。
答案4
如果您想正确更新所有页眉和页脚,这对我有用:
Dim oStory As Range
Dim oSection As Object
Dim oHeader As Object
Dim oFooter As Object
For Each oStory In ActiveDocument.StoryRanges
oStory.Fields.Update
Next oStory
For Each oSection In ActiveDocument.Sections
For Each oHeader In oSection.Headers
oHeader.Range.Fields.Update
Next oHeader
For Each oFooter In oSection.Footers
oFooter.Range.Fields.Update
Next oFooter
Next oSection