Droga na skróty

O VBA (Visual Basic for Applications) pisaliśmy już w CHIP-ie wielokrotnie. Nie bez powodu – skrypty osadzane w dokumentach popularnego pakietu biurowego powodują nieraz, że niemożliwe staje się możliwe.

Tym razem zajmiemy się przede wszystkim takim oprogramowaniem Worda i Excela, aby w określonych sytuacjach zadane czynności były wykonywane automatycznie. Ponadto postaramy się wykorzystać możliwości, jakie daje współpraca pomiędzy poszczególnymi aplikacjami wchodzącymi w skład MS Office.

Osoby, które po raz pierwszy stykają się z VBA, powinny zapoznać się przynajmniej z podstawami programowania (również obiektowego) w Visual Basicu. Pomocne w tym mogą być np. archiwalne artykuły zamieszczone na płycie CD dołączonej do CHIP-a (patrz: ramka “Więcej informacji”).

Na dobry początek

Bywa, że po otwarciu nowego dokumentu Worda czy Excela każdorazowo wykonujemy te same czynności. Czasem można tę sytuację uprościć, stosując odpowiednie szablony dokumentów. Zdarza się jednak, że nie jest to możliwe – np. wtedy, gdy w tekście mają się znaleźć pola zależne od zawartości bazy danych. Czas wtedy sięgnąć po makropolecenia.

Word i Excel oferują specjalną kategorię makr, które pozwalają na wykonywanie wskazanych czynności w chwili otwierania/zamykania dokumentu, bezpośrednio przed jego wydrukowaniem itd. Charakteryzują się one… odpowiednimi nazwami. I tak makro AutoNew jest uruchamiane w momencie tworzenia dokumentu, a

AutoOpen

– w chwili otwierania istniejącego pliku. Spis makropoleceń z grupy nazywanej “Auto Macros” można znaleźć w tabelce u dołu tej strony. Aby skorzystać z “automakra”, wystarczy użyć polecenia Narzędzia | Makro | Makra, wpisać odpowiednią nazwę w polu Nazwa makra i nacisnąć przycisk Utwórz .

UWAGA:

automatyczne uruchomienie makra opisywanego typu można zablokować – wystarczy w momencie wykonywania skojarzonej z nim akcji (np. potwierdzenia otwarcia dokumentu dla makra AutoOpen) przytrzymać klawisz [Shift].

Zdarzenia – to proste!

Podobne, jak w przypadku “automakr”, efekty (tylko w bardziej elastyczny sposób) osiągniemy, korzystając z mechanizmu zdarzeń. Termin “zdarzenie” ma w VBA (podobnie jak i w innych językach programowania) znaczenie intuicyjne – jest to procedura wywoływana w momencie wystąpienia określonych okoliczności – kliknięcia przycisku przez użytkownika, otwarcia/zamknięcia dokumentu, naciśnięcia klawisza itd. VBA pozwala programiście na przypisanie własnego kodu do obsługi niektórych zdarzeń. Zanim będzie to możliwe, należy jednak wykonać pewne – nie do końca zgodne z intuicją – czynności.

Otwieramy edytor VBA (kombinacja klawiszy [Alt]+[F11]) i zaznaczamy w Eksploratorze projektu wybrany dokument. Jeśli na przykład chcemy, aby nasze makropolecenia były dostępne w każdym standardowym dokumencie Worda, klikamy projekt

Normal

(odpowiednik szablonu Normal.dot). Teraz tworzymy nową klasę (

Insert | Class module

) i wstawiamy do niej wiersz:

Public WithEvents MyApp As _Application

Na liście rozwijalnej

Object

(po lewej stronie, u góry okna z kodem) pojawi się zadeklarowana właśnie klasa MyApp. Wybieramy ją, aby zdefiniować potrzebne nam metody. Na liście

Procedure

(po prawej stronie) zaznaczamy teraz interesującą nas procedurę obsługi zdarzenia – np.

NewDocument

. Zgodnie z konwencją przyjętą w Visual Basicu zostanie wtedy utworzona procedura MyApp_NewDocument, czyli metoda NewDocument klasy MyApp .

Możemy teraz wypełnić dowolną treścią utworzoną procedurę. Jeśli np. chcemy do każdego nowego dokumentu dodawać w nagłówku datę powstania tekstu, powinniśmy wpisać następujący fragment kodu:

Private Sub MyApp_NewDocument(ByVal_

Doc As Document)
 With Doc.Sections(1).Headers_
 (wdHeaderFooterPrimary).Range
 .InsertDateTime DateTimeFormat:=_
 “dd/MM/yyyy, hh:mm”,_
 InsertAsField:=False
 .InsertBefore Text:=’Utworzono: ‘
 .Font.Italic = True
 .Paragraphs.Alignment = _
 wdAlignParagraphRight
 End With

End Sub

“Automakra” Office’a
NazwaUruchamiane w momencie…
AutoExecstartu Worda/Excela
AutoNewtworzenia nowego dokumentu
AutoOpenotwierania dokumentu
AutoClosezamykania dokumentu
AutoExitzamykania aplikacji

Więcej:bezcatnews