Macro da Excel a Word - Suggerimenti per Excel

Sommario

Grazie a Jake che ha fornito la domanda su Excel di questa settimana:

Come posso scrivere una macro che prenda i dati del foglio di calcolo Excel e crei un file Word per ogni riga di dati?

Jake, che bella idea! Ho spesso risultati di vendita per l'intera azienda e sarebbe fantastico poter inviare a ciascun rappresentante solo le proprie informazioni in Word. Puoi farlo da Word utilizzando Stampa unione, ma il controllo di Word da Excel è una prospettiva interessante. L'esempio seguente è abbastanza semplice, ma sarebbe possibile basarsi su questo concetto per realizzare applicazioni abbastanza avanzate.

Per prima cosa, diamo un'occhiata a un set di dati di esempio. Ho creato una cartella di lavoro con due fogli: uno chiamato Dati e uno chiamato Modello. Il foglio di lavoro Dati ha molte righe di dati. Il foglio di lavoro Modello ha la struttura del documento di Word che desidero creare. In questo caso, voglio copiare il nome dalla colonna A del database alla cella C4 sul modello. Le colonne B: E del database andranno nelle celle C10: C13.

Per prima cosa, diamo un'occhiata a un set di dati di esempio. Ho creato una cartella di lavoro con due fogli: uno chiamato Dati e uno chiamato Modello. Il foglio di lavoro Dati ha molte righe di dati. Il foglio di lavoro Modello ha la struttura del documento di Word che desidero creare. In questo caso, voglio copiare il nome dalla colonna A del database alla cella C4 sul modello. Le colonne B: E del database andranno nelle celle C10: C13.

La scheda tecnica
Il foglio modello

Avvia l'editor VB con alt-F11. Poiché vogliamo emettere comandi di Word qui, vai su Strumenti> Riferimenti. Scorri verso il basso per trovare "Microsoft Word 8" e seleziona la casella accanto per selezionare questo elemento.

Per controllare Word da Excel, è necessario definire una variabile per rappresentare l'applicazione Word. Nell'esempio seguente, ho usato appWD. Per tutti i comandi nella macro di Excel che desideri applicare all'applicazione Word, devi semplicemente anteporre al comando appWD. Infatti, poiché non ho mai scritto una riga di codice Word Macro prima, sono andato su Word, ho registrato le azioni, quindi ho copiato quel codice in Excel, aggiungendo il prefisso prima di ogni riga.

Sub ControlWord() ' You must pick Microsoft Word 8.0 from Tools>References ' in the VB editor to execute Word commands. ' See VB Help topic "Controlling One Microsoft Office Application from Another" ' for more information. ' Originally published by www.MrExcel.com 2/28/1999 Dim appWD As Word.Application ' Create a new instance of Word & make it visible Set appWD = CreateObject("Word.Application.8") appWD.Visible = True Sheets("Data").Select 'Find the last row with data in the database FinalRow = Range("A9999").End(xlUp).Row For i = 2 To FinalRow Sheets("Data").Select ' Copy the name to cell C4 Range("A" & i).Copy Destination:=Sheets("Template").Range("C4") ' Copy data columns, transpose and paste in C10:C13 Range("B" & i & ":E" & i).Copy Sheets("Template").Select Range("C10").PasteSpecial Transpose:=True ' Copy the data for the new document to the clipboard Range("A1:F15").Copy ' Tell Word to create a new document appWD.Documents.Add ' Tell Word to paste the contents of the clipboard into the new document appWD.Selection.Paste ' Save the new document with a sequential file name appWD.ActiveDocument.SaveAs FileName:="File" & i ' Close this new word document appWD.ActiveDocument.Close Next i ' Close the Word application appWD.Quit End Sub

Dopo aver eseguito questa macro, avrai un nuovo file Word per ogni riga di dati sul tuo foglio dati.

Grazie ancora a Jake per questa fantastica domanda. Esistono molte applicazioni in cui il controllo di Word dall'interno di Excel potrebbe fornire una soluzione potente.

Articoli interessanti...