![如何使目录自动更新?](https://linux22.com/image/1217854/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%9B%AE%E5%BD%95%E8%87%AA%E5%8A%A8%E6%9B%B4%E6%96%B0%EF%BC%9F.png)
我正在使用 Word 2007,但将文档保存为 .doc(而不是 .docx)格式,因为这是公司政策。
我已经正确设置了目录,但是有没有办法让它自动更新(在文档打开、保存或其他情况下)?Word 帮助建议它应该在打开文档时更新,但这似乎没有发生。
有任何想法吗?
答案1
如果选项“工具”>“选项”>“打印”>“更新字段”(在 Word 2007 中,Office 按钮 > Word 选项 >“显示”>“打印前更新字段”)上有一个复选标记,则转到“打印预览”并返回将更新字段。但按 Ctrl+A 然后按 F9 也同样简单。
如果您正在寻找完全不需要任何用户交互的东西,那么您需要一个宏。
用于更新所有 ToC 类型字段的宏示例如下:
Sub TOCFieldUpdate()
' 作者:Charles Kyle Kenyon 2005 年 1 月 27 日
' 字段更新程序 - TOC 字段
Dim oField As Field
On Error Resume Next
For Each oField In ActiveDocument.Fields
If oField.Type = wdFieldTOC Then
oField.Update
End If
If oField.Type = wdFieldTOA Then
oField.Update
End If
Next oField
End Sub
如果您希望定期执行上述宏,这里还有另一个宏。
它将每 5 分钟更新一次 ToC:
Public Sub ToCUpdate()
调用 TOCFieldUpdate
DoEvents
Application.OnTime When:=Now + TimeValue("00:05:00"), name:="ToCUpdate"
End Sub
您可以将此宏分配给图标或热键。我不建议让它在文档打开时自动运行,因为这样会违反 Microsoft 的最新安全保护措施。
注意:以上内容未经测试,更糟糕的是,这是我第一次尝试编写 VBA。
答案2
您将需要一个宏来实现这一点。
您有一个这样的宏的示例这里,用于更新“保存日期”字段。它将与文档中的所有字段一起使用,并且目录也是一个字段,因此它应该可以帮到您。
如果您不关心“保存日期”字段(因此需要两次保存文档以便“保存日期”字段真正更新),您可以删除以下几行:
Dim bSaveDate As Boolean
bSaveDate = False
...
If oField.Type = wdFieldSaveDate Then
bSaveDate = True
End If
...
If bSaveDate = True Then
MsgBox "Save a second time to update a save date field"
End If