Visual Basic을 사용하여 Word를 자동화하여 편지 병합을 만드는 방법

요약

이 문서에서는 Word를 자동화하여 외부 데이터 원본에 대한 편지 병합을 만드는 방법을 설명합니다. 또한 이 문서에서는 OLEDB, ODBC 및 DDE(동적 데이터 교환)를 사용하여 데이터에 액세스하는 코드 차이점에 대해서도 설명합니다.

추가 정보

데이터 액세스 방법

Word 편지 병합 문서에 대한 데이터 원본을 프로그래밍 방식으로 설정하려면 먼저 MailMerge 개체의 OpenDataSource 메서드를 호출합니다. OpenDataSource 메서드의 구문은 다음과 같습니다.

<MailMergeObject>.OpenDataSource(Name, [Format], [ConfirmConversions], [ReadOnly], [LinkToSource], [AddToRecentFiles], [PasswordDocument], [PasswordTemplate], [Revert],[WritePasswordDocument], [WritePasswordTemplate], [Connection], [SQLStatement], [SQLStatement1], [OpenExclusive], [SubType]) 

참고

각 인수에 대한 전체 설명은 Microsoft Word Visual Basic 온라인 도움말을 참조하세요. 외부 데이터 원본에 연결하기 위한 주요 관심사는 Name, Connection 및 SubType 인수입니다. 이러한 세 인수의 서로 다른 조합은 편지 병합에 대한 서로 다른 데이터 액세스 방법을 나타냅니다.

OLEDB 사용

OLEDB는 권장되는 데이터 액세스 방법입니다. OpenDataSource를 사용하여 OLEDB를 데이터 액세스 방법으로 지정하려면 데이터베이스 또는 Office DataSource 연결(.odc)에 경로 및 파일 이름을 가진 Name 인수를 제공합니다. Name 인수에 대한 데이터베이스를 제공하는 경우 데이터베이스 형식을 지원하는 OLEDB 공급자가 설치된 경우 자동으로 OLEDB를 사용합니다.

예시

<MailMergeObject>.OpenDataSource Name:="C:\MyDB.mdb", _
           SQLStatement:="SELECT * FROM [MyTable]"

또는

<MailMergeObject>.OpenDataSource Name:="C:\MyDataSource.odc", _
           SQLStatement:="SELECT * FROM [MyTable]"

Word 및 기타 Office XP 애플리케이션은 외부 데이터 원본에 대한 OLEDB 액세스에 ODSO(Office DataSource 개체)를 사용합니다. ODSO는 Word에서 편지 병합에 OLEDB를 사용하여 데이터에 액세스할 수 있는 유일한 메커니즘입니다. ODSO를 사용하려면 OpenDataSource의 Name 인수가 데이터베이스의 전체 경로이거나 유효한 ODC 파일의 전체 경로여야 합니다. ODSO는 연결 인수의 모든 정보를 무시합니다.

ODBC 사용

메일 병합에 ODBC를 사용하여 시스템에 DSN(사용자 데이터 원본 이름)이 설정된 데이터에 액세스할 수 있습니다. OpenDataSource를 사용하여 ODBC를 데이터 액세스 메서드로 지정하려면 Name 인수에 빈 문자열, Connection 인수에 대한 ODBC 연결 문자열 및 SubType 인수에 wdMergeSubTypeWord2000을 제공합니다.

예시

<MailMergeObject>.OpenDataSource Name:= "", _
     Connection:= "DSN=MySQLServerDSN;DATABASE=pubs;uid=sa;pwd=;", _
     SQLStatement:= "Select au_id, au_lname, au_fname from authors", _
     SubType:= wdMergeSubTypeWord2000

DDE 사용

DDE를 사용하여 Microsoft Access 데이터베이스 또는 Microsoft Excel 통합 문서의 데이터에 액세스할 수 있습니다. OpenDataSource를 사용하여 DDE를 데이터 액세스 방법으로 지정하려면 데이터베이스 또는 Name 인수의 통합 문서에 경로와 파일 이름을, SubType 인수에 wdMergeSubTypeWord2000을 제공합니다.

예시

<MailMergeObject>.OpenDataSource Name:="C:\MyDB.mdb", _
           SQLStatement:="SELECT * FROM [MyTable]", _
           SubType:=wdMergeSubTypeWord2000

Automation 샘플

