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:
Avviare un nuovo progetto EXE Standard in Visual Basic. Per impostazione predefinita, viene creato Form1.
Scegliere Riferimenti dal menu Progetto.
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.
Aggiungere un controllo CommandButton a Form1.
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
Premere F5 per eseguire il programma.
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