2
我在使用嵌入式Word文件执行邮件合并时遇到了一些问题。从本质上讲编辑后关闭嵌入对象
我试图建立一个宏:
- 打开嵌入的Word文件(假设该文件是对象(2))
- 导出表到单词呸连接
- 预览结果
- 更新表的内容
- 文件导出为PDF
- 关闭Word应用程序留下完成PD F开
下面是我高达到目前为止的代码,但它不会事后关闭WINWORD应用:
Public Sub fExportSVF()
Dim WdObj As Object
Dim WdApp As Word.Application
Dim WdDoc As Word.Document
Dim intIndex As Integer
Dim strPeril As String
Dim strClaimNumber As String
Dim strPHName As String
Dim strSaveLoc As String
Dim strWbName As String
Dim strTempLoc As String
Dim xlObj As Object
Application.ScreenUpdating = False
Call fUnhideSheet("EXPORT_DATA")
Application.DisplayAlerts = False
ThisWorkbook.Save
Application.DisplayAlerts = True
strTempLoc = Environ("TEMP") & Int((9999 - 1 + 1) * Rnd + 1) & ".xlsm"
strWbName = Worksheets("Settings").Range("B4").Value
strPeril = Worksheets("Settings").Range("B3").Value
strClaimNumber = Worksheets("Settings").Range("B1").Value
strPHName = Worksheets("Settings").Range("B2").Value
If Dir(strTempLoc) <> "" Then Kill strTempLoc
Set xlObj = CreateObject("Scripting.FileSystemObject")
xlObj.CopyFile ThisWorkbook.FullName, strTempLoc, True
strSaveLoc = ActiveWorkbook.Path & "\" & strClaimNumber & _
" - " & strPHName & " - " & strPeril & ".pdf"
Select Case strPeril
Case "Acc"
intIndex = 2
Case "Acci"
intIndex = 3
Case "AD"
intIndex = 4
Case "Es"
intIndex = 5
Case "Fi"
intIndex = 6
Case "Fld"
intIndex = 7
Case "Impt"
intIndex = 8
Case "St"
intIndex = 9
Case "Th"
intIndex = 10
End Select
Set WdObj = Worksheets("Settings").OLEObjects(intIndex)
WdObj.Activate
WdObj.Object.Application.Visible = False
Set WdApp = GetObject(, "Word.Application")
Set WdDoc = WdApp.ActiveDocument
WdApp.Visible = True
WdDoc.MailMerge.MainDocumentType = wdFormLetters
WdDoc.MailMerge.OpenDataSource Name:= _
strWbName _
, ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
Format:=wdOpenFormatAuto, Connection:= _
"Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=" & strTempLoc & _
";Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet " & _
"OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine " _
, SQLStatement:="SELECT * FROM `EXPORT_DATA$`", SQLStatement1:="", _
SubType:=wdMergeSubTypeAccess
WdDoc.MailMerge.ViewMailMergeFieldCodes = wdToggle
WdDoc.TablesOfContents(1).Update
WdDoc.ExportAsFixedFormat outputfilename:=strSaveLoc, _
ExportFormat:=wdExportFormatPDF, OpenAfterExport:=True, OptimizeFor:= _
wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, _
Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
BitmapMissingFonts:=True, UseISO19005_1:=False
WdApp.ActiveDocument.Close wdDoNotSaveChanges
Set WdApp = Nothing
Set WdObj = Nothing
Kill strTempLoc
Call fHideSheet("EXPORT_DATA")
Application.ScreenUpdating = True
End Sub
所以它做的一切除了关闭WINWORD应用。除此之外,我注意到,如果还有另一个文档已经打开,它也会使其不可见。
请帮忙吗?
干杯
编辑:另外,该代码将在运行的机器将同时拥有Word 97和Word 2007在他们身上。该文件将需要打开并在Word中编辑2007感谢