Come automatizzare Word con Visual Basic per creare una stampa unione

Riepilogo

Questo articolo illustra come automatizzare Word per creare una stampa unione per un'origine dati esterna. Questo articolo illustra anche le differenze di codice tra l'accesso ai dati con OLEDB, ODBC e dynamic data exchange (DDE).

Ulteriori informazioni

Metodi di accesso ai dati

Per configurare a livello di codice un'origine dati per un documento di stampa unione di Word, chiamare prima di tutto il metodo OpenDataSource di un oggetto MailMerge. La sintassi per il metodo OpenDataSource è la seguente:

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

Nota

Per una descrizione completa di ogni argomento, vedere la Guida online di Microsoft Word Visual Basic. Di interesse principale per la connessione a un'origine dati esterna sono gli argomenti Name, Connection e SubType. Combinazioni diverse di questi tre argomenti rappresentano metodi di accesso ai dati diversi per la stampa unione.

Uso di OLEDB

OLEDB è il metodo di accesso ai dati consigliato. Per specificare OLEDB come metodo di accesso ai dati con OpenDataSource, specificare l'argomento Name con il percorso e il nome del file al database o a una connessione Office DataSource (con estensione odc). Se si specifica un database per l'argomento Nome, Word userà automaticamente OLEDB se è installato un provider OLEDB che supporta il formato del database.

Esempio

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

oppure

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

Word e altre applicazioni Office XP usano l'oggetto ODSO (Office DataSource Object) per l'accesso OLEDB a origini dati esterne. ODSO è l'unico meccanismo con cui Word può accedere ai dati usando OLEDB per una stampa unione. ODSO richiede che l'argomento Nome per OpenDataSource sia un percorso completo di un database o un percorso completo di un file ODC valido. ODSO ignora tutte le informazioni nell'argomento Connection.

Uso di ODBC

È possibile utilizzare ODBC per la stampa unione per accedere ai dati per i quali è stato configurato un nome di origine dati utente (DSN) nel sistema. Per specificare ODBC come metodo di accesso ai dati con OpenDataSource, specificare una stringa vuota per l'argomento Name, una stringa di connessione ODBC per l'argomento Connection e wdMergeSubTypeWord2000 per l'argomento SubType.

Esempio

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

Uso di DDE

È possibile usare DDE per accedere ai dati nei database di Microsoft Access o nelle cartelle di lavoro di Microsoft Excel. Per specificare DDE come metodo di accesso ai dati con OpenDataSource, specificare il percorso e il nome del file al database o alla cartella di lavoro per l'argomento Name e wdMergeSubTypeWord2000 per l'argomento SubType.

Esempio

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

Esempio di automazione

Il codice di esempio seguente crea ed esegue una stampa unione per le lettere di modulo usando OLEDB (tramite ODSO). L'origine dati utilizzata è il database di Access di esempio Northwind.mdb. Se Northwind non è installato, avviare Microsoft Access 2002 o Microsoft Office Access 2003. Nel menu ? fare clic su Database di esempio e quindi scegliere Database di esempio Northwind per installare questa funzionalità.

Per eseguire questo esempio, seguire questa procedura:

  1. Avviare un nuovo progetto EXE Standard in Visual Basic. Per impostazione predefinita, viene creato Form1.

  2. Scegliere Riferimenti dal menu Progetto.

  3. Fare clic su Libreria oggetti di Microsoft Word 2000 nell'elenco dei riferimenti e quindi fare clic su OK.

    Nota Per usare l'oggetto di Microsoft Office Word 2003, aggiungere la libreria di oggetti di Microsoft Word 11.0 nell'elenco di riferimenti e quindi fare clic su OK.

  4. Aggiungere un controllo CommandButton a Form1.

  5. Aggiungere il codice seguente al modulo di codice per Form1.

    Nota Se necessario, modificare il percorso di Northwind.mdb in modo che corrisponda all'installazione per Office XP.

    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. Premere F5 per eseguire il programma.

  7. Fare clic sul controllo CommandButton in Form1 per eseguire la stampa unione.

Al termine del codice, Word viene reso visibile con un nuovo documento aperto. Il nuovo documento contiene lettere di modulo risultanti da una stampa unione contenente dati estratti dalla tabella Customers in Northwind.mdb.

Riferimenti

Per altre informazioni, vedere l'articolo della Microsoft Knowledge Base:

285176 Come automatizzare Word per eseguire una stampa unione sul lato client usando XML da SQL Server