Vba 更新“a”之后的所有字段;另存为;MS Word中的事件?

Vba 更新“a”之后的所有字段;另存为;MS Word中的事件?,vba,ms-word,field,Vba,Ms Word,Field,我正在创建一个文档模板,该模板最终将用作客户某些Excel数据的目标。这将是面向客户的,并由我以外的其他用户处理,因此我需要一个自动化的解决方案 我正在使用MS Word的CreateDate字段来标记文档的创建日期。这只会在使用模板创建文档时触发,并在“另存为”重命名基于模板构建的文档后触发。但是,在使用新文件名保存后,必须手动更新字段代码 我是VBA的业余爱好者,但有以下更新字段的代码(来自Greg Maxey): 我知道BeforeSave事件,但Word没有“after save”事件,

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

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

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


我知道BeforeSave事件,但Word没有“after save”事件,我不知道如何触发代码。有人需要帮助吗?

通过将命令名作为宏重用,您可以连接到许多Word菜单命令。要做到这一点,最简单的方法是通过以下步骤:

  • 在Word中,选择Developer>Macros
  • 将下拉列表中的宏设置为Word命令
  • 在命令列表中,选择FileSaveAs
  • 将中的宏切换回宏所在的模板
  • 单击创建按钮。Word在模板中创建一个新宏,该宏仅包含以下行:
  • 在该命令之后添加保存后需要运行的命令

    然后,当用户执行另存为时,他们会看到对话框并保存文件,然后VBA将运行


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

    感谢您的提示,这看起来对其他宏很有用,但我不知道。不幸的是,当我测试它时,它不起作用-我仍然需要在“另存为”之后手动更新字段。这可能是因为对话框没有触发实际的保存事件?有什么想法吗?关闭对话框会触发另存为。请发布您用于更新字段的当前代码。好的,请为回复延迟道歉。因此,只要我通过单击“开发人员”选项卡中的“运行宏”来触发它,代码就可以完美地工作——它会打开“另存为”对话框,然后在保存时运行代码。但是,当我执行普通文件>另存为过程时,没有字段更新。我的代码与我在原始文章中发布的代码完全相同,添加了对话框(wdDialogFileSaveAs)。在开头显示行。再次感谢你这是我用过很多次的好方法。也许您可以按照我发布的步骤来查看对话框语句是否有所不同,而不是将其添加到现有代码中。这是微软关于这个主题的页面:澄清——我使用的是Word 2013。我确实按照书面说明完成了您的步骤,并将按照您的步骤从头开始重试
    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
    
    Dialogs(wdDialogFileSaveAs).Show