Excel to Word Macro - Excel Tips

Spisie treści

Podziękowania dla Jake'a, który zadał w tym tygodniu pytanie dotyczące programu Excel:

Jak napisać makro, które pobierze dane z arkusza kalkulacyjnego Excel i utworzy plik Word dla każdego wiersza danych?

Jake - co za wspaniały pomysł! Często mam wyniki sprzedaży dla całej firmy i byłoby wspaniale móc wysłać każdemu przedstawicielowi tylko jego informacje w programie Word. Możesz to zrobić w programie Word za pomocą funkcji korespondencji seryjnej, ale kontrolowanie programu Word z programu Excel to interesująca perspektywa. Poniższy przykład jest dość prosty, ale na tej koncepcji można by zbudować dość zaawansowane aplikacje.

Najpierw przyjrzyjmy się przykładowemu zestawowi danych. Stworzyłem skoroszyt z dwoma arkuszami - jeden o nazwie Dane, a drugi o nazwie Szablon. Arkusz danych zawiera wiele wierszy danych. Arkusz szablonu ma strukturę dokumentu programu Word, który chcę utworzyć. W takim przypadku będę chciał skopiować nazwę z kolumny A bazy danych do komórki C4 w szablonie. Kolumny B: E bazy danych zostaną umieszczone w komórkach C10: C13.

Najpierw przyjrzyjmy się przykładowemu zestawowi danych. Stworzyłem skoroszyt z dwoma arkuszami - jeden o nazwie Dane, a drugi o nazwie Szablon. Arkusz danych zawiera wiele wierszy danych. Arkusz szablonu ma strukturę dokumentu programu Word, który chcę utworzyć. W takim przypadku będę chciał skopiować nazwę z kolumny A bazy danych do komórki C4 w szablonie. Kolumny B: E bazy danych zostaną umieszczone w komórkach C10: C13.

Arkusz danych
Arkusz szablonu

Uruchom Edytor VB z alt-F11. Ponieważ chcemy tutaj wydawać polecenia programu Word, przejdź do Narzędzia> Referencje. Przewiń w dół, aby znaleźć „Microsoft Word 8” i zaznacz pole obok, aby wybrać ten element.

Aby sterować programem Word z programu Excel, musisz zdefiniować zmienną reprezentującą aplikację Word. W poniższym przykładzie użyłem appWD. W przypadku każdego polecenia w makrze programu Excel, które chcesz zastosować w aplikacji Word, wystarczy poprzedzić polecenie przedrostkiem appWD. W rzeczywistości, ponieważ nigdy wcześniej nie napisałem wiersza kodu Word Macro, przeszedłem do programu Word, nagrałem działania, a następnie skopiowałem ten kod do programu Excel, dodając przedrostek przed każdym wierszem.

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

Po uruchomieniu tego makra będziesz mieć jeden nowy plik Word dla każdego wiersza danych w arkuszu danych.

Jeszcze raz dziękuję Jake'owi za to świetne pytanie. Istnieje wiele aplikacji, w których sterowanie programem Word z poziomu programu Excel może stanowić potężne rozwiązanie.

Interesujące artykuły...