2013-02-15 92 views
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感谢

回答

0

改变这一行(设置WdApp到Word的现有实例,如果有的话):

Set WdApp = GetObject(, "Word.Application")

这一点,它创建了一个Word中的新实例,以防止关闭可能是打开其他文件:

Set WdApp = CreateObject("Word.Application")

要关闭wdApp使用Quit方法:

wdApp.Quit