检查Word文档是否已从Excel VBA关闭

时间:2017-07-01 06:18:46

标签: excel vba excel-vba ms-word word-vba

我正在执行几个嵌入式Word文档的打印,我的PrintOut宏在For..Next循环中将某些字段链接到某些单元格,如下所示。

我需要在每个打印任务之后,程序等待文档关闭然后再进行下一次打印。

在这种情况下,我收到错误。有人可以帮忙吗?

Sub contract()

Dim i As Integer

For i = 1 To 100
    Cells(Sheets("SheetName").ListObjects("StaffInfo").ListRows.Count + 9, 8).Value = i

    General.PrintIt ("EmbeddedDoc") 'Doc has many linked fields

Next i

End Sub

打印方式

Sub PrintIt(P As String)
Dim objWord As Object
Dim ObjDoc As Object
Dim Oshp As Object

Application.ScreenUpdating = False

ActiveSheet.OLEObjects(P).Activate
Set objWord = GetObject(, "Word.Application")
objWord.Visible = False

Set ObjDoc = objWord.ActiveDocument

ObjDoc.Fields.Update
For Each Oshp In ObjDoc.Content.ShapeRange
    Oshp.TextFrame.TextRange.Fields.Update
Next

ObjDoc.PrintOut Background:=False
ObjDoc.PrintOut

objWord.Quit SaveChanges:=False
Application.ScreenUpdating = True
End Sub 'Print it

1 个答案:

答案 0 :(得分:0)

此代码解决了引入的问题。 上面的代码打开和关闭嵌入的word文档,100次,这个问题发生在关闭文档中。 确切地说,我无法理解为什么在打印输出命令之后立即关闭文档,在打开和更新字段之后,生成该错误。 于是我清理了问题! 通过在“合同”方法中集成“PrintIt”方法作为其父级,而不为每个文档打印输出“PrintIt”,嵌入式文档打开每个文档,执行文档链接更新并打印100次以进行下一循环并关闭单词应用程序和文件,最后,每一个。

简而言之,我无法立即在几个Open-Print-Close文档中找到问题的原因;但我将算法更改为Open-Multiple print-Close并且问题已被清除!

Sub contract()
Application.ScreenUpdating = False
Sheets("SheetName").Unprotect

'Declare variables
Dim i As Integer
Dim objWord, ObjDoc As Object

'Core
ActiveSheet.OLEObjects("Contract").Activate
Set objWord = GetObject(, "Word.Application")
objWord.Visible = False

Set ObjDoc = objWord.ActiveDocument

For i = 1 To 100

    Cells(x, y).Value = i 'A specific cell that
' word embedded document fields are linked to 
'corresponding fields they values change 
'by changing this cell.
    ObjDoc.Fields.Update

    ObjDoc.PrintOut Background:=False
    ObjDoc.PrintOut

Next i
objWord.Quit SaveChanges:=False
Sheets("SheetName").Protect AllowFiltering:=True
End Sub