2013-02-15 6 views
2

포함 된 Word 파일을 사용하여 편지 병합을 수행하는 데 문제가 있습니다. 기본적으로 나는에 매크로를 구축하기 위해 노력하고있어편집 후 포함 된 개체 닫기

:

  • 열고 포함 된 Word 파일
  • 단어의 헛소리로 내보내기 시트를 연결합니다 (의 파일 (2) 객체라고하자)
  • 미리보기 결과
  • 업데이트 목차
  • 수출
  • 가 완료 PD를 떠나 단어 응용 프로그램을 닫습니다 PDF로 파일

개방 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 응용 프로그램 가까이에서 모든 작업을 수행합니다. 그 외에도, 이미 열려있는 다른 문서가 있다면 보이지 않게 만들 것입니다.

도움이 필요하십니까?

건배

편집 : 또한,이 코드가 실행됩니다 기계가 그들에게 말씀 97 및 Word 2007을 둘 것입니다. 이것에

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

이하는을 생성하는 :이 문서는 (있는 경우, 말씀의 기존 인스턴스에 WdApp를 설정) 2007 년 감사

답변

0

변경이 줄을 열고 Word에서 편집해야합니다 사용 종료 방법을 wdApp을 닫으려면

Set WdApp = CreateObject("Word.Application")

: 말씀의 새 인스턴스가 개방 될 수있는 다른 문서를 닫는 방지하기 위해

wdApp.Quit