Word VBA 过程调用第二次突然失败
Word VBA procedure calls suddenly failing second time through
我已经构建了一个访问数据库来填充 table,然后打开几个 Word 邮件合并模板,生成合并文档并保存它们。代码的相关部分获取或创建一个 Word 应用程序对象,将合并模板作为文档对象打开,运行邮件合并,然后关闭该模板。然后它会查找合并输出,使其成为活动文档,另存为(遵循文件命名模式),然后将其关闭。如果没有打开其他文档,它将退出 Word,并释放文档和应用程序对象。
在上周安装 MS 更新之后,这一切都运行良好一次,但在第二次运行时,生成的合并文档在成为活动文档后停止响应。我很难找到 Google 以查看是否可以找到解释或解决方法,但没有运气。有人有什么想法吗?
相关代码:
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
我没有遇到过这个问题,但很想尝试以下方法:
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
嗯,事实证明这根本不是代码问题。 MS 安全更新有一些 unintended/unexpected 影响,包括导致 Word 在尝试另存为 some/most Word 文档时停止响应,无论是以编程方式还是手动方式。卸载了更新,一切正常。
我已经构建了一个访问数据库来填充 table,然后打开几个 Word 邮件合并模板,生成合并文档并保存它们。代码的相关部分获取或创建一个 Word 应用程序对象,将合并模板作为文档对象打开,运行邮件合并,然后关闭该模板。然后它会查找合并输出,使其成为活动文档,另存为(遵循文件命名模式),然后将其关闭。如果没有打开其他文档,它将退出 Word,并释放文档和应用程序对象。
在上周安装 MS 更新之后,这一切都运行良好一次,但在第二次运行时,生成的合并文档在成为活动文档后停止响应。我很难找到 Google 以查看是否可以找到解释或解决方法,但没有运气。有人有什么想法吗?
相关代码:
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
我没有遇到过这个问题,但很想尝试以下方法:
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
嗯,事实证明这根本不是代码问题。 MS 安全更新有一些 unintended/unexpected 影响,包括导致 Word 在尝试另存为 some/most Word 文档时停止响应,无论是以编程方式还是手动方式。卸载了更新,一切正常。