【问题标题】:Word VBA procedure calls suddenly failing second time throughWord VBA 过程调用突然第二次失败
【发布时间】:2021-11-14 05:04:24
【问题描述】:

我已经构建了一个访问数据库,它填充一个表格,然后打开几个 Word 邮件合并模板,生成合并文档并保存它们。代码的相关部分获取或创建 Word 应用程序对象,将合并模板作为文档对象打开,运行邮件合并,然后关闭模板。然后它查找合并输出,使其成为活动文档,另存为(遵循文件命名模式)并关闭它。如果没有其他文档打开,则退出 Word,并释放文档和应用程序对象。

继上周安装的 MS 更新后,这一切都运行良好,但在第二次运行时,生成的合并文档在成为活动文档后停止响应。我已经很难找到谷歌,看看我是否能找到解释或解决方法,但没有运气。有人有什么想法吗?

相关代码:

On Error Resume Next
Set objWord = GetObject(, "Word.Application")
If objWord Is Nothing Then
  Set objWord = CreateObject("Word.Application")
End If
On Error GoTo 0
Set objDoc = objWord.Documents.Open(templateName)
objWord.Visible = True
objWord.ActiveWindow.View.Type = wdNormalView
objDoc.MailMerge.OpenDataSource Name:= _
  tempRoot & "Merge_Output.txt", ConfirmConversions:=False, ReadOnly _
  :=True, LinkToSource:=True, AddToRecentFiles:=False, PasswordDocument:= _
  "", PasswordTemplate:="", WritePasswordDocument:="", _
  WritePasswordTemplate:="", Revert:=False, Format:=wdOpenFormatAuto, _
  Connection:="", SQLStatement:="", SQLStatement1:="", SubType:= _
  wdMergeSubTypeOther
  objDoc.MailMerge.ViewMailMergeFieldCodes = False
objDoc.MailMerge.Execute
objDoc.Close False
For Each openDoc In objWord.Documents
  strOpenDoc = openDoc.Name
  If strOpenDoc Like "Form Letters*" Then
    openDoc.Activate
    Exit For
  End If
Next openDoc
objWord.ActiveDocument.Content.NoProofing = False
objWord.ActiveDocument.SaveAs TargetDir & "\" & DocBase & "_Designation" '<=====This is where the document stops responding
objWord.ActiveDocument.Close False
If objWord.Documents.Count = 0 Then objWord.Application.Quit
Set objDoc = Nothing
Set objWord = Nothing

【问题讨论】:

    标签: vba ms-access ms-word


    【解决方案1】:

    我没有遇到过这个问题,但很想尝试以下方法:

    For Each openDoc In objWord.Documents
        If openDoc.Name Like "Form Letters*" Then
            With openDoc
                .Content.NoProofing = False
                .SaveAs2 FileName:=TargetDir & "\" & DocBase & "_Designation", FileFormat:=wdFormatXMLDocument
                .Close False
            End With
            Exit For
        End If
    Next openDoc
    If objWord.Documents.Count = 0 Then objWord.Application.Quit
    

    【讨论】:

      【解决方案2】:

      好吧,事实证明这根本不是代码问题。 MS 安全更新有一些意外/意外的影响,包括在尝试以编程方式或手动方式另存为某些/大多数 Word 文档时导致 Word 停止响应。卸载更新,现在一切正常。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-31
        • 2021-04-02
        • 2010-12-21
        • 1970-01-01
        • 1970-01-01
        • 2023-02-24
        相关资源
        最近更新 更多