piątek, 24 października 2014

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

Tym razem kilka słów na temat integracji aplikacji Excel z aplikacją PowerPoint. Zaprezentuję prostą operację polegającą na wkopiowaniu do PowerPointa obiektów pochodzących z arkusza Excel:
  • tabeli danych
  • wykresu
oraz ustawimy odpowiednie pozycje  i wymiary dla powyższych elementów slajdu.

Warto zwrócić szczególną uwagę w poniższym kodzie na edycję z wykorzystaniem zmiennych obiektowych. Zabieg ten jest przeprowadzony celowo w celu poprawienia czytelności kodu oraz wyraźnego wydzielenia, które operacje-obiekty dotyczą Excela, a które PowerPoint'a. Jedyną wada tego rodzaju zapisu to wydłużenie całej procedury o szereg linii związanych z deklaracją zmiennych i ich ustawieniem (linie Dim i Set).

Cała poniższa procedura działa dla prostego pliku Excela, gdzie w arkuszu Arkusz1 (nazwa kodowa arkusza) znajduje się jeden wykres oraz zakres danych wykresu znajduje się w komórkach A1:C4. Pozostałe ważne informacje i wskazówki znaleźć można w poniższym kodzie w postaci komentarzy.


Efektem działania powyższej procedury jest poniższy przykładowy slajd w prezentacji PowerPoint.


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.


poniedziałek, 13 października 2014

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

Kontynuując wpis z ubiegłego tygodnia chciałby krótko zaprezentować drugi typ wiązania a więc...

Wiązanie późne (late binding)

Wiązanie późne nie będzie wymagać od nas żadnych dodatkowych przygotowań i wskazywania zewnętrznych bibliotek wcześniej, niż dopiero na etapie edycji kodu. I tak, aby uruchomić aplikację MS Word i utworzyć w niej nowy dokument niezbędny kod wygląda następująco:


Zalety późnego wiązania:
  • nie wskazujemy konkretnej wersji zewnętrznej biblioteki tak więc kod napisany w środowisku Office 2013 zadziała także skutecznie w starszych wersjach Office, np. 2007 czy 2010
  • biblioteka zostanie podłączona dopiero na etapie kompilacji kodu
Wady późnego wiązania:
  • utrudniona edycja przez co nie jesteśmy w stanie skorzystać z systemu IntelliSense edytując kod dla zewnętrznej aplikacji
  • zazwyczaj mniejsza wydajność kodu
  • brak do 'stałych' języka VBA dla zewnętrznej aplikacji (w miejsce np. WdInformation.wdActiveEndPageNumber niezbędne jest wstawienie numerycznego odpowiednika, tu: 3)

Dla osób zainteresowanych dogłębnie typami wiązań odsyłam do wyszukiwarki Google. Temat ten jest bardzo obszernie przedstawiony w wielu artykułach zarówno w języku polskim jak i językach obcych.

Na koniec chciałbym dodać, że zagadnienia interakcji omawiane są w czasie naszych kursów na poziomie średnio-zaawansowanym. Serdecznie zapraszam na nasze szkolenia z VBA organizowane w Warszawie, Krakowie i Wrocławiu.

poniedziałek, 6 października 2014

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

Tym wpisem chciałbym rozpocząć dłużą serię postów omawiających szereg zagadnień związanych z interakcją pomiędzy aplikacjami pakietu MS Office z wykorzystaniem kodu VBA. Postaram się omówić kilka prostych przykładów dot. aplikacji Excel, Word, PowerPoint i Access.

Rzecz od której nie sposób nie rozpocząć to zagadnienia dot. typów łączenia aplikacji, a więc jak wskazać w kodzie aplikacji Excel inną aplikację, np. Word'a w celu umożliwienia wykonania dalszych operacji w edytorze tekstu z poziomu kodu VBA umieszczonego w Excelu. Zagadnienie to określa się pojęciem 'wiązania' dookreślając możliwość zastosowania dwóch typów wiązań: 'wiązania wczesnego' (early binding) lub 'wiązania późnego' (late binding). W tym i kolejnym wpisie omówię krótko oba te warianty od strony praktycznej.

Wczesne wiązanie (early binding)...
...wymagać będzie od użytkownika wykonania akcji 'przed kompilacją kodu'. Operacja wiąże się z koniecznością ustawienia referencji w edytorze VBA w pozycji Menu >> Tools >> References... gdzie następnie należy wskazać i zaznaczyć odpowiednią bibliotekę lub aplikację. Przykładowo obrazuje to poniższy zrzut ekranu gdzie z poziomu aplikacji Excel wskazano referencję do aplikacji Word






Niezbędny kod VBA tworzący wiązanie wyglądać będzie następująco (tu: uruchomienie i wyświetlenie aplikacji Word oraz utworzenie nowego dokumentu)


Zalety wczesnego wiązania:
  • ułatwiona edycja z wykorzystaniem IntelliSense. W powyższym przykładzie dla zmiennej appWord będzie podpowiadać się zestaw dostępnych metod i właściwości  
  • szybkość wykonania kodu- kompilator wie jakie zewnętrzne biblioteki należy uruchomić już na etapie prekompilacji
  • dostęp do 'stałych' języka VBA dla zewnętrznej aplikacji (np. WdInformation.wdActiveEndPageNumber)
Wady wczesnego wiązania:
  • ustawiając referencję do wskazanej biblioteki oczekiwana jest dokładnie ta sama wersja aplikacji, z którą wykonywana jest interakcja. Powyższy przykład nie zadziała z aplikacją MS Word w wersji 2010 lub wcześniejszą.
W kolejnym wpisie przedstawię pojęcie wiązania późnego...