Excel To Word Macro - Συμβουλές για το Excel

Πίνακας περιεχομένων

Χάρη στον Τζέικ που παρείχε την ερώτηση Excel αυτής της εβδομάδας:

Πώς μπορώ να γράψω μια μακροεντολή που θα λαμβάνει δεδομένα υπολογιστικού φύλλου Excel και θα δημιουργεί ένα αρχείο Word για κάθε σειρά δεδομένων;

Τζέικ - τι υπέροχη ιδέα! Έχω συχνά αποτελέσματα πωλήσεων για ολόκληρη την εταιρεία και θα ήταν υπέροχο να στέλνω σε κάθε εκπρόσωπο μόνο τις πληροφορίες του στο Word. Θα μπορούσατε να το κάνετε από το Word χρησιμοποιώντας το Mail Merge, αλλά ο έλεγχος του Word από το Excel είναι μια ενδιαφέρουσα προοπτική. Το παρακάτω παράδειγμα είναι αρκετά απλό, αλλά κάποιος θα μπορούσε να βασιστεί σε αυτήν την ιδέα για να κάνει αρκετά προηγμένες εφαρμογές.

Αρχικά, ας ρίξουμε μια ματιά σε ένα δείγμα συνόλου δεδομένων. Δημιούργησα ένα βιβλίο εργασίας με δύο φύλλα - ένα που ονομάζεται Δεδομένα και ένα που ονομάζεται Πρότυπο. Το φύλλο εργασίας δεδομένων έχει πολλές σειρές δεδομένων. Το φύλλο εργασίας προτύπου έχει τη δομή του εγγράφου του Word που θέλω να δημιουργήσω. Σε αυτήν την περίπτωση, θα ήθελα να αντιγράψω το όνομα από τη στήλη Α της βάσης δεδομένων στο κελί C4 του προτύπου. Οι στήλες B: E της βάσης δεδομένων θα εμφανίζονται στα κελιά C10: C13.

Αρχικά, ας ρίξουμε μια ματιά σε ένα δείγμα συνόλου δεδομένων. Δημιούργησα ένα βιβλίο εργασίας με δύο φύλλα - ένα που ονομάζεται Δεδομένα και ένα που ονομάζεται Πρότυπο. Το φύλλο εργασίας δεδομένων έχει πολλές σειρές δεδομένων. Το φύλλο εργασίας προτύπου έχει τη δομή του εγγράφου του Word που θέλω να δημιουργήσω. Σε αυτήν την περίπτωση, θα ήθελα να αντιγράψω το όνομα από τη στήλη Α της βάσης δεδομένων στο κελί C4 του προτύπου. Οι στήλες B: E της βάσης δεδομένων θα εμφανίζονται στα κελιά C10: C13.

Το φύλλο δεδομένων
Το φύλλο προτύπου

Ξεκινήστε τον Επεξεργαστή VB με alt-F11. Εφόσον θέλουμε να εκδώσουμε εντολές Word εδώ, μεταβείτε στα Εργαλεία> Αναφορές. Κάντε κύλιση προς τα κάτω για να βρείτε το "Microsoft Word 8" και επιλέξτε το πλαίσιο δίπλα για να επιλέξετε αυτό το στοιχείο.

Για να ελέγξετε το Word από το Excel, πρέπει να ορίσετε μια μεταβλητή που θα αντιπροσωπεύει την εφαρμογή Word. Στο παρακάτω παράδειγμα, χρησιμοποίησα το appWD. Για οποιεσδήποτε εντολές στη μακροεντολή Excel που θέλετε να εφαρμόσετε στην εφαρμογή Word, απλώς προθέστε την εντολή με το appWD. Στην πραγματικότητα, δεδομένου ότι δεν έχω γράψει ποτέ μια γραμμή κώδικα μακροεντολών Word, πήγα στο Word, κατέγραψα τις ενέργειες και μετά αντιγράψαμε αυτόν τον κώδικα στο Excel, προσθέτοντας το πρόθεμα πριν από κάθε γραμμή.

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

Μετά την εκτέλεση αυτής της μακροεντολής, θα έχετε ένα νέο αρχείο Word για κάθε σειρά δεδομένων στο φύλλο δεδομένων σας.

Ευχαριστώ πάλι στον Τζέικ για αυτήν την υπέροχη ερώτηση. Υπάρχουν πολλές εφαρμογές όπου ο έλεγχος του Word από το Excel μπορεί να προσφέρει μια ισχυρή λύση.

ενδιαφέροντα άρθρα...