【问题标题】:Update all fields AFTER a "save as" event in MS Word?在 MS Word 中的“另存为”事件后更新所有字段?
【发布时间】:2020-03-13 08:05:42
【问题描述】:

我正在创建一个文档模板,该模板最终将用作客户某些 Excel 数据的目的地。这将面向客户并由我以外的其他用户处理,因此我需要一个自动化的解决方案。

我正在使用 MS Word 的 CreateDate 字段来标记文档的创建日期。这只会在使用模板创建文档时触发,并且在“另存为”之后重命名基于模板构建的文档。但是,您必须在使用新文件名保存后手动更新域代码。

我是 VBA 的业余爱好者,但有以下代码来更新字段(来自 Greg Maxey):

Public Sub UpdateAllFields()
  Dim rngStory As Word.Range
  Dim lngJunk As Long
  Dim oShp As Shape
  lngJunk = ActiveDocument.Sections(1).Headers(1).Range.StoryType
  For Each rngStory In ActiveDocument.StoryRanges
    'Iterate through all linked stories
    Do
      On Error Resume Next
      rngStory.Fields.Update
      Select Case rngStory.StoryType
        Case 6, 7, 8, 9, 10, 11
          If rngStory.ShapeRange.Count > 0 Then
            For Each oShp In rngStory.ShapeRange
              If oShp.TextFrame.HasText Then
                oShp.TextFrame.TextRange.Fields.Update
              End If
            Next
          End If
        Case Else
          'Do Nothing
        End Select
        On Error GoTo 0
        'Get next linked story (if any)
        Set rngStory = rngStory.NextStoryRange
      Loop Until rngStory Is Nothing
    Next
End Sub

我知道 BeforeSave 事件,但 Word 没有“保存后”事件,我不知道如何触发代码。有人帮忙吗?

【问题讨论】:

    标签: vba ms-word field


    【解决方案1】:

    您可以通过将命令名称重新用作宏来连接到许多 Word 菜单命令。最简单的方法是执行以下步骤:

    1. 在 Word 中,选择开发人员>宏
    2. Macros in 下拉菜单设置为 Word 命令
    3. 在命令列表中,选择FileSaveAs
    4. 宏输入切换回宏所在的模板。
    5. 点击创建按钮。 Word 在您的模板中创建一个仅包含以下行的新宏:
    Dialogs(wdDialogFileSaveAs).Show
    

    在该命令之后添加保存后需要运行的命令。

    然后当用户进行另存为时,他们会看到对话框并保存文件,然后您的 VBA 就会运行。

    一旦你有了想法,你就不必经历整个过程。只要您知道内置对话框和 Word 命令的 VBA 名称,就可以使用相同的模式输入它们。

    【讨论】:

    • 感谢您的提示,这看起来对其他宏很有用,但我不知道。不幸的是,当我测试它时这不起作用 - 我仍然需要在另存为之后手动更新字段。也许这是因为对话框没有触发实际的 Save 事件?有什么想法吗?
    • 关闭对话框会触发另存为。请发布您用于更新该字段的当前代码。
    • 好的,对于延迟回复表示歉意。因此,只要我通过单击“开发人员”选项卡中的“运行宏”来触发它,代码就可以完美运行 - 它会打开“另存为”对话框,然后在保存时运行代码。但是,当我通过正常的文件 > 另存为过程时,没有字段更新。我的代码正是我在原始帖子中发布的内容,并在开头添加了 Dialogs(wdDialogFileSaveAs).Show 行。再次感谢您
    • 这是我用过很多次的众所周知的好技术。也许不是将对话框语句添加到您现有的代码中,您可以按照我发布的步骤来查看它是否有所作为。这是微软关于这个主题的页面:docs.microsoft.com/en-us/office/vba/word/concepts/miscellaneous/…
    • 澄清 -- 我使用的是 Word 2013。我确实按照您的说明完成了步骤,并将按照您的步骤从头开始重试
    猜你喜欢
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多