Sterowanie Wordem z poziomu Excela
W przykładzie zademonstrujemy sesję automatyzacji z wykorzystaniem Worda.
Procedura utworzy trzy notatki zdefiniowane przez użytkownika w Wordzie, a następnie zapisze każdy dokument do pliku Region1.docx, Region2.docx, Region3.docx.
Na rysunku 1 zaprezentowano dokument utworzony za pomocą procedury.
Rysunek 1. Ten dokument Worda został utworzony za pomocą procedury Excela
Informacje wykorzystane do utworzenia notatek są zapisane w arkuszu Excela, tak jak pokazano na rysunku 2.
Rysunek 2. Word automatycznie generuje trzy notatki na podstawie danych zapisanych w arkuszu Excela
Skoroszyt z tym przykładem - TworzenieNotatek.xlsm.
0. Utwóz plik Excela.
1. Należy utworzyć procedure
Sub MakeMemos()
. . .
End Sub
2. Procedura rozpoczyna uruchomienie Worda i utworzenie obiektu (późne wiązanie)
Set WordApp = CreateObject("Word.Application")
' WordApp.Visible = True
3. Pobieranie informacji z arkusza
message = Sheets("Arkusz1").Range("Notatka")
Tekst notatki zapisano w zakresie o nazwie Notatka (w komórce E7) (rysunek 3). Wszystkie działania odbywają się w tle: oznacza to, że Word jest niewidoczny.
Rysunek 3. Zakres o nazwie Notatka (w komórce E7)
4. Procedura przetwarza w pętli trzy wiersze danych zapisanych w arkuszu Arkuszl.
Przetwarzanie w pętli wszystkich rekordów w arkuszu Arkusz1
For i = 1 To Application.CountA(Sheets("Arkusz1").Range("A:A"))
…
Next i
5. Aktualizacja informacji o postępie zadania na pasku stanu
Application.StatusBar = "Przetwarzanie rekordu " & i
Po skonczanu przetwarzania w pętli wszystkich rekordów
Application.StatusBar = ""
6. Przypisanie bieżących danych do zmiennych
Region = Sheets("Arkusz1").Cells(i, 1).Value
SalesNum = Sheets("Arkusz1").Cells(i, 2).Value
SalesAmt = Format(Sheets("Arkusz1").Cells(i, 3).Value, "#,000")
7. Procedura wykorzystuje metody i właściwości Worda do utworzenia każdej notatki i zapisania jej na dysku.
Wysłanie poleceń do Worda
Tworzenie powyższego makra składało się z kilku etapów.
Najpierw zarejestrowałem w Wordzie makro obejmujące działania tworzenia nowego dokumentu, wprowadzania i formatowania tekstu oraz zapisywania pliku. Dzięki temu uzyskałem informacje o właściwościach i metodach potrzebnych do wykonania zadania.
Oryginalne makro zawierało na przykład następującą instrukcję:
Documents.Add
Instrukcję tę zmodyfikowałem w następujący sposób:
With WordApp
.Documents.Add
' pozostałe instrukcje
End With
Następnie skopiowałem makro do modułu Excela.
8. Zapis pliku do dysku
WordApp.ActiveDocument.SaveAs Filename:= ThisWorkbook.Path & _
"\" & Region & ".docx "
9.Zniszczenie obiektu
WordApp.Quit
Set WordApp = Nothing
10. Odtworzenie paska stanu
Application.StatusBar = ""
11. Communikat
MsgBox Application.CountA(Sheets("Arkusz1").Range("A:A")) _
& " notatki utworzono i zapisano w " & _
ThisWorkbook.Path
Rysunek 4. Communikat