Pakiet Microsoft Office to nie tylko zaawansowany zestaw aplikacji biurowych, ale także platforma, na podstawie której programiści Visual Basica for Applications mogą pisać własne programy. Chociaż możliwości dostosowania poszczególnych aplikacji Office"a do specyficznych wymagań użytkownika bez konieczności pisania kodu są spore, dopiero użycie VBA pozwala na tworzenie własnych kreatorów, dodatków i asystentów.
Książka "MS Office 2000 i 2002/XP. Tworzenie własnych aplikacji VBA" opisuje sposób tworzenia specyficznych dla MS Office dodatków z użyciem języka Visual Basic for Applications. Przeznaczona jest dla osób znających ten język programowania w stopniu podstawowym, chcących poznać tajniki programowania Worda, Excela i Accessa.
Opisano:
* Różne rodzaje plików, używanych przez MS Office
* Wykorzystanie technologii ActiveX
* Tworzenie własnych pasków narzędziowych
* Tworzenie asystentów
* Pisanie kreatorów Worda
* Integrację poszczególnych składników pakietu Office
* Pisanie własnej aplikacji wyszukującej pliki Excela
* Tworzenie bazy danych opartej na Accessie jako samodzielnej aplikacji
Programiści VBA znajdą w tej książce także wiele cennych wskazówek dotyczących efektywnego wykorzystania dostępnych typów danych oraz optymalizacji kodu. Autor prezentuje wiele fragmentów kodu, które możesz zastosować we własnych aplikacjach.
Dostosuj MS Office do swoich wymagań
* Pisz własne kreatory i dodatki do aplikacji Office
* Naucz się integrować poszczególne programy pakietu
* Poznaj wewnętrzne mechanizmy działania Office"a
* Skorzystaj z ćwiczeń i fragmentów kodu dostępnych na płycie CD
MS Office 2000 i 2002/XP. Tworzenie własnych aplikacji w VBA
1. IDZ DO
PRZYK£ADOWY ROZDZIA£
SPIS TRE CI MS Office 2000 i 2002/XP.
Tworzenie w³asnych
KATALOG KSI¥¯EK
aplikacji w VBA
KATALOG ONLINE
Autor: Maciej £o
ZAMÓW DRUKOWANY KATALOG ISBN: 83-7197-878-2
Format: B5, stron: 138
TWÓJ KOSZYK
DODAJ DO KOSZYKA Pakiet Microsoft Office to nie tylko zaawansowany zestaw aplikacji biurowych, ale tak¿e
platforma, na podstawie której programi ci Visual Basica for Applications mog¹ pisaæ
w³asne programy. Chocia¿ mo¿liwo ci dostosowania poszczególnych aplikacji Office'a
CENNIK I INFORMACJE do specyficznych wymagañ u¿ytkownika bez konieczno ci pisania kodu s¹ spore,
dopiero u¿ycie VBA pozwala na tworzenie w³asnych kreatorów, dodatków i asystentów.
ZAMÓW INFORMACJE Ksi¹¿ka „MS Office 2000 i 2002/XP. Tworzenie w³asnych aplikacji VBA” opisuje sposób
O NOWO CIACH tworzenia specyficznych dla MS Office dodatków z u¿yciem jêzyka Visual Basic for
Applications. Przeznaczona jest dla osób znaj¹cych ten jêzyk programowania w stopniu
ZAMÓW CENNIK podstawowym, chc¹cych poznaæ tajniki programowania Worda, Excela i Accessa.
Opisano:
CZYTELNIA • Ró¿ne rodzaje plików, u¿ywanych przez MS Office
• Wykorzystanie technologii ActiveX
FRAGMENTY KSI¥¯EK ONLINE • Tworzenie w³asnych pasków narzêdziowych
• Tworzenie asystentów
• Pisanie kreatorów Worda
• Integracjê poszczególnych sk³adników pakietu Office
• Pisanie w³asnej aplikacji wyszukuj¹cej pliki Excela
• Tworzenie bazy danych opartej na Accessie jako samodzielnej aplikacji
Programi ci VBA znajd¹ w tej ksi¹¿ce tak¿e wiele cennych wskazówek dotycz¹cych
efektywnego wykorzystania dostêpnych typów danych oraz optymalizacji kodu. Autor
prezentuje wiele fragmentów kodu, które mo¿esz zastosowaæ we w³asnych aplikacjach.
Dostosuj MS Office do swoich wymagañ :
• Pisz w³asne kreatory i dodatki do aplikacji Office
Wydawnictwo Helion • Naucz siê integrowaæ poszczególne programy pakietu
ul. Chopina 6 • Poznaj wewnêtrzne mechanizmy dzia³ania Office'a
44-100 Gliwice • Skorzystaj z æwiczeñ i fragmentów kodu dostêpnych na p³ycie CD
tel. (32)230-98-63
e-mail: helion@helion.pl
2. Spis treści
Podziękowania...................................................................................5
Zanim rozpoczniesz….........................................................................7
Do kogo jest adresowana ta ksią ka? ......................................................................... 7
O czym jest ta ksią ka? ............................................................................................ 8
Rozdział 1. Programowanie — informacje ogólne..................................................9
Projekt to podstawa ................................................................................................. 9
Czemu ma słu yć aplikacja?................................................................................ 9
Kto będzie jej u ywał? ......................................................................................11
Wizualizacja.....................................................................................................11
Przelanie pomysłu na papier...............................................................................11
Podsumowanie .................................................................................................12
Najwa niejsze informacje o VBA.............................................................................12
Efektywne stosowanie typów .............................................................................12
Prawda i fałsz (Boolean) ....................................................................................15
Numeryczne typy danych ..................................................................................16
Tablice.............................................................................................................18
Optymalizacja kodu ..........................................................................................20
Odwołania do funkcji Windows API...................................................................31
Pliki pakietu Office ...........................................................................................34
Rozdział 2. Wspólne cechy i obiekty programów Office.......................................43
Obiekty Office 97 — omówienie..............................................................................43
Dobrodziejstwo ActiveX....................................................................................43
Obiekt Application ............................................................................................47
Obiekt Commandbars........................................................................................51
Obiekt Assistant................................................................................................59
Obiekt FileSearch .............................................................................................63
Obiekt DocumentProperties ...............................................................................64
Środowisko aplikacji ...............................................................................................65
Funkcja Environ ...............................................................................................65
Funkcja Shell....................................................................................................67
Instrukcja AppActivate ......................................................................................68
Funkcja DoEvents.............................................................................................69
Funkcja Timer ..................................................................................................69
Instrukcja SendKeys .........................................................................................70
Automakra .......................................................................................................71
3. 4 MS Office 2000 i 2002/XP. Tworzenie własnych aplikacji w VBA
Rozdział 3. Programowanie — MS Word.............................................................77
Tworzenie szablonu z własnym paskiem narzędzi ......................................................77
Tworzenie własnego kreatora...................................................................................80
Współpraca z innymi aplikacjami Office...................................................................87
Współpraca z MS Access...................................................................................88
Współpraca z MS Excel.....................................................................................90
Rozdział 4. Programowanie — MS Excel ............................................................93
Własne okno dialogowe poszukiwania plików ...........................................................93
Dodajemy element do menu kontekstowego — nowa funkcja.....................................94
Tworzenie aplikacji „krok po kroku” ........................................................................96
Własne menu podręczne dla formularzy MS Word i MS Excel............................100
Wska katalog w formularzu MS Word i MS Excel............................................102
Współpraca z innymi aplikacjami Office.................................................................104
Rozdział 5. Programowanie — MS Access .......................................................109
SQL jako motor baz danych ..................................................................................109
Tworzenie formularza wyszukującego dane ............................................................110
Uwagi o konstruowaniu zapytań w kodzie.........................................................114
Podformularze i podraporty ...................................................................................115
MS Access i Internet .............................................................................................116
Eksportowanie tabeli, kwerendy, formularza lub raportu w formacie HTML ........116
Eksportowanie danych do serwera FTP w sieci Internet .....................................116
Współpraca z XML.........................................................................................117
Tworzenie bazy danych jako samodzielnej aplikacji................................................117
Ograniczenia bazy danych ...............................................................................117
Parametryzacja bazy danych ............................................................................118
Zakończenie..................................................................................131
Skorowidz......................................................................................133
4. Rozdział 2.
Wspólne cechy i obiekty
programów Office
Choć tak wiele ró ni aplikacje Office od siebie, bo ka da słu y do czego innego, to
przyglądając się im od strony informatycznej widzimy, e mają wiele wspólnego. Jak
wiele mają wspólnego, tak te wiele je ró ni. Rozdział 2 jest poświęcony właśnie tym
podobieństwom i ró nicom.
Obiekty Office 97 — omówienie
W tym rozdziale zajmę się obiektami pakietu Office dostępnymi w ka dej z omawia-
nych aplikacji. Są nimi:
obiekt Application,
obiekt CommandBars,
obiekt Assistant,
obiekt FileSearch,
obiekt DocumentProperties.
Zanim jednak to uczynię, opowiem Ci pewną historię, a nazwę ją „Dobrodziejstwo
ActiveX”.
Dobrodziejstwo ActiveX
Domyślam się, e nieraz spotkałeś się z terminem ActiveX. Być mo e nawet dokładnie
wiesz, co on oznacza, ale tytułem przypomnienia:
5. 44 MS Office 2000 i 2002/XP. Tworzenie własnych aplikacji w VBA
ActiveX to nazwa zbioru technologii, które pozwalają budować i u ywać
obiektów za pomocą technologii COM 1 i DCOM 2.
Na czym polega to dobrodziejstwo w pakiecie Office? Aplikacje takie jak Word, Excel
czy Access są właśnie obiektami ActiveX. To oznacza, e mo esz manipulować jedną
aplikacją Office z poziomu drugiej. Ba, mało tego, mo esz równie uzyskać dostęp do
obiektów tej aplikacji, niezale nie od tego, czy będziesz to robił lokalnie na swoim kom-
puterze, czy w sieci.
Jak tego dokonać?
Jeśli chcesz uruchomić kod w jednej aplikacji Office, który będzie pracował z obiek-
tami w innej aplikacji, musisz wykonać następujące kroki:
1. Ustaw odwołanie do biblioteki tej innej aplikacji w oknie dialogowym Odwołania
(menu Narzędzia). Jeśli tego dokonasz, uzyskasz dostęp do tej aplikacji oraz
wszystkich jej obiektów, właściwości i metod. Chcesz odwołać się do Worda,
wska Microsoft Word 8.0 Object Library. Chcesz odwołać się do Excela, wska
Microsoft Excel 8.0 Object Library. Chcesz odwołać się do MS Access, wska
Microsoft Access 8.0 Object Library.
Pamiętaj, nie musisz wskazywać biblioteki typu do aplikacji, w której pracujesz,
a tylko do aplikacji, do której chcesz uzyskać dostęp!
2. Zadeklaruj zmienną obiektową, która wska e na obiekty w innej aplikacji
określonego typu. Deklaracja zmiennej obiektowej za pomocą klauzuli #U
1DLGEV spowoduje utworzenie zmiennej zawierającej odwołanie do dowolnego
obiektu. Dostęp do tego obiektu będzie odbywał się w sposób opóźniony, tzn.
przez dowiązanie w trakcie wykonywania programu. Dlatego lepiej jest utworzyć
zmienną obiektową określonego typu, tj. zadeklarować zmienną obiektową
z określonym identyfikatorem klasy. Spowoduje to tzw. dowiązanie wczesne,
dokonywane w trakcie kompilacji programu. Taką zmienną mo esz na przykład
utworzyć tak: &KO #RR:N CU 'ZEGN#RRNKECVKQP lub KO FQE9TF CU 9QTF
QEWOGPV.
Używając odwołań bez numeru wersji utworzysz obiekt w wersji wywoływanej apli-
kacji, takiej, jaka jest aktualnie zainstalowana na komputerze. Jeśli jesteś pe-
wien, że jest to Office 97, to zadeklaruj zmienną obiektową z numerem wersji, np.
KO #RR:N CU 'ZEGN#RRNKECVKQP. I jeszcze jedna istotna rzecz — nie wszystkie
obiekty, ich właściwości i metody będą dostępne w poprzednich wersjach aplikacji
Office (z czasów, kiedy nabywało się każdą aplikację oddzielnie)!
1
COM (ang. Component Object Model) — technologia umo liwiająca tworzenie obiektów oraz dostęp
do nich z programu Windows.
2
DCOM (ang. Distributed Component Object Model) — technologia umo liwiająca dystrybucję
obiektów w sieci lokalnej i Internecie.
6. Rozdział 2. ♦ Wspólne cechy i obiekty programów Office 45
3. U yj funkcji %TGCVG1DLGEV z identyfikatorem klasy aplikacji (OLE Programmatic
Identifier), by uzyskać dostęp do tej aplikacji lub jej obiektów. Przypisanie
do zmiennej obiektowej wartości będzie wyglądało tak: KO #RR:N CU 'ZEGN
#RRNKECVKQP — deklaracja zmiennej, 5GV #RR:N %TGCVG1DLGEV
'ZEGN
#RRNKECVKQP — przypisanie wartości.
4. U yj właściwości i metod obiektu przechowywanego w zmiennej. Na przykład,
następująca instrukcja spowoduje utworzenie nowego skoroszytu: #RR:N
9QTMDQQMU#FF.
5. Po zakończeniu prac z inną aplikacją, u yj metody 3WKV, by ją zamknąć.
Oto jak tego dokonać: #RR:N3WKV.
Listing 2.1 demonstruje, jak z programu MS Excel przenieść dane do programu
MS Word.
Listing 2.1. MS Word w MS Excel
%QPUV PCYCP[CMTGU #U 5VTKPI CPGA5RTGFC
KO YF#RR #U 9QTF#RRNKECVKQP
KO PCYC6CDGNK #U 5VTKPI
5WD QKGNC
KO VOR$QQNGCP #U $QQNGCP
PCYC6CDGNK 6JKU9QTMDQQM5JGGVU
4CPIG
#
VOR$QQNGCP 7VYQTQMWOGPV
+H VOR$QQNGCP 6JGP
/UI$QZ QMWOGPV /5 9QTF YTC FCP[OK VCDGNK XD%T A
PCYC6CDGNK XD%T A
QUVCN RQO[UNPKG WVYQTQP[ XD+PHQTOCVKQP 5WMEGU
YF#RR8KUKDNG 6TWG
'NUG
/UI$QZ 9[UVCRKN[ DNGF[ RQFECU VYQTGPKC FQMWOGPVW /5 9QTF XD%T A
QMWOGPV OQIN XD%T A
PKG QUVCE WVYQTQP[ XD%T A
QUVCE WVYQTQP[ DNGFCOK XD%T A
5RTCYF EQ OQINQ D[E RT[E[PC DNGFW XD'ZENCOCVKQP 0KGRQYQFGPKG
'PF +H
'PF 5WD
(WPEVKQP 7VYQTQMWOGPV
#U $QQNGCP
KO YFQE #U QEWOGPV
KO O[4CPIG9 #U 9QTF4CPIG
KO O[4CPIG' #U 4CPIG
KO O[6CDNG #U 6CDNG
KO O[5GN #U 9QTF5GNGEVKQP
KO KNG9KGT #U .QPI
KO KNG-QN #U .QPI
1P 'TTQT )Q6Q 'TTA7VYQTQMWOGPV
7VYQTQMWOGPV 6TWG
KNG9KGT 6JKU9QTMDQQM5JGGVU
4CPIG
PCYCP[CMTGU4QYU%QWPV
KNG-QN 6JKU9QTMDQQM5JGGVU
4CPIG
PCYCP[CMTGU%QNWOPU%QWPV
5GV YF#RR %TGCVG1DLGEV
9QTF#RRNKECVKQP
YF#RR8KUKDNG 6TWG
5GV YFQE YF#RRQEWOGPVU#FF
8. Rozdział 2. ♦ Wspólne cechy i obiekty programów Office 47
Na dysku CD-ROM, w katalogu PrzykladyCz_II, w pliku CreateDoc.xls znajduje się
pełny kod, opisy i odpowiedź na pytanie.
Obiekt Application
Jest to bardzo interesujący obiekt i będzie on często przeze mnie u ywany w przykła-
dach. Obiekt Application odwołuje się do aktywnej aplikacji Office. Oznacza to, e pod-
czas pracy w edytorze tekstów Word, obiekt Application odwołuje się właśnie do tego
programu oraz zawiera wszystkie obiekty i kolekcje obiektów tej aplikacji. Jak nale y
to rozumieć? Mo esz u yć tego obiektu do zastosowania metod lub ustawień właści-
wości dla całej aplikacji: #RRNKECVKQP5GV1RVKQP 5JQY 5VCVWU $CT 6TWG lub do
wywołania metod lub ustawień właściwości dla dowolnego obiektu (kolekcji obiektów)
danej aplikacji, tak jakbyś osobiście tych obiektów u ywał: QEOF1RGP(QTO COÎYKGPKC
(otwieranie formularza „Zamówienia”).
W instrukcji pierwszej jawnie posłu yłem się obiektem Application. Przykład drugi ju
nie zawierał jawnego wywołania obiektu Application, a mimo to podany kod jest po-
prawny i zostanie prawidłowo zinterpretowany przez aplikację Access. Jak to mo liwe?
Jeśli nie wiesz, przeczytaj jeszcze raz to, co dotychczas przeczytałeś. W zdaniu drugim
zapewniam Cię, e obiekt Application posiada wszystkie obiekty danej aplikacji. Dla
VBA nie musisz jawnie posługiwać się tym kwalifikatorem obiektu.
Oczywiście przykład drugi będzie poprawny wyłącznie w aplikacji Access, ponieważ
inne programy z pakietu Office nie posiadają obiektu Q%OF. O obiektach poszcze-
gólnych aplikacji dowiesz się w kolejnych częściach książki.
Instancyjność aplikacji
Rozpatrując aplikacje Office pod kątem wykorzystania ich w kodzie, a uściślając — pod
kątem tworzenia nowej instancji klasy aplikacji, wyró niamy aplikacje jedno- lub wie-
lokrotnego wystąpienia, u ycia. Na przykład MS Word jest aplikacją jednokrotnego
wystąpienia. Oznacza to, e kod:
KO YF#RR #U 9QTF#RRNKECVKQP
5GV YF#RR 0GY 9QTF#RRNKECVKQP
niezale nie od tego, jak wiele w danej chwili jest uruchomionych instancji (kopii)
MS Word, zawsze będzie tworzył nową instancję aplikacji. Zaś aplikacja wielokrotnego
wystąpienia (jaką jest na przykład Outlook), niezale nie od tego, jak wiele w kodzie bę-
dzie odwołań do instancji tej aplikacji, gdy ta aplikacja jest otwarta, zawsze będzie wska-
zywać na aplikację ju otwartą. Przykładowo, je eli Outlook będzie otwarty, wszystkie
odwołania do nowej instancji klasy (aplikacji) w przedstawionym kodzie (Listing 2.2):
Listing 2.2. Odwołania do instancji aplikacji
KO 1W#RRA #U 1WVNQQM#RRNKECVKQP
KO 1W#RRA #U 1WVNQQM#RRNKECVKQP
KO 1W#RRA #U 1WVNQQM#RRNKECVKQP
9. 48 MS Office 2000 i 2002/XP. Tworzenie własnych aplikacji w VBA
5GV 1W#RRA 0GY 1WVNQQM#RRNKECVKQP
5GV 1W#RRA %TGCVG1DLGEV
1WVNQQM#RRNKECVKQP
5GV 1W#RRA )GV1DLGEV
1WVNQQM#RRNKECVKQP
zawsze będą wskazywać na tę samą instancję MS Outlook, ju otwartą.
Tabela 2.1 przedstawia typy aplikacji MS Office.
Tabela 2.1. Podział aplikacji MS Office ze względu na krotność instancji
Aplikacja Krotność instancji Tworzy za każdym razem...
MS Access jedno… nową instancję aplikacji niezale nie od liczby
ju uruchomionych
MS Excel jedno… nową instancję aplikacji niezale nie od liczby
ju uruchomionych
MS Word jedno… nową instancję aplikacji niezale nie od liczby
ju uruchomionych
MS FrontPage jedno… nową instancję aplikacji niezale nie od liczby
ju uruchomionych
MS Outlook wielo… zmienną obiektową zwracającą instancję aplikacji
ju uruchomionej
MS PowerPoint wielo… zmienną obiektową zwracającą instancję aplikacji
ju uruchomionej
Jak zauwa yłeś, do tworzenia nowej instancji klasy słu y funkcja %TGCVG1DLGEV. Są dwa
najwa niejsze zastosowania tej funkcji:
Sprawdzenie, czy na danym komputerze jest zainstalowana aplikacja, której
tworzysz kopię. Przykładowy kod (Listing 2.3):
Listing 2.3. U ycie funkcji CreateObject do sprawdzenia, czy na danym komputerze jest zainstalowana
aplikacja
KO #RR1DL #U 1DLGEV
5WD %[,GUV#EEGUU
KO D$QQN #U $QQNGCP
D$QQN 6YQT-QRKG#RNKMCELK
#EEGUU#RRNKECVKQP
+H 0QV D$QQN 6JGP
/UI$QZ /5 #EEGUU PKG LGUV CKPUVCNQYCP[ PC V[O MQORWVGTG
XD+PHQTOCVKQP 2T[MTQ OK
'ZKV 5WD
'PF +H
+H D$QQN 6JGP
/UI$QZ /5 #EEGUU LGUV CKPUVCNQYCP[ PC V[O MQORWVGTG XD+PHQTOCVKQP
,GUV
9KVJ #RR1DL
VW OQGU FQNCE[E QFRQYKGFPK MQF PR
'PF 9KVJ
'PF +H
'PF 5WD
10. Rozdział 2. ♦ Wspólne cechy i obiekty programów Office 49
(WPEVKQP 6YQT-QRKG#RNKMCELK
#RR0COG #U 5VTKPI #U $QQNGCP
6YQT-QRKG#RNKMCELK 6TWG
1P 'TTQT 4GUWOG 0GZV
5GV #RR1DL %TGCVG1DLGEV
#RR0COG
+H 'TT 6JGP PKG CKPCUVCNQYCPC CRNKMCELC
6YQT-QRKG#RNKMCELK (CNUG
'PF +H
'PF (WPEVKQP
Na dysku CD-ROM w katalogu PrzykladyCz_II znajdziesz plik CzyJest.xls, z ko-
dem listingu 2.3. Zwróć też uwagę na deklarację obiektu aplikacji, odbywa się on
w sposób opóźniony.
Odwołanie się do aplikacji, której nie na lokalnym komputerze ale jest na innym
komputerze w sieci. Przykładem takiego zastosowania mo e być potrzeba
wydrukowania raportu z bazy MS Access umiejscowionej na serwerze z pliku
MS Excel, nawet jeśli MS Access nie jest zainstalowany na komputerze, z którego
wyszło ądanie drukowania. Wtedy u ycie funkcji %TGCVG1DLGEV musi odbyć się
z dwoma argumentami: nazwą aplikacji i nazwą serwera.
Listing 2.4. Drukowanie z serwera
5WD TWMWL5GTYGTC
KO #EE#RR #U #EEGUU#RRNKECVKQP
1P 'TTQT 4GUWOG 0GZV
5GV #EE#RR %TGCVG1DLGEV
#EEGUU#RRNKECVKQP /QL5GTYGT
+H 'TT 6JGP
/UI$QZ $NGFPC PCYC UGTYGTC NWD UGTYGT PKG HWPMELQPWLG XD'ZENCOCVKQP 2TQDNGO
'ZKV 5WD
'PF +H
9KVJ #EE#RR
VW KPUVTWMELG FKCNCLCEG PC QDKGMEKG FTWMWLCEG TCRQTV
'PF 9KVJ
'PF 5WD
Aby kod listingu 2.4 mógł zadziałać muszą być spełnione następujące warunki:
zainstalowany MS Office XP (funkcja CreateObject z dwoma argumentami jest do-
stępna dopiero od wersji XP) oraz odpowiednio skonfigurowany DCOM na serwe-
rze i lokalnym komputerze (na przykład programem Dcomcnfg.exe).
W tekście opisującym krotność instancji posłu yłem się równie funkcją )GV1DLGEV.
Mo esz jej u ywać do zwrócenia informacji o tym, czy:
jest ju uruchomiona aplikacja i utworzyć zmienną obiektową wskazującą na tę
aplikację. Listing 2.5 ilustruje przykładowe zastosowanie funkcji )GV1DLGEV.
11. 50 MS Office 2000 i 2002/XP. Tworzenie własnych aplikacji w VBA
Listing 2.5. Czy jest uruchomiona aplikacja?
5WD %[1VYCTV[#EEGUU
KO D$QQN #U $QQNGCP
D$QQN %[1VYCTVC#RR
#EEGUU#RRNKECVKQP
LGUNK PKG QVYCTVC CRNKMCELC VYQT PQYC MQRKG
+H 0QV D$QQN 6JGP D$QQN 6YQT-QRKG#RNKMCELK
#EEGUU#RRNKECVKQP
+H D$QQN 6JGP
9KVJ #RR1DL
VW OQGU FQNCE[E QFRQYKGFPK MQF PR
'PF 9KVJ
'PF +H
'PF 5WD
(WPEVKQP %[1VYCTVC#RR
#RR0COG #U 5VTKPI #U $QQNGCP
%[1VYCTVC#RR 6TWG
1P 'TTQT 4GUWOG 0GZV
URTCYF E[ LGUV QVYCTVC
5GV #RR1DL )GV1DLGEV
#RR0COG
+H 'TT 6JGP PKG WTWEJQOKQPC CRNKMCELC
%[1VYCTVC#RR (CNUG
'PF +H
'PF (WPEVKQP
Jeżeli masz uruchomionych kilka kopii aplikacji, którą chcesz zautomatyzować, nie
masz gwarancji, która instancję zwróci Ci funkcja )GV1DLGEV, ponieważ funkcja ta
tworzy zmienną obiektową wskazującą na aktualnie otwartą aplikację jednokrotnego
wystąpienia.
oraz do otwarcia pliku przez odpowiednią aplikację MS Office. Przyjrzyj się
listingowi 2.6.
Listing 2.6. Otwarcie odpowiedniej aplikacji MS Office według rozszerzenia pliku.
5WD 1VYQT
KO DDQQN #U $QQNGCP
KO UEKGMCQ2NKMW #U 5VTKPI
UEKGMCQ2NKMW VGUVFQE
DDQQN 1VYQT1FRQYKGFPKC#RNKMCELG
UEKGMCQ2NKMW
+H DDQQN 6JGP
/UI$QZ 2NKM UEKGMCQ2NKMW QUVCN QVYCTV[ XD%T A
C EJYKNG QUVCPKG COMPKGV[ XD+PHQTOCVKQP 7FCNQ UKG
#RR1DL#EVKXCVG WCMV[YPKL QMPQ CRNKMCELK RTGF COMPKGEKGO
#RR1DL%NQUG
5GV #RR1DL 0QVJKPI
'PF +H
'PF 5WD
(WPEVKQP 1VYQT1FRQYKGFPKC#RNKMCELG
UEKGMCQ2NKMW #U 5VTKPI #U $QQNGCP
1VYQT1FRQYKGFPKC#RNKMCELG 6TWG
12. Rozdział 2. ♦ Wspólne cechy i obiekty programów Office 51
1P 'TTQT 4GUWOG 0GZV
5GV #RR1DL )GV1DLGEV
UEKGMCQ2NKMW
+H 'TT 6JGP 1VYQT1FRQYKGFPKC#RNKMCELG (CNUG
'PF (WPEVKQP
Instancyjność aplikacji nie jest łatwym zagadnieniem, ale mam nadzieję, e choć tro-
chę przybli yłem Ci tę tematykę.
Obiekt Commandbars
Ka da z aplikacji Office posiada własny zestaw pasków menu i narzędzi. Programu-
jąc własne programy pod Office zapewne chciałbyś umieć programowo tworzyć wła-
sne paski narzędzi czy menu. W tej części tego rozdziału opiszę jak to zrobić.
Na początek słowo wyjaśnienia: jeśli u ywam słowa pasek bez kontekstu, to mam na
myśli pasek menu lub pasek narzędzi lub pasek menu podręcznego. W ka dym innym
przypadku precyzuję, o jaki pasek mi chodzi.
Podobieństwa i różnice
Wszystkie aplikacje Office u ywają tej samej technologii do tworzenia pasków menu
i pasków narzędzi. Technologię tę firma Microsoft nazwała „Commandbars Object
Model”. Są trzy rodzaje pasków: paski narzędzi, paski menu i menu podręczne. Menu
podręczne są wyświetlane na trzy sposoby: jako przeciągnij-upuść z paska menu, jako
podmenu i jako menu kontekstowe. Menu kontekstowe są wyświetlane, jeśli kliknie-
my prawym klawiszem myszy.
Poniewa obiekty CommandBars są dostępne we wszystkich aplikacjach Office, mo esz
napisać kod, by manipulować paskami narzędzi czy menu we wszystkich aplikacjach
Office. Ka da aplikacja Office przechowuje informacje o swoich paskach w innym miej-
scu i, w niektórych przypadkach, w inny sposób. Podstawową ró nicą jest to, jak i gdzie
ka dy program Office przechowuje paski utworzone przez u ytkownika.
Kiedy poczynisz zmiany we wbudowanych paskach, informacje o tych zmianach zosta-
ną zapisane w rejestrze Windows w profilu każdego użytkownika (jeśli Windows jest
skonfigurowany na kilku użytkowników). Informacje o zakresie „widzialności i „loka-
lizacji są przechowywane w rejestrze Windows bez podziału na użytkowników. Po-
nadto każda aplikacja Office przechowuje swoje paski w dokumencie, w którym te
paski zostały utworzone lub w konkretnym pliku. Oznacza to, że możesz kopiować
paski tylko między dokumentami tego samego typu. Zatem, nie możesz skopiować
paska z MS Word i używać go w MS Access.
CommandBars aplikacji MS Access
Paski, które utworzysz w programie MS Access, są przechowywane w bazie danych,
w której zostały utworzone. Jeśli chcesz utworzyć pasek, który będzie dostępny w innych
13. 52 MS Office 2000 i 2002/XP. Tworzenie własnych aplikacji w VBA
bazach danych, musisz utworzyć go w bibliotecznej bazie danych i ustawić odwołanie do
tej bibliotecznej bazy danych w ka dej bazie, w której dany pasek ma być dostępny.
Informacje o wbudowanych paskach narzędzi przechowywane są w rejestrze.
CommandBars aplikacji MS Excel
MS Excel umo liwia Ci przechowywanie pasków w danym skoroszycie lub w obszarze
roboczym. Domyślnie paski Excel tworzone programowo są zapisywane w obszarze ro-
boczym danego u ytkownika. Jeśli Windows ma zdefiniowanych wielu u ytkowników,
jak na przykład w środowisku Windows NT, obszar roboczy u ytkownika zapisywany
jest w katalogu C:Winnt w pliku utworzonym od nazwy u ytkownika — jak podano
poni ej.
Jeśli nie zostały utworzone profile u ytkowników, to obszar roboczy u ytkownika za-
pisywany jest w katalogu C:Windows w pliku o nazwie składającej się z następujących
elementów:
nazwy u ytkownika podanej w oknie dialogowym rejestrującym produkty Office
(na przykład: Dorcia),
numeru wersji Office (na przykład: 8),
rozszerzenia tego pliku — *.xlb.
W wyniku tego otrzymujemy nazwę pliku: Dorcia8.xlb.
Aby zapisać pasek w danym skoroszycie, musisz otworzyć okno dialogowe Dostosuj…,
a następnie nacisnąć przycisk Dołącz. W polu po lewej stronie wybierz swój pasek
i kliknij przycisk Kopiuj.
Niestety, możesz kopiować paski do skoroszytu tylko „ręcznie”, niemożliwe jest
skopiowanie paska z poziomu VBA. Podobnie rzecz ma się, jeśli chodzi o usuwanie.
Jeśli chcesz usunąć pasek z aktywnego skoroszytu, wybierz z okna po prawej stronie
swój pasek, a następnie kliknij przycisk Usuń. Nie bój się dodawać i usuwać paski
z aktywnego skoroszytu. Usuwasz tylko ich kopie z tego skoroszytu, a nie z obszaru
roboczego.
Wszystkie paski zapisane w obszarze roboczym będą dostępne w ka dym z otwieranych
skoroszytów. Jeśli chcesz, by dany pasek nie był dostępny w innych skoroszytach,
musisz programowo go usunąć lub ukryć. Paski z danego skoroszytu będą dostępne tyl-
ko w tym skoroszycie.
Jeżeli wybierzesz polecenie z paska zapisanego w obszarze roboczym, utworzonego
w skoroszycie X (tu jest zapisany kod, który polecenie ma wykonać), to skoroszyt X
zostanie automatycznie otwarty i będzie widoczny. Jeśli otworzysz skoroszyt zawiera-
jący pasek, który nie istnieje w Twoim obszarze roboczym, to zostanie on skopiowa-
ny do obszaru roboczego. Ta kopia nie jest usuwana po zamknięciu tego skoroszytu.
14. Rozdział 2. ♦ Wspólne cechy i obiekty programów Office 53
CommandBars aplikacji MS Word
MS Word mo e przechowywać paski w kilku miejscach: w pliku Normal.dot (szablo-
nie globalnym), innym szablonie (*.dot) lub w danym dokumencie (*.doc). Ró nica
polega na tym, e paski przechowywane w pliku Normal.dot są dostępne dla ka dego
dokumentu, który tworzysz, nawet jeśli jest oparty na innym szablonie.
Nie jest dobrą praktyką przechowywać własne paski narzędzi w pliku szablonu glo-
balnego, ponieważ może to spowodować rozrost tego pliku do dużych rozmiarów
i MS Word będzie ładował się wolno. Ponadto, będąc administratorem sam dbałbyś
o to, by plik Normal.dot był chroniony przed zapisem. Uchroniłoby Cię to przed groź-
nymi wirusami. Zatem przechowuj własne paski narzędzi w pliku zwykłego szablonu.
Pasek utworzony w szablonie będzie dostępny w ka dym dokumencie opartym na tym
szablonie. Jeśli zaś pasek został utworzony w dokumencie, to będzie on dostępny tyl-
ko po otwarciu tego dokumentu.
Domyślnie wszystkie paski, które utworzysz, będą zapisane w pliku Normal.dot., chyba
e zapiszesz je dla danego szablonu lub dokumentu w oknie DostosujZapisz w… Jeśli
utworzysz własny pasek za pomocą VBA, musisz określić, gdzie ma zostać zapisany
za pomocą właściwości CustomizationContext obiektu Application.
CustomizationContext — zwraca lub ustawia obiekt, szablon lub dokument, w którym
zmieniasz paski. Właściwość ta jest zarówno do odczytu, jak i zapisu. Poni szy przy-
kład (listing 2.7) dodaje kombinację klawiszy do polecenia Zamknij i zapisuje w pliku
szablonu globalnego.
Listing 2.7. Dodawanie kombinacji klawiszy do polecenia w pasku
5WD #FF-G[6Q%QPVTQN
%WUVQOKCVKQP%QPVGZV 0QTOCN6GORNCVG
-G[$KPFKPIU#FF -G[%QFG$WKNF-G[%QFG
YF-G[%QPVTQN YF-G[#NV YF-G[9 A
-G[%CVGIQT[YF-G[%CVGIQT[%QOOCPF %QOOCPF (KNG%NQUG
'PF 5WD
Poni szy przykład (listing 2.8) dodaje przycisk Informacje o wersji pliku do paska Stan-
dardowy i zapisuje w pliku szablonu, na którym oparty jest aktywny dokument.
Listing 2.8. Dodawanie przycisku do paska
%WUVQOKCVKQP%QPVGZV #EVKXGQEWOGPV#VVCEJGF6GORNCVG
#RRNKECVKQP%QOOCPF$CTU
5VCPFCTF %QPVTQNU#FF 6[RGOUQ%QPVTQN$WVVQP A
+ $GHQTG
Obiekt CommandBars reprezentuje kolekcję obiektów CommandBar (pasków narzędzi,
menu) w aplikacji.
15. 54 MS Office 2000 i 2002/XP. Tworzenie własnych aplikacji w VBA
Kolekcja pasków
Ka da z aplikacji Office posiada nie jeden, a wiele pasków. Jeśli chciałbyś wyliczyć
wszystkie paski dostępne w aplikacji, posłu się obiektem CommandBars, który re-
prezentuje kolekcję pasków, by zwrócić pojedynczy obiekt CommandBar. Listing 2.9
przedstawia przykładową procedurę, która wyświetla w oknie Instrukcje bezpośrednie
zarówno nazwę, jak i nazwę lokalną paska menu i paska narzędzi oraz wartość, która
identyfikuje, czy pasek menu lub pasek narzędzi jest widoczny.
Listing 2.9. Wyliczanie pasków
5WD 9[NKE2CMK
KO EDCT CU %QOOCPF$CT
(QT 'CEJ EDCT KP #RRNKECVKQP%QOOCPF$CTU
GDWI2TKPV EDCT0COG EDCT0COG.QECN EDCT8KUKDNG
0GZV
'PF 5WD
Dodawanie paska do kolekcji
Dodawanie paska do kolekcji jest bardzo proste. Wystarczy posłu yć się metodą #FF.
Listing przedstawia procedurę, która tworzy pasek narzędzi i nadaje mu nazwę Moj-
Pasek. Następnie wyświetla go jako pasek narzędzi pływający (nie mający stałej po-
zycji wśród pasków narzędzi). Czytaj uwagi w dalszej części ksią ki, by zrozumieć,
dlaczego wyliczam zarówno nazwę, jak i nazwę lokalną.
Listing 2.10. Tworzenie paska
5WD 7VYQT2CUGM
5GV EDCT %QOOCPF$CTU#FF
0COG /QL2CUGM 2QUKVKQPOUQ$CT(NQCVKPI
EDCT8KUKDNG 6TWG
'PF 5WD
Do utworzonego przed chwilą paska mo esz dodać polecenia lub zmienić miejsce jego
dokowania. Aby odwołać się do istniejącego paska, musisz u yć składni %QOOCPF
$CTU
KPFGZ, gdzie KPFGZ jest nazwą lub indeksem paska narzędzi. Następująca instruk-
cja dokuje pasek narzędzi nazwany MojPasek w dolnej części okna aplikacji: %QOOCPF
$CTU
/QL2CUGM 2QUKVKQP OUQ$CT$QVVQO.
Możesz używać nazwy lub indeksu, by określić pasek menu lub pasek narzędzi z li-
sty dostępnych pasków menu lub pasków narzędzi w kolekcji aplikacji. Aczkolwiek,
musisz posłużyć się nazwą, by określić menu, menu podręczne lub podmenu. Jeśli
dwa lub więcej z pasków użytkownika będą miały tę samą nazwę, obiekt %QOOCPF
$CTU
KPFGZ zwróci pierwszą z nich. By upewnić się, że zwracasz poprawne menu lub
podmenu, zlokalizuj kontrolkę, która przechowuje to menu.
Pasek
Reprezentuje pojedynczy pasek narzędzi lub menu w kolekcji pasków narzędzi lub
menu aplikacji.
16. Rozdział 2. ♦ Wspólne cechy i obiekty programów Office 55
Listing 2.11 przedstawia funkcję, która sprawdza, czy w kolekcji pasków znajduje się
pasek o nazwie określonej przez procedurę, która wywołuje funkcję 2CUGM. Jeśli znajdzie,
czyni go widocznym i chroni jego miejsce dokowania. Funkcja zwraca prawdę, je eli
pasek został znaleziony i fałsz, je eli nie udało się znaleźć określonego paska w kolekcji
pasków aplikacji.
Listing 2.11. Szukanie paska w kolekcji pasków
(WPEVKQP 2CUGM
ED0COG CU 5VTKPI #U $QQNGCP
KO ED #U %QOOCPF$CT
PCNGKQP[ (CNUG
(QT 'CEJ ED +P %QOOCPF$CTU
+H ED0COG ED0COG 6JGP
ED2TQVGEVKQP OUQ$CT0Q%JCPIGQEM
ED8KUKDNG 6TWG
PCNGKQP[ 6TWG
'PF +H
0GZV ED
2CUGM PCNGKQP[
'PF (WPEVKQP
Kopiowanie paska
Kopiowanie paska mo e być wykonane na dwa sposoby. Pierwszy polega na „ręcznym”
skopiowaniu, drugi na skopiowaniu programowym. Aby programowo skopiować pa-
sek, nale y najpierw utworzyć nowy pasek, a następnie posłu yć się metodą %QR[, by
skopiować ka de z poleceń z oryginalnego paska do nowego. Przykładową procedurę
kopiowania paska Formatowanie ilustruje listing 2.12.
Listing 2.12. Kopiowanie paska
5WD -QRKWL
+H -QRKWL2CUGM
(QTOCVVKPKI 0GY(QTOCVVKPI 6TWG 6JGP
/UI$QZ 2CUGM QUVCN UMQRKQYCP[ XD+PHQTOCVKQP 2QYQFGPKG
'PF +H
'PF 5WD
(WPEVKQP -QRKWL2CUGM
QT[I0CYC #U 5VTKPI PQYC0CYC #U 5VTKPI A
1RVKQPCN RQMC #U $QQNGCP 6TWG #U $QQNGCP
KO ED1T[I #U %QOOCPF$CT
KO ED-QRKC #U %QOOCPF$CT
KO EDEQPVTQN #U %QOOCPF$CT%QPVTQN
KO ED6[RG #U .QPI
1P 'TTQT )Q6Q $NCF-QRKQYCPKC
5GV ED1T[I %QOOCPF$CTU
QT[I0CYC
ED6[RG ED1T[I6[RG
5GNGEV %CUG ED6[RG
%CUG OUQ$CT6[RG/CPW$CT
5GV ED-QRKC %QOOCPF$CTU#FF
0COGPQYC0CYC 2QUKVKQPOUQ$CT/GPW$CT
%CUG OUQ$CT6[RG2QRWR
5GV ED-QRKC %QOOCPF$CTU#FF
0COGPQYC0CYC 2QUKVKQPOUQ$CT6[RG2QRWR
%CUG 'NUG
5GV ED-QRKC %QOOCPF$CTU#FF
0COGPQYC0CYC
'PF 5GNGEV
17. 56 MS Office 2000 i 2002/XP. Tworzenie własnych aplikacji w VBA
(QT 'CEJ ED%QPVTQN KP ED1T[I%QPVTQNU
ED%QPVTQN%QR[
0GZV ED%QPVTQN
+H RQMC 6JGP
+H ED-QRKC6[RG OUQ$CT6[RG2QRWR 6JGP
ED-QRKC5JQY2QRWR
'NUG
ED-QRKC8KUKDNG RQMC
'PF +H
'PF +H
-QRKWL2CUGM 6TWG
'ZKV (WPEVKQP
$NCF-QRKQYCPKC
-QRKWL2CUGM (CNUG
'PF (WPEVKQP
Usuwanie paska
Usuwanie paska, tak jak dodawanie czy kopiowanie, mo esz wykonać „ręcznie” lub
napisać odpowiednią funkcję, procedurę. Jest jednak jedno małe „ale”. Paska typu
Pop-up nie mo esz usunąć „ręcznie” w oknie dialogowym Dostosuj. Jedyną mo liwo-
ścią jest usunięcie takiego paska z kodu. Przykładową procedurę usuwającą pasek, który
kopiowaliśmy w poprzednim rozdziale, przedstawia listing 2.13.
Listing 2.13. Usuwanie paska
5WD 7UWP
%QOOPF$CTU
0GY(QTOCVVKPI GNGVG
'PF 5WD
Jednak bardziej uniwersalnym rozwiązaniem będzie kod przedstawiony w listingu 2.14.
Listing 2.14. Usuwanie paska z programem obsługi błędów
(WPEVKQP 7UWP2CUGM
PCYC2CUMC #U 5VTKPI #U $QQNGCP
1P 'TTQT 4GUWOG 0GZV
#RRNKECVKQP%QOOCPF$CTU
PCYC2CUMCGNGVG
7UWP2CUGM +KH
'TT (CNUG 6TWG
'PF (WPEVKQP
Je eli dobrze przyjrzałeś się listingowi, to zapewne zauwa yłeś, e umieściłem tam
instrukcję 1P 'TTQT 4GUWOG 0GZV, która ma za zadanie przechwycić i obsłu yć błąd,
kiedy podana nazwa nie jest nazwą paska lub paska nie ma w kolekcji pasków. Taka
sytuacja mo e wystąpić równie , je eli próbujesz usunąć któryś z wbudowanych pa-
sków narzędzi, na przykład Standardowy.
Blokowanie paska przed modyfikacjami
Czasami trzeba zablokować pasek przed modyfikacjami ze strony innych u ytkowników.
Zadanie to nie jest takie proste, bo u ytkownicy mogą dotrzeć do pasków na trzy sposoby:
18. Rozdział 2. ♦ Wspólne cechy i obiekty programów Office 57
1. u ywając polecenia WidokPaski NarzędziDostosuj,
2. klikając prawym klawiszem myszy, gdy wskaźnik znajdzie się na szarym polu
pasków,
3. klikając prawym klawiszem myszy, gdy wskaźnik znajdzie się na którymś
z pasków.
Na szczęście jest rozwiązanie.
Po pierwsze: ukryj pasek menu lub wyłącz polecenie WidokPaski Narzędzi, wtedy
będziesz miał pewność, e u ytkownik nie będzie miał dostępu do modyfikacji pa-
sków pierwszą z wymienionych metod.
Po drugie: u yj poni szego polecenia, by zabrać prawa do przeglądania i modyfikowania
niestandardowych pasków narzędzi za pomocą 2. i 3. metody: %QOOCPFDCTU
6QQNDCT
.KUV 'PCDNGF (CNUG.
Dodawanie poleceń do paska
Poni szy przykład (listing 2.15) dodaje nowy przycisk w menu Narzędzia. W procedu-
rze kliknięcia na tym przycisku umieszcza funkcję, która wyświetli komunikat.
Listing 2.15. Dodanie polecenia z kodu i przypisanie mu procedury
5WD 7VYQT2QNGEGPKG
5GV PGY+VGO %QOOCPF$CTU
6QQNU %QPVTQNU#FF
6[RGOUQ%QPVTQN$WVVQP
9KVJ PGY+VGO
$GIKP)TQWR 6TWG
%CRVKQP -QOWPKMCV
(CEG+ UYKPMC
1P#EVKQP -QOWPKMCV
'PF 9KVJ
'PF 5WD
5WD -QOWPKMCV
/UI$QZ 6Q LGUV MQOWPKMCV URQF PCMW UYKPMK XD%TKVKECN -QOWPKMCV
'PF 5WD
Używaj nazwy, a nie nazwy lokalnej, by mieć pewność, że zwracasz prawidłowe menu.
Pokazywanie i ukrywanie poleceń
W zale ności od tego, jak bardzo rozbudowana będzie Twoja aplikacja, będziesz musiał
utworzyć jakiś uniwersalny pasek, w którym umieścisz tak wiele poleceń, jak będzie
konieczne. Jednak e nie zawsze wszystkie polecenia muszą być w danym momencie
widoczne. Przykładowo, na jednym formularzu u ytkownik będzie miał dostępnych tylko
pięć elementów paska, a na drugim ju siedem. Taka sytuacja zaistnieje tylko wtedy, gdy
ka dy z formularzy będzie słu yć do czego innego. Czy jednak zawsze trzeba ukrywać
polecenia? Czasami wystarczy uniemo liwić dostęp do nich w inny sposób, ale o tym ju
w dalszej części ksią ki.
19. 58 MS Office 2000 i 2002/XP. Tworzenie własnych aplikacji w VBA
Oto prosta instrukcja zmieniająca stan widzialności polecenia na pasku:
%QOOCPF$CTU
9QTMUJGGV /GPW $CT %QPVTQNU
2NKM 8KUKDNG 6TWG
Jeśli często w aplikacji będziesz pokazywał lub ukrywał jakieś polecenie, lepiej jest
napisać procedurę, która będzie pobierała 2 argumenty: etykietę polecenia i stan. Przykła-
dowa procedura dla aplikacji Excel mogłaby wyglądać tak, jak przedstawia listing 2.16.
Listing 2.16. Procedura pokazywania i ukrywania poleceń paska
5WD 2QMC2QNGEGPKG2CUMC
GV[MKGVC #U 5VTKPI 1RVKQPCN UVCP #U $QQNGCP 6TWG
KO EPVTN #U %QOOCPF$CT%QPVTQN
(QT 'CEJ EPVTN +P #RRNKECVKQP%QOOCPF$CTU
9QTMUJGGV /GPW $CT %QPVTQNU
+H EPVTN%CRVKQP GV[MKGVC 6JGP
EPVTN8KUKDNG UVCP
'ZKV (QT
'PF +H
0GZV
'PF 5WD
Jeśli zechcesz zmienić pasek menu w innej aplikacji Office, użyj /GPW $CT zamiast
9QTMUJGGV /GPW $CT.
Jeśli powy sza procedura (listing 2.16) zostanie wywołana tylko z argumentem GV[MKGVC,
to domyślnie poka e dane polecenie. Parametr UVCP nie jest wymagany. Aby ukryć
jakieś polecenie, po etykiecie podaj równie UVCP (CNUG. Następujący kod: 2QMC2Q
NGEGPKG2CUMC 2NKM (CNUG WMT[YC RQNGEGPKG Plik C MQNGLP[ 2QMC2QNGEGPKG
2CUMC 2NKM pokazuje wcześniej ukryte polecenie.
Do ustawiania domyślnych parametrów wywoływanej procedury lub funkcji służy
słowo kluczowe 1RVKQPCN. Przyjrzyj się dokładnie procedurze 2QMC2QNGEGPKG2CUMC,
a zauważysz, że stan zadeklarowałem jako wartość typu $QQNGCP i od razu ustawi-
łem na 6TWG. Jeżeli w parametrach, które pobiera funkcja, znajdzie się wartość ty-
pu 8CTKCPV, to nie możesz jej przypisać wartości domyślnej (ze względu na to, że
nie wiesz jak konkretnie wartość zostanie przekazana do funkcji). Aby sprawdzić, czy
procedura została wywołana z wartością, która nie jest wymagalna, musisz użyć
funkcji +U/KUUKPI
VWVCL YCTVQUE V[RW XCTKCPV , by zwrócić prawdę (podany argu-
ment) lub fałsz. Następnie będziesz mógł przypisać jakąś wartość.
Włączanie i wyłączanie poleceń
Czy pamiętasz jak pisałem, e nie zawsze trzeba ukrywać polecenia i czasami wystar-
czy wyłączyć to polecenie? Do włączania lub wyłączania poleceń paska słu y właści-
wość Enabled. Mo esz ustawić dowolny stan dla danego polecenia na przykład tak:
%QOOCPF$CTU
9QTMUJGGV /GPW $CT %QPVTQNU
2NKM 'PCDNGF 6TWG
lub posłu się procedurą podobną do 2QMC2QNGEGPKG2CUMC w poprzednim rozdziale,
tylko zamiast właściwości Visible, u yj Enabled. Proste? Mam nadzieję, e tak. Za-
pewne zauwa yłeś, e zajmowałem się dotychczas tylko poleceniami głównymi. Jak
dotrzeć do poleceń, umieszczonych wewnątrz tych poleceń? Zastanów się i spróbuj
napisać odpowiedni kod.
20. Rozdział 2. ♦ Wspólne cechy i obiekty programów Office 59
Obiekt Assistant
Obiekt Assistant to popularny w pakiecie Asystent. Wiadomo, e generalnie podpo-
wiada, co mamy zrobić, przy okazji posługując się ciekawymi efektami graficznymi.
Asystent to doskonałe narzędzie do Twoich aplikacji. Mo na go tak zaprogramować,
by nie tylko wyświetlał podpowiedzi, ale równie współdziałał z elementami interfej-
su aplikacji. Mo esz, na przykład, za pomocą Asystenta uruchamiać polecenia z paska
lub wstawiać grafikę do dokumentu. Ciekawą sprawą jest to, e cały proces zachodzi
bez zamykania okna aplikacji.
Asystenta mo esz zaprogramować tak, by wykonywał wszystkie czynności jakie chcesz.
Do tego celu musisz ustawić zmienną obiektową, która pozwoli na manipulowanie
wszystkimi właściwościami i metodami Asystenta. Mo esz na przykład uczynić Asy-
stenta widocznym, przenieść go w inne miejsce na ekranie, określić animację, którą
chcesz uruchomić i wyświetlić Assistant balloons (słowa tego nie tłumaczymy, ale dla
ułatwienia będę posługiwał się określeniem podpowiedź, podpowiedzi) zawierające okre-
ślony przez Ciebie tekst i kontrolki (np. pola opcji).
Obiekt Assistant reprezentuje Asystenta pakietu Office. Obiekt Assistant nie jest ko-
lekcją obiektów Assistant i tylko jeden Assistant mo e być aktywny w danym czasie.
Popularny Asystent mo e przyjmować jedną z wielu zaprogramowanych postaci. Po-
staci te ukryte są w plikach o rozszerzeniu *.act i najczęściej znajdują się w katalogu
C:Program FilesMicrosoft OfficeOfficeActors. Tabela 2.2 przedstawia nazwy po-
szczególnych plików dla ka dej z postaci Asystenta.
Tabela 2.2. Nazwy plików Asystenta
Postać (nazwa oryginalna) Postać (polski odpowiednik) Nazwa pliku
Office Logo Logo Logo.act
PowerPup Super Pies Powerpup.act
The Genius Geniusz Genius.act
Hoverbot Poduszkobot Hoverbot.act
Scribble Świstek Scribble.act
The Dot Punkt Dot.act
Clippit Spinacz Clippit.act
Mother Nature Matka Natura MNature.act
Will Will Will.act
Posługując się nazwą pliku mo esz określić, jakiego Asystenta chcesz w danej chwili
wyświetlić. Słu y do tego właściwość FileName obiektu Assistant. Musisz być jednak
pewien, e na komputerze u ytkownika zainstalowane są składniki odpowiadające za
wyświetlanie odpowiedniej postaci Asystenta. W innym przypadku będzie występował
błąd. Ponadto, ka dy z u ytkowników personalizuje Office, co oznacza, e tylko dana
postać Asystenta mo e mu odpowiadać.
21. 60 MS Office 2000 i 2002/XP. Tworzenie własnych aplikacji w VBA
Aby wyświetlić aktualną (u ywaną przez u ytkownika) postać Asystenta, wykonaj
ten kod:
9KVJ #UUKUVCPV
8KUKDNG 6TWG
'PF 9KVJ
Samo wyświetlenie Asystenta jeszcze nic nie oznacza. Nic nie będzie podpowiadał. Do
komunikacji z u ytkownikiem poprzez Asystenta będziesz potrzebował obiektu Balloon.
Różnice w programowaniu Asystenta dla pakietów Office: do pakietu Office XP Asy-
stent jest albo widoczny i dostępny, albo niewidoczny i niedostępny, ale nigdy nie
można go całkowicie wyłączyć. Od pakietu Office XP Asystent ma nową właściwość
On i może być albo włączony, albo wyłączony. Ta właściwość decyduje o tym, czy
Asystent jest dostępny w całym pakiecie. Dlatego, podczas programowania Asy-
stenta w pakiecie Office XP, zwróć szczególną uwagę na to, w jakim stanie znaj-
dował się Asystent zanim zacząłeś nim manipulować w kodzie. Najlepiej przypisz do
zmiennej jego stan przed wywołaniem, a po zakończeniu prac z Asystentem, ustaw
stan Asystenta na tę zmienną.
Przyjrzyj się listingowi 2.17.
Listing 2.17. Korzystanie z Asystenta
5WD #U[U
KO E[9NCEQP[ #U $CNQQP
KO E[9KFQEP[ #U $CNQQP
9KVJ #UUKUVCPV
E[9NCEQP[ 1P
E[9KFQEP[ 8KUKDNG
'PF 9KVJ
RT[YTQE WUVCYKGPKC #U[UVGPVC
9KVJ #UUKUVCPV
1P E[9NCEQP[
8KUKDNG E[9KFQEP[
'PF 9KVJ
Balloon
Jak ju wspomniałem, obiekt Balloon Asystenta słu y do komunikacji z u ytkownikiem
Twojej aplikacji. Jest on zaprojektowany tak, byś mógł łatwo go wywoływać, ale nie
ma na celu zastąpienia okien dialogowych. Powiedzmy sobie, e jest tylko środkiem
pomocniczym.
Obiekt Balloon reprezentuje podpowiedź wyświetlaną za pomocą Asystenta, z na-
główkiem i wiadomością tekstową. Mo e on zawierać kontrolki takie jak: pola wyboru
(CheckBoxes) lub etykiety (Labels). Balloon nie jest kolekcją Balloons, poniewa jest
pojedynczym obiektem. W jednym czasie mo e być widoczny tylko jeden Balloon,
aczkolwiek mo liwe jest zdefiniowanie wielu Balloons i wywołanie dowolnego z nich
wtedy, kiedy będzie potrzebny. Do utworzenia nowego obiektu Balloon słu y właści-
wość NewBalloon.
22. Rozdział 2. ♦ Wspólne cechy i obiekty programów Office 61
Listing 2.18 przedstawia przykład tworzenia pojedynczego obiektu Balloon.
Listing 2.18. Tworzenie pojedynczego obiektu Balloon
5WD 2QLGF2QFRQY
KO RQFRQYKGF #U $CNNQQP
5GV RQFRQYKGF #UUKUVCPV0GY$CNNQQP
9KVJ RQFRQYKGF
*GCFKPI 1VQ PCLRTQUVU[ RT[MNCF VYQTGPKC RQFRQYKGFK
6GZV KO RQFRQYKGF #U $CNNQQP XD%T.H A
5GV RQFRQYKGF #UUKUVCPV0GY$CNNQQP XD%T.H A
9KVJ RQFRQYKGF XD%T.H A
*GCFKPI 1VQ PCLRTQUVU[ RT[MNCF VYQTGPKC RQFRQYKGFK
å XD%T.H A
6GZV ,GUV VQ PCLRTQUVU[ RT[MNCF VYQTGPKC RQFRQYKGFK
å XD%T.H A
$WVVQP OUQ$WVVQP5GV1- XD%T.H A
5JQY XD%T.H A
'PF 9KVJ
$WVVQP OUQ$WVVQP5GV1-
5JQY
'PF 9KVJ
'PF 5WD
Listing 2.19 przedstawia przykład tworzenia wielu obiektów Balloon.
Listing 2.19. Przykład tworzenia wielu obiektów Balloon
5WD -KNMC2QFRQYKGFK#U[UVGPVC
KO RQFRQYKGF #U $CNNQQP
KO RQFRQYKGF #U $CNNQQP
KO RQFRQYKGF #U $CNNQQP
KO QFR #U .QPI
5GV RQFRQYKGF #UUKUVCPV0GY$CNNQQP
9KVJ RQFRQYKGF
*GCFKPI 2QFRQYKGF RKGTYUC
6GZV %[ EJEGU QDCE[E MQNGLPC RQFRQYKGF!
$WVVQP OUQ$WVVQP5GV1M%CPEGN
'PF 9KVJ
5GV RQFRQYKGF #UUKUVCPV0GY$CNNQQP
9KVJ RQFRQYKGF
*GCFKPI 2QFRQYKGF FTWIC
6GZV %[ EJEGU QDCE[E MQNGLPC RQFRQYKGF!
$WVVQP OUQ$WVVQP5GV1M%CPEGN
'PF 9KVJ
5GV RQFRQYKGF #UUKUVCPV0GY$CNNQQP
9KVJ RQFRQYKGF
*GCFKPI 2QFRQYKGF VTGEKC
6GZV 6Q LW MQPKGE RQFRQYKGFK
$WVVQP OUQ$WVVQP5GV1-
'PF 9KVJ
23. 62 MS Office 2000 i 2002/XP. Tworzenie własnych aplikacji w VBA
QFR RQFRQYKGF5JQY
+H QFR OUQ$CNNQQP$WVVQP1- 6JGP
QFR RQFRQYKGF5JQY
+H QFR OUQ$CNNQQP$WVVQP1- 6JGP
RQFRQYKGF5JQY
'PF +H
'PF +H
'PF 5WD
Listing 2.20 przedstawia trzy procedury. Pierwsza wywołuje procedurę tworzącą nową
podpowiedź z kilkoma opcjami wyboru i wyświetla podpowiedź. Druga jest powołana
do tego, by dowiedzieć się, jakiego wyboru dokonał u ytkownik, a trzecia wyświetla,
równie przez Asystenta, odpowiedź.
Listing 2.20. Kompleksowa obsługa Asystenta
5WD 9[YQNCL1RELG
#U[UVGPVCL1RELG V[VWN VGMUV Y[DQT Y[DQT Y[DQT
'PF 5WD
5WD #U[UVGPVCL1RELG
V[VWN #U 5VTKPI VGMUV #U 5VTKPI QRELC2TCYKFNQYC #U .QPI
å2CTCO#TTC[ Y[DQT[
#U 8CTKCPV
KO RQFRQYKGF #U $CNNQQP
KO K #U .QPI Z #U .QPI
KO Y[DQT #U 5VTKPI
5GV RQFRQYKGF #UUKUVCPV0GY$CNNQQP
9KVJ RQFRQYKGF
$CNNQQP6[RG OUQ$CNNQQP6[RG$WNNGVU
$WVVQP OUQ$WVVQP5GV1M%CPEGN
*GCFKPI V[VWN
6GZV VGMUV
RQDKGT KNG RTGMCCP[EJ RCTCOGVTQY
(QT K .$QWPF
Y[DQT[ 6Q 7$QWPF
Y[DQT[
Y[DQT Y[DQT[
K
%JGEM$QZGU
K
6GZV Y[DQT
0GZV K
Z 5JQY
'PF 9KVJ
,CMC1RELC RQFRQYKGF Z QRELC2TCYKFNQYC
'PF 5WD
5WD ,CMC1RELC
DCN #U $CNNQQP Y[D #U .QPI RTCY #U .QPI
KO K #U .QPI
KO VOR$QQN #U $QQNGCP
+H Y[D 6JGP
VOR$QQN DCN%JGEM$QZGU
RTCY%JGEMGF
+H VOR$QQN 6TWG 6JGP
#U[UVGPVCL1FRQYKGF 5WRGT $TCYQ RTCYKFNQYC QFRQYKGF
24. Rozdział 2. ♦ Wspólne cechy i obiekty programów Office 63
'NUG
#U[UVGPVCL1FRQYKGF 7WWRRU 2T[MTQ OK VQ PKG LGUV RTCYKFNQYC
åQFRQYKGF
'PF +H
'PF +H
'PF 5WD
Obiekt FileSearch
Obiekt FileSearch jest programowym odzwierciedleniem okna dialogowego Otwórz do-
stępnego z menu Plik. Oznacza to, e masz do dyspozycji wszystkie metody i właści-
wości, które są normalnie dostępne w powołanym oknie. Co ciekawe, wcale nie mu-
sisz u ywać tego okna, a wręcz mo esz skonstruować własne.
Obiekt FileSearch posiada dwie metody i kilka właściwości, których mo esz u yć do
zbudowania własnego okna do poszukiwania plików. Musisz u yć właściwości File-
Search, by zwrócić odwołanie do tego obiektu. Następnie posłu się metodą NewSearch,
by zresetować (wyczyścić) wszystkie kryteria poprzedniego poszukiwania.
Metoda NewSearch nie czyści kryterium LookIn, czyli ście ki, która jest przeszukiwa-
na. Aby ją wyczyścić, a raczej ustawić na nowo, po prostu przypisz jej inną wartość.
Listing 2.21 przedstawia przykład kodu, który powoduje wyświetlenie wszystkich pli-
ków, które w nazwie mają słowo „office”, znalezionych w określonej lokalizacji. W przy-
padku niepowodzenia wyświetlony zostanie komunikat, e nie znaleziono określonych
plików.
Listing 2.21. Poszukiwanie plików z kodu
5WD 5WMCL2NKMQY
KO MQO #U 5VTKPI
9KVJ #RRNKECVKQP(KNG5GCTEJ
0GY5GCTEJ
.QQM+P %
5GCTEJ5WD(QNFGTU 6TWG
(KNG0COG QHHKEG
(KNG6[RG OUQ(KNG6[RG#NN(KNGU
+H 'ZGEWVG
6JGP
5GNGEV %CUG (QWPF(KNGU%QWPV
%CUG
MQO PCNCNGO (QWPF(KNGU%QWPV A
RNKM YGFNWI CFCP[EJ MT[VGTKQY RQUWMKYCPKC
/UI$QZ MQO XD+PHQTOCVKQP -QOWPKMCV
%CUG
MQO PCNCNGO (QWPF(KNGU%QWPV A
RNKMK YGFNWI CFCP[EJ MT[VGTKQY RQUWMKYCPKC
/UI$QZ MQO XD+PHQTOCVKQP -QOWPKMCV
25. 64 MS Office 2000 i 2002/XP. Tworzenie własnych aplikacji w VBA
%CUG 'NUG
MQO PCNCNGO (QWPF(KNGU%QWPV A
RNKMQY YGFNWI CFCP[EJ MT[VGTKQY RQUWMKYCPKC
/UI$QZ MQO XD+PHQTOCVKQP -QOWPKMCV
'PF 5GNGEV
(QT K 6Q (QWPF(KNGU%QWPV
/UI$QZ (QWPF(KNGU
K XD+PHQTOCVKQP K
0GZV K
'NUG
/UI$QZ 0KG PCNCNGO RNKMQY YGFNWI CFCP[EJ A
MT[VGTKQY RQUWMKYCPKC XD'ZENCOCVKQP $TCM
'PF +H
'PF 9KVJ
'PF 5WD
Na dysku CD-ROM w katalogu PrzykladyCz_II znajdziesz przykład własnego okienka
do poszukiwania plików, plik FileSearch.xls.
Obiekt DocumentProperties
Ka dy plik pakietu Office ma wbudowane pewne właściwości. Mo esz dodawać rów-
nie własne właściwości, czy to manualnie, czy to z kodu. U ywając tych właściwości
mo esz tworzyć, przechowywać i śledzić informacje o dokumentach pakietu Office. Są
to między innymi: data utworzenia, autor, dane o osobie, która dokonała ostatnich zmian
i wiele, wiele innych.
MS Access nie posiada obiektu DocumentProperties do przechowywania wbudowa-
nych i własnych właściwości wyświetlanych w oknie dialogowym Właściwości bazy
danych.
Aby zwrócić kolekcję DocumentProperties, u yj dwóch podstawowych właściwości:
BuiltInDocumentProperties, zawierającej wszystkie wbudowane właściwości
dokumentu,
CustomDocumentProperties, zawierającej wszystkie dodane właściwości
dokumentu.
Listing 2.22 przedstawia przykładową procedurę wyliczającą po nazwie wbudowane wła-
ściwości aktywnego skoroszytu i ich wartości.
Listing 2.22. Wyliczanie wbudowanych właściwości aktywnego skoroszytu i ich wartości
5WD 9[NKE9DWFQYCPG9NCUEKYQUEK'ZEGN
1P 'TTQT )Q6Q 'TTA9[NKE9DWFQYCPG9NCUEKQYUEK'ZEGN
TY
9QTMUJGGVU
#EVKXCVG
26. Rozdział 2. ♦ Wspólne cechy i obiekty programów Office 65
(QT 'CEJ R +P #EVKXG9QTMDQQM$WKNVKPQEWOGPV2TQRGTVKGU
%GNNU
TY 8CNWG R0COG
%GNNU
TY 8CNWG R8CNWG
TY TY
0GZV
'ZKV 5WD
'TTA9[NKE9DWFQYCPG9NCUEKQYUEK'ZEGN
5GNGEV %CUG 'TT0WODGT
%CUG
%GNNU
TY 8CNWG DTCM FCP[EJ
4GUWOG 0GZV
%CUG 'NUG
/UI$QZ 2T[E[PC DNGFW 'TTGUETKRVKQP XD%TKVKECN $NCF PT
å 'TT0WODGT
'PF 5GNGEV
'TT%NGCT
'PF 5WD
Identyczną procedurę nale ałoby napisać do wyliczenia własnych, dodanych właściwo-
ści danego dokumentu. Oczywiście, jeśli dany kod miałby być uruchomiony dla aplika-
cji MS Word, zamiast wyra enia #EVKXG9QTMDQQM nale ałoby u yć #EVKXGQEWOGPV.
Posługując się tymi właściwościami mo na bardzo du o się dowiedzieć o historii do-
kumentu. Mianowicie, kiedy i przez kogo był ostatnio zapisany, czy został wydruko-
wany i kto go drukował oraz uzyskać wiele innych ciekawych informacji. Zastanów
się, jak mógłbyś je wykorzystać.
Środowisko aplikacji
Dlaczego środowisko aplikacji? Nazwałem ten rozdział tak, poniewa wszystkie podane
funkcje są związane ze środowiskiem, otoczeniem, sprawami związanymi z aplikacją,
którą projektujesz. Bardzo często oprócz typowych informacji zawartych w dokumen-
cie, skoroszycie czy bazie danych będziesz potrzebował innych, np.
jaki u ytkownik jest w tej chwili zalogowany?
gdzie jest katalog systemowy, tymczasowy?
jak wywołać inny program?
i wiele, wiele innych.
Funkcja Environ
Pierwsza z kilku funkcji związanych ze środowiskiem aplikacji, bardzo interesująca.
Słu y do zwracania wartości typu 5VTKPI odpowiadającej wartości zmiennej otocze-
nia systemu operacyjnego. Ja osobiście u ywałem jej w kilku sytuacjach:
27. 66 MS Office 2000 i 2002/XP. Tworzenie własnych aplikacji w VBA
Dla aplikacji pracującej w Windows NT® odczytywałem u ytkownika. W ten
sposób pomijałem proces logowania uprawnionych u ytkowników. Oczywiście
aplikacja kontrolowała, kto miał nadane uprawnienia.
Do zwrócenia wartości ście ki katalogu TEMP.
Składnia tej funkcji jest następująca: 'PXKTQP
]GPXUVTKPI ^ PWODGT_.
GPXUVTKPI — jest to wyra enie znakowe zawierające nazwę zmiennej otoczenia.
Argument nieobowiązkowy.
PWODGT — jest to wyra enie numeryczne odpowiadające liczbie porządkowej
ciągu otoczenia w tablicy ciągów otoczenia. Argument PWODGT mo e być
dowolnym wyra eniem numerycznym, ale przed u yciem jego wartość jest
zaokrąglana do najbli szej liczby całkowitej. Argument nieobowiązkowy.
Mo esz posłu yć się tą funkcją na dwa sposoby:
1. U yć argumentu GPXUVTKPI, na przykład tak:
OKGPPC 'PXKTQP
2#6*
Je eli argument GPXUVTKPI zostanie znaleziony w tablicy ciągów otoczenia,
zwracana jest wartość Zmiennej środowiskowej.
2. U yć argumentu PWODGT:
OKGPPC 'PXKTQP
Je eli argument PWODGT zostanie znaleziony w tablicy ciągów otoczenia,
zwracana jest nazwa zmiennej i jej wartość w następującej postaci:
OKGPPCYCTVQUEAOKGPPGL
Kiedy nie zostanie znaleziony aden z argumentów, funkcja 'PXKTQP zwróci
ciąg o zerowej długości ().
W listingu 2.23 funkcja 'PXKTQP zwraca nazwy i wartości wszystkich zmiennych śro-
dowiska.
Listing 2.23. Wyliczanie zmiennych środowiskowych
5WD 9[NKEOKGPPG
KO OKGPPC #U 5VTKPI -QOWPKMCV #U 5VTKPI
KO K #U +PVGIGT
K
Q
OKGPPC 'PXKTQP
K
-QOWPKMCV -QOWPKMCV XD%T OKGPPC
K K
.QQR 7PVKN OKGPPC
/UI$QZ -QOWPKMCV
'PF 5WD
28. Rozdział 2. ♦ Wspólne cechy i obiekty programów Office 67
Funkcja Shell
Funkcja ta uruchamia określony program. W przypadku powodzenia zwraca wartość ty-
pu 8CTKCPV (QWDNG) reprezentującą identyfikator zadania odpowiadającego uruchomio-
nemu programowi. W przypadku niepowodzenia zwraca zero.
Składnia tej funkcji: 5JGNN
RCVJPCOG=YKPFQYUV[NG?.
RCVJPCOG — jest to nazwa programu, który ma być uruchomiony. U ycie wraz
ze wszystkimi potrzebnymi argumentami lub opcjami podawanymi w wierszu
poleceń; mo e zawierać nazwę katalogu lub folderu oraz nazwę dysku. Argument
obowiązkowy typu 8CTKCPV (5VTKPI).
YKPFQYUV[NG — podając ten argument określasz styl okna, w którym ma być
wykonywany program. Pomijając go, uruchomisz program w postaci
zminimalizowanej z fokusem. Argument nieobowiązkowy typu 8CTKCPV
(+PVGIGT). Argument ten mo e przyjąć jedną z wartości przedstawionych
w tabeli 2.3.
Tabela 2.3. Wartości parametru windowstyle
Wartość Opis działania
XD*KFG 0 Okno jest ukrywane, a fokus jest przekazywany do tego ukrytego okna.
XD0QTOCN(QEWU 1 Okno otrzymuje fokus, a rozmiar i poło enie okna są przywracane
do stanu początkowego.
XD/KPKOKGF(QEWU 2 Okno jest wyświetlane w postaci zminimalizowanej z fokusem.
XD/CZKOKGF(QEWU 3 Okno jest maksymalizowane i ma fokus.
XD0QTOCN0Q(QEWU 4 Odtwarzany jest ostatni rozmiar i poło enie okna. Aktualnie aktywne
okno pozostaje aktywne.
XD/KPKOKGF0Q(QEWU 6 Okno jest wyświetlane jako ikona. Aktualnie aktywne okno pozostaje
aktywne.
Funkcja 5JGNN uruchamia programy w sposób asynchroniczny. Oznacza to, że pro-
gram uruchomiony przez funkcję 5JGNN może się nie zakończyć przed rozpoczęciem
wykonywania instrukcji występujących po funkcji 5JGNN.
Przykład wykorzystania funkcji 5JGNN przedstawia listing 2.24.
Listing 2.24. Przykład wykorzystania funkcji Shell
KO /QL2TQITCO
/QL2TQITCO 5JGNN
%/QL2TQITCO':'
+H /QL2TQITCO 6JGP
VWVCL QMTGUN EQ EJEGU TQDKE WTWEJQOKQP[O RTQITCOGO
'NUG
/UI$QZ 7TWEJQOKGPKG RTQITCOW PKG RQYKQFNQ UKG XD%TKVKECN 79#)#
'PF +H
29. 68 MS Office 2000 i 2002/XP. Tworzenie własnych aplikacji w VBA
Spotkałem się z wykorzystaniem funkcji 5JGNN do pakowania plików, które były na-
stępnie wysyłane do zainteresowanych osób. Muszę przyznać, e jest to bardzo ciekawe
wykorzystanie tej funkcji.
Instrukcja AppActivate
Instrukcja #RR#EVKXCVG uaktywnia okno aplikacji.
Składnia: #RR#EVKXCVG VKVNG= YCKV?.
VKVNG — wyra enie znakowe określające tekst umieszczony na pasku tytułu
uaktywnianego okna aplikacji. W celu uaktywnienia aplikacji zamiast
argumentu VKVNG mo na równie u yć identyfikatora zadania zwracanego
przez funkcję 5JGNN. Argument obowiązkowy.
YCKV — wartość typu $QQNGCP, która określa, czy aplikacja wołająca inną
aplikację ma fokus. Wartość (CNUG (domyślnie) powoduje, e wywoływana
aplikacja jest uaktywniana niezale nie od tego, czy aplikacja miała fokus.
Wartość 6TWG powoduje, e aplikacja wołająca czeka, a zostanie do niej
przekazany fokus, a następnie uaktywnia podaną aplikację. Argument
nieobowiązkowy.
Instrukcja #RR#EVKXCVG przenosi fokus na podaną aplikację lub okno, ale nie wpływa na
to, czy aplikacja jest minimalizowana czy maksymalizowana. Fokus jest przenoszony
z okna uaktywnionej aplikacji, gdy u ytkownik wykonuje czynność związaną ze zmianą
fokusu lub zamyka okno dialogowe. Aby uruchomić aplikację lub ustawić styl okna,
nale y u yć funkcji 5JGNN.
Podczas określania, która aplikacja ma zostać uaktywniona, argument VKVNG jest
porównywany z tytułami wszystkich aktualnie działających aplikacji. Jeśli żaden
z tytułów okien nie jest zgodny z porównywanym wzorcem, uruchamiana jest ta
aplikacja, dla której początkowa część tytułu odpowiada wartości argumentu VKVNG.
Jeśli zostało uruchomionych kilka kopii tej samej aplikacji o podanym tytule, zosta-
nie wybrana jedna w nich.
Gdy podany program jest ju uruchomiony, uaktywniasz jego okno wywołując go
w podany sposób:
#RR#EVKXCVG /KETQUQHV 9QTF
Poniewa instrukcja #RR#EVKXCVG mo e u ywać wartości zwróconej przez funkcję 5JGNN,
mo esz uaktywnić okno aplikacji poprzednio uruchomionej funkcją 5JGNN. Przykłady
wykorzystania funkcji 5JGNN i #RR#EVKXCVG przedstawia listing 2.25.
Listing 2.25. Przykłady wykorzystania funkcji Shell i AppActivate
9QTF+ 5JGNN
%2TQITCO (KNGU/KETQUQHV 1HHKEG1HHKEG9+0914':'
#RR#EVKXCVG 9QTF+
'ZEGN+ 5JGNN
%2TQITCO (KNGU/KETQUQHV 1HHKEG1HHKEG':%'.':'
#RR#EVKXCVG 'ZEGN+
30. Rozdział 2. ♦ Wspólne cechy i obiekty programów Office 69
Funkcja DoEvents
Funkcja ta przekazuje sterowanie do systemu operacyjnego, umo liwiając przetwarzanie
zdarzeń. Sterowanie to zwracane jest po obsłu eniu przez system operacyjny wszystkich
zdarzeń z systemowej kolejki oraz po wysłaniu z kolejki SendKeys wszystkich kluczy.
We wszystkich aplikacjach Office funkcja Q'XGPVU zwraca wartość zero. Z kolei w au-
tonomicznych wersjach systemu Visual Basic, jak np. Visual Basic, Standard Edition,
funkcja Q'XGPVU zwraca wartość typu +PVGIGT reprezentującą liczbę otwartych for-
mularzy.
Funkcja Q'XGPVU jest bardzo przydatna, gdy wykonywany program zajmuje du o czasu
procesora. Korzystając z tej funkcji (tylko w razie takiej potrzeby), pozwalasz systemo-
wi operacyjnemu na obsługę bez zbytniego opóźnienia zdarzeń takich, jak naciśnięcia
klawiszy czy kliknięcia myszą.
Przekazując sterowanie za pomocą funkcji Q'XGPVU, upewnij się, czy procedura
oddająca sterowanie NIE ZOSTANIE ponownie wywołana z innej części programu
przed powrotem sterowania po pierwszym wywołaniu funkcji Q'XGPVU. Grozi to trud-
nymi do przewidzenia skutkami, uszkodzeniami plików, a nawet systemu. Pamię-
taj też, że funkcji Q'XGPVU nie należy stosować, jeśli inne aplikacje mogą w tym
czasie odwoływać się do procedury, która oddała sterowanie.
Jak u ywać tej funkcji, poka ę przy opisywaniu kolejnej.
Funkcja Timer
Zwraca wartość typu 5KPING określającą liczbę sekund, które minęły od północy.
W tym przykładzie (listing 2.26) funkcja 6KOGT przerywa wykonywanie aplikacji na okre-
ślony czas i pozwala, by w trakcie tej przerwy mogły działać inne procesy.
Listing 2.26. Przykład przerwania wykonywania aplikacji
KO NWIQUE2TGTY[ 5VCTV -QPKGE %CU%CNM
+H
/UI$QZ
0CEKUPKL 6CM CD[ RTGTYCE RTQITCO PC UGMWPF XD;GU 6JGP
NWIQUE2TGTY[ 7UVCY FNWIQUE RTGTY[
5VCTV 6KOGT 2QDKGT ECU RQECVMW RTGTY[
Q 9JKNG 6KOGT 5VCTV
NWIQUE2TGTY[
Q'XGPVU 2QYQN FKCNCE KPP[O RTQEGUQO
.QQR
-QPKGE 6KOGT 2QDKGT ECU CMQPEGPKC RTGTY[
%CU%CNM -QPKGE 5VCTV 1DNKE ECU ECNMQYKV[
/UI$QZ 2TGTYC VTYCNC %CU%CNM UGMWPF
'NUG
'PF
'PF +H
31. 70 MS Office 2000 i 2002/XP. Tworzenie własnych aplikacji w VBA
Aplikacja MS Excel posiada oddzielną funkcję. W aplikacji MS Excel do zatrzymania
wykonywania kodu na określony czas lub do określonej godziny służy funkcja 9CKV.
Listing 2.27 ilustruje procedurę %GMCL, która w parametrach wywołania pobiera
czas w sekundach.
Listing 2.27. Procedura Czekaj
5WD CVT[OCL
/UI$QZ 2Q PCEKUPKGEKW 1- CRNKMCELC QUVCPKG YUVT[OCPC PC UGMWPF
%GMCL
/UI$QZ /KPGNQ UGMWPF
'PF 5WD
5WD %GMCL
KNG5GMWPF #U +PVGIGT
KO CMV)QF #U +PVGIGT
KO CMV/KP #U +PVGIGT
KO CMV5GM #U +PVGIGT
KO ECU1EGM #U 5VTKPI
CMV)QF *QWT
0QY
CMV/KP /KPWVG
0QY
CMV5GM 5GEQPF
0QY
ECU1EGM 6KOG5GTKCN
CMV)QF CMV/KP CMV5GM
KNG5GMWPF
#RRNKECVKQP9CKV ECU1EGM
'PF 5WD
Instrukcja SendKeys
Wysyła do aktywnego okna dane generowane przez naciśnięcie klawiszy, tak jakby
zostały one wprowadzone z klawiatury.
Składnia: 5GPF-G[U UVTKPI= YCKV?.
UVTKPI — wyra enie znakowe określające naciśnięcia klawiszy. Argument
obowiązkowy. Aby u yć klawiszy specjalnych, musisz wpisać ich kod (tabela 4.2).
YCKV — wartość typu $QQNGCP określająca typ czekania. Wartość (CNUG (domyślnie)
oznacza, e sterowanie powróci do procedury zaraz po wysłaniu sekwencji
naciśnięć klawiszy. Wartość 6TWG oznacza, e sterowanie powróci do procedury
po przetworzeniu wysłanych naciśnięć klawiszy. Argument nieobowiązkowy.
Ka dy klawisz jest reprezentowany przez jeden lub więcej znaków. Aby przesłać je-
den znak umieszczony na klawiaturze, jako wartość nale y podać ten znak. Na przy-
kład, aby przesłać literę A, argumentowi 5VTKPI nale y nadać wartość #. Aby przesłać
więcej ni jeden znak, nale y dołączać kolejne znaki do ciągu. I tak, aby przesłać lite-
ry A, B i C, argumentowi 5VTKPI nale y nadać wartość #$%.
Znaki plus (+), daszek (^), procent (%), tylda (~) i nawiasy okrągłe ( ) mają w instrukcji
5GPF-G[U specjalne znaczenie. Aby przesłać dowolny z tych znaków, nale y umieścić
je w nawiasach klamrowych {}. Na przykład, aby przesłać znak plus, nale y napisać]
_.
32. Rozdział 2. ♦ Wspólne cechy i obiekty programów Office 71
Nawiasy kwadratowe [ ] nie mają specjalnego znaczenia w instrukcji 5GPF-G[U, jed-
nak e muszą być one umieszczane w nawiasach okrągłych. Mogą one mieć znaczenie
w innych aplikacjach, np. przy dynamicznej wymianie danych (DDE). Aby przesłać na-
wiasy klamrowe, nale y wpisać ]]_ i ]__.
Znaki, które nie są wyświetlane po naciśnięciu klawisza, takie jak Enter czy Tab, oraz
klawisze oznaczające akcje, a nie znaki, są reprezentowane przez następujące kody
(tabela 2.4):
Aby przesłać kombinację klawisza z klawiszami Shift, Ctrl, lub Alt, nale y poprzedzić
kod klawisza odpowiednimi kodami z tabeli 2.5
Aby określić, e klawisze Shift, Ctrl lub Alt mają być wciśnięte w momencie naciska-
nia kilku innych klawiszy, nale y kody tych klawiszy ująć w nawias. Na przykład,
aby określić, e ma być wciśnięty klawisz Shift, podczas naciskania klawiszy E i C,
nale y napisać
'% . Aby określić, e klawisz Shift ma być wciśnięty tylko podczas
naciskania klawisza E, nale y napisać
'% .
Aby określić kolejne naciśnięcia tego samego klawisza, nale y napisać]MNCYKU
NKEDC_. Parametry MNCYKU i NKEDC muszą być rozdzielone spacją. Na przykład, ].'(6
_ oznacza, e kod klawisza STRZAŁKA W LEWO ma zostać wysłany 42 razy; ]J _
oznacza, e kod klawisza H zostanie wysłany 10 razy.
Za pomocą funkcji 5GPF-G[U nie można wysyłać naciśnięć klawiszy do aplikacji,
która nie została zaprojektowana dla systemu Microsoft Windows. 5GPF-G[U nie
umożliwia również wysłania klawisza PRINT SCREEN ]2465%_ do żadnej aplikacji.
Listing 2.28 ilustruje wykorzystanie funkcji 5JGNN do uruchomienia aplikacji Kalkulator
systemu Microsoft Windows. Za pomocą funkcji 5GPF-G[U wysyłane są naciśnięcia kla-
wiszy w celu pomno enia liczb i zakończenia pracy Kalkulatora.
Listing 2.28. U ycie funkcji Shell i SendKeys w praktyce
5WD /PQGPKG
KO YTCE9CTV +
YTCE9CTV 5JGNN
%#.%':'
#RR#EVKXCVG YTCE9CTV
(QT + 6Q
5GPF-G[U + ]
33. _ 6TWG
0GZV +
5GPF-G[U 6TWG
5GPF-G[U ](_ 6TWG
'PF 5WD
Automakra
Po serii ciekawych instrukcji i funkcji przyszedł czas na automakra. Są one nieroze-
rwalnie związane ze środowiskiem aplikacji, to znaczy, e są wykonywane zaraz po
uruchomieniu aplikacji czy dokumentu.
34. 72 MS Office 2000 i 2002/XP. Tworzenie własnych aplikacji w VBA
Tabela 2.4. Kody klawiszy funkcyjnych
Klawisz Kod
BACKSPACE ]$#%-52#%'_, ]$5_ lub ]$-52_
BREAK ]$4'#-_
CAPS LOCK ]%#25.1%-_
DEL lub DELETE ]'.'6'_ lub ]'._
STRZAŁKA W DÓŁ ]190_
END ]'0_
ENTER ]'06'4_ lub `
ESC ]'5%_
HELP ]*'.2_
HOME ]*1/'_
INS lub INSERT ]+05'46_ lub ]+05_
STRZAŁKA W LEWO ].'(6_
NUM LOCK ]07/.1%-_
PAGE DOWN ]2)0_
PAGE UP ]2)72_
PRINT SCREEN ]2465%_
STRZAŁKA W PRAWO ]4+)*6_
SCROLL LOCK ]5%41...1%-_
TAB ]6#$_
STRZAŁKA W GÓRĘ ]72_
F1 ](_
F2 ](_
F3 ](_
F4 ](_
F5 ](_
F6 ](_
F7 ](_
F8 ](_
F9 ](_
F10 ](_
F11 ](_
F12 ](_
F13 ](_
F14 ](_
F15 ](_
F16 ](_
35. Rozdział 2. ♦ Wspólne cechy i obiekty programów Office 73
Tabela 2.5. Kody klawiszy specjalnych
Klawisz Kod
SHIFT
CTRL @
ALT
Automakra to takie makra, które noszą specjalną nazwę, przez co program automa-
tycznie je uruchamia, gdy zajdzie określona sytuacja, na przykład, kiedy uruchomisz
lub zamkniesz dany program lub dokument.
Tabela 2.6 przedstawia nazwy makr rozpoznawane przez poszczególne aplikacje Office.
Tabela 2.6. Nazwy automakr
Program Nazwa Kiedy zostaje uruchomione?
Word #WVQ'ZGE Podczas otwierania (ładowania) szablonu globalnego Word.
#WVQ0GY Za ka dym razem, kiedy tworzysz nowy dokument.
#WVQ1RGP Za ka dym razem, kiedy otwierasz istniejący dokument (szablon).
#WVQ%NQUG Za ka dym razem, kiedy zamykasz dokument (szablon).
#WVQ'ZKV Podczas zamykania szablonu globalnego lub zamykania aplikacji
Word.
#WVQA1RGP Za ka dym razem, kiedy otwierasz istniejący skoroszyt (szablon).
#WVQA#EVKXCVG Za ka dym razem, kiedy uaktywniasz obiekt.
Excel
#WVQAGCEVKXCVG Za ka dym razem, kiedy deaktywujesz obiekt.
#WVQA%NQUG Za ka dym razem, kiedy zamykasz skoroszyt (szablon).
Access #WVQ'ZGE Za ka dym razem, kiedy otwierasz bazę danych.
Oczywiście automakra nie są jedynymi procedurami uruchamianymi podczas otwie-
rania określonego rodzaju dokumentu. Większość dokumentów pakietu Office posia-
da własne procedury uruchamiane wraz z otwarciem czy zamknięciem dokumentu.
Podstawowe procedury przedstawione są w tabeli 2.7. Je eli chcesz poznać inne, zaj-
rzyj do przeglądarki obiektów.
Tabela 2.7. Inne makra uruchamiane automatycznie
Aplikacja Nazwa procedury Kiedy zostaje uruchomione?
Word QEWOGPVA0GY Za ka dym razem, kiedy tworzysz nowy dokument.
QEWOGPVA1RGP Za ka dym razem, kiedy otwierasz istniejący dokument
(szablon).
QEWOGPVA%NQUG Za ka dym razem, kiedy zamykasz istniejący dokument
(szablon).
Excel 9QTMDQQMA1RGP Za ka dym razem, kiedy otwierasz skoroszyt (szablon).
9QTMDQQMA$GHQTG%NQUG Za ka dym razem, kiedy zamykasz skoroszyt (szablon).
36. 74 MS Office 2000 i 2002/XP. Tworzenie własnych aplikacji w VBA
W literaturze spotkałem się z określeniem, i automakra pozostały dla zachowania zgod-
ności z poprzednimi wersjami VBA dla Office. Ale czy tak jest naprawdę? Nie wiem.
Wielokrotnie spotkałem się nawet w najnowszych szablonach, kreatorach z autopro-
cedurami, zamiast z nowymi procedurami uruchomieniowymi dla poszczególnych do-
kumentów.
Jak utworzyć automakro w Wordzie?
Je eli automakro ma być umieszczone w szablonie globalnym…
Wstaw moduł do PQTOCN i nadaj mu dowolną nazwę. W module tym umieść
na przykład taką procedurę:
5WD #WVQ'ZGE
VW KPUVTWMELG MVQTG OCLC D[E Y[MQP[YCPG
'PF 5WD
Je eli automakro ma być umieszczone w szablonie i (lub) dokumencie…
Wstaw moduł do tego szablonu (dokumentu) i nadaj mu dowolną nazwę.
W module tym umieść na przykład taką procedurę:
5WD #WVQ1RGP
VW KPUVTWMELG MVQTG OCLC D[E Y[MQP[YCPG
'PF 5WD
Automakra mogą być przechowywane w szablonie globalnym, innym szablonie lub
dokumencie. W przypadku wystąpienia konfliktu nazw (wiele makr będzie miało tę
samą nazwę), Word uruchomi makro w najbliższym kontekście. Na przykład, jeżeli
utworzysz makro #WVQ%NQUG w szablonie i dokumencie, Word uruchomi tylko makro
z dokumentu. Jeśli utworzysz makro #WVQ0GY w szablonie globalnym, makro to zosta-
nie uruchomione pod warunkiem, że nie będzie zawierał takiego żaden z otwartych
dokumentów lub szablonów.
Jak utworzyć automakro w Excelu?
Podobnie jak w Wordzie, do aktywnego skoroszytu musisz wstawić moduł i nadać mu
dowolną nazwę. Następnie umieść w nim procedurę, jak pokazuje przykład poni ej:
5WD #WVQA1RGP
VW KPUVTWMELG MVQTG OCLC D[E Y[MQP[YCPG
'PF 5WD
Aby uruchomić makra #WVQA#EVKXCVG lub #WVQAGCEVKXCVG, musisz posłużyć się me-
todą 4WP#WVQ/CETQU.
Metoda 4WP#WVQ/CETQU dla MS Excela ma następującą składnię:
Y[TCGPKG4WP#WVQOCETQU
MVQTG
Y[TC GPKG — określa skoroszyt. Argument obowiązkowy.
MVÎTG — argument obowiązkowy, określający makro do uruchomienia. Mo e
przyjąć jedną z następujących postaci (tabela 2.8):
37. Rozdział 2. ♦ Wspólne cechy i obiekty programów Office 75
Tabela 2.8. Wartości argumentu które dla metody RunAutoMacros
Wartość Uruchamia…
ZN#WVQ1RGP procedurę #WVQA1RGP.
ZN#WVQ%NQUG procedurę #WVQA%NQUG.
ZN#WVQ#EVKXCVG procedurę #WVQA#EVKXCVG.
ZN#WVQGCEVKXCVG procedurę #WVQAGCEVKXCVG.
Jak utworzyć automakro w programie Access?
Tu zagadnienie nieco się komplikuje, a to ze względu na kilka czynników. Postaram się
jednak Ci to wszystko wytłumaczyć.
Mo esz utworzyć makro, które będzie automatycznie się uruchamiało podczas otwiera-
nia bazy danych na dwa sposoby:
1. Dodać nowe makro (oczywiście odpowiednio je nazwać) i tam określić wszystkie
polecenia do wykonania.
Zawartość makra #WVQ'ZGE:
Pole Akcja Pole Nazwa formularza
1VYQT HQTOWNCT 1MTGUN PCYG HQTOWNCTC MVQT[ OC D[E WTWEJCOKCP[ PC UVCTEKG
2. Wstawić moduł i umieścić w nim funkcję, którą ka dorazowo będzie
wykonywała baza danych podczas otwierania. Następnie dodać nowe makro,
a w nim określić, jaki kod ma wykonać. W polu Akcja umieść 7TWEJQO MQF,
a w polu Nazwa funkcji nazwę funkcji, która ma zostać wykonana.
Zawartość makra #WVQ'ZGE:
Pole Akcja Pole Nazwa funkcji
7TWEJQO MQF 1VYCTEKG
Zawartość modułu:
(WPEVKQP 1VYCTEKG
VW KPUVTWMELG MVQTG OCLC D[E Y[MQP[YCPG
'PF (WPEVKQPU
Oczywiście, sposób drugi jest bardziej wydajny, bo masz praktycznie nieograniczone
mo liwości (no, chyba e ograniczone do mo liwości języka VBA i Twoich). Zaś
sposób pierwszy pozwala Ci wykonać tylko akcje dostępne w polu Akcja.
Zapewne zwróciłeś uwagę, że w aplikacjach Word i Excel używaliśmy słowa kluczo-
wego 5WD, a w Access (WPEVKQP. I to jest właśnie ta podstawowa różnica w konstruk-
cji modułu.
38. 76 MS Office 2000 i 2002/XP. Tworzenie własnych aplikacji w VBA
Aby wyłączyć działanie automakr, wystarczy podczas otwierania określonego doku-
mentu Office przytrzymać klawisz Shift. Nie da się jednak zatrzymać automakr za-
pisanych w dodatkach.
Directory. Przejście przez dotychczasowe rozdziały powinno dać biegłość we wszyst-
kich głównych elementach Active Directory i doprowadzić do rozpoczęcia pierwszego
rzeczywistego
Ostrzeżenie
Wiesz ju jak umieszczać automakra w dokumentach Office. Chcę Cię jednak ostrzec,
e automakra są często wykorzystywane w wirusach. W dokumentach Word najczęściej
dochodzi do zara enia szablonu globalnego, po czym w tym szablonie umieszczana
jest procedura #WVQ'ZGE z instrukcjami destrukcyjnymi. Je eli otwierasz jakikolwiek
dokument Word, który nie powinien mieć adnych makr czy kodu, a pojawia się ostrze-
enie o makrowirusach, oznacza to, e najprawdopodobniej masz zara ony szablon glo-
balny. Oczywiście nic tak nie pomo e jak dobry program antywirusowy, ale mo esz
spróbować się bronić sam. Utwórz skrót do programu Word, po czym wejdź do wła-
ściwości tego skrótu. W polu Obiekt docelowy dodaj na końcu ście ki do programu po
spacji parametr O. Spowoduje to wywoływanie aplikacji Word bez opcji uruchamiania
automakra. Oczywiście makro #WVQ'ZGE, które sam napisałeś, równie nie zostanie uru-
chomione. Jeśli jednak Twoja aplikacja wymaga, by jakieś makro było uruchamiane wraz
z programem Word, musisz utworzyć makro i nadać mu na przykład nazwę 9NCUP[
#WVQ'ZGE, po czym otwierać aplikację przez skrót utworzony w następujący sposób:
1. Utwórz skrót do programu Word, po czym wejdź do właściwości tego skrótu.
2. W polu Obiekt docelowy dodaj na końcu ście ki do programu po spacji
parametr O oraz nazwę Twego makra (bez spacji): O9NCUP[#WVQ'ZGE.
Excel posiada tak e pewne właściwości startowe. Jeśli chcesz, by jakiś skoroszyt był
uruchamiany za ka dym razem, kiedy jest uruchamiany Excel, wystarczy, e zapiszesz
go w katalogu: Program FilesMicrosoft OfficeOfficeXlStart. Mo esz w ten sposób
monitować kto, kiedy i jaki otwierał skoroszyt.
Taką metodę wykorzystywał słynny wirus o nazwie „Laroux”. Umieszczał on we wspo-
mnianym katalogu skoroszyt o nazwie „Personal”, który automatycznie uruchamiał się
wraz programem Excel. Po otwarciu skoroszytu uaktywniał się wirus, który sprawdzał,
czy pozostałe skoroszyty (otwarte przez u ytkownika lub nowo utworzone) zawierają ar-
kusz o nazwie takiej, jak wirus. Jeśli nie, tworzył taki arkusz, ukrywał i wstawiał moduł
z kodem wirusa. Otwarcie tak zara onego pliku na dowolnym, innym komputerze powo-
dowało utworzenie pliku Personal.xls (jeśli nie istniał) itd., itd. Istnieje kilkanaście odmian
tego wirusa. Najłagodniejsza utrudnia ycie tylko wtedy, jeśli wykonujesz jakieś czyn-
ności automatycznie (z kodu), szczególnie kiedy w odwołaniach do arkuszy nie posługi-
wałeś się nazwą, a indeksem. W najgroźniejszej swej odmianie wirus formatuje dyski.
Przykłady skrótów z opcjami uruchamiania lub wyłączania automakr dla poszczegól-
nych aplikacji znajdują się na dysku CD-ROM w katalogu PrzykładyCz_II, pliki *.lnk.