poniedziałek, 20 października 2014

Interakcja pomiędzy aplikacjami MS Office (3 z ...wielu)

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.

01Sub WordApplicationBookmark()
02 
03    Dim appWRD As Word.Application
04    Set appWRD = New Word.Application
05    
06    appWRD.Visible = True
07    
08    'praca ze zmiennymi obiektowymi jest _
09    jedną z bardziej wydajnych i efektywnych _
10    sposobów tworzenia kodu:
11    
12    Dim docWRD As Word.Document
13    Set docWRD = appWRD.Documents.Open(ThisWorkbook.Path & _
14                "\dokument z zakładkami.docx")
15    
16    'uruchamiamy procedurę zewnętrzną przekazując parametry: _
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"
21    
22    
23End Sub
01Sub PodmianaTresciZakladki(DokumentWord As Word.Document, _
02                                Zakladka As String, _
03                                Tekst As String)
04    
05    With DokumentWord
06        'odnajdujemy zakładkę i
07        'zapamiętujemy jej miejsce początkowe
08        Dim ZakladkaStart As Long
09        ZakladkaStart = .Range.Bookmarks(Zakladka).Start
10        
11        'podmieniamy tekst zakładki na nowy co _
12         skutkuje jej automatycznym usunięciem
13        .Bookmarks(Zakladka).Range.Text = Tekst
14        
15        'przywracamy zakładkę w celu ponownego, _
16         późniejszego jej wykorzystania
17        .Bookmarks.Add Name:=Zakladka, _
18                Range:=.Range(ZakladkaStart, _
19                                ZakladkaStart + Len(Tekst))
20    
21    End With
22 
23End Sub

Brak komentarzy:

Prześlij komentarz