检查是否从Excel VBAclosuresWord文档

我正在执行几个打印的embedded式Word文档巫婆有一些字段链接到一些单元格,通过我的PrintOutmacros,在For..Next循环,如下所示。

我需要在每个打印任务后,该程序等待文档closures,然后进行下一个打印。

在这种情况下,我收到错误。 谁能帮忙?

 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 

引入的问题是由这个代码解决的。 上面的代码打开和closuresembedded式文本文件100次,并且在closures文件中发生了这个问题。 确切地说,我无法理解为什么在打印结束后立即closures文件命令,打开并更新字段后,产生该错误。 因此,我清理问题问! 通过在作为父母的“契约”方法中集成“PrintIt”方法,而不是为每个文档打印输出调用“PrintIt”,embedded式文档打开每个文档,执行文档链接更新和打印100次,文件,最后也是每一个。

总之,我不能立即在几个Open-Print-Close文件中find问题的原因; 但我改变algorithm打开几个打印closures和问题已经清理!

 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