Excel 编辑后关闭嵌入对象

Excel 编辑后关闭嵌入对象,excel,vba,ms-word,exit,mailmerge,Excel,Vba,Ms Word,Exit,Mailmerge,我在使用嵌入式Word文件执行邮件合并时遇到一些问题。本质上 我正在尝试构建一个宏来: 打开一个嵌入的Word文件(假设该文件是Object(2)) 将导出表连接到单词fie 预览结果 更新目录 将文件导出为PDF格式 关闭word应用程序,打开已完成的PDF 以下是我到目前为止编写的代码,但它不会在以后关闭WINWORD应用程序: Public Sub fExportSVF() Dim WdObj As Object Dim WdApp As Word.Applicati

我在使用嵌入式Word文件执行邮件合并时遇到一些问题。本质上

我正在尝试构建一个宏来:

  • 打开一个嵌入的Word文件(假设该文件是Object(2))
  • 将导出表连接到单词fie
  • 预览结果
  • 更新目录
  • 将文件导出为PDF格式
  • 关闭word应用程序,打开已完成的PDF
以下是我到目前为止编写的代码,但它不会在以后关闭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
Public Sub-fExportSVF()
作为对象的Dim WdObj
将WdApp设置为Word.Application
将WdDoc设置为Word.Document
Dim intIndex为整数
作为字符串的Dim strPeril
Dim strClaimNumber作为字符串
将strPHName设置为字符串
作为字符串的Dim STRASVELOC
作为字符串的Dim strWbName
作为字符串的Dim strTempLoc
作为对象的Dim xlObj
Application.ScreenUpdating=False
调用fUnhideSheet(“导出数据”)
Application.DisplayAlerts=False
此工作簿。保存
Application.DisplayAlerts=True
strTempLoc=Environ(“TEMP”)和Int((9999-1+1)*Rnd+1)和“.xlsm”
strWbName=工作表(“设置”).范围(“B4”).值
strPeril=工作表(“设置”).范围(“B3”).值
STRCAIMNUMBER=工作表(“设置”).范围(“B1”).值
strPHName=工作表(“设置”).范围(“B2”).值
如果Dir(strTempLoc)“,则杀死strTempLoc
Set xlObj=CreateObject(“Scripting.FileSystemObject”)
xlObj.CopyFile ThisWorkbook.FullName,strTempLoc,True
strSaveLoc=ActiveWorkbook.Path&“\”&strcaimnumber&_
“-”&strPHName&“-”&strPeril&“.pdf”
选择Case strPeril
案例“Acc”
intIndex=2
“Acci”案
intIndex=3
案例“广告”
intIndex=4
案例“Es”
intIndex=5
案例“Fi”
intIndex=6
案例“Fld”
intIndex=7
“进口”案
intIndex=8
案例“St”
intIndex=9
案例“Th”
intIndex=10
结束选择
Set WdObj=工作表(“设置”).OLEObjects(intIndex)
WdObj.激活
WdObj.Object.Application.Visible=False
Set WdApp=GetObject(,“Word.Application”)
设置WdDoc=WdApp.ActiveDocument
WdApp.Visible=True
WdDoc.MailMerge.MainDocumentType=wdFormLetters
WdDoc.MailMerge.OpenDataSource名称:=_
strWbName_
,ConfirmConversions:=False,只读:=False,LinkToSource:=True_
AddToRecentFiles:=False,PasswordDocument:=“”,PasswordTemplate:=“”_
WritePasswordDocument:=“”,WritePasswordTemplate:=“”,Revert:=False_
格式:=wdOpenFormatAuto,连接:=_
“Provider=Microsoft.ACE.OLEDB.12.0;用户ID=Admin;数据源=“&strTempLoc&_
“Mode=Read;Extended Properties=”“HDR=YES;IMEX=1;”;Jet“&_
“OLEDB:系统数据库=”“”;Jet OLEDB:注册表路径=“”;Jet OLEDB:引擎”_
,SQLStatement:=“从`导出数据$`中选择*”,SQLStatement1:=”_
子类型:=wdmergesubiteaccess
WdDoc.MailMerge.viewmailmergefieldcode=wdToggle
WdDoc.TablesOfContents(1).更新
WdDoc.ExportAsFixedFormat outputfilename:=strSaveLoc_
ExportFormat:=wdExportFormatPDF,OpenAfterExport:=True,OptimizeFor:=_
wdExportOptimizeForPrint,范围:=wdExportAllDocument,从:=1到:=1_
Item:=wdExportDocumentContent,IncludeDocProps:=True,KeepIRM:=True_
CreateBookmarks:=wdExportCreateNoBookmarks,DocStructureTags:=True_
BitmapMissingFonts:=真,UseISO19005_1:=假
WdApp.ActiveDocument.Close wdDoNotSaveChanges
设置WdApp=Nothing
设置WdObj=Nothing
杀死strTempLoc
调用fHideSheet(“导出数据”)
Application.ScreenUpdating=True
端接头
因此,除了关闭WINWORD应用程序之外,它还可以执行其他所有操作。除此之外,我注意到,如果有另一个文档已经打开,它也会使该文档不可见

需要帮忙吗

干杯

编辑:
此外,运行此代码的机器上同时有Word 97和Word 2007。文档需要在Word 2007中打开和编辑。

更改此行(将WdApp设置为Word的现有实例,如果有的话):

Set-WdApp=GetObject(,“Word.Application”)

为此,将创建Word的新实例,以防止关闭可能打开的其他文档:

Set-WdApp=CreateObject(“Word.Application”)

要关闭
wdApp
,请使用退出方法:

wdApp.Quit