【发布时间】:2020-11-09 01:21:24
【问题描述】:
我创建了一个宏来读取 Excel 源文件并将所有数据加载到数组中。然后它会打开一个用作模板的 Word 文档。模板中有 7 个书签。每个书签都使用数组中特定行的数据进行更新。接下来,使用“另存为”,以唯一的名称和 2 页保存模板。重复这些步骤,直到有 100 个唯一的 Word 文档。到目前为止一切顺利。
(旁注:由于我一直遇到的问题,宏目前停止在 100 个文档。我最初从 200 个文档开始但更改为 100,因为我认为这个数字(200 个文档/400 页)是问题所在。 )
接下来,宏关闭 Word 模板并打开另一个名为“MainDoc”的 Word 文档。这是以特定方式格式化的,因此宏可以将每个唯一的 Word 文档(2 页)插入到“MainDoc”文件中。然后宏使用“另存为”将“MainDoc”文件另存为PDF文档200页。
有时,并非每次,宏都会抛出一条错误消息:“Microsoft Excel 正在等待“MainDoc.doc - Word”完成 OLE 操作。”
它不会每次都发生或在代码中的同一位置发生。有时它根本不会抛出错误,而是继续处理下一批 100 条记录。
当我在错误消息上单击“确定”时,宏会继续运行,直到它再次抛出它或宏完成。
目前,宏会重复此过程并创建 13 个唯一的 PDF 文件。目标是让宏在完成之前正常运行。
这是显示错误消息的代码:
Sub Create_PDF_File()
Set WrdApp = CreateObject("Word.Application")
WrdApp.Visible = True
vTmp2 = ""
vTmp2 = FilePath1 & "MainDoc.doc"
Set WrdDoc = WrdApp.Documents.Open(vTmp2)
FirstRecHolder = 0
FirstRecHolder = FirstRec
Z = 1
Do Until FirstRec > LastRec
DoEvents
WrdDoc.Activate
' FIRST LINE WHERE THE ERROR MESSAGE IS DISPLAYED
WrdApp.Selection.InsertFile Filename:=FilePath2 & "Flyer Row " & FirstRec & ".doc", Range:="", _
ConfirmConversions:=False, Link:=False, Attachment:=False
Z = Z + 1
FirstRec = FirstRec + 1
Loop
Z = Z - 1
PageCount = 0
PageCount = (Z * 2)
PageCount = PageCount + 1
WrdApp.Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=PageCount
WrdApp.Selection.Delete
WrdApp.DisplayAlerts = wdAlertsNone
' SECOND LINE WHERE THE ERROR MESSAGE IS DISPLAYED
WrdApp.ActiveDocument.SaveAs2 Filename:=FilePath2 & "Flyers_" & PgCnt & ".pdf", _
FileFormat:=wdFormatPDF, LockComments:=False, Password:="", _
AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, _
EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData _
:=False, SaveAsAOCELetter:=False, CompatibilityMode:=14
WrdDoc.Close (False)
FirstRec = 0
FirstRec = FirstRecHolder
Do Until FirstRec > LastRec
DoEvents
Kill FilePath2 & "Flyer Row " & FirstRec & ".doc"
FirstRec = FirstRec + 1
Loop
FirstRec = LastRec + 1
End Sub
我注意到每一行都有一个路径和一个文件名。在执行这行代码之前结合路径和文件名会更好吗?
文件名:=FilePath2 & "传单行 " & FirstRec & ".doc" 文件名:=FilePath2 & "Flyers_" & PgCnt & ".pdf"
将 Word 文档保存为 PDF 文件时是否有 200 页或 400 页是否重要?我想要 400 页,因为客户想要 4 - 6 个 PDF 文件和 200 条记录 / 400 页让我们到达那里。
我在创建唯一 Word 文档时关闭和打开 DisplayAlets,但在创建 PDF 文件时我不使用它。我应该吗?
我还注意到 Word 的右下角有一条消息,上面写着“Word 正在发布”Flyer_(唯一编号).pdf,并且正在计算页码。这对我遇到的问题有影响吗?
有没有更好的方法来做我想要用 Excel、Word 和 PDF 做的事情?
任何有关让此代码不间断运行的建议将不胜感激。我当然想在晚上开始,并在我早上起床时创建所有 PDF 文件。
感谢您的帮助和建议。如果您有任何问题或需要我提供任何其他信息,请告诉我.....剃须
【问题讨论】:
标签: excel vba ms-word pdf-generation ole