다음 샘플 코드는 OLEDB(ODSO를 통해)를 사용하여 양식 편지에 대한 편지 병합을 만들고 실행합니다. 사용되는 데이터 원본은 샘플 Access 데이터베이스 Northwind.mdb입니다. Northwind가 설치되지 않은 경우 Microsoft Access 2002 또는 Microsoft Office Access 2003을 시작합니다. 도움말 메뉴에서 샘플 데이터베이스를 클릭한 다음 Northwind 샘플 데이터베이스를 선택하여 이 기능을 설치합니다.

이 샘플을 실행하려면 다음 단계를 수행합니다.

  1. Visual Basic에서 새 표준 EXE 프로젝트를 시작합니다. 기본적으로 Form1이 만들어집니다.

  2. 프로젝트 메뉴에서 참조를 클릭합니다.

  3. 참조 목록에서 Microsoft Word 2000 개체 라이브러리 를 클릭한 다음 확인을 클릭합니다.

    참고 Microsoft Office Word 2003 개체를 사용하려면 참조 목록에 Microsoft Word 11.0 개체 라이브러리를 추가한 다음 확인을 클릭합니다.

  4. Form1에 CommandButton 컨트롤을 추가합니다.

  5. Form1의 코드 모듈에 다음 코드를 추가합니다.

    참고 필요한 경우 Office XP 설치와 일치하도록 Northwind.mdb 경로를 수정합니다.

    Dim WithEvents oApp As Word.Application
    
    Private Sub Form_Load()
        'Start Word.
        Set oApp = CreateObject("Word.Application")
    End Sub
    
    Private Sub Command1_Click()
    
    Dim oMainDoc As Word.Document
        Dim oSel As Word.Selection
        Dim sDBPath as String
    
    'Start a new main document for the mail merge.
        Set oMainDoc = oApp.Documents.Add
    
    With oMainDoc.MailMerge
    
    .MainDocumentType = wdFormLetters
    
    'Set up the mail merge data source to Northwind.mdb.
            sDBPath = "C:\Program Files\Microsoft Office\" & _
                      "OfficeXP\Samples\Northwind.mdb"
            .OpenDataSource Name:=sDBPath, _
               SQLStatement:="SELECT * FROM [Customers]"
    
    'Add the field codes to the document to create the form letter.
            With .Fields
                Set oSel = oApp.Selection
                .Add oSel.Range, "CompanyName"
                oSel.TypeParagraph
                .Add oSel.Range, "Address"
                oSel.TypeParagraph
                .Add oSel.Range, "City"
                oSel.TypeText ", "
                .Add oSel.Range, "Country"
                oSel.TypeParagraph
                oSel.TypeParagraph
                oSel.TypeText "Dear "
                .Add oSel.Range, "ContactName"
                oSel.TypeText ","
                oSel.TypeParagraph
                oSel.TypeParagraph
                oSel.TypeText " This letter is to inform you..."
                oSel.TypeParagraph
                oSel.TypeParagraph
                oSel.TypeText "Sincerely, [Your Name Here]"
            End With
        End With
    
    'Perform the mail merge to a new document.
        With oMainDoc
            .MailMerge.Destination = wdSendToNewDocument
            .MailMerge.Execute Pause:=False
        End With
    
    End Sub
    
    Private Sub oApp_MailMergeAfterMerge(ByVal Doc As Word.Document, ByVal DocResult As Word.Document)
    
    'When the mail merge is complete, 1) make Word visible,
        '2) close the mail merge document leaving only the resulting document
        'open and 3) display a message.
        Doc.Close False
        oApp.Visible = True
        MsgBox "Mail Merge Complete: " & oApp.ActiveDocument.Name
    
    End Sub
    
    Private Sub Form_Unload(Cancel As Integer)
        Set oApp = Nothing
    End Sub
    
  6. F5 키를 눌러 프로그램을 실행합니다.

  7. Form1에서 CommandButton 컨트롤을 클릭하여 편지 병합을 수행합니다.

코드가 완료되면 새 문서가 열려 있는 상태에서 Word가 표시됩니다. 새 문서에는 Northwind.mdb의 Customers 테이블에서 추출한 데이터가 포함된 편지 병합에서 생성된 양식 문자가 포함되어 있습니다.

참조

자세한 내용은 Microsoft 기술 자료의 문서를 참조하세요.

285176 SQL Server XML을 사용하여 클라이언트 쪽 메일 병합을 수행하도록 Word를 자동화하는 방법