我正在执行几个嵌入式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
答案 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