Jendą z praktycznych technik wykorzystujących interakcję pomiędzy aplikacjami pakietu Office jest wypełnianie dokumentu Word danymi pochodzącymi np. z tabeli znajdującej się w aplikacji Excel. Chodzi o operację zbliżoną do pojęcia 'korespondencji seryjnej' z jedną istotną różnicą- odpowiednie informacje z Excela umieszczane są w zakładkach znajdujących się w dokumencie Word.
Prześledźmy to na następującym przykładzie:
1. Tworzymy dwa pliki - plik Excel'a o dowolnej nazwie oraz plik Word'a, który umownie nazwiemy 'dokument z zakładkami.docx'. Dla prostoty tego przykładu oba pliki proszę zapisać we wspólnym folderze (plik Excela powinien być typu xlsm gdyż zaraz dodamy do niego odpowiednie makro).
2. W treści dokumentu Word'a umieśćmy jakiś tekst, np.
Szanowny Pan Jan Kowalski,
w nawiązaniu do rozmowy telefonicznej...
i jednocześnie oznaczmy naszego '
Jana Kowalskiego' jako zakładkę o nazwie
ImieNazwisko. To właśnie ta zakładka będzie przykładowym fragmentem tekstu, który będziemy następnie podmieniać wykorzystując kod VBA. Zamknijmy utworzony dokument.
3. W pliku Excela musimy przygotować odpowiedni kod, który wykona następujące operacje:
- uruchomi aplikację MS Word (wykorzystując technikę wczesnego wiązania)
- otworzy plik DOCX znajdujący się w tym samym folderze
- wstawi w zakładce ImieNazwisko dane nowej osoby
- i tu kluczowy moment- wstawi ponownie zakładkę ImieNazwisko ze względu na fakt, że poprzedni punkt automatycznie ją usunął
- opcjonalnie można dodać polecenie zapisywania pliku Worda- ten fragment nie został uwzględniony w poniższym kodzie.
Całość obrazuje poniższy zestaw dwóch procedur. Wewnątrz kodu znaleźć można dodatkowe komentarze wyjaśniające kluczowe punkty kodu VBA.
01 | Sub WordApplicationBookmark() |
03 | Dim appWRD As Word.Application |
04 | Set appWRD = New Word.Application |
09 | jedną z bardziej wydajnych i efektywnych _ |
10 | sposobów tworzenia kodu: |
12 | Dim docWRD As Word.Document |
13 | Set docWRD = appWRD.Documents.Open(ThisWorkbook.Path & _ |
14 | "\dokument z zakładkami.docx" ) |
17 | dokument Word w którym wykonany akcję, _ |
18 | nazwę zakładki- ImieNazwisko, _ |
19 | nową treść zakładki- docelowo pobierana z komórki Excela |
20 | PodmianaTresciZakladki docWRD, "ImieNazwisko" , "Tadeusz Nowak" |
01 | Sub PodmianaTresciZakladki(DokumentWord As Word.Document, _ |
08 | Dim ZakladkaStart As Long |
09 | ZakladkaStart = .Range.Bookmarks(Zakladka).Start |
12 | skutkuje jej automatycznym usunięciem |
13 | .Bookmarks(Zakladka).Range.Text = Tekst |
16 | późniejszego jej wykorzystania |
17 | .Bookmarks.Add Name:=Zakladka, _ |
18 | Range:=.Range(ZakladkaStart, _ |
19 | ZakladkaStart + Len(Tekst)) |
Brak komentarzy:
Prześlij komentarz