You are on page 1of 793

Spis trek

Przedmowa............................................................................................... 21

CzqE I Podstawowe informacje .................................................... 27


Rozdzial 1. Skqd slq wziql Excel 2003? ....................................................................29
Historia arkuszy kalkulacyjnych w zarysie ..........................................................................29.
Wszystko zaczelo sic od programu VisiCalc .................................................................29
Program 1-2-3 firmy Lotus ............................................................................................30
Program Quattro Pro ......................................................................................................33
Program Microsoft Excel ............................................................................................... 34
Excel jako dobre narzqdzie dla pmjektantdw aplikacji ........................................................ 36
Rola Exccla w strategii Microsoflu ......................................................................................38
Rozdzial 2 . Program Excel w zarysie .........................................................................39
MySlenie obiektowe .............................................................................................................39
Skoroszy?y ............................................................................................................................ 40
Arkusze ..........................................................................................................................40
Arkusze wykresdw ......................................................................................................... 41
Arkusze makr XLM ....................................................................................................... 42
Arkusze dialogowe programdw Excel 5/95 ................................................................... 42
lnterfejs uwkownika w Excelu ...........................................................................................42
Menu ............................................................................................................................. -42
Menu podrqcne ............................................................................................................-43
Paski narzqdzi ...............................................................................................................-43
Okna dialogowe .............................................................................................................44
..
Funkcja ,,prztcizgnlj i upuSC" ........................................................................................45
Skrdty klawiaturowe .......................................................................................................45
Inteligentne tagi ..............................................................................................................45
Panel zadan .................................................................................................................... 46
Wprowadzanie danych ......................................................................................................... 46
..
Formu@, hnkcje 1 n a n y .....................................................................................................48
Dostosowywanie 2awartoSci okna Exceia ...................... . . ................................................. 49
Zamaczanie obiektbw .......................................................................................................... 49
Formatowanie....................................................................................................................... 50
Formatowanie liczbowe ................................................................................................. 50
Formatowane stylu .........................................................................................................50
lcsadty ................................................................................................................................ 1
Wykresy ............................................................................................................................... 59
Makra i programowanie ..................................................................................... 1................. 52
11 Excel 2003 PL. Programowanie w VBA . Vademecum profesjonalisty

Dostqp do bazy danych.................................................................................. .......................53


Arkuszowe bazy danych ....................................................................... ...................... 53
Zewnetme bazy danych ........................................................................ ........................55
Funkcje intemetowe ...................................................................................... ........................ 55
Funkcje zwivane z jqzykiem XML .............................................................. ........................56
Nanedzia malizy ..................................................................................................................56
Konspekty ............................................................................................... ........................ 56
Automatyczne sumy czeSciowe ......................................................................................56
Dodatek Analysis TeolPak ...................................................................... ........................ 56
Tabele pnestawne .................................................................................. ........................57
'

Dodatek Solver..................... ............................................................ ........................58


..
Dodatki .................................................................................................................................58
..
ZgodnoSC wersji ........................... .......................................................... ........................58
Opcje ochrony .............................................................................................. ........................58
Ochrona formul pried nadpisaniem ...............................................................................59
Ochrona struktury skoroszytu ................................................................ ........................ 59
Ochrona skorostytu przy utyciu hasla ...........................................................................60
Ochrona kodu jqzyka VBA przy utyciu hasla ....................................... ........................ 60
System pomocy Excela ................................................................................ ........................61
Rozdziat 3 . Wybrane zasady stosowania formul ..................................................... 63
......................... 63
Formub ........................................................................................................
Obliczanie formul......................................................................................... .........................63
Odwolania do kom6rki lub zakrcsu .............................................................. ......................... 64
Dlaczego warto stosowat odwdmia, k t b c nie sqwzgl@ne? ............... ......................... 65
.........
Notacja W l K l ................................................... ........................... .........................65
Odwolania do innych arkuszy lub skomsyt6w ..................................... ........................ 66
Zastosowanie nanv ..................................................................................... .........................
' 67
Nadawanie nazw km6rkom i zakrcsom ............................................. ......................... 67
Nadawanic nazw istnicjqcym odwdaniom ........................................... ......................... 68
Stosowanie nazw z operatorem pneciccia ............................................ .........................69
Nadawanic nazw kolumnom i wierszorn............................................. ......................... 70
Obszar obowiqzywmia nazw ................................................................ ......................... 70
Nadawanie nazw stalym........................................................................ ......................... 70
Nadawania nazw formulom ...........................................................................................71
Nadawanic nazw obiektorn .................................................................. .........................73
Blqdy formul ........................ .... ......................... 73
................................................................
Fonnuty tablicowe....................................................................................... ......................... 74
Ptzyklad formuly tablicowcj ................................................................. .........................74
Kalendarz oparty na formule tablicowej ............................................... ......................... 75
Zalety i wady formuIy tablicowej ......................................................... ......................... 75
Metody zliczania i surnowania ............... ...........................................................................76
..
Zastosowanie funkcji LICZ.EZELI lub sUMA.ETELI ...............................................76
Zastosowanie forrnul tablicowych do zliczania i surnowania........................................ 77
. . .
Inne n a r q d a a dlcza~qce...................................................................... ..........................79
U m a n i e daty i czasu ................................................................................ .......................... 79
Wprowadzanie d a y i czasu ................................................................. ..........................79
Stosowanie dat sprzcd roku 1900......................................................... .......................... 80
Twonenie megaformul ............................................................................. .......................... 81
Rozdzial 4 . Pliki Excela ................................................................................................ 85
..........................
Uruchamianie Excela ................................................................................. 85
Obstugiwane formaty plik6w arkuszy kalkulacyjnych .........................................................87
Pliki ark= Mkulacyjncgo 1-2-3 firmy Lotus ............................................................ 87
Pliki arkusza kalkulacvineea Ouattm Pro ............................................ .......................... 88
Spis trefci 5

Formaty plik6w baz dmych ...........................................................................................88


Formaty piik6w tekstowych ............................................................................ ....,..........89
Inne formaw. ~ . l i k 6 w....................................................................................................... 89
Pliki twonone przez Excel ................................................................................................... 89
Pliki forrnatu XLS ......................................................................................................... 90
Pliki o b s m roboczem ................................................................................................ 90
-
Pliki szablon6w .............................................................................................................. 91
Pliki pask6w nancdzi .................................................................................................... 91
.-
Pliki dodatk6w .............................................................................................................. 92
Excel i j ~ z y kHTML.............................................................................................................92
W jaki sposbb Excel korysta z fomatu HTML? .......................................................... -.
93
Zwiekszanie zlokonoki ................................................................................................. 94
Tworzenie interaktywnych plikdw HTML ..................................................................... 94
Importowanie i eksportowanie plik6w XML ....................................................................... -.
96
C y m jest XML? ......................................................................................................... 96
Importowanie rawartaSci plikdw XML przy u2yciu mapy ............................................97
Importowanie zawartoSci p l i k 6 ~XML do listy ............................................................. 99
Eksportowanie zawartoici plik6w XML z Excela ........................................................ 99
Ustawienia Excela w rcjestrze systcmu Windows.............................................................. 100
Rejestr systemu Windows ............................................................................................ 100
- a -

Ustawienia Exccla ........................................................................................................1 U1

Czef 6 II Projektowanle aplikacji w Excelu ................................ 103 ...


Rordrlal5 . Czym jest aplikacja arkusza kalkulocyfnego? ..................................
105
Robocza dcfinicja aplikacji arkusza kalkulacyjncgo ..........................................................
.. *
105
Pmjektant i uvkownik kohcowy ...................................................................................... 106
Kim sq projektanci i czym siq zajmujq? .......................................................................107
Klasyfikacja u ~ k o w n i k 6 w ~ ~kalkulacyjnych
szy ..................................................108
Odbiorcy aplikacji arkusza kalkulacyjnego..................................................................108
Rowiagwanie problem6w przy ugciu aplikacji arkuua kalkulacyjnego .......................109 ..-
~odstawowekategorie aplik;cji arkusza kalkulacyjnego ................................................... 110
Arkusze kalkulacyjne tworzone szybko i niestarannie.................................................111
Arkusze kalkulacyjne
. . .przeznaczone wylqcmie do uZydcu prywarnego
....................... 1 11
.-
Aplikacje jednego uwkownika ..................................................................................1 12
Aplikacje typu ..spaghettiw........................................................................................... 112
Aplikacje u2ytkowe ......................................................................................................
112
..
Dodatki zawietajqce funkcje arkusza .............................. ........................................... 113
Jednoblokowe budmy ..................................................................................................113 ..
Modele warunkowe ...................................................................................................... 114
Aplikacje przechowujqce dane i u d z i a l a j ~ edo nich dostepu ...................................... 114
Aplikacje komunikujqcc sip z bazami danych .............................................................. 115 - a -

Aplikacje ..pod klucz" ..................................................................................................119

Rozdzial6. Podstawy projektowania apllkacjl arkusza kalkulacyjnego ........... 117


Podstawowe etapy projektowania ......................................................................................
i
117
OkreSlmie wymagah "Zytkownika .....................................................................................
118
Planowanie aplikacji spetniajqcej wyrnagania uvkownika ............................................... 119
. Okrdlcnie najwtaiciwszego interfejsu u2ytkownika ......................................................... 121
Twolzmie niestandardowych okien dialogowych........................................................122
Zastosowanie kontrolek ActiveX w arkuszu ................................................................122
Do~tosowaniemenu .................................................................................................. 123
Dostosowywanie pask6w n a q d z i .............................................................................125
Tworzenie skr6tbw klawiaturowych ............................................................................ 127
Rozpocz~cieprac projekrowych .................................................................................... 127
6 Excel 2003 PL. P r o g r a m o w a n i e w VBA . V o d e m e c u m profesjonalisty

Zadania realizowane z rny9lq o koficowyrn utytkowniku .................................................. I27


Testowanie aplikacji .................................................................................................... 138
..
Zwiqkszanie odpornogci aplikacj~............................................................................. 128
Tworzenic aplikacji intuicyjnej i cstctycmie wyg1qdajqccj......................................... 131
Tworzenie systernu pornocy prteznaczoncgo dla utytkownika ...................................132
Dokumentowanie prac projektowch ........................................................................... 132
Przekazanie aplikacji utytkownikom ........................................................................... 132
.
.
Uaktualnianir aplikacji w razie koniecznoici ................... ...................................... 133
Pozostate kwestie dotyczqce pmjektowania ....................................................................... I34
Wersja Excela zainstalowana przez utytkownika ........................................................134
..
W e q a jqzykowa ..........................................................................................................
134
SzybkoSC systernu ........................................................................................................135
Tryby karty graficznej .................................................................................................. 135

CzqZ Ill Jezyk Visual Basic for Applications.................................137


Rozdziot 7. Wprowadzenle do jtzyka VBA ............................................................ 139
Podstawowe informacjc o jqzyku BASIC .......................................................................... 139
J ~ z y kVBA .........................................................................................................................
I39
Modelc obiektowe........................................................................................................ 140
Porownanic jqzyka VBA z jpzykiem XLM .................................................................. 140
Wprowadzenie do j ~ k VBA a ..........................................................................................140
Edytor Visual Basic............................................................................................................ 144
Umchomienie edytora W E ......................................................................................... 144
Okna edytora Visual Basic ........................................................................................... 145
Zastosowanie okna Project Explom .................................................................................. 146
Dodanie nowego rnodulu VBA .................................................................................... 147
Usuwanic modutu VBA ............................................................................................... 148
Eksportowanic i importowanie obiekt6w ..................................................................... 148
Zastosowanie okien Code.................:................................................................................. 148
Minimalizacja i maksymalizecja okien ........................................................................ 149
Przcchowywanie kodu tr6dtowego j q k s VBA ......................................................... 149
Wprowadzanie kodu lowe ego jpqka VBA ........................................................... 150
Dwtosowywanie edytora Visual Basic .............................................................................. 155
Zakladka Editor............................................................................................................ 156
Zakladka Editor Format ............................................................................................... 158
Zaktadka General ......................................................................................................... 159
Zastoso\vanie zakladki Docking ................................................................................... 160
Rejestrator makr Excela ..................................................................................................... 160
Co wlakiwie rejestnitor makr zapisuje? ...................................................................... 161
Wzglqdne c y bezwzglpdne? ....................................................................................... 162
Opcjc m i w e z rejestrowaniern ................................................................................ 163
Modyfikowanie zarejestrowanych makr ...................................................................... 166
Obiekty i zbiory............................................................................................................... 167
Hierarchia obiekt6w ..................................................................................................... 168
Zbiory ........................................................................................................................ 168
Odwdywanie siq do obickt6w ..................................................................................... 169
Wt&ciwofei i metody ........................................................................................................ 169
. .
WtafciwoSc~ob1ekt6w ................................................................................................. IS0
Metody obickt6w ........................................................................................................ 171
Obiekt Comment ................................................................................................................ 172
Pomoc d o t y q c a o b i e h Comment .......................................................................... 172
Wtdciwo4ci obiektu Comment.................................................................................... I73
Metody obiektu Comment............................................................................................ 173
Spis treici 7

Zbidr Comments .......................................................................................................... 174


Wldcitvo4C Comment ............... . .............................................................................. 175
Obiekty podlcgajqce obiektawi Comment .................................................................. 175
Sprawdzanie. czy komirrka zawien komentarz .........................................................177
Dodanie nowego obirktu Comment ............................................................................. 177
Kilka przydatnych wldciwoJci obiektu Application ................................................ 178
Obiekty Range ................................................................................................................... 1i9
WlaSciwoSC Range .......................................................................................................180
WlaiciwoSC Cells ....................... . .............................................................................. 181
WldciwoSC Offset ..................................................................................................... 182
. .
Co nalcty w~edz~eC o obicktach? .................................................................................... IS4
Podstawowc zagadnieni a. krdre nalety zapamiqtat ............................................... 184
Dodntkowe informacje na temat obiektow i wloiciwosci ............................................ IS5
Rozdzial 8 . Podstawy prograrnowania w jqzyku VBA ...........................................189
Pneglqd elementow jezyka VBA .......................................................................................I89
Komentarze ........................................................................................................................ I91
Zmiennc. typy danych i stale .............................................................................................. 192
Detiniowanie typbw danych......................................................................................... 193
Deklarowanic miennych .............................................................................................196
Zasiqg miennych ....................................................................................................... 197
Zastosowanie stalych ...................................................................................................201
Zastosowanic lahcuch6w ............................................................................................. 202
Zastosowanic dat .......................................................................................................... 203
instrukcje pnypisania ........................................................................................................ 204
Tablicc................................................................................................................................ 205
Deklarowanie tablic ..................................................................................................... 205
Deklamwanie tablic wielowymiarowych ..................................................................... 206
Zmiennc obiektowe .......................................................................................................... 207
Typy danych dcfiniowane p m z utytkownika ................................................................... 208
Funkcje wbudowane ........................................................................................................... 203
Manipulowanie obicktami i zbiorami ................................................................................. 211
Konsrmkcja With ... End With ..................................................................................... 211
Konstrukcja For Each ...Next ...................................................................................... 212
Sterawanie wykonywaniem procedur ................................................................................214
Instrukcja GoTo ........................................................................................................... 214
Konstrukcja If ...Then ................................................................................................. 215
Konstrukcja Select Case............................................................................................... 218
Wykonywanie bloku instrukcji w ramach pqtli ..............................................................7 7 1
Rozdziat 9 . Zastosowanle procedur Sub jqzyka VBA ............................................ 227
Deklarowanie i tworzenie procedur Sub jezyka VBA 777
Deklarowanie procedury Sub ..................................................................................... 2 1 7
Zasicg procedury .......................................................................................................... 238
Wykonywanic procedur Sub ............................................................................................ 1
,
,,70

Wykonywanic proccdury p c q utyciu polscnia Run SublClserFom .......................... 230


L'ruchamianie procedury z poziomu okna dialogowego .Uakra ...... .
7 71-1
Wykonywanie procedury pnl, utyciu skr6tu opartego na klawiszu Ctrl ..................... 231
Wykonywanie procedury przy u p c i u niestandardowego menu ................................ 1 2 7 .._--

Wywotywanie proceduty z inncj proczdury .................................................................. 71'2


Wykonywanie procedury przy u2yciu prrycisku paska narzedzi ................................. 237
Wykonywmie ptocedury poprrcz irliknic;cie obiektu .................................................. 235
Wykonywanic makra po wyswieniu zduzenia .......................................................... ~ 5 9
--
Wykonywanie p r o c e d q z poziomu okna Immediate ................................................ 239
9 Excel 2003 PL.Progromowanie w VBA . V o d e m e c u m profesjonalisty

Przekazywanie argumcnt6w proccdurom ........................................................................... 240


Metody obslugi blqdow .......................................................................................................
243
Przechytywanie blcd6w......................................................................................... ~243
P q k l a d y kodu ir6dtowego obslugujqcego blqdy ....................................................... 245
Rzeczywisry pnyklad wykorzystujqcy procedury Sub ...................................................... 247

Wyrnagania projektowe ............................................................................................... 247


Dostppne informacjc .................................................................................................... 248
..
Spodb realizacj~........................................................................................................ 248
Co nalety wiedziek?....................................................................................................249
Wstepne rejestrowinie makra ...................................................................................... 249
Wstqpnc przygotowania............................................................................................ 250
Pisanie kodu ir6dlowego ............................................................................................. 251
Tworzenie procedury sortujqcej ...................................................................................252
Dodatkowe testy ..................... .. .................................................................................
255
Usuwanie problem6w....................... .
......................................................................256
Dostppno$&narredzia ................................................................................................ 258
Ocenianic projektu .......................................................................................................259
.
Rozdzial 10 Twonenie procedur Funciion .............................................................. 261
Por6wnanic procedur Sub i Function .............................................................................. 261
Dlaczego tworzy sip funkcje niesrandardowe? ...................................................................261
Pierwsy pmyklad procedury Function ............................................................................ 262
Funkcja niestandardowa............................................................................................... 262
Zastosowanie funkcji w arkusru .................................................................................. 263
Zastosowanie funkcji w procedurn jpzyka VBA ........................................................ 264
Analiza funkcji nistandardowej .............................................................................264
Procedury Function ............................................................................................................ 265
..
Deklarowanie funkql .............................................................................................. 265
..
...............................................................................................................
Z a s i ~ gfunkcj~ 266
Wykonywanie proccdur Funuion ................................................................................ 267
Argumenty procedury Function .........................................................................................268
Prqklady funkcji ............................................................................................................... 268
Funkcja pozbawiona argummt6w ................................................................................269
Kolejna funkcja pozbawiona argumentow ...................................................................270
Funkcja z jednym argumentem .................................................................................. 270
Funkcja z dwoma argumentmi ................................................................................... 273
Funkcja pobierajqca rablicp jako argument ................................................................ 274
Funkcja utywajqca opcjonalnych argument6w ............................................................274
Funkcja zwracajqca tabliq jqzyka VBA ...................................................................... 276
Funkcja zwracajqca wart066 Mqdu ............................................................................... 278
Funkcja o nieokreSlonej liczbie argument6w ............................................................ 280
Emulowanie funkcji SUMA Excela ................................................................................... 280
Funkcjc wykrywajqce i usuwajqce blqdy ........................................................................... 283
Okno dialogowe Wstawianie funkcji .................................................................................284
..
Definiowanie kategorii funkcj~ ..................................................................................... 285
Dodanie opisu funkcji .................................................................................................. 286
Dodarki pmchowujqce funkcje niesmndardowt ............................................................ 287
lnteriejs API systemu Windows....................................................................................... 287
PizyWady zastosowania knkcji interfejsu API w e m u Windows .............................. 288
Idengfikacja katalogu systcmu Windows .................................................................... 288
Wykrywanie wcitniccia klawisza Shift ........................................................................ 289
Dodatkowe informacjc na temat funkcji interfejsu API ............................................. 290
Spis treici 9

.
Rozdzlat 11 Pnyktady i metod'y programowania w jezykv VBA ..........................291
Przetwananie zakresdw ..................................................................................................... 291
Kopiowanie zakresu ..................................................................................................... 292
P~enoszenie .......zakresu
.............
Kopiowanie zakresu o mienncj wielko5ci ................................................................ 293
Zaznaczanic ldtnego typu zakrcsbw i identytikowanie ich .........................................294
Wprowadzanie wanoSci do kom6rki ............................................................................ 296
Wprowadzanie wartoSci do nastqpnej pustej korndrki .......................... . . .............. 297
Wscnymywanie wykonywania makra
w cclu pobrania zakresu zamaczonego p r a z utytkownika ...................................... 298
Zliczanic zamaczonych komdrek ................................................................................299
Okref lanic typu zmaczonego zala-csu ........................................................................ 300
Wydajne przetwnrzanie korn6rck zaznaczonego zakmu przy utyciu mtli ................. 302
Usuwanie wszystkich pustych wimzy ........................................................................ 303
Okreflanie, czy &es zawiera sic w innym zaknsie .................................................. 304
Okrdlanie typu danych z a w m c h w komdrce ............................................................304
Odczytywanie i zapusywanie zakres6w ........................................................................ 305
Lepsza mctoda zapisywania zakresu ................................:........................................... 306
Przenoszenie zawartoki tablic jednowymimwych .................................................. 308
~ ~

h e n o s z m i e zawartojci zaknsu do tabliw. . . Variant ............................................ 308

.
.
WDU
Zamacmie maksyrnalnej wartodci zakresu ................................................................ 309
Zamaczanie wszystkich kom6rek okrdlonego forrnatu .............................................. 310
Prottwarzanie skorosryt6w i arkuszy .................................................................................312
Zapisywanie wszpkich skoroszytdw ...........................
Zapisywanie i zamykanie wszyslkich skorosyt6w .................................................. 312
Konystanie z wlaiciwoJci skoroszytu ....................................................................... 312
Synchronizowanie arkuszy..........................................................................................313
Mctody programowania w jqzyku VBA ............................................................................. 314
Pralyzanie wartoSci wlsJciwoSci tygu logiczncgo .................................................... 314
Okrdlanic liczby drukowanych stmn .......................................................................... 315
WySwialanic . . daty i czasu ............................................................................................
315
Pobieranlc lasty czcionek.............................................................................................. 317
Sortowanie tablicy ..................................................................................................... 318
Pnctwarzanie gmpy plikdw ........................................................................................ 319
Funkcje prrydarnc w proccdurach jczyka VBA ................................................................. 320
Funkcja FileExists........................................................................................................ 321
Funkcja FileNarneOnly ................................................................................................ 321
Funkcja PathExists.................................................................................................. 321
Funkcja RangeNarneExists .......................................................................................... 322
Funkcja SheetExists ..................................................................................................... 322
Funkcja WorkbooklsOpcn ........................................................................................... 322
Pobicranie wartoSci z zamkniep skmszytu............................................................ 322
Funkcje przydamc w forrnulach arkusra ............................................................................ 324
Funkcje m c a j ~ infonnacje e o forrnatowaniu kombrki ........................................... 324
W$wietlanic daty w trakcit zapisywania lub drukowania pliku ...............................325
Obiekty nadrydnc .......................................................................................................326
Zliczanie korndrck, kt6rych wartdci znwierajq sip pomipdp dwoma wartofciami ....327
Zliczanie widocmych komdrek zakresu ......................................................................328
OkreSlanic ostatniej niepustej kom6rki kolumny lub wicnze .................................... 3 ~ 8 q.3

Czy lahcuch jat zgodny z wmrcem? ....................................................................... 330


Wydzjelanie n-tcgo clcmentu Iafxucha ........................................................................ 331
Funkcja wielofunkcyjna........................................................................................... 332
Funkcja SHEETOFFSET............................................................................................. 333
Zwracanie maksymaQnejwartaQi ze wszystkich arkuszy ............................................334
10 Excel 2003 PL . Progromowonie w VBA . V o d e m e c u m profesjonolisty

.
Zwrscanie tablicy zawierajqcej unikatowe loso\vo uporqdkowane liczby calko~vitr.... 335
Poaqdkowanie zakresu w losowy spos6b 336
Funkcje interfejsu API sysfernu Windows ...................................................................... 338
OkreJlanie skojarzen plik6w ........................................................................................338
OkreSlenie informacji dotyczyych domyllnej drukarki .......................... ............. 339 .
.
Okreslenie nktualncj rozdzielczoSci kany graficznej ....................... . . ...................... 340
Dodanie dtwi~kudo aplikacji ......................................................................................340
Odczytyvnnie zawartodci rcjestru systemu Windows i mpisywnnie \v nim danych ....342

CzqSE IV Zastosowanie formularzy UserForm.................................345


.
Rozdziall2 Alternatywne metody twonenia
niestandardowych okien dlalogowych........................................... 347
Okno wprowadzania danych .............................................................................................. 347
Funkcja InputBox jpyka VBA .................................................................................... 347
Metoda InputBox Excelr .............................................................................................349
-
Okno komunikatu hnkcja MsgBox jtzyka VBA ................................................... 351
Metoda GctOpenFilcnarne Excela................................................................................. 354
Metoda GetSaveAsFilcnome Excela .................................................................................. 357
Okno wybierania katalogu ..............................................................................................
357
Wybiemie katalogu p r y u2yciu funkcji intcrfejsu API systcmu Windows ...............358
Wybieranic katalogu . . uZyciu
. przy . obiektu FileDialog ................................................... 360
WySwictlanie wbudowanych okien dialogowych Excela..................................................360
Zastosowanie zbioru Dialogs ..................................................................................... 361
Dodatkowe informacje na temat wbudowanych okien dialogowych ........................... 362
. ~

Zastosowanie argumenf6w z wbudowanymi oknami dialogowymi ............................. 363


BezpoJrednie wybieranie poycji menu ....................................................................... 363
Rozddd 13. Wprowadzenle do forrnulany UserForm ............................................. 365
Wstawianie nowego formulana UscrFom ...................................................................... 365
Dodawanie kontrolek do formulam UserForm ................................................................. 366
Kontrolki okna Toolbox ..................................................................................................... 367
Kontrolka CheckBor ................................................................................................... 367
Kontmlka ComboBox .................................................................................................. 367
Kontrollca CommandButton ......................................................................................... 367
Kontrolb Frame ..........................................................................................................367
Kontrolka Image .......................................................................................................... 369
Kontrolka Label ........................................................................................................... 369
Kontrolka ListBox.......................................................................................................369
Kontrolka MultiPagc.................................................................................................... 369
Kontrolka OptionButton ......................................................................................... 369
Kontrolka RefEdit ........................................................................................................ 370
Kontroika ScrollBar ..................................................................................................... -."
310
Kontrolka SpinButton .................................................................................................. 370
Kontrolka Tabstrip ....................................................................................................... 370
Kontrolka TextBox ...................................................................................................... 370
. . Kontrolka ToggleButton ..............................................................................................
Modyfikowanie konmlek fonnularza UserFom ............................................................... 310 --
370

Modyfikowanie wlaSciw&i kontrolki ............................................................................... 311


Zastosowanie okna Properties...................................................................................... 372
Wspolne wlafciwoki ................................................................................................. 373
Zdobywanie dodatkowych infonnacji o wiaSciwoJciach ............................................. 373
Uwzgl~dnieniewymagah uZylkownik6w p r e f e m j w h k q s t a n i e z klawiatu ry ......373
Wyiwietlanic i zamykanie formularzy LjserForm ..............................................................375
Wyiwietlanie forrnularza UserForm ........................................................................ > , 2 -7-

Zamykanie formularza UserForrn ............................................................................. 377


Procedury obslugi zdarzen ...........................................................................................J- 7,X'
Przyktad tworzcnia forrnularza UscrForm ...................................................................... 37%
Tworzenie forrnularw UserForm ................................................................................. J* T X J

Pisanie kodu ir6dlowego procedury wvyiwietlaj~cejokno dialogorre .......................... 381


Testowanie okna dialogowcgo ..................................................................................... 381
Dodawanie procedur obslugi zdarzen .......................................................................... ;82
S p n w d m i c popnwnoJci danych ............................................................................. 384
Ukoficzcnic hvomnin okna dinlogowego ....................................................................384
Zdnrrcnin p o w i w e z forrnularrem UscrForm .................................................................385
Zdobywanie informacji na ternat zdarzen .................................................................. 385
Zdarzenia formulam UserForm ................................................................................ 386
Zdarzenia z w i i p u e z kontrolkqSpinButton ................................................................ 386
Wspbiprrca kontrolki SpinButton z kontrolka TextBox .............................................. 388
Odwolywanie siq do kontrolek formulam UserForm ........................................................ 390
Dostosowywanic okna Toolbox do wlasnych wymagah ....................................................391
Modyfikacja ikon lub tckstu podpowiedzi ............................................................... 391
Dodawanie nowych zakladck ....................................................................................... 392
Dostosowywanie lub taczenie kontrolek ................................................................... 392
..
Dodawanie nowych konvolek ActiveX ....................... ......................................... 392
Twonenie szablon6w formularzy UserFom ..................................................................... 393
Lista kontrolna m i m a z tworzeniem formulamy UserForm .......................................... 394
.
Rozdzid 14 Rzykfady fonnulany UserFonn ............................................................ 395
Tworzenie fonnulatza UxrForm pelnigego funkcjcje menu ............................................... 395
Zastosowanie w formularru UserForm kontrolek CommandButton ............................ 395
Zastosowanie w formulanu UserForm kontrolki ListBox ........................................... 396
Zamaczanie z a k m b w przy u2yciu fomularza UserForm .................................................397
Tworzenie okna powitalnego ............................................................................................. 398
Wytapanie przycisku Zamknij formularza UxrForm ....................................................... 400
Zmiana wielko9ci formularza UscrFom ............................................................................ 401
Powigkszanie i pnewijanic a&sza prry utyciu formulam UserForm .......................... 402
Zastosowania kontrolki LinBox................................. 0
Kontrolka ListBox ................................................................-...................................... 404
Umieszczanie pozycji w kontrolce ListBox ................................................................. 405
,.
Identyfikowanic zaznaczonej pozycj~.......................................................................... 408
Identyfikowanic wielu zaznaczonych pozycji kontrolki ListBox ............. . . . ..........409
Wielc list w jedncj konmlce ListBox ...................................................................... 410
P m n o s m i e pozycji kontrolki ListBox ....................................................................... 410
Prrcmieszczanic pozycji kontrolki ListBox ................................................................. 412
Stosowanie wielokolumnowych kontrolek L i s t h x ..................................................... 413
Zastosowanie kontrolki ListBox do wybierania wierszy arkusza............. ..............415 .
.
Uaktywnianie arkusza za p o m q kontrolki ListBox ................................................... 417
Zastosowania kontrolki MultiPape ..................................................................................... 41s
.
Rozdziat 15 Zaawansowane technlkl korrystania z formularzy UserForm........... 421
WySwictlanie wskaZnika postepu zadania .......................................................................... 421
T w o m n i e samodzielnego wskainika postqpu zadania ............................... A 2 2
WySwietlanie wskafnika postepu zadania zit p o n w q k o n t ~ l k MultiPage i ................. 424
WySwietlanie wskainika post~pud a n i a bcz korrystania z konnolki MultiPage ......426
Kreatory - intcakt)7rrne sekwcncjc okicr. dialo_eowych .................................................. 427
Konfigurowanie kontmlki MultiPzge w celu utworzenia krmtora ............................... 478
Dodawanie przycisk6w do formularza UserForm k r e a ~ o ..........................................
n 418
12 Excel 2003 PL.P r o g r a m o w a n i e w VBA . V a d e m e c u m profesjonalisty

Pmgramowanie przyciskbw krmtora ...........................................................................429


Zalrtnoici prog-owe w k~arorach .......................................................................... 430
Wykonywmie z n d d n pomocq kreatorow ................................................................. 431
Emulacja funkc,!.. klsgBox ..................................................................................................432
Emulacja funkcji MsgBox: kod funkcji MyMSgBox ................................................. 433
J& dziala funkcja emulujqca MsgBox ......................................................................... 434
Wykomystanic funkcji MyMsgBox ............................................................................. 435
NicmoJalne okna dialogowe ..............................................................................................435
Obsluga wielu przycisk6w f o n n u l m UsrrFotnl
a pomocqjednej procedury obslugi z d m h .................................................................. 438
Wyb6r koloru za pomocq formulam UserForm ...............................1-
Wygwietlanie wietlanievykresow w formulamch UserForm .......................................................... 442
.
Metoda 1 zapisanie wykresu do pliku ......................................................................... 443
Metoda 2. zastosowanie kontrolki Chartspace z pakietu OWC ................................. 444
Wy5wictlanie arkuszy w formularzach UserForm............................................................. 446
Udostqpnianie kontmlki Spreadsheet........................................................................ 447
Dodawanie kontrolki Spreadsheet w f o r m u l m UserForm ........................................ 447
Pmsty przyklad zastosowania kontrolki Spreadsheet
komponentbw sicci WWW pakietu Office................................................................ 447
UserForm Deluxe: ulepszony formularz danych ................................................................ 450
Opis ulepszonego formularza danych ........................................................................ 450
fnstalacja dodatku -ulcpszoncgo formulama danych ................................................450
Wykorzystanic ulepuonego formulam danych ..........................................................451

Cz& V Zaawansowane techniki programowania ..................... 453


Rozdzlal 16. Twonenie nanqdzl dla Excela w Jqzyku'VBA....................................455
Wprowadtcnie ....................................................................................................................
455
Zastosowanie j ~ z y k aVBA do l w o m i a namdzi ............................................................. 456
Co decyduje o przydatnoki nanpdzia? .............................................................................. 456
Operacje tekstowe -
anatomia narz~dzia ..........................................................................
457
Podstawy tworzenia narydzia Opcracje tekstowe .......................................................458
Okrellenie wyrnagah dla narzpdzia Opaacje tekstowe................................................458
Jak dziata narzqdzie Opmcjc teksrowc? ..................................................................... 458
Skoroszyt narrpdzia Opemje tekstowe ....................................................................... 459
.
.
Fomulan UserForm dla narzqdzia Opcracje mhtowe.............. ............................. 459
Modul kodu ThisWorkboak .........................................................................................461
Modul VBA Module1 .................................................................................................. 462
Modut formulana UsaFonn I ..................................................................................... 463.
Poprawa wydajnoici narzqdzia Operajc teksknve ...................................................... 464
Zapisywanie ustawieh narydda Operacje tekstowe.................................................. 465
..
Irnplernmtacja pmcedury Cofny .................................................................................. 466
..
Ocena realizaql projektu ..............................................................................................468
Dzialanie n w d z i a Opcmje tekstowc ........................................................................ 469
Dodatkowe informacje na temat narrpdzi Excela...............................................................469
Rozdziat 17. Tubele pnestawne ................................................................................ 471
Wykorzystanie jqzyka VBA do m n e n i a tabel prtfftawn* .......................................... 171
I wonenie tabel pestawnych .....................................................................................471
v

h a l i z a zarcjcstrowanego kodu t w m i a tabcli pmsmwnej ................................... 473


Ulcpszanie zarcjestrowanego kodu twonenia tabeli p m s m m e j ................................ 473
Ztotone tabele pnestawne ................................................................................................. 474
Dane dla zlotonej tabcli przeatawncj ........................................................................... 475
Kod tworzqcy tabelp p m a w n q ................. ..............
...................................................475
Jak dzida ztotona tabela pmstawna? ......................................................................... 477
Spis treSci 13

Jednoczesne twomnia wielu tabel przestawnych ........................ 479


Modyfikowanie tabcl przestawnych ...................................................................................
482

.
Rozddal 18 W y i u e q ................................................................................................... 485
...............................................................................
Podstawowe wiadomoSci 0 wykrcsach 485
Poiobnic wykresu .......................................................................................................48s
Model obiektu Chart ...................................................................................................486
Rejestrowanic makr d o t y w y c h wykns6w ...................................................................... 487
Zanjcstrowany kod makra twonqccgo w y h s ........................................................... 487
Ulepszanic zarejestrowanego kodu tworzenia w y k s u ............................................... 489
Populame techniki jqzyka VBA dotycqce wykrcdw ....................................................... 489
Wykorrystanie VBA do u w w n i e n i a wykresu ..........................................................490
Wvkorzystanie VBA do deaktywacji wykresu ............................................................. 491

Forrnatowanie wykrcs6w pomocqVBA .................................................................. 493


Przetwarzanie wsqstkich wykrcs6w w pqtli ............................................................... 494
Zmiana romiar6w i wydwnywmie obiekt6w C h d b j e c t ....................................... 494
Innc techniki przctwarzania wykrcdw .............................................................................. 496
Zastosowanic nazw w formule SENE ...................................................................... 4%
Zastosowanic jczyka VBA w celu okeflcnia danych
wykorystywanych na wybesie ............................................................................... 497
Zastosowanie jqyka VBA w celu oknSlmia zakresu dwych
wykorystywanych na wykrrsia ............................................................................... 500
Wykorzystanic VBA do wygwietlania dowolnych ctykia danych na w y h i e ...........503
Wy<wietlaniewykrcsu w o b i c UserFonn.................................................................505
Zdaracnia nuiqzanc z w y b s a m i .......................................................................................507
Piqkiad wykaystania z d d z w i m y c h z wykrcsami .........................................507
Obshga zdarzeh dla w y k d w wbudowanych ............................................................ 511
Zastosowanic zdarzefi dla wybesbw wbudowenych ................................................... 512
Jak ujatwiC sobie pracq z wykrcsami? ..........................-................................... .................51*
D ~ k o w a n iwbudowanych
t wykredw ....................,............................................... 515 ...
Twomnie ,,martwych" wykrcs6w .............................................................................. .sls
Wykoqstanie zdamnia MouscOw do wyJwictlaaia tekslu ................................... 517
Wykresy animowanc ....................................................................................................518
Twonenic wybcsu lazywych hipaykloidalnych .......................................................519
T w o m i e wybcsu-zegara .......................................................................................... 520
Co mo2na nobit z wyktesami bezu2ycia rnakf?.............................................................. 5 2
Stmwanic seriami danych za pomqautomatycmegc filtrowania ...........................522
Zapisywanic wielu wykrcsdw w arkuszu-wykredc ..................................................... 523
Twoncnie s a m o r o a ~ j ~ c sip g owkresu ...............................-........................... 524
Tworzcnie interaktywnego w y k s u ............................................................................ 510
-
.
Rozdtlal 19 Obstugu zdarzeh .....,.......................... .................................................. 535
Typy xkuZa5. kt6rc motna mwitomwaC w Excelu ........................................................... 535
Najwatnicjac informacje o zdalzeniaeh............................................................................ 556
Sckwcncje zdarmi ..................................................................................................... 536
I Gdzic nale2y umidcie p d u r y obslugi z d d ?..................................................... 537
Wy-ie obstugi zdsnch..................................................................................... 538
Wprowadzanit kodu p&ury o b s h zdm& ......................................................... 539
Procedury obshgi zdarze6 z argumentami..................................................................540
Zdarxnia podornu skorosqht ...................................................................................... 541
Zdancnie Open .......................................................................................................... 541
Zdamnie Activate ....................................................................................................... 50
14 Excel 2003 PL. Programowanie w VBA . V a d e m e c u r n profesjonolisty

Zdarzenie ShcctActivate .............................................................................................. 543


Zdarzenie NcwSheet ................................................................................................... 544
Zdarzenie BeforeSavc .................................................................................................. 544
Zdarzenic Deactivate....................................................................................................544
Zdarzenic BeforcPrint ..................................................................................................545
Zdarzcnic Beforeclose ................................................................................................. 546
Zdnrzcnia poziomu arkusza ................................................................................................ 547
Zdarzenie Change ........................................................................................................
547
Monitorowanic hodyfikacji w wvybranym zakmic korndrck ...................................... 549
Zdarzenic SelcctionChangc . ..........................................................................................551
Zdanmie BeforeRightClick ........................................................................................ 552
Zdanenia dotyczqcc wykres6w ........................................................................................ 553
. . .
Zdarzcnio dotyczqce apllkacj~............................................................................................ 553
Wlqczcnie obslugi zdarzch poziomu aplikacji ............................................................ 554
.
Sprawdzanie czy skoroszyt jest otwarty ......................................................................556
Monitorowanie zdamli poziomu aplikacji .............................................................. 557
Zdarzenia dotycqce formularzy UserForm ....
Zdarzenia niezwiqzane z obiektami .................................................................................... 559
Zdarzcnie OnTime .......................................................................................................560
Zdarzrnic OnKey .........................................................................................................
561

.
Rozdzial 20 lnterakcje z innymi apllkacjami .......................................................... 563
Uruchamianie innych aplikacji z poziomu Excela ............................................................. 563
Zastosowanic funkcji Shell jqzyka VBA ...................................................................... 563
Zastosowanie funkcji Windows API ShellExrmte ...................................................... 566
Uaktywnianie aplikacji z poziomu Excela ......................................................................... 567
Wykorzystanie instrukcji AppActivate ........................................................................567
Uaktywnianic aplikacji pakietu Microsoft Office ........................................................ 567
Uruchamianie okicn dialogowych Panclu sterowania ........................................................ 568
Wykorzystanie automatyzacji ............................................................................................ 569
Dzialania z obiektami innych aplikacji z wykonystaniem autornatyzacji ...................569
Wczcsne i p 6 h e wil\canie ........................................................................................... 570
Prosty pnyklad p6hego wiqzmia ............................................................................... 572
Zaqdzanie Wordem z poziomu Exeela ......................................................................573
Zarqdzanie Excelem z poziomu innej aplikacji .......................................................... 576
Wysyianie spersonalizowanych wiadomoki c-mail z wykorzystaniem Outlooka .............577
Dziatanin z obicktami danych ActiveX (ADO) .................................................................. 579
Wysyianie wiadomoici e-mail z zalqcmikami z poziomu Excela...................................... 581
Zastoso~waniemctody SendKcys........................................................................................582
.
Rozdzial 21 Tworzenfe I wykorzystanle dodatk6w ................................................. 585
C y m sq dodatki? ............................................................................................................... 585
Porownanie dodatku ze standardowyrn skomszytem ................................................... 585
Po co tworzy sic dodatki? ...................................... -86
Mcnedzer dodatk6w Excela ............................................................................................... 587
Tworzenie dodatk6w .......................................................................................................... 588
Przyktadowy dodatek ......................................................................................................... 589
Konfigumja skomszyhr dla przykladowego dodadtu ................................................. 589
Tesaowanie skomszytu u2ytcp do utwnenia przyktadowep dodatku .....................589
Wpaowadzanie opisu dla przykladowego dodatku ....................................................... 590
Utworzcnie dodadru .................................................................................................... 590
lnstalowanic dodatku ................................................................................................... 592
Dysuybucja dodatk6w ................................................................................................. 592
Modyfikowanie dodadru .............................................................................................. 592
Spis treici ;5

Portiwnanie plik6w XLA i XLS ............................................................................. 59.1


Rozmiilr i stmktura plikaw XLS i XLA ..................................................................... 59J
Pliki XLA- przynaleinoii do kolekcji i: poziomu VBA ........................................... 504
WidocznoJC pliktiw XLS i XLA .................................................................................. 59J
Arkusze i wykresy w plikach XLS i XLA ............................................................ 505
Dostpp do procedur V B k w dodatku ......................................................................... 596
Pnyklady przetwarzania dodatkbw za pomocq kodu VBA ........................................ 597
Kolekcja Addlns .......................................................................................................... 598
WlaSciwoJci obiektu Addln ........................................................................... 590
Zdanenia zwiqzanc z o b i e k m i Addin .......................................................................602
. .
Optymal~ncjawydajnoici dodatkdw ................................................................................. 602
Maksymalizacj~szybkoici kodu dodatkow ............................................................... 602
Kontmlowanie rozmiaru pliku dodatku ...................................................................... 603
Problemy z dodatkami ......................................................................................................... 604
Zapewnienie zainstalowania dodntku ........................................................................... 604
Odwotywanie sip do innych plik6w z paziomu dodatku .............................................. 605
Wykrywanie wlafciwej wersji Excela dla dodatku ...................................................... 605

..
Czqsc VI Twonenie aplikacji........................................................... 607
.
Rozdziot 22 Tworzenle posk6w narzqdzi.................................................................. 609
Paski narqdzi .................................................................................................................... 6139
Dzialaniaz paskami nanpdzj .............................................................................................609
JakExcel m d z a peskami nanpdzi? ............................................................................... 6103
Przechowywanie pask6w n a w z j ............................................................................... 610
Problemy z dzialaniem paskow n m f l z i ..................................................................... 6 1
Rpcme dostosot+ywanie pasktiw nanpdzi ......................................................................... 611
. dostosowptania asko ow narzdzi ....................................................................... 612
Tryb
Drstrybucja paskdw narz&i u ~ k o m i k .................................................................
a 615
..CommwdBars ................................................................................... 617
Dziatania z kolekcia
Rodzaje pask6w narredzi .............................................................................................. 617
WySwictlenie wszystkich obiekt6w CommandBar .................................................... 617
T w m n i e pask6w nanpdzj ......................................................................................... 618
Odw+wanie sip do paskdw n w q d z i w VBA ............................................................ 619
Usuwanie paska nmqdzi ta pomocq kodu VBA ......................................................... 62'3
WIdciwdci paskow narqrki ...................................................................................... 620
Odwotywanic sip do kontrolek na pasku narqdzi ....................................................... 625
Wyszntgdlnicnie konmlek na pasku nam$zi .......................................................... 626
Wflwietlanie wszystkich kontrolek na wszystkich paskach narz@zi ..........................627
Dodawmie kontrolki na pasku nanedzi ..................................................................... 625
Usuwanie kontrolki z paska nanpdd ........................................................................... 628
WlaiciwoSci kontrolek parkow narzedzi ...................................................................... 629
.
Rozddd 23 Tworzenle menu ..................................................................................... 639
Pasek menu w Excclu ......................................................................................................... 639
Modyfikowanie menu Excela przez uQlkownike .............................................................. 640
Pojecia zwiqzane z systemem menu Exwla ................................................................. €40
Umwanie elcment6w menu Excela .............................................................................. &I
Dodawanie element6w menu Excela ........................................................................... 641
Modytikacja clemcnt6w mcnu Excela ......................................................................... 6-12
Wykorzyslanie jwka VBA do dostosoqwania menu w Excelu ..................................... 532
Wyjwi.etlanie inforrnacji o menu Excels..................................................................... 643
Dodawanie nowego menu na pasku menu .......................................... ............ ...... 642
Usuwanie menu z p&a menu ...................................... 6 -
..
Dodawanie pozycy menu ............................................................................................
., 647
!6 Excel 2003 PL . P r o g r a m o w a n i e w VBA . V a d e m e c u m profesjonclisty

Wyiwie[lmie klawisza skr6tu w r u z nazwq polecenia ............................................... 650


Odtwamanie menu. kr6rc Z O S [ ~ ~~OS ~ n i p...................................................................
te 651
Wykonystmie zdarzen do proglamowania menu .............................................................. 652
Automatycme dodawanie i usuwanie menu ................................................................ 652
Dezaktywacja lub ukrywanie menu ........................................................................... 653
Dziaiania z poleceniami menu powipanyrni z polarni wyboru ................................. 654
Twonenie menu utytkownika -latwy spos6b............................................................... 657
Utworzenie zasrepczego paska menu arkusza kalkulacyjncgo ........................................... 659
Operacje z menu podlpcmymi ...........................................................................................
660
Dodawanic pozycji do menu podqcznych ...................................................................662
..
Usuwanie po j c j i z menu podrqcmych .................................... ..........................,.... 663
Dezaktywacja pozycji menu podqcmych ................................................................... 663
Dezaktywacja menu podrqcznych ................................................................................663
Przywracanie ustawien menu podrvznych ................................................................... 664
Tworzenie nowych menu podrqcmych ........................................................................ 664
.
Rozdzid 24 Tworzenie system6w pomocy w aplikacjach ....................................667
Dlaczego nalety twonyb qstemy pomocy w aplikacjach? ...............................................667
Systerny pomocy wykorystujqce komponenty Exceln ......................................................668
Wykonystanie komentarzy w celu tworzenia systerndw pomocy ............................... 668
Wykonystanie pdl tekstowych w cclu utworzenia systemu pomocy .......................... 670
Wykorzystanie arkusza do wyfwietlania tekstu pomocy .............................................670
WySwietlanie pomocy w oknic UserForm ................................................................... 671
Wykonystanie asystenta pakietu Ofice do wy9wietlania pomocy .............................. 674
Symulacja wldziwofci Co to jest? za pornocq formulam UserFonn ............................... 676
Wykorzystanie systemu HTML Help ................................................................................. 677
P o w i p n i e pliku pomocy z aplikacjq ................................................................................678
W i w i e temat6w pomocy z funkcjami VBA .................................................................. 679
lnne sposoby wyfwietlania plik6w pomocy HTML Help ...................................................680
Wykorystanie metody Help ........................................................................................ 680
WySwietlanie pomocy z okna infmacyjnego ............................................................ 680
WySwietlanie pomocy z okna InputBox ...................................................................... 681
Rozddd 25. Tworzenie aplikacji wygodnych dla uiytkownika ............................683
Co to jest aplikacja user-oriented? .....................................................................................683
Pnykladowa aplikacja - Krcator amortyzacji poZyaek ................................................... 683
Obsluga Kreatora amortyzacji potyczek ......................................................................683
Struktura skoroszytu Kreatora amortyzacji po2yczck .................................................. 685
Jak dziala Kreator amortytacji potyczek? ................................................................ 686
Potcncjalne usprawnienia Kreatora amoqzacji potyczk...........................................690
Wskaz6wki dotycqce projektowania aplikacji .................................................................690
C I
Czqsc Vll lnne xagadnienia ..............................................................693
Rozdzfol26 . Roblemy zgodna4ci ................................. ........................................ 695
Co to jest zgodnofC?........................................................................................................... 695
Rodzaje pmblcm6w zgodnoki ..........................................................................................696
Obstugiwane formacy plikdw Excela ................................................................................ 697
Kiedy t m b a u n W nowych wlaiciwoki? ........................................................................ 698
Czy aplikacja k d z i e dzialarS na komputcrach Macintosh? ................................................. 698
Tworzenie aplikacji dla wielu w m j i narodowych ............................................................. 699
Aplikacje obstugujw wiele j ~ y k 6 w..........................................................................701
Obslugajezyka w k a e VBA ....................................................................................702
Wykonystanie wl&iwdci lokalnych........................................................................ 702
Identyfikacja ustawieri systernu ................................................................................... 703
. .
Ustawenla daty i goddny ............................................................................................ 705
Spis trefci 17

Rozdzial27. Operacje na plikach wykonywane za pornocq kodu VWA .............707


Wykonywanie popularnych operacji na plikach ................................................................. 707
Wykorzystanie polecc6 jqzyka VBA do wykonywania operacji na plikach ................707
Wykonysmie obiekru Filesearch ............................................................................... 710
Wykorzystanie obiektu FilcSystcmObject ................................................................... 711
Wyszukiwanie plikbw zawicrajqcych okreslony tekst ................................................. 713
Opcracje z plikarni tekstowymi .......................................................................................... 714
Ohvicranie plik6w tekstowych ..................................................................................... 714
Czytanic plik6w tekstowych ....................................................................................... 715
Zapisywanie danych do plik6w tckstorvych ................................................................. 716
Uzyskanie numcru pliku .............................................................................................. 716
OkrcJlanie lub ustawianie pozycji w pliku .................................................................... 716
lnstrukcjc pomalajqce na odc~ytywaniei zapisywanie plik6w .................................... 716
Przyklady wykonywania opemji na plikach ................................................................. 717
Importowanit danych z pliku tekstowego ..................................................................... 717
Eksportowanie zalrrwu do pliku teksmwego................................................................ 718
Importowanie pliku teknowtgo do takresu ................................................................. 719
Rejesaowanie wykorzysrania Excclr ........................................................................... 720
Filtroaanie pliku tekstowego ...................................................................................... 721
Importowanie w i ~ c enj i t 256 kolumn danych do skorosytu ........................................ 721
Ekspobtowanie zakmu do pliku HTML ...................................................................... 723
Eksportowanie zakresu do pliku XLM .........................................-.............................726
.
Rozdzld 28 Operacje no komponentochJqzykaVBA ..........................................729
Podstawowe informacje o Smdowisku IDE........................................................................ 729
Model o b i e w w Smdowiska IDE ...................................................................................... 730
Kolckcja VBProjects.............................................................................................. 73t
Wyhicdanie wszystkich h m m t 6 w mojektu . . VBA ....................................................
733
Zastqmwanic rnoduh uaktualnionq wersjq ........................................................................ 734
Wykomstanie i c n k a VBA do gcnaawania kadu VBA ...................................................
736
k VBA d ~ u m i m c n n i kontrold
~ $ k o ~ s t y w &kodu a w formulanu UscrForm
w fazie pmjektowania .....................................................................................................738
Opcracje z formulabnvni UserFm w fazie projcktowania i wykonania ....................738
Dodanue 100 przyciskbw CommandButton w fazie projcktowania ............................. 739
Programowe lwonenie f o m l a n y U s u F o m ................................................................... 741
Prosty przyklad f o r n u l a m UscrForrn ......................................................................... 741
Sk0mp:likowanyp q k l a d dynamicmego formulana UscrForm ................................. 743
.
Rozdzkrl 29 Moddy ldas ......................... "-.................. .................................-..749
Czym jest modut klasy? .....................................................................................................
749
Przyklad: utwonmie klssy NumLock. ........... . . ..............................................................
750
Wstawianie moduh ktasy ...........................................................................................
750
Dodawanie kodu VBA do modulu Ussy .......................................................................
751
Wykoqstanie klasy NumLock ............. . . ..
..... .......................................................753
Dodatkowc informacje na tmatrnoduldror klas ..................................................................
754
Nadawmie narwy ktasie obi&& ............................................................................... 754
Pmgramowanic wldciwodci obiekt6w ....................................................................... 754
Progmnowanic mctod obiekt6w ..................................................................................756
Zdanemia definiowanc w module klasy ...................................
7-
Pnykiad: Hasa CSVFileCla4s.......................................................,..................................... 757
Zrniennc poziomu moduli; dla kl&syCSVFileClass ................... :.................................
751
Definicje wMciwo3ci klasy CSVFileClass................................................................... 758
Definicje metod ldasy CSVFileClass ........................................................................... 758:
Wykorrystanie obielddw CSVFilcClass ......................................................................
760
18 Excel 2033 PL. Progromowonie w VBA . V a d e m e c u m profesjonolisty

Rozdzlal30. Czesto radowane pytania no ternat programowonla w Excelu ..... 763


Pytania dotycyce Excela ...................................................................................................
764
Mania dotycqce edytora Visual Basic .............................................................................768
Pytania dotyczqce pmcedur.. ................................................................................................ 771
Pytania dotyczqce fun kc^^ ..................................................................................................776
Pytania dotycyce obiekt6w, wlalciwoki. metod i zdarzeli ........:......................................779
Pytania dotycycc formulnny UserFom ...........................................................................788
Pytania dotyczqce dodatk6w .............................................................................................. 793
Pytmia dotycqcc pask6w polcccn.................................................................................... 795

Dodatki ................................................................................................. 799


Dodatek A Zasoby online dotyczqce Excela ........................................................801
Pornoc technicma MicrosoRu ............................................................................................
801
Opcje pomocy technicmej ............................................................................................
801
Baza wiedzy finny Microsoft..................................................................................... 802
Macienysta strona programu Microsoft Excel ............................................................
802
Narzpdzia pakietu Microsoft Office w intunecie....................................................... 802
lntcrnetowe grupy dyskusyjne...........................................................................................
802
Gmpy dyskusyjne poiwipcone arkuszom kalkulacyjnym ............................................803
Gmpy dyskusyjne Microsaftu ...................................................................................... 803
Wyszukiwanie inforrnacji w p p a c h dyskusyjnych .................................................... 804
Witryny W W W ..................................................................................................................805
Strona Spreadsheet.................................................................................................... 805
Pearson Software Consulting ...................... A ...............................................................
805
Strona o Excclu Stephcna Bullcna ............................................................................... 805
Strony a Excelu Davida McR~tch~e
. . ............................................................................... 806
Strona o Excelu Jona Peltiera....................................................................................... 806
Mr. Excel ...................................................................................................................806
NajcqScicj zadawane p p i n ....................................................................................806
Dodutek B Instrukcje I funkcje VBA ........................................................................ 807
Wywdywanie hnkcji Excela w inmkcjach VBA ...........................................................810

Dodatek C Kody Med6w VBA ............................................................................... 817


Dodatek D Zawartoik plyty CD-ROM ..................................................................... 821
Wymagania systemowe.................................................................................................... 821
Korystanie z ptyty CD-ROM w systemic Windows ......................................................... 821
Co znajduje siq na ~ c i CD-ROM e ...................................................................................
822
Materialy utworzonc p m z autora tej ksilpki.............: ..............................................822
Aplikacje ......................................................................................................................
834
Rozwiwwanie problern6w ......................................--........................................................835
Skqd sie wziql Excel 2003?
Aby w pdni dbc~nitfunkcje Excola 2003 zwiqzane z twonenicrn aplikacji, tmba dys-
pnowaC wit- na m a t jag0 pochodzania i zrozumied, jakile jest jego miejsce ~ S r b d
innych arkuszy kalkulacyjnych. Jtbli jtdnak z arkuszami kalkulacyjnyrni dla kmputerww
osobistyeh masz do czynienja juk d pond dekady, zawarte ponigej infomacje mogq
nie wbudziC twqjlego mintcrcsbwmia Natamiast jeSli intaesuje ciq wsqstka, ca h t y c q
adm~zykalkulacyjnych, ten m&d stanowi kapalnie wiedy. Po jego l e h m W d n i e s z
wSdd kornputcrowych nudziarry na nastqpncj irnprezie, w Mrej wehiesz udzial.

Historia arkuszy kalkulacyjnych w zarysie


W i q W C z aas tmktuje alakaanicme wkusm blkulacyjne jako c09 nahrnlncgo.
W rzemp&t&ci jts~czeCapkicm nicdawnb by@ ant zupdnie iedostqme. Uwownicy
kbfzystali z nicpoqcmych kornputer6w pntmysiowyc h lub kalku lato r6w i tmci !i wide
go& na to, co tern rnutna wykonat w e i w k i k minut.

Pitmszy elektronicmy arkusz Lahlacyjny stwanyli Dm Bricklin i Bob Frankstan


w 1978 TO@ g@ o kornputerach osobisrych jtszcze w biunch nie sbszana. P r o w
VhiCdc napisali z my41q o Apple II, kt6sy by4 intcrasujqeym niewitlkim komputetem,
wedlug decnych stmdaddw pnyponzinajqcym zabawk~.Jcdnak w tamtyrn o b s i e bykm
nim oczarowany. b g m m YisiCalc wprowaddl standardy Sosowane odtqd w arkllsz~lch
kalkulacyjnych, QtmkWaarkusza oparta na witrszach i kolumnach, a rak% skhdnia
formui spotykane sq n&l w nowwzestlych mnvi-niach. Pregmrn Vi$iCdc stybka
ZWf6Cil na sicbie uwagp. W eftkcit wiele fum n w o karnpm Apple II wykrnis w ctlu
opracowywania bud~etdwpny wiyciu tej aplikacji. W kanstkwencji c ~ za nracqct
o
h6dh ~ ~ ~ $ k o w sc ug ko ~ kamputem
u Apple I1 m a j e siq p p m YlsiCdc.
-P&hiejna rydcu pojawfIa siq kolejna klara komputcdw owbimh. pmcujqeyeh pod
konm 13U- ~~erscyjntga CPM. Firma Sorcirn s t w ~ r q arkusz
h ka1kulacyjny Su-
perCo(c, ktbry r h w i e t zyskat wieIu mlennikbw.
Po pojawkiu siq .ir 1981 hk m p m a IBM PC, d c u t k h byb up~wszchinrie
sic bmputer6w 030bi3@ch, h a VisiCorp nie mi$c2ant i pmiasla program VisiCaIc
na now4 platforme s p - 0 ~ W e take Sorcim zaoferowal program SupesC&Ic
w wwsji dla komputera 3BM PC.
30 CzeSc I Podstawowe informocie i

Wedtug obecnych standardbw zarbwno VisiCalc,jak i SuperCulc by+y wyjqtkowo pry-


rnitywne. Na przyklad tekst wprowadzony do kombrki nie rndgt wychodzid poza jej
granice, a dlugi tytul musial byd wprowadzony do wielu komorek. Niezaletnie od tego
motliwoii zautomatyzowania nudnych zadan zwiqzanych z hvorzeniern budtetu wy-
starczyla. aby tysiqce ksiqgowych ochoczo przenioslo na dyskietki zawartoid papierowych
arkuszy ksiqg rachunkowych.

Program 1-2-3 firmy Lotus


Zazdroszczqc sukcesu odniesionego przez VisiCalc, niewielka grupa kornputerowych
entuzjastdw zamdnionych w dopiero co powstakj fimie majqcej siedzibe w Cambridge
w stanie Massachusetts, rozwinqia koncepcjp arkusza kalkulacyjnego. Firma kierowana
przez Mitcha Kapora i Jonathana Sachsa stworzyla nowy produkt i rozpocz* pienvszq
w historii bra* zwiqzanej z oprograrnowaniem dobne pnygotowanq akcjp marketin- !
gowq. Parniptam jeszcze d ~ e g oforrnatu reklarnp prograrnu 1-2-3 zarnieszczonq
w dziemiku ,,The Wall Street Journal". Wtedy po raz pierwszy spotkaiern siq z reklarnq ,II
oprograrnowania w ogdlnie dostppnym wydawnictwie, Program 1-2-3 wpmwadzony do
sprzedaty przez firme Lotus Development Corporation w stycmiu 1983 roku odni6sf
natychmiastowy sukces. Pomirno ceny wynosqcej 495 dolardw (zgadza siq, w tym czasie I
naprawde tyle flacon0 za oprograrnowanie) 1-2-3 pod wzglpdem poziomu sprzedaty j
zdystansowal VisiCalc i znalazi sip na uczycie list najkpiej spnedajqcych sip produktdw,
na ktbryrn pozostawal przez wiele lat.
W programie 1-2-3 nie t y k o ulepszono funkcje zasmsowane w aplikacjach VisiCufc 1
i SuperCalc, ale t& byi to pierwszy arkusz kalkulacyjny wykorzystujqcy nowe i unika-
towe motliwoSci wydajnego IBbitowego kornputera IBM PC AT. Program 1-2-3 na
przyklad pomijal wolniejsze wywolania systernu DOS i umieszczd tekst bezpSrednio
w pamipci graficmej, dzieki czemu powstawai niezwykly jak na tamte czasy efekt
szybkoSci i sprawnobci. Pnelomowy by1 rbwniet system pomocy online, a pornyslowo
wykonane menu oparte na ruchornym pasku ustanowilo standard obowiqzujqcy przez
wiele lat. Jednak tym, co naprawdp wyr6tniato 1-2-3, byla rnotliwoJC tworzenia makr.
To wartoSciowe en- pozwalato rejestrowad sekwencje naciskanych klawiszy,
dziqki czemu rnoha byto autornatyzowad procedury. Po ponownym uruchomieniu ma-
kra kody oryginalnie wcihiqtych klawiszy by& pnekazywane do aplikacji. Co prawda,
r b a i l o sip to caikowicie od obecnie dostepnych funkcji tworzenia makr, ale na pewno
byto krokiem we wMciwym kierunku.
i
Program 1-2-3 nie byl pierwszym zintegmwanym pakietem, ale jako pierwsy odni6sl
sukces. tqczyl w sobie wydajny elektronicmy arkusz kalkulacyjny (I), podstawowe
funkcje graficme (2) i kilka ograniczonych, ale pnydatnych funkcji bazodanowych (3).
Proste jak 1,2,3. ZrozumialeS? I
I
Lotus po stworzenin programu 1-2-3 Release I, w kwietniu 1983 roku zapnzentowal
wersjp Release IA. Wersja fa cieszyla sip ogrornnq popularnoSciq. Dzipki niej Lotus
opanowal niemalh cab segment rynku m i w e g o z arkusmi kalkulacyjnymi. We
wrzeSniu 1985 roku wtrsje Release IA zastqpiia wersja Release 2 spehiajqca funkcjp
wiqkszej aktualizacji; po niej w lipcu pojawila sip wersja Releuse 2.01, w ktdrej usu-
nipto dostrzetone Mm.W wersji Releuse 2 zastmwano dodatki (ang. add-ins), czyli
Rozdziai I . + Skqd sig wziql Excel 20032 3!

programy realizujujilce specjalne zadania, krore motna dolqczyt do aplikacji, aby wzbo-
gacic jq o nowe funkcje i wydlutyc jej tywomoit. Udoskonalono re2 zarqdzanie pa-
migciqi zastosowano wir;cej funkcji @ (w jezyku angielskim symbol @ wyrnawia sie m).
W pomwnaniu z p o p h i q wersjq wersja Release 2 obslugiwala caerokrotnie wirksa
liczbp wierszy i umotliwiaia wykorzystanie koprocesora zmiennoprzecinkowego. Poza
rym rozbudowano w niej j e q k makr, ktdrego populamosC przekroczyla wszelkie wyobra-
tenia projektant6w.
Nie bylo zaskoczeniem, ze sukces prooramu 1-2-3 spowodowai pojawienie sic wielu
klondw, czyli podobnie do niego dziaiG4cych produktbw, zazwyczaj oferujqcych kilka
dodatkowych funkcji i sprndawanych po macznie nitszej cenie. SpoSrod nich bardziej
zauwatalne byly takie aplikacje, jak VP Planner finny Paperback Software i Twin firmy
Mosaic Software. Ostatecmie Lotus podjqi kroki prawne przeciwko firmie Paperback
Software, za naruszenie praw autonkich (skopiowanie wyglqdu i sposobu obslugi pro-
gramu 1-2-3). Lotus wygral proces i w efekcie Paperback,miknql z rynku.
Latem 1989 mku Lotus zaprezentowal mocno opbfnionq wenjq Releuse 3 przemaczonq
dla systern6w DOS i O W .Produkt ten wprowadzil nowy wyrniar (dosiownie!) w dobrze
manym arkuszu zlaonym z wienzy i kolumn. Model arkusza zostal rozszerzony poprzez
rnotliwoSC tworzenia wielu jego stron. Jednak pomysl nie by4 nowy, poniewat trojwy-
miarowe arkusze kalkulacyjne mtosowano juZ w stosunkowo malo znanym produkcie
o nazwie Boeing Calc. Utywaty go teb takie programy, jak SuperCalc 5 i CubeCalc.
Program 1-2-3 Releare 3 oferowai nowe, ale oczekiwane przez 112ytkownik6w funkcje.
W i e l o m t w o w e arkusze, motliwoSC jednoczesnej pracy z wieloma plikami, lqczenie
plikbw, rozbudowane funkcje graficzne i bezpoSredni dostep do zewnemych plik6w
baz danych ostatecmie weszly do standardowego zestawu mokliwoSci. Jednak w dalszym
cizgu program by1 pozbawiony w a h e j funkcji, ktbrej utytkownicy bardzo sip dornagali.
czyli moZliwoSci twmenia wysokiej jakoSci dokurnent6w wyjiciowych.
P o c ~ o w wersja
o Releuse 3 miala ograniczone szanse powodzenia na rynku, ponie-
wa2 wym* komputera PC z procesorem 80286 i co najmniej 1 MB pamieci RAM,
co w 1989 roku byio macmyrni wyrnaganiami. Jednak Lotus trtymal jeszcze jednego
asa w ekawie. W m z pojawieniem sie wersji Release 3 firma ku zaskoczeniu prawie
wszystkich oglasila wydanie aktualizacji do Release 2.01. Kilka miesipcy pbiniej a h -
alizacja pn'yj@apost& 1-2-3 Release 2.2. Jak oczekiwala wipkswSC analityk6w, wersja
Releare 3 nie miala zastapiC wersji Releare 2. Zamiast tego Lotus wykonal genialny .
ruch polegajqcy na podzitleniu rynku arkuszy kalkulacyjnych na dwa segrnenty. Jedcn
miai-by6powiqzany z droiszym sprqtcm, natomiast drugi z powszechniej stosowanymi
urqdzeniami.
Wersja ReIeuse 2.2 nic stanowih r o m i w ~ ~ idednego,
ia ale dokonano w niej ma&:
cych udoskonalefi. Najwaznicjsza jej funkcja nosqca nazwe AIIwuys byla dodatkiern
umo2liwiajqcym generowanie atrakcyjnych rapwtbw, zawierajwch wiele kroj6w pisma
rarnki i cieniowanie. Ponadto utytkownicy rnogli oglqdad wyniki na ekranie w oparciu
o tryb WYSIWYG (ang. What You See Is What You Get - To, co wickis, jest pm, co
uzyskarr). Jednak funkcja Allwqs nie pozwalala na wykonywanie poleceli arkusza
w uakcie pneglqdania i formatowania wynik6w w trybie WYSIWYG. Pomimo tego
d o e powahego ograniczenia wiqbmSt 112ytkownik6w programu 1-2-3 byh wyjatko-
wo zadowolona z nowej hnkcji, poniewai wreszcie rno2na bylo tworzyc dokumenv
wyjkiowe o jakoici niewiele odbiegajqcej od jakoSci skbdu drukarskiego.
32 Czg3t I + Podstawowe informacje

W maju 1990 roku Microsoft wprowadzif na rynek system Windows 3.0. Jak zapewne
wiesz, system Windows mienil s p o d b korzystania z komputer6w osobistych. Podobno
decydenci z Lotusa poczqtkowo go nie docenili i w efekcie uplynplo trochp czasu, za-
nim pojawila sip pienvsza windowsowa wersja arkusza 1-2-3.N a s t ~ i l oto pod koniec
1991 roku. Co gorsza, produkt ten, rnbwiqc w skrhie - byl niewypalem. Tak naprawde
nie wykonystywal swoich atutdw w frodowisku Windows i rozczarowat wielu utyt-
kownikbw. W konsekwencji Excel, ktdry j u t wtedy miat status pierwszego arkusza kal-
kulacyjnego dla systemu Windows, stat siq trudnym do pokonania liderem rynku arkuszy
pnemaczonych dla tego systemu i nigdy nie smcit tej pozycji. Lotus powrdcit w czerwcu
1993 roku, prezentujqc wersjt Release 4 programu 1-2-3for Windows. W por6wnaniu
z wersjq oryginalng w tej wersji dokonano znacznych udoskonaled. W potowie roku
1994 pojawila sip wcrsja Release 5.

W pdowie 1994 roku Lotus zaprezmtowal program 1-2-3 Release 4.iJfor DOS. Wielu
analitykdw (wlqczajqc w to mnie) oczekiwalo, t e produkt ten bpdzie bardziej kompaty- !
bilny z systemem Windows. Jednak byta to po prostu aktualizacja wersji Release 3.4. i.
Ze wzgltdu na d u popularnoSf
~ systemu Windows powinna to bye ostatnia wersja
program 1-2-3dla systemu DOS,kt6ra ujrzdq iwiatk dzienne. I
I
W t c e arkusze kalkulacyjne staw siq mniej istome dla Lotusa Gego flagowym pro-
duktem okazat sip pakiet Notes). W potowie 1995 roku IBM pnejqt f- Lotus Deve-
lopment Corporation. Pojawily siq jeszcze dwie wersje programu 1-2-3,ale wydaje siq.
t e n-ilo to zbyt p6iao. Excel zdominowd rynek arkusq kaikulacyjnych, natorniast
aplikacja 1-2-3 caly czas tracila w nim udzial.

Najnowsze wersje programu 1-2-3 zawierajq jpzyk skryptowy LatusScript podobny do


j p y k a VBA. Tw6rcy arkuszy kalkulacyjnych nie przyjpli tego j q y k a z otwartymi ra-
mionami. P q c wstecq motna powiedziet, te Lotus prawdopodobnie powinien byl
nabyf od Microsoh licencjp na j q y k VBA.

Wlka rMw na tsmat ochmny pnd kopfowankm


W paczqtkowym okresle istnlenla komputer6w osoblstych oprogramowanle m n i o n e med ko-
piowaniern stanowib raczej regu)e nit wyjqtek. WtekszoSC analitykdw zgadza $19, te ochrona
wed kopiowaniern komplikuje iycie utytkownikorn dysponujqcym iicencjq i wtaWie tie prryczynla
siq do walki z piractwem oprograrnowania.
Pakiet Microsaft Omce wykorzystuje technologlq aktywMI produktv. Z a S t 0 ~ 0 mJqw paklecie
Oftice XP. Zostata tak opracowana, aby zapobieg* rnozllwoSci d o m e g o kopiowania, ale nie
rozwi~ujemacznie powainiejszego problemu rwigzanego z prawdziwymi piratami, kt6ny koplujq
i spnedajq nieiegaine oprogramowanie.
Zabawne. te jednym z powoddw, ddpkl Mdrym paWet Mhmsofl Omce poczqlkawo m q
pozycjq na rynku, byl brak ochrony przed koplowaniem. W t a m okresle produkty konkurujwe
z nirn (1-2-3i WordPerfect) rniaty takq cchronq. lnne flrmy zda+y sobie sptawe, te ochrona przed
kopiowaniern jest bezskuteczna, i wkr6tce romlqzanie to przeszlo do historii.
OsobiScle vwatarn. te pqwr6cenie cchrmy o p r a g r m i a prred kopiowanlem Jest W&S
wym trendern. Powbduje jedynie, ie instaiacja produktu jest barddej ztotona i parrroduje irytacje
utytkownikbw. gdy cof nie p6jdzie po ich my5li.
Rozdziat 1. + Skad sie wziat Excel 20032 33

Program Quattro Pro


Innym maczqcym graczem na rynku arkuszy kalkulacyjnych jest (powinienem raczej
powiedziet - byta] firma Borland Intemational. W 1994 roku firma Novell przej~ta
firme Wordperfect Intemational i c a b dzial firmy Borland zajrnujqcy sic tworzeniem
arkuszy kalkulacyjnych. W 1996 roku fimy Wordperfect i Quactro Pro kupila firma
Corel Corporation.

ObecnoSC na rynku arkuszy kalkulacyjnych Borland po raz pienvszy zaznaczyl w I987


roku, wprowadzajqc produkt o nazwie Quattro. By+to w zasadzie klon aplikacji 1-2-3,
kt6ry za macmic n h q cenp oferowal dodatkowe funkcje i by6 mote lepszy systemu
menu. Istoma byla motliwolt wybrania menu pnypominajqcego stosowane w programie
1-2-3, dziqki czemu uzytkownicy mogli korzystak z dobne znanych poleced. Dodatkowo
Quamo gwarantowal kompatybilnoSC z rnakrarni aplikacji 1-2-3.

Jesieniq 1989 roku Borland rozpocd s p d & programu Quattro Pro. Stworzony
w oparciu o oryginalnqaplikacje Q u m o , oferowal szersze mo2liwoSci ni2 program 1-2-3
i byl lepsy od niego pod prawie kakdym wzglpdem. PrzykMowo pierwsza wersja pro-
gramu Quattro Pro, pomimo braku p f i c m e g o interfejsu utytkownika urnotliwiala
pracp z wieloma arkuszami przy W c i u okien, kt& motna bylo pnemieuczat, mody-
fikujqc ich rozmiar w zalctnodci od potrzeb. Dodatkowo program Quattro Pro by#
oparty na niemanym pmdukcie o nazwie Surpass kupionyrn przez Borland.

W wersji Version 2.0 pmgramu @ a m Pro zapmntowanej pod koniec 1990 mku za-
stosowano tm5jwymiarowe wykresy i h a e z b q danych Pmaddx firmy Bwland. Zaie-
dwie szdC miesieey Mtniej, co macznie zasmuciio autor6w k s i e k poSwiwonych pro-
gramowi Quamo Pro, pojawila siq Version 3.0. Wyposrnno jq w opcjonalny graficmy
interfcjs utytkownika i funkcje pokazu slajdbw. Na wiosnp 1992 roku pojawih sit Ver-
sion 4, w kt6rej tastosowano modyfikowalne elementy SpeedBm i innowacyjnq funkcje
anal-j grafiki. Version5 zapmentowana w 1994 roku posiadda tylko j
amacqcq
nowq funkcjq, czyli zeszyty arkuszowe (inaczej nazywane tr6jwyrniarowymi arkuszami).

Podobnie jak Lotus, Borland do66 powoli przekonywal sip do systemu Windows. Jcd-
nak gdy ostatecmie jesieniq 1992 mku pojawil sie program Quattro Pro for Windows.
w pewnym stopniu okazal sip silnq konkurencjq dla dw6ch innych arkusy kalkulacyj-
nych przemaczonych dla tego frodowiska - aplikacji Excel 4.0 i 1-2-3 Release I. I for
Windows. Istotne byto to, te Quottro Pro for Windows posiadat i~owacyjnqfimkcje
o nazwie I11 Builder, kt6ra u m o t l i w i ~projektantom i zaawansowanym utytkownikom
proste tworzenie w h y c h interfejsdw utytkownika.

Godna uwagi jest t& sprawa sqdowa pomi- firmami Lotus i Borland. Wy@ Lotus.
ktbry zmusil konkurenta do usuniecia z Quartro Pro opcji wyboru menu oraz kompary-
bilnoSci z makrami aplikacji 1-2-3. lednak postanowienie to ostatecmie pod konicc
1994 roku zostalo miesione i obecnie Quanro Pro jest kompatybilny z aplikacjq 1-2-3
(jakby kogd to interesowab). Obie firmy wydaiy na dhgi proces miliony d o l h w ,
a gdy jut siq zakodczyt, okazalo siq, t e nie ma prawdziwcgo myciqzcy.

Wspomniana wczehiej Version 5 m& uaktualniona do Version 6, co nastqpilo jut go


kupieniu pnez firm$ Novell dzialu f i m y Borland ajmujvego sic tworzeniem arkuszy
kalkulacyjnych. Gdy pisakm ten rozdziat, a h a l n q wersjq programu Quattro Pro byla
34 CzeSt I + Podstawowe informacje

Version 9 wchodzqca w skhd pakietu WurdPerlfct OIjice 2000. Produkt ten uzyskat
kilka robiqcych wratenie wynikdw, takich jak obshga miliona wienzy i 18 278 kolumn
(za coS takiego utytkownicy Excela wiele by dali). Na rynku arkuszy kalkulacyjnych
Q~tatrroPro zajmuje odleglq trzeciq lokatp.

Przez jakiS czas Qua~troPro wydawat sie najlegszq propozycjq dla osdb korzystajqcych
z arkuszy kalkulacyjnych, ale tylko do momentu pojawienia siq Excela 5 .

Program Microsoft Excel


A teraz zajmijmy sip czymS dobrym.

Wipkszo$6 os6b nie zdaje sobie sprawy, te Microsoft doswiadczenie nviqzane z arkuszarni
kalkulacyjnymi zacqt zdobywaC jut na poczqtku lat 80. Przez lata arkusze kalkulacyjne
Microsoftu przcszly znaczqcq ewolucje, kt6rej zwiericzeniem - jak na razie -jest
rozbudowana aplikacja Excel 2003.

W 1982 roku MicrosoR zaprezentowal pienwsy arkusz kalkulacyjny o nanvie MultiPlan.


Produkt stworzony z rnyilq o systemie operacyjnym CPM z o d p6hiej przeniesiony
na kilka imych platform, takich jak Apple 11, Apple 111, XENIX i MS-DOS. W zasadzie
MultiPlan ignored standardy interfejs6w u2ytkownika stosowane w dosgpnym wbwczas
oprogramowaniu. Program by+ trudny do opanowania i nigdy nie zyska4 w Stanach
Zjednoczonych d W j populamoSei. Nic dziwncgo, t e aplikacja 1-2-3 Lotusa pomstawila
go daleko w tyle.

Aplikacja Excel, kt6ra po raz pimvsy pojawib sip w 1985 roku w w m j i dla kompute-
row Macintosh, w pewnyrn stopniu powstah w oparciu o program MuItiPlan. Podobnic
jak wszystkie aplikacje przemacmne dla systemu MacOS, Excel ht wykorzystywal
graficmy interfejs utytkownika (w pmciwiehstwic do Mt(ItiP!amc bazujqcego na aybie
tekstowym). W listopadzie 1987 roku Microsoft zaprczentowal pienvsq wersje pro-
gramu Excel for Windows (nadano mu numcr 2.0, aby zachowaC zgodnodt z wersjq dla
kornputer6w Macintosh). Poniewa2 sFtem Windows nie by#wowczas jesocze t b y t po-
pulamy, do tej wersji Excela dotagzono specjalnq odmiane systemu Windows, ktbra
oferowala minimalnq liczbq funkcji urndiwiajqcych tylko i wyhcznie uruchomienie
Excela Po niecalym mku Microsoft zaprczentowal program Excel Version 2.1, a w lipcu
1990 mku opublikowai mniej istotnq aktualizacjq (2.ld), kompatybilnq z systemern
Windows 3.0. Co prawda, wedlug aktualnych standard6w wersje omaczone jako 21.
byly do515 ograniczone oraz pozbawione atrakcyjnego wyglt@u pdtniejszych wersji, ale
zainteresowaty niewielkq, lecz lojalnq grupp zwolennik6w, a p a d t o stanowib znako-
mity bdament dla kolejnych wersji. Jezyk makr XLM zawierat b k c j e wykonywane
jedna po drugiej. Mia4 spore motliwoSci, ale by1 tet bardzo trudny do opanowania i ob-
shrgi. Z a s q i l go jqzyk VBA, kt6rernu podwiqcono te ksi@k$.

T y m c z a m Microsoft stworq4 wersjp Excela (nadano jej nurner 2.20) przeznaczonq


dla systemu OW2 Presentation Manager. Pojawila sic ona na rynku we medniu 1989
r o b natomiast okalo 10 miesi~cyp6hiej zaprezentowanojej aktualizacje Version 2.2 I .
Pomimo usilnych stam finny IBM system 0S/2 nigdy nie zdobyt popularno9ci.
Rozdziat i . + Skqd sie wziql Excel 20032 35

W grudniu 1990 roku Microsoft zaprezentowat program Excel 3 for Windows. w k r d n m


dokonano macmych ulepszen zarowno pod wzgledern wyglqdu, jok i funkcjonelnoici.
Wprowadzono pasek nanedzi, motliwoSk rysowania, wydajnq funkcje optymalizacji
(Solver), obsluge dodatk6w, wsparcie technologii OLE (ang. Obiecf LLrking ur;d E ~ I -
bedding), trbjwymiarowe wykresy, przyciski makr, uproszczonq konsolidacje plikow, pnce
w ramach gmpy roboczej i zawijanie tekstu w kom6rce. Excel 3 dysponowal moili~voscia
-
pracy z zewnetrnymi bazami danych (za poirednictwern programu 0-0. Akrualizacja
Excels dla systernu 0.312 pojawita sic pied rniesiecy poiniej.

Excel 4 zaprezentowany wiosnq 1992 roku nie tylko by1 prostszy w obstudze, ale tei
oferowal zaawansowanym utytkownikom wiqcej motliwoSci. W porbwnaniach z nirrnal
katdym arkuszcm kalkulacyjnym publikowanych w brantowych czasopismach Excel 4
zdobyl glbwne wyr6mienia. Tymczasern relacje pomiedzy Microsoftern i IBM-em sra-
w a b siq coraz bardziej napiete. W efekcie program nigdy nie pojawil sie w wenji dla
systemu OS/2 i Microsoft zakohczyl rozwijanie aplikacji z mySlq o rej platformie.

Excel 5 pojawil s i na
~ rynku na pocqtku 1994 roku i natychmiast zdobyt makornite recen-
j e . Podobnie jak jcgo popnednik, malazt sit na szczycie wszelkich porownan arkuszy
kalkulacyjnych publikowanych w najwatniejszych czasopismach brantowych. Pomimo
sporej konkurencji ze strony program6w 1-2-3 Release jfor Windows i Quariro Pro 5
for Windows, ktbre byly makomitymi praduktami radqcymi sobie z prawie kaidq ope-
racjq wykonywanq w arkuszu kalkulacyjnym, Excel 5 w dalszym cizgu wi6di pryrn.
W tej wersji po raz pienvszy zastosowano jezyk VBA.

Excel 95 (many r6wnict pod nazwq Excel 7) pojawil sip jednoczcSnie z systernem
Windows 95. Microsoft pominql wcnjq s z b s ~ ,aby ujednolicik numeracjq wersji pro-
duktbw wchodqcych w skhd pakietu Ofice. Z zewnqtrz Excel 95 niezbyt sit romil od
swojego popmednika. Jednak wiele fiagmentbw podstawowego kodu napisano ponownie
i motna bylo zauwa2yk w n o n wydajnobci. Warto zwrdciC uwagq, i e Excel 95 poslugiwal
sic takim samym formatem pliku, jak Excel 5. Byta to pierwsza aktualizacja, w ktdrej
nie zmieniono fonnatu pliku. Jednak zgodnoit pomiqdzy obiema wersjami nie byta do-
skonah, poniewat w pnypadku Excela 95 jezyk VBA zostat wzbogacony o kilka roz-
szcrzeri. W konsekwencji motliwe bylo stworzenie w Excelu 95 apiikacji, ktbrq Excel 5
ladowat, ale kt6rej nie motna by40 poprawnie uruchomit.

Na poczqtku 1997 mku Microsoft wprowadzii do sprzedaty pakiet Ofice 97, ktdry za-
wieral program Excel 97, many r6wnieZ pod nazwq Excel 8. W tej wcrsji zastosowano
kilkadziesiqt ogblnych ronzemli oraz zupelnie nowy interfejs projektowania aplikacji

w oparciu o j m k VBA. Ponadto produkt ten oferowal nowy sposbb twmenia niestan-
dardowych okien dinlogowych nazywanych forrnularzami UserForm, a nie arkuszami
dialogowymi. Micrasoft pr6bowal zachowai zgodnoSC Excela 97 z poprzednirni wersjami.
.ale dalcko byb jej do doskondolci. Wiele aplikacji stworzonych prry W c i u Excela 5
lub 95 pned uzyskaniern motliwoSci uruchornienia ich w Excelu 97 lub nowszych wer-
sjach wymagalo modyfikacji.
36 Czgit I + Podstawowe inforrnacje

Excel 2000 pojawit sit na poczqtku 1999 roku i by# tet sprzedawany jako komponent
pakietu qffice 2000. Co prawda, nowo9ci w nim wprowadzone dotyczyiy gidwnie mot-
liwoici korzystania z intemetu, ale pojawiio sip tet kilka macqcych zmian zwiapinych
z prograrnowaniem.

Excel 2002 pojawil s i na rynku w polowie 200 I roku (by4 rbwniet sktadnikicm pakietu
Oflce XP). Podobnie jak jego popnednik, nie oferowal wielu macwcych nowych
funkcji. Zamiast tego wprowadzono kilka mniej istotnych nowoici i udoskonalono
funkcje jut Ltniejqce. Prawdopodobnie najwartoiciowstq nowq ftmkcjq byla motliwosC
naprawiania uszkodzonycl plikdw i zapisywania wynikdw pracy w przypadku zawie-
szcnia programu. Excel nadal btdzie mial dorninujqcq pozycjp na rynku i pozostanie
standardem dla uZytkownik6w o r6tnym stopniu zaawansowania
Excel 2003, many 16wniet pod nazwq Excel 11, to jak na razie najnowsza aktualizacja
arkusza kalkulacyjnego, bez wqQienia najbardziej rozczarowujqca. Pojawila sip jesicniq
2003 roku. W tej wersji dostppnych jest niewiele nowych funkcji, dlatego wiqkszoSf
urytkownik6w Excela 2002 uzna przeprowadzenie aktualizacji za zbytecme. Niekt6-
rym uytkownikom mote przypa.$C do gustu motliwoSC irnportowania i eksportowania
plikbw zapisanych w forrnacie XML (ang. extensible Markup h g u a g e ) , a t a k e ma-
powania danych do o ~ l o n y c hkombrek arkusza. Ponadto Microsoft wprowadzii kilka
funkcji z w i p n y c h z zacqdzaniem prawami, kt61-eumotliwiajq narzucanie ograniczeh
r62nym elementom skoroszytu (na omklad w tem spos6b dostep do o h i l o n e n o arkusza
mo& ottzymat tyko &kt& u.2y&owkicy). ~ojawiiosiq tet kilka nowych fimkcji (jednak
niezbyt macacych) zwiqzmych - - z listami o w nowa funkcja pozwalajqca.. poldwnywai:
.
obok-siebie dwa Gkusze p r y utyciu mechanizmu zsynchronizowanego p~twi,ania.
Rozszmono tez funkcjq SUMY. POSREDNIE i usunigo istniejqce ju2 od d&zego czasu
problemy z wieioma funkcjami statystycmymi. Dodatkowo Excel 2003 posiada nowy
system pomocy, ktdrej zawarto9C umieszczono w panclu zadah, a takte now$ metodp
szukania umotliwiajqq wyszukiwanie w panelu & r6tnych infnmacji (niek%re z nich
wymagajqzatotenia konta, za ktbrc jest pobierana oplata).
ZjakiegoS powodu Microsoft zdecydowat sic zeofsrowd dwle podwersje ExDela 2003.
Obsluga formatu XML I zanadzanle prawami sq dostepne tylko w niezdetnej wersji
Excela i wefsji wchodzqxj w sktad pakietu m c e 2003 Professional. Z tego powodu
programiki korzy-stajqcy z Excela 2003 rnogq mi& poblemy z braklem zgodnosci
nawet w ramach jednej okre9lonej wersjil

Excel jako dobre narzqdzie


dla projektantbw aplikacji
Excel, ktdry uZywa bardm popularnego obecnie jqzyka VBA, o f m j e duZe motliwo~ci
programowania i bez wtpimia jest najlepszym narzpdriem do twormia aplikacji opartych
na arkusm kalkulacyjnym. Ponitej wymieniono jcgo kluczowe funkcje, istotne dla pro-
gramistbw.
Sh~khcrapliku. Wykorzystanie wielu arkuszy u W a pzqdkowanie element6w
aplikacji i zapisywanie ich w pojedynclym p l ~ h Prcykbdowo
. pojEdynny plik
skoroszytu mote przcchowywai: dowolnq liczbp arkuszy i arkusq w y M w .
Rozdzial 1 .+ Skqd sie wrfqt Excel 2M)3? 37

Co prawda, formulam UserForm i modu!y jpzyka VBA sq zapisywane


w skoroszycie, ale sqniewidocme dla kortcowego Wkownika.
Jezyk Visual Basicfor Applications. Ten jpzyk makr umotiiwia bezpoirednie
tworzenie w Excelu programow strukturalnych. Co prawda. Excel nie jest jedynym
arkuszem kalkulacyjnym zawierajqym smkturalny jpzyk skryptowy (np. aplikacja
1-2-3 oferuje jczyk Lotusscript), ale z pewnofciq zawiera jego najlepsq
implementacjp.
tainy dostep do kontrolek. &cel macmie upraszcza dodawanie do arkusza
kontrolek takich, jak pnyciski, listy i pnyciski wybom opcji. Aby je zastosowaC,
czasami jest wymagane stworzenie jedynie niewielkiego makra.
m Niertandardowe okna dialogow. Z latwodciq mobs two@ profesjonalnie
wyglqdajqce okna dialogowe. Fonnulane UserForm, zastosowane po raz
p i e m s q w Excelu 97, w por6wnaniu ze starszymi arkuszami dialogowymi
s~ ogromnq innowacja
Niestandardowefinkc]e arkusza. Przy W c i u jpzyka VBA m o h a twonyf
niestandardowe hnkcje arkusza, kt6re upraszczajq formuly i oblicania.
MotliwdC dostosonlywania menu. Ismieje motliwo9C modyfikacji pozycji menu,
dodawania ich do istnieiacych
- - - menu lub t w o m i a z&ie nowych. lnne produkty
tet na to pozwalajg ale w ExceIu jest to wyjqtkowo prosre.
MotIiwosd doslosowyw~iamenupo&unych. Excel jest jedynym arkuszern
kalkulacyjnym, kt6ry pomala dostosowywaf kontekstowc menu podvczne
wyJwietlane po klikniqciu prawym pnyciskiem myszy.

paski nanqhi, kt6re mogq~pehiaCfunkcjg dodatkowego interfejw uzytkownika.


Inne a r b kalkulacyjne r6wniet na m pozwalajg ale Excel wszystkie je przebija.
Wy&ijnejin&e analizy dmrych. Tabcla pnestawna Excela pny niewieIkim
nakhdzie pracy macmie upraszcza zestawianie dufych iloki danych.

danych z 61jomu a r b kallcul-go. Do Wdd danych talicza sip standardowe


formaty plikdw baz danych, pliki tekstowe i strony WWW.
W DAO (ang. Data Access Objects.) i ADO (nng.AcrfveXData ObjecN. Obie
tcchnologie ulatwiajqpraep z zewn-ymi bazami danych w przypsdku
m a n i a jpzyka VBA.
W RabudowanefarnRcje ochrony. Pozwalajq zachowad poufhoSC aplikacji i chmnif
je pned mimami. Funkcje te q powszechnym standardem we wstystkich
arkuszach kalkulacyjnych, jednak pod tyrn wzgl@em Excel oferuje kilka korzy4ci.
m MctliwdE twonenia skampilowonych dodatkdw. Z . pomocq jednego polecenia
m o h a hvorzyf pliki dodatk6w formatu XLA, M6re instaluje sip w Excelu bez
klopotu.
a m o h a kontrolowat inm aplika~je
Obsbga mctoma&racji. Prry utyciu j ~ k VBA
obsluguj@ceautomatyzacjp. Motna na przyklad wygenerowak raport w Wordzie.
38 CzeiC I + Podstowowe i n f o m c i e

m Mothvoit tuortenia stron WWW. Ze skoroszynr Excela m o h a bardzo tatwo


stwonyC stronp HTML (ang. HyperText Markup Language).
m MoiliwoSi importowunieplikuXML i mapowania p61 na komdrki arkusza.

Rota Excela w strategii Microsoftu


WigkswSC kopii Excela sprredawana jest jako cz@C pakiehl Microso- Ofice. To, jakie
dokladnie prograrny otrryrnasz, zale2y od wersji pakietu. OczywiScie przydaje sip mot-
IiwoSt wzajemnej komunikacji pornidzy programami z jednego pakietu. Microsoft
wiedzie prym w kontynuacji takiego trendu. Wszystkie produkty pakietu Ofice majq
wyjqtkowo podobne interfejsy uwkownika i obstugujqjpzyk VBA.

Po opmowaniu jpzyka VBA, oferowanego przez Excel, zdobyte umiejgtnoSci kdziesz


mdgt wykorzystak w innych aplikacjach. W tym celu wystarczy jedynie zapomat siq
z modelem obiektowym stosowanym w innych programach.
Program Excel w zarysie
W tym rozdziale dokonam obszemego orndwienia podstawowych komponentbw Excela
2003. Zapreantowane informacje bqdq szczegblnie pnydame dla osbb, ktdre majq do-
Swiadctenie w obshdze innego arkusza kalkulacyjnego i rozpoczynajq korzystanie
z Excela. Na przyklad Wkownicy programu 1-2-3 zatwyczaj rnusq przestawif sic na
nowq terrninologip. Z kolei doiwiadczeni utytkownicy Excela nawet pny pobictnej
lektune rozdziah mom wbagacii swojq wiedq o tym programie.

MyBlenie obiektowe
W M c i e tworrmia aplikacji w Excelu (nvhzcza, gdy korzystasz z jpzyka VBA) p
mocne jest my9lcnie przy K!Y&I obiektdw Iub elmmt6w arkusza kalkulacyjnego, kt-i
motna rnanipulowat rqcmie, bqdt za poSndnictwern makra. Oto kilka pnykladbw
obiektdw Excela:
sama aplikacja Excel,

askusz nrwarty w skoroszycie.


zakes mejdujqcy sip w arkuszu.
kontrolka LirtBmr umjeszczana na fonnularzu UserForm (niestandardowe okno
dialogowe),
= arkus2 wykresy
wykres umieszczony w arkuszu wykmu,
seric urnieszczone na wykresie.
PO- listll obiektdw twony c d na padobiefistwo hiermchii. Obiekt Excel zawiera
j ~ arkuszy, a te z kolei obiekty zakresdw.
.obitkty skomszytbw, ktdn p i i c h o ~obiekty
Tego typu hietarchia twony model obiektowy. Excel posiada ponad 200 klas obiektirw,
ktbre mogq byt kon~lowanebezposrednio lub za pomocq j m k a VBA. m d y z pro-
duktdw wchodzqcych w sklad pakietu Ofice 2003 ma wlasny model obiektowy.
MoilhvoSE kontrolowania obiekt6w ma fundamentalne maczenie prry projektowaniu
apllkacji. W trakcie leh-tury e j k s i l t . dowieu rie. w jaki rpodb autmatyzowat
M a n i a p o p z kontrdowanie obiekth Excela za pomacq jeryka VBA. Zagadnienie
to stanie siq bardzlej nozumiate po rapomanlu siq z zawartoScig kolejnych rozdziMw.
40 CzeSC I Podstawowe infomcje

S koroszyty
Jednym z najczqiciej stosowanych obiektdw Excela jest skoraszyr. Wszystkie operacje
wykonywane w Excclu sqpowipme ze skoroszytem przechowywanym w pliku o domysl-
nym rozszerzcniu .XIS.Skoroszyt Excela moke przechowywat dowolnq liczbp arkuszy
(ograniczonq jedynie przez dostppnq pamipt). Motna wyr62niC caery typy arkuszy:
zwykte arkusze.
arkusze wykres6w,
m arkusze makr XLM (pnestamle, ale nadal obslugiwane).
arkusze dialogowe (przestmle, ale nadal obslugiwane).
Co prawda, motna otworzyt dowolnq liczh skorosyt6w (katdy we wlasnyrn oknie),
ale w danej chwili tylko jeden z nich m o a byt skoroszytem aktyunym. Podobnie tylko
jeden arkusz skoroszytu mo* byc a r h z e m aktywnym. Aby uaktywnie arkusz, n a l e y
kliknqt jego kartq w dolnej mci ekranu. Aby mienif nazwt arkusza, nalezy dwu-
kromie kliknqt kartp i wpisaf nowq nazwp. Po kliknipciu prawym przyciskiem myszy
zostanie wySwietlone menu podlyczne.
Od wcrsji Excel 2002 i h i e j e mo2liwdC pnypisywania kolor6w kartm arkuszy. W tym
celu z menu Fonnat nalety wybrat poycjp A r k , a nastgnie Kolor karry. Identyfi-
kowanie kart przy ukyciu kolor6w mote porn& w znalezieniu okrdlonego arkusza,
zwlaszcza gdy w skoroszycie majduje sit ich wiele.
Istnieje tet rno2liwo6d ukrycia okna zawicrajqcego skoroszyt. W tym celu nalety wy-
brat pozycjp Ulrryj z menu Oho. Ukryte okno s k o m y t u potostanie Ohmate, ale b&ie
niewidocme.

Najpopularniejszym typem arkusza jest zwyk4y arkusz, Wry zamyczaj utytkownicy


majq na rnylli, gdy podejmujq temat arkuszy kalkulacyjnych. Arkusz zawiera komdrki,
w ktbrych sq prtechowywane dane i form*.
K d d y arkusz Excela posiada 256 kolumn i 65 536 wierszy. Liczba wienzy i kolumn
nie mote zostat mieniona. Co prawda, aby zwi$kszyf przejrzystodt arkusza, motna
ukryt zbqdne wiersze i k o l m y , ale nie jest mo2liwe zwiqkszenie ich liczby. Zwiqksze-
nie liczby kolumn prawdopodobnie jest jednym z 10 gl6wnych 2 y c h u2ytkownik6w
Excela, ale Microsoft ignoruje takie oczekiwania, ponicwat wymagaioby to ponownego
napisania macznej iloSci kodu bddlowego.
I

Qdzia majdujq slq arkurn, modP16w YBA?


Po raz plemszy jqzyk VBA pojawit sig w Excelu 5. W tej w n j l , a t a m w wen11 Excel 95 mod&
VBA umieszczony w skorosrycie miat post& odd2lelnego arkusza. Modul VBA pnschow]e kod
frddtowy jezyka VBA. Pocqwszy od Exeela 97, rnoduty jeryka VBA nie sq jui niezaletnyml ark&
szami. Zarniast tego obstuguje je edytor Wsual Basica (en& Wwel Basic Editor). Aby prZejn&
lub zrnodyfikowat modut VBA, nalety uaMywniC edytor Visual Basica popmz wcilniecie k l a w i ~ y
Alt+F11. W kolejnych rotdziatach szczeg6+owo om6wiono moduty VBA.
Rozdziat2. + Program Excel w zorysie 41

(SF*Wersle
* Excela starsze od wersji Excel
wierszy.
16 384
97 obstugiwaty arkusze liczqce jedynie

MotliwofC stosowania wielu arkuszy w jednym skoroszycie to du2a zaleta. Dziqki ternu
nie tylko zwi~kszasiq liczba dostqpnych komdrek, ale t a b moha ulcpsqC organizacjq
pracy. W zamiemhlych czasach, gdy plik s kW sic z pojedynezego aricu~qpmjektanci
tracili mn6stwo czasu, prbbujqc tak go mrganimwak, aby w wydajniejszy spos6b p n e c b
wywal informacje. Obecnie dane mogq bye przechowywane w dowolnej liczbie arkuszy
i w dalsym c i u u poprzez klikni~ciekarty arkusza m o a a uzyskat do niego natychmia-
stowy dostpp.

K o h r k a arkusza m o b proechowywaC sta+q wartdf lub wynik wygenerowany prat


form*. Wartdciqmote bye liczba, data, warto.46 logicma (Prawda lub F a i s z ) tub tekn
Katdy arkusz posiada te2 niewidocmq warstwq rysunkowq umotliwiajqq wstawianie
obiekt6w graficznych takich, jak wyluesy, diagramy, obiekty rysunkdw, kontrolki for-
mularza UserForm, obray i obiekty osadzone.

Utytkownik w pelni konholuje szemkoid kolumn iwysokok? &my. Tak naprawdq motc
nawet duyf w i m i kolumny, a W e cale arkusm. Tekst w kom6rce mote bfi wy-
Swietlony pionowo lub ukobnie, mote tc2 zosW zawiniqty, talc aby zajmowd kilka linii.

Arkusze wyhes6w
srandardowo ericus mybsu przechowuje pojedymzy wylaes. Wielu ~ o w n i k 6 w
ip
ruje arkusze w y k n d w , pnferujy przeehowywanie wykres6w w wantwie rysunkowej
arkusat Co prawda. q i e arkuszy wykrcdw jest opcjonalm, ale w ich pnypadku wydru-
kowanie na h e samego wykrcsu jest m h p latwiejsze. Tego typu arkusm sq sz~ag6lnie
przydame w przypadku prczentacji.

Jakl Jwtrormhr d w m ?
W a t o siQ p z s Z chwllp mdmmI6 md romrlamm arkusw. Z w j operacji mybWQcZ
nej (256 * 65 536) wynlka. te jeden arkusz rawlera 16 777 216 kmdrek. Pojedynczy skorokzyt
mote s k W d sig z wlgkszej lkzby aaruszy.
JeJli utywasz ~ e l c z o S ckarty
l J x 600 waz clomy4lneJ wysok& wieruy i sm
g m f k z ~ 800
rokoJci kolumn, w dam) chwili zobaczysz 12 kolumn i 28 wienzy (lub 336 kom6rek). co stanowl
ok* 0,002X cdego arkusza. lnnymi stowy, jeden arkusz sktada sig z pawie 50 OM) ekrandw
zawierajqcych inforrnacje.
Jelll do ka2dej kom6rld wprowedzalbyO pcjdymq qfrg ze stownkourq dutq szybkoSclq w y n o s ~
cq jedna komdrka na sekum, wypelnlenle catego arkusza zajeoby okoto 194 dni nlewtannej
pmcy. Aby w y d r u k M wynikl pay, koniecme by byto miycb ponad 36 000 stron papiehl. cyli
stosu o wysokoSci okob 1.8 metra.
Wypanianie wartotiami catego arkusza nle jest mkazane. Tald plik mlalby spore m a i q i jego
przetwarzanle by4oby wyjqtkam, powolne, poniewat system Wndaws c&y a s dokonydby *onC
m a n i a dan)Fh na dysku. Excel nie -eta pe
m m katdej kombrce. Z pamiqd korrystajqjcdynie
uiywane kordrkl.
42 Czefe 1 Podstawowe inforrnacie

Arkusze makr XLM


W zasadzie arkusz makra XLM (many r6wnie2 pod nazwq arkusza makra programu
MS Excel 4 ) jest zwyklym arkuszem, ale posiada kilka innych ustawieh domyilnych.
Dokladniej m6wiqc, arkusz makra XLM lamiast wynik6w formul Wwietla same formui-y.
Ponadto domyllna szerokoSC kolumny jest wiqksza nit w prtypadku nvyktego arkusza.

Jak nazwa wskaruje. arkust makra XL,M zostai stwomny do pmchowywania rnakr XLM.
System makr XLM jest pozostaloSciq poprzednich wersji Excela (4.0 i starszych). Excel
2003 w dalszym cirlgu je obsluguje r e wzgl~duna zachowanie zgodnolci, jednak nie
oferuje jut motliwoSci ich rejestrowania. W tej ksi- nie dokonano orndwienia systemu
makr XLM, natomiast ~ 6 c o n uwagco na bogatszy w motliwoJci system makr VBA.

Arkusze dialogowe program6w Excel 5/95


W wersjach Excel 5 i 95 niestandardowe okna dialogowe byly twonone za pomoca
specjalnego arkusza dialogowego. Excel 97 i jego nowsn wersje nadal obshrgujrl tego
typu arkusn dialogowe, ale oferujq macmie lepsze rozwiqmnie w postaci formularzy
UserForm definiowanych w edytom Visual Barica. Po otwarciu skoroszytu zawierajq-
cego arkusz dialogowy programbw Excel 5/95 tego typu arkusz btdzie mial postad
zwyklego arkusza.
JeJll ze wz&du na zdwwanie zgodno9ci rnusist s t o d a k u v dlalogowy pmgrwrbw
Excel 5/95, w menu Wsfaw nle ma)dziesz polemla. Mdre to umotllwia. Jadyna metoda
umtllwlajqca dadanle arkusza dlalogwvego programdw Excd 5/95 palega na kllknieclu
prawym przyclskiem mysry dowolnej karty arkusza i wybraniu z menu podrecznego
pozycjl Wstaw. Nastepnie w atwartym oknie dlalogohym Wstawlanie nalety kllknqC
lkong MS Excel 5.0 - dialog.
W tej k s i w e nie om6wikm arkuszy dialogowych program6w Excel 5/95.

lnterfejs uiytkownika w Excelu


Za podrednictwem interjisu utytkownika utytkownik mote komunikowaf siq z pro-
gramem kornputerowym. Interfejs utytkownika sklada sip z takich element6w. jak menu,
paski narz-, okna dialogowe, sMty klawiaturowe itp. W wiekszofci przypadkow
Excel opiera sic na poleceniach standardowego interfejsu utytkownika systemu Win-
dows, aie przynajmniej pod jednym wzglpdemodbiegaod tej &ady. Dotyay to menu
Excela, ktbre nie sq standardowymi menu systemu Windows.

Menu
Pocqwszy od programu Excel 97, menu wkkiiwie s@ zamaskowanymi paskami n-dzi.
Powierdzeniem tego sqikony towanysplce niekt6rym pozycjon
System menu Excela jest stosunkowo prosty. Istniejq dwa typy menu Jedno z nich jest
dost-. gdy mstanie ualdyrmiony arkw, natomiast drugie po -iu arkurm wykesu
lub zamaczeniu obiektu wylcresu majdujqcego siq w arkuszu. Zgodnie z konwencjami
Rozdzial2. + Program hcel w zarysie 43

obowiqzujqcymi w systernie Windows niedostppne polecenia menu s@wylqczane (wyszz-


- .- okno dialogowe s4 umimzczane nzy kropkl.
none). natomiast za ~oleceniamiotwieraiacyrni
W &ie koniecmolci menu wySwietlajq wszelkie dostppG skr6G klawiatumwe (dla p&-
khdu w menu Edycja przy pozycji Cofnrj'jest widoczny skrot klawiaturowy Ctrl+Z).
Kilka pozycji menu tworzy menu kaskadowe. Klikniqcic takiej pozycji menu spowoduje
wyiwietlenie podmenu zawierajqcego dodatkowe polecenia. Dla przykjadu menu kaska-
dowe twony menu Edycja i podmenu i.Vypelng. Menu kaskadowe identyfikuje niewielka
ik,ona strzatki skierowanej w prawo.

Caty system menu moee by6 dostosowany do wlasnych potneb przez utytkownika lub
projektanta. W tym celu z menu Widok nalety wyb& pozycje Paki n a ~ e d r ia, nastepnie
Dostosuj. Zmiany dokonane w menu przy utyciu tej metody q tnvate, a wiqc pozostanq
nawet po zamkniviu Excela i jego ponownym uruchomieniu. Jednak w dowolnej chwili
motna przywrdcit domy9hq konfigwacj~menu. W tym celu z menu Widok nalety wybnc
pozycje Puski naqaki, a nastppnie Dastosuj. W oknie dialogowym Dostosowywanie nalety
klhqC zakhdkp Paski nurqdzi. Z listy Push n a q d z i nalety wybraC pozycjp Pusek menu
arkusza kalkufacyjnego lub Pmek menu Wykres, a nastppnie k1ikn;tC przycisk Resetzrj.
Edytor menu m m b w Excel 5/95 nie jest jut obstugiwany. Aby modyflkowaC menu
stworzone w programach Excel 5/95 pny uiyciu edytora menu, muslsz uruchomit
jedna z tych aplikacji. lnna motliwoSE polega na utyciu narqdzia, ktdre na to pomoli.
JeSli zalety Ci na skonwertowaniu skoroszytu Bcel 5/95, w ktdrym dokonano mian
menu, do formatu pllku obstugiwanego pnez Excel 97 lub nowszy, najlepiej prred
wykonaniern operacji konwersji uiyC edytora menu w celu usuniecia tych zmian.
Aby uryskas? wiwej infformacji na temat dostosowywania menu, naleiy raja&
do rozdzialu 23.

Menu podrqczne
Excel posiada te2 kilkadziesiqt menu podrpcznych. Tego typu menu pojawiajq sic, gdy
W k o w n i k prawym pmyciskiern myszy kliknir jeden lub kilka obiektbw. Menu pod-
Qcme sq menu kontekstowymi. lnnyrni stowy, to, ktbre menu sip pojawi, zaiety od
pdotenia wskahika myszy w momencie nacihiecia jej prawego przycisku. Prawm
pnyciskiem myszy motna k l i w prawie kaMy obiekt taki, jak kombrka, ramka wiersn .
lub kolumny, pasek tytuh skoroszytu, pasek nanpdzi itp.

Jqzyk VBA ponvala dostasawywa6 dowolne menu p&cme.


Aby UryskaC wlp.xJ informacjl na temat dostosowywania menu podrqznych. naleiy

Excel 2003 zawiera kilkadziesiq predefiniowanych paskbw narydzi (w tym dwa speC
niajqcc funkcjq menu), a p o d t o motma tworryC dowolnq l i e nowych. Aby dostosowat
paski n-dzi lub utwonyC nowe, z menu Widok nalety w y b d pozycjq Paski n z e & r .
a nastepnie Dosrosuj. Po ddqczeniu dostosowanych pask6w narqdzi do skoroszyt6w
motna je przenosit.
44 CzefC I + Podstowowe infomwcje

Paski@n mag@ by6 szwno ma&me (umiestczone przy jednej z kraw@i ekranu)
lub mobodnie pnemieszczane. DomySlnie Excel wySwietla paski n a r r w Standardowy
i Formatowanie bezpolrcdnio pod paskiem menu.

Pnyciski paska narz~dzimogq bye wyiwietlane w dw6ch mmiarach. Wedtug mnie


pnyciski o du2ym rozmiarze sq p prosN zbyt wielkie. W program wbudowano prosty,
ale wydajny edytor przyciskdw paska narqdzi (rysunek 2.1). Excel ofemje kilka tysiccy
ikon pnyciskdw paska nartedzi, dlatego t e t prawdopodobnie nie b e e koniecme utycie
tego edytora.

Rysunek 2.1.
Edytor ptzyclskdw
paska na-i
Excela nie jest crymS
W~tkOwym,
ale spefnia swojq
funkcje

Paskl n e w szczeg6bwo zostaly ombwlons w r~zdzlale22.

Okna dialogowe
I
WiqluzdC polecefi mmu Excela wy9wietla o h dialogowe. Okna te q d o g podobne
pod wzgldem sposobu dzialania. WipkszofC okien dialogowych nalety do katcgorii I
okim modalnych. Omacza to, t e aby uzyskak d o s t q do arkusza, koniecme jest wczc- I
Sniejsze zamknipcie takiego okna Jednak kilka okien dialogowych pomstaje zawsze na
wierzchu. Pnykladowo okno dialogowe Znajdowanie i zamiwimie (aby je otwonyk, 1
z menu Edycja nalety wybrak pozycje a4j&3 mote powstae o~uartcw trakcie kotzy-
stania ze skoroszytu.
1
I
Niektdre okna dimlogowe konystajq z zakMek, dzipki czcmu jedno okno mo2e p h i 4
funkcjc k i h r6211ychokicn. Na pnykbl pokazane na rysllnku 2.2 olmo dialogowe Opcje
(aby je otworryt, z menu N q & i a nalety wybrat pozycjp Opcje) zawiaa 13 zakiadek.

Projektanci mom two* niestandardowe o h a dialogowe, k o n y s t a j ~z fomulana


UserForm @a raz p i e w y pajawit sip w Excclu 97). Motliwe jest twwrenie mtbudowa-
nych okien dialogowych, w tyrn talc%okien zawierajwch zakladki (przy wykoizystaniu
kontrolki MulfiPage).
Aby uzyska6 lnfomacje na ternat tworzenia fomufsrry UserFbm i p r a ~zlnimi, nalety
zaj& do N c e k i ksimi.
RozcMai 2. Program Excel w zarysie 45

Rysunek 2.2.
Okna dialogowe
z zakladkerni
udostepniajq wlele
opci, nie pnytIacrsjqc
~Iytkownika

Funkcja ,,pneciWPij i upuse'n


Funkcja .,przecWiji up&", b&ca w Excelu cz&iq interfejsu uyrkormika, umotliwia
swobodne pntciaganie obiekt6w warstwy rysunkowej w celu zmiany ich lokalizacji.
Wcgniqcie klawisza CRI w trakcie praciagania powoduje powjelcnie wybrsnych obiekt6w.
Excel ponvala teZ utywd fimkcji ,,pmciagnij i up&" w sboslmku do k o m h k i Auesbw.
Z latw&$ mtna pmcillgaC kom6rlcp lub zkm w innej miejsce. m a n i c wcihiq-
tego klawisza Cpl w bakcie przccirlgania spowoduje skopiowanie wybranego duesu.

Funkcja .prmdqgnlJ I up&' jest opClonalna, dlatego motna jq wyhczyC w zakkdce


I €Maokna dlalogowega Owe.

Istnieje at motliwoSc5 p n e c w p c i a zakwu nn pulpit systemu Windows, co pozwala


I s t w e hgndarycmy obiel& Pbfniej m o m ten obikt do b e g o skom-
sytu lub aplikacji i wstawit go jako obickt OLE (ang. ObjecfLinking und Embedding).

I1 Excel oferuje wiele skr6Ww klawiehaowych. R y k ~ w oaby


obszar, m o a a wcisnqd kombinacjp klawiszy Ctrl+C. k
91
, skopiowad ~amaerony
i jestd pocz@kujqcym u2yt-
kownikiem Excela lub zale2y ci jedynie na zwiqkszmiu wydajnolci, usilnie namawiam
I do zapo~laniasiq z zawarto9cirl pomocy online (znajdi indeks Skdty klawimurowe
I i pnejnyj powkpm z nim infbrmaje). Opanowanie s M 6 w jest kluczo,wym wanmkiim
I
biegkgo poslugiwauia siq Excclem. Plik pomocy zawiera tabele zcstawiajqce plzyda&~.
polecenia wraz z ich M t a m i klawiaturowyrni.

lnteligentne tagi
InteJfgentny tog (ang. Smart Tog)jest niewjelb pojawiajvq s* automatycmie
w arkuszu Po jej klikni~ciumasz do wyboru kiIka opcji. Jdlina prqkW skopiujesz
i wkleisz rakres k o m w Exal wygmcruje inteligcnmy tag, M r y w e wid- poni*
wklejoncgo rakresu (rysunek 2.3).
46 Czeit I + Podstawowe informacje

Rysunek 2.3.
lnteligentny tag
pojawia sic
po whlejeniu
skopiowanego
zakresu

Excel h j e kilka imych inteligenmych tag6w; dodatkowe tagi mogq dostarczad nie-
zale2ni producenci. Nie katdy lubi inteligentne tagi, ale na szczqkie motna je wylqczyt
w zakladce Tagi inteligentne o h a dialogowego Autokorekta (aby otworzyt to okno,
z menu N m e d r i a nalety wyb& pozycjq Opcje autokorekry).

Panel zadah
W Excelu 2002 wprowadmno panel zadd, dodatkowy element intcrfejsu utytkownika
standardowo osadzony po prawej stronic okna programu. Panel zadah jest stosowany do
r15tnych celdw, w tym wySwietlania wynikbw przeszukiwania systernu pornocy i za-
wartoSci schowka pakietu m c e , oferowania wsparcia przy wyszukiwaniu i mapowania
danych zapisanych w formacie XML.
Panel zadatl zostal macznie rozbudowany w Excelu 2003.

Wprowadzanie danych
Wprowadzanie danych w Excelu jest d d d prate. P r o m inarpretuje zawartoS1 katdej
kom6rki jako jeden z nas&pujqcych typbw danych:
wartoe liczbowa (w tym data i czas),
teksS
B wartdt logima (Prawda lub Falsz).
PI formula.
Rozdzial2. Program Excel w zarysie 47

r -
Wskazdwki dotycrqce wpmwadzania danych
Zawarte ponitej wskazdwki dotyczqce wprowadzania danych sq szczegdlnle przydatne dla tych
osbb, ktdre rezygnujq z uiywania innego arkusza kalkulacyjnego na rzecz Excela.
JeSli pned wprowadzeniem danych zaznaczysz zakres komdrek. w celu zakollczenia
umleszczania danych w komdrce i pnejkia do nastepnej komdrki wybranego zakresu nalezy
wcisnqE klawisz Enter. Aby przejbf do komdrkl gdmej albo polozonej po prawej lub iewej
stronie, naleiy odpowiednio wcisnqC kombinacje klawiszy ShiRiEnter, Tab i ShiR+Tab.
Aby wprowadzit dane bez wciskania klawiszy stmlek, w zaktadce Edycja okna dlalogowego
Op$e n a l e j zaznaczyC opcje PrrenoJzamaczenie pa necisniwiu klawisza ENTER [aby otworzyd
okno, z menu Narqdda naleiy wybrd pozycje Opcle). Motna rdwniet okreOliC kterunek
pnemieszczania porniqdzy komdrkami.
D Aby do kaidej komdrki zamaczonego zakresu wpcowadzid takie same dane, nalety umieCiC
je w aMywnej komdrce. a nastepnie wclsn# kombinacje klawlszy CtrliEnter.
Aby s k o p i o d zawartoX aktywnej komdrki do wszystkich pozosta+ych k o d r e k zamaczonego
zakresu, naleiy wcisnqd klawisz F2, a nastepnie kombinacje klawlszy Ctrl+Enter.
Aby -if korndkl zakresu kdejnymi zwi&mjqqmi sie wartokiarni opartymi na pojedynczej
liczbie, w trakcie pneciqgania uchwytu wypetnienia znajdujqcego sie w prawym dolnym
narotnlku zaznaczonego zakresu. nalety wcisnqf klawisz Ctrl.
Aby stwoay6 niestandardowq liste automatycznie wypelnianq, nalezy u2yt zaktadki Listy
nlestandsrdowe okna dialogowego Opcje.
Aby s W o d kombrkq bez zwiqkszanla JeJwarto5c1, nalefy pneci$gn@ uchwyt wypetnienia
ma)dujqcy sic w n a r o ~ l k uzaznaczonego obszaru. Aby skopiowat dane do dolnych
lub do prawych kom6rek, naleiy odpowlednlo wclsnq6 kombinacje klawiszy CtrliD lub M + R .
Aby upmSciC czytanle tekstu, motna umie$cld w komdrce maki tabulacjl lub powrotu karetki.
Aby wstawid znak tabulacji, neleiy wcisnqd kombinacje klawiszy Ctrl+AEt+Tab. Aby wstawiC
mak powrotu karetki, nalety wcisnqd kombinacjq klawiszy Alt+Enter. Znaki powrotu karetki
powodujq zawijanle zawartoki kom6rkl w jej obszane.
B Aby wstawlC utamek, nalej wpisd zero, za nim mak spacji, a nastqpnie utamek (przy utyciu
maku /). Excel fomtuje kombrke przy u j c i u forrnatu llczbowego Ulamkowe.
B Aby automatycznie sfonatowd k o m przy utyciu forrnatu Walvtowe, za wattohiq naleiy
wprowaddf symbol waluty (np. symbol zfw przypadku Polski). Aby wprowaddd wattoff
zapisanq w formacie Procentowe, nalety za niq wpisaC znak procentu. W celu oddzielenia
od sieble cwlci tysiqcmych (np. w Stanach Zjednoczonych prrecinki sq stosowane w liczbie
- 4, 123.434) motna t e i umglgdniC symbole separator&.
Aby wstawlt aktualnq date, naleiy wcisnqt komblnacjd klawiszy Ctrli; (brednik). Z kolei
aby wstawiC do komdrki aktualny czas, naleiy wcisnqf kombinacjq klawiszy Ctr/+Shiff+:.
W celu zdefinimnia kom6rki lub lch zakresu, tak aby akceptowaly dane tylko okreslonego
typu (lub wartoSci zawierajqce siq w ustalonym pnedziale) naleiy z menu Dane WraC
pozyck Sprawdzanle poprawmSd,

Fomldy zawsze mzpoczynajq sip makiern r6wno8ci (-). Jednak Excel potrafi sip dosto-
aplikacji 1-2-3 i akceptuje symbol @,
sowaf do nawykbw ~ o w n i I c 6 w mak plusa (&)
lub minusa (-)jako pienvszy mak formuly. Propm po wcihiqciu klawisza Enter au-
tornatycmie dostosowuje wprowadzone dane.
48 CzpSC I + Podstowowe inforrnacje

Formuv, funkcje i nazwy


Forrnuly sprawiajk t e arkusz kalkulacyjny jest tym, czym jest. Kilka istomych funkcji
powiagnych z formulami umotliwia definiowanie fonnul tablicowych, stosowanie
operatora p~ecipcia,dodawanie lqczy i twonenie megofrmul (takim okreSleniem po-
slugujq siq w przypadku dhgich i zlotonych, ale bardzo wydajnych fomuq.
W rozdziaie 3. ombwiono forrnuly i zaprezentowano wybrane zasady ich stosowania.

Excel posiada tet kilka pnydatnych funkcji inspekcji pomocnych w idmtyfikowaniu


Mdbw lub Sledzeniu logiki w nieznanym arkuszu kalkulacyjnym. Aby ich uQC, z menu
Nanehia nalety wybraC pozycje Inspekcjaformul.

Poczqwsy od wenji Excel 2002, fmkcje inspekcji zostaly w maczr\ey sposbb rozbu-
dowane. Mo-a na pnykiad utyC tych funkcji do skanowania arkusza i identyfikacji .
fomul, kt6rc mogqzawierak Mpdy. Na rysunku 2.4 Excel zidentyfikowd formule, ktbra
I
wygenerowaki blqd. Kilka opcji zwiqzanych z t.q sytuacjq wyfwietlil inteligentny tag. I
Rysunek 2.4.
Ercel pobBfi
monitorowaC formu&
pod kqtem
wystqpienia
prawdopodobnych
w w

Funkcje h s z a umotliwiajq wykonywanie obliczed tub operacji, ktdre w pneciwnym I

razie bylyby niernmtliwe. Excel dysponuje ogramnq liczbq wbudowanych h k c j i , a po-


nadto dziqki dodatkowi Anufysis ToolPok motna uzyskat dostep do jeszcte wipkszej
liczby funkcji (wiele z nich jest do46 niezwyklych).

Najpstsza metoda dokalizowania fimkcji, id6rj zamimasz utyC, polega na zaskmwaniu


okna dialogowego Wsimimiefknkcji ppokazanego na rysrmlar 25. Aby je o t w q d , n a l w
albo kliknqk na pasku fonnuiy prycisk Wstowfinkcje, albo wybrak z menu W s t m po-
zycje Funkcja, a1bo wreszcie wcisnqt kornbinacjp klawiszy ShifriF3. JcSli nie jested
zaznajomiony z tq funkcjg mch- do jej sprawdzenia, poniew& jest bardzo pnydatna.
~ozdziol2.6 Program Ewcel w zarysie 49

Rysunek 2.5.
Najlepsq metodq
wstawiania
funk@ w formule
jest .?astosowanie
okna dialogowego
Wstawianie funkcjl

Od w m j i Excel 2002 istnieje motliwobt idmtyfikacji funkcji poprzez smkanie stowa


kluczowego. Taka metoda jest przydahla. gdy nie pamiptasz nazwy funkcji. JeSli na
przyklad szukasz funkcji dokonujqcej konwersji tckstu na odpowiadajqcy mu kod ASCII,
moiesz uiyC slowa kluczowego kod, a nasqpnie kliknqd pnycisk P ~ e j d i Excel
. zapro-
ponuje tny funkcje - KOD. 021s i KOM~RKA.
Excel pozwala tet t w o w W n e funkcje arkusza za pomocq ]+#a VBA. Aby uzyskaC
szczag6towe lnfwmacje na ternat te] bog- w rnotllwofcl cechy. nalezy zaj&
do rozdzidu 10.
Nazwa jest ideatyfikrdonm u m d i w i a j w odwdanie sip do kom6rki. zakrcsu, w d c i ,
fomuly lub gmficznego obiektu. Formuly ugwajqce nazw sq m a m i e czytelniejsze od
fomul opartych na odwdaniach do komdnk i znacznie prodciej tworzy sip fonnuly
stosujqce odwolania do nazw.

w Namy I unikstowe metoby ich ob- w Excelu zostanq orndwione w rozddale 3.

Dostosowywanie zawartoSci okna Excela


Excel .ofieruje rn- eMycm& mi- z okrellaniem zawartoki jego okna (pasek
status* pasek fwmuly, paski mqdzi itp). Na pnyklad pop- wybranie z menu Widok
pozycji Pehry ekan m a wyeliminowat w q s t k i e elementy okna poza paskiem menu,
dziqki caernu zyskuje siq motliwbSC wy$wietlenia maksyrnalnej iloSci informacji. Do-
datkowo poprzez wybranic z menu Narze&ia pozycji Opcje m o h a otwotzyd okno
dialogowe Opcje. Zaldadka Widok pozwala o M l i t , co b.$zie widoczne w oknie arkusza.
Motna nawet duyC paski przewijania i iinie siatki.
Tak naprawdq Excel umotliwia projektowanie aplikacji, ktdre wlakiwie w niczym nie
przypominajq arkusza kalkulacyjnego.

Zaznaczanie obiekt6w
Z . o b ijest zgodne te starcdardawymi mnodami systcmu Windows. K l i h i p
cie kom6rkj przyhzymanie lewsgo kiawki rnpzy, a n-ie praeciqgnivie w dowol-
nym kienmku pozwala m a c z y C Acres komdrek. Klikniwie obiektu umieszczanego
50 Cz#t I + Podstawowe inforrnacje

w warstwie rysunkowej powoduje jego zamaczenie. Aby zaznaczyt wiele obiektdw lub
nieprzylegajqcych komdrek, nalcty wcisnqt przycisk Ctrl, a nastepnie po kolei klikat
obiekty lub kornbrki. Aby zamaczyt duZy zakres, nalew kliknqk kornbrke majdujqcq
siq w jego dowolnym narotniku, wcisnqf przycisk Sh$ i kliknqc komorkp umieszczona
w przeciwleglym narotniku zakresu.

JeSli do obicktu pnypisano makm, klikniccie obiektu spowoduje wykonanie makra. Aby
wrnaczyc taki obiekt, nalety kliknrl(:go prawym przyciskiem rnyszy i w celu ukrycia
menu podrccznego wcisn* klawisz Esc.
-*,"
tm~. W wersjach Excela starszych ad wersjl 97 kliknisie osadzonego wykresu pwodowab
jego zaznaczenie. Poczqwszy od Excels 97, kliknivie wykresu powoduje zaznaczenie
obiektu w nlm zawartego. Aby zaznaczyC sam obiekt wykreru, przed kliknieclem
nalety wcisn* przycisk Ctrl.

Formatowanie
Excel ofenrje dwa typy formatowania - liczbowe i stylu.

Forrnatowanie liczbowe
Formufowanie liabowe dotyczy spowbu rrpramtacji warmki kbowej w kmdrce. Mo-
tna albo wybraC format z dhrgij listy predefiniowanych w, a h utrvorzyt wla~ny
(rysunek 2.6). Odpowiednia procedura zostah dokladnie omdwiona w systemie pomocy.

Rysunek 2.6.
Opcje fonnatowanla
liczbowego
s$ w Excelu
bard20 elastyczne

W oparciu o zawartoSC kom6rki Excel automatycmic stosuje kiIka typdw formatowank


liczbowego. Jdli przykhdowo za liczbq wstawisz symbol waluty (np. rf w prrypadku
Polski), Excel zastosuje f o n n a t o m i e liczbow-e Walrrlowe.

Formatowane stylu
Formatowanie stylu odnosi siq do forrnatowania stodomvlego w celu lepsago zapre-
zentowania wynikdw pracy. Wicle przycisk6w pask6w mzgdzi ofenlje bzpdredni
dostcp do czqsto W a n y c h opcji formatowanie, niezaletnie od tego, ay p m a n a n e
Rozdziat 2. + Program Excel w zarysie 5:

sq kombrki. obiekty gnficzne czy wykresy. Na przyklad w celu zmiany koloru tia ko-
mdrki. koloru wypelnienia narysowanego pola tekstowego lub koloru paska wykresu
motna u2yC pizycisku Kolur wypelnienio na pasku narzqdzi. Aby uzyskaC dostqp do
wszystkich opcji formatujqcych, nalety otworryC okno dialogowe Fornratowanie kattrdrek.

Najprostsza metoda ponvalajqca otworzyf wtasciwe okno dialogowe i sforrnatowac


obiekt polega na jego m a c z e n i u i wciinieciu kombinacji klawiszy Cnl* I. Moina tez
kliknqf obiekt prawym przyciskiem myszy i wybrac z menu podrecorego pozycjq For-
mattrj rrx, gdzie xa omacza wybrany obiekt. Operacja spowoduje wyiwietlenie okna
dialogowego z zaktadkami zawierajqcymi wszystkie opcje formatowania powiqzane
z zaznaczonym obiektem.

Funkcja formatowania warunkowego w Excelu jest szczegdlnie warto4ciowa. Uakryw-


niana poprzez wybranie z menu Format pozycji Formatowanie warunkowe. umotliwia
zdetiniowanie formatowania, ktdre zostanie zastosowane tylko wttdy, gdy bqdq spel-
nione okre4lone warunki. Na przykhd motna zdefiniowak, t e komorki, ktorych wartoti:
przekracza ustalony prdg, zostanq wyrbtnione innym kolorem.

Jak jut wcte9niej wspomnidem, W y arkusz Excela posiada niewidccq w a r s w rysun-


k o pnechowujqg
~ wykresy, mapy, obrazy, kontrolki (takie, jak przyciski i pola listy)
i ksztaity.
Bezpohdnio w arkuszu z latwdciq motna rysowad rdtnego rodzaju geomenyczne
ksztahy. co jest motliwe dzipki przyciskom paska nanpdzi Rysowanie. Ponadto istnieje
motliwofC grupowania obiektdw w pojedynczy obiekt; zgrupowane obiekty jatwiej
skalowat, btwiej tet zmieniak ich pototenie.

Kilka rysowanych obiektdw d g u j e na.dodatkowe ombwienie.


Autokatc2hy. Autoksztalty mogqbyt wstawiane przy W c i u przycisku Autohzfal~
paska narydzi Rysowanie. Dostppny jest bogaty asortyment ksnahow. Ksztak
umiestczony w arkuszu motna modyfikowac, przeciwjqc jego uchwyty. Motna
let stosowak efekty tr6iwvmiarowe. zastosowak cieniowanie i worowadzac tekst.

P d e fekriawe. Pole tekstowe urnodiwia wyiwietlenie tekstu, kt6ry jest niezalemy


od granic obszaru kolumn i wierszy.
Lqhe obrazu. Z jakiegoh powodu twdrcy Excela raczej utrudnili generowanie
obiektu lqcta obrazu. W tym celu nalety skopiowac zakres, a nastepnie z menu
Edycja wybraf p z yj p W e j iqcre obrmu (jest widoczna rylko po wciiniqciu
przycisku Sh@. Polcccnie Wkfejiqcze obrmu przydaje siq w pnypadku drukowania
zmaczonych zakmbw, ktore do siebie nie przylegajq. Motna wiqc wykonat
.,ob@' zakmdw. a nastppnie wkleik je w jednym miejscu i wydrukowac.
Kontroiki. Wiele kontrolek stwowanych w niestandardowych oknach
dialogowych motna umieszczai bezposrednio w arkuszu. Dzieki temu macznie
nviqksza sic ~ d a t n o i niektdrych
f arkuszy i eliminuje sie potrzebe twomenin
niestandardowych okien dialogowych.
52 Czqjc I + Podstowowe infonnacje

Rysunek 2.7.
Autoksztalty
w arkuszu

Diagram. Poqwszy od Excela 2002, motna wstawiat do arkusza nowy typ


obiektu o nanuie Dl agram. Aby wybraC jeden z szeSciu typdw diagrambw, nalety
z menu Wstaw wybraC pozycje Diagram. Po wstawieniu diagramu, za pomocq
paska narzfizi Diagrom moma wykonat na nim prose modyfikacje.

Wykresy
Excel ofetuje prrynvoite rnotliwoSci twonenia wykres6w, ale zdecydowanie wynika to
z dohego dopracowania tej funkcji. Jak ju2 d n i e j wspomniakm, wykresy mogq by6
albo pnechowywane w arkuszu wykresbw, albo swobodnie umiesnzane w nvyklym
arkuszu.
Najprostsza met& tworzenia wykesu polega na zaznaczcniu danych, k t h W a n %na
nim pokazane, a nastqpnie utyciu Kreutora w y k r e s h . W tym celu motna kIiknaC od-
powiedni pnycisk paska nanqdzi Standmdowy. Kreator wybesdw utwony wykres
speiniajqcy twoje oczekiwania, wykonujqc tp operacjp krok po kroku (rysunek 2.8).
M&a tct u w m y d ~ e s p r z ~ t u pokpmy
w ~ z tabdq pestam.Pny utyciu takich
sarnych metod, j& w prypadku tabdi przestamrej na wykesie przestawnyrn w postaci
gtaficznej motna jmzentowad rdtne zestawimia danych.
Excel umo2liwia dostosawanie wvluesu do wknvch w a e b . Jdli wkres iest swobodn~m
obiektcrn, w celu jega zaznaczeia wystarczy g i k l i k $ (aby wyGetlic! bkno dialogbwe
zawierajqce opcje formatowania wykresu, nalety kliknqt dwukrotnie). Klikni~ieprawym
pnyciskiem myszki elementu wykresu spowoduje wydwietlmie menu p o h c m e g o .

Makra i prograrnowanie
Excel oferuje dwa jqzyki programawania makr - XLM i VBA. Oryginafnie stosowany
jqzyk programowania makr XLM jest ju2 p m i zostd nts-jony przez jezyk
VBA. Excel 2003 nadal wykonuje wiqkszog makr XLM, z ktrkych rnoha'nadal korry-
stat, ale nie jest jut mottiwe ich rejemowanje. Aby stwony6 nowe makra, koniecme
jest utycic jpzyka VBA.
Rozdzial2. + Program Excel w zarysie 53

Ryrunek 2.8.
W celu
utworzenia wykresu
nale2y uW
Kreatora wykresdw

Trzecla cz@t tej ksiqtki zostala po9wi~najgrykowiVBA.

Dostep do bazy danych


Pmz lata wiqkszdd arkuszy kdkulacyjnych, w tym nawet oryginalna wersja prognunu
1-2-3, umdiwiala utytkownikom korzptmie z prostych tabel baz danych. Excel posiada
kilka przydatnych na&dzi bazodmowych.
B a y danych dostqple z pozimu arkusza kalkulacyjnego moha podzielit na bay ar-
kuszowe i bazy z e w n w .
Arkuszowe buzy danych. Cale b a a danych jest prrechowywma w arkuszu, przcz
co j ej wielkoft jest oganicwna. W Excelu baza tego typu nie mote zawieraC
wieccj nit 65 535 rekorddw (gdrny wiersz przechowuje nazwy @I) i 256 pbl.
Zewnqtmw bary danych. Dane q pmchowywane w jednym lub kilku plikach
dyskowych i udostpniant na adanie.

Arkuszowe bazy danych


Excel nvykle rozpoznaje, gdy wskahik kom6rki jest zlokalizowany w bazie danych.
i w m i w motliwofci wyhvietla nazwy p61. Jefli na pnykfad pnemieScisz w s k h i k
kom6rki w o b s a n e arkuszowej bazy danych i z menu Dane wybierzesz pozycj~Samj,
Excel umo2liwi okre3lenie klucy sortowania, co sprowadza siq do wybrania nazw p61
z lisry romijanej.
Szcag6lnit przydama jest funkcja Awofilb, kt6m umotliwia wyhietlenie tylko 2&-
nych rekord6w. Po uaktywnimiu funkcji Aufofltr dane mom byd filmwane poprzez
wybieranie wartoki z list mtwijanych (listy pojawiajq sic w miejscu nazw p61 po uy-
h i u z menu Done paycji Filrr, a nastFpnie Avrojiltr). Wiersze niespeiniajw kryteriow
q tymczasowo ulaywanc. Na rysunku 2.9 zaprezentowano przyklad.
54 Czqtc I + Podstawowe informcje

Rysunek 2.9.
Funkcja Autofiltr
pomala
pneglqdae
rekordy
b a q danych
spelniajqce
kryrena

Zwolennicy tradycyjnych metod wybierania zakres6w arkuszowych baz danych mogq


z menu Dane wybraf pozycjp Filtr, a nasqpnie Fihr imamowany.
Excel 2003 u m o W a przypisanle okre6lonemu zakreswwi roll llsty. W tyrn celu z menu
Dene nalety wybrd pozycjq Lista, a nastgpnie Utwdn /is@. Po utwanenlu listy jest
uaktywnlana funkcja Autofiltr, a Excel na k o k u listy wyfwietla wlersz podsumowujwy
(rysunek 2.10). Funkc]? podsumowanla, ktdra reczej nie jest zbyt interesujqca, moina
wybrab z listy funkcji (np. SUMA lub SREDNIA).

Rysunek 2.10.
Nowa funkcja
acela 2003
zwiqzana
z twoneniem
listy ufatwia
Identytika&
arkuszowej
bazy danych
Rozdziat 2. + Program Excel w zarysie 55

Zewngtnne bazy danych


Aby skonystaf z tabel zewn~trznejbazy danych. z menu Dane naleiy wybrac pozycjr
importr,i dane zewrretrzne. a nastepnie ~Vowakwerenda baql donych. Polecenie to uru-
chomi program Microsoft Query oraz urnozliwi wybranie baz danych i zdefiniowanir
kwerend. Wyniki kwerendy mogq bye skierowane do arkusza.
Za poirednictwem technologii DAO (ang. Data Accers Objects) i ADO (ang. .-lc!ive.t'
Data Objecfs) Excel ponvala tez na utywanie niezaletnych od niego obiekt6w danych.
Obie technologic umotliwiajq uzyskanie dostqpu do zewnetrznej bazy danych z rnakrz
VBA i dokonywanie w niej modyfikacji.
Aby mi& rnotliwoiC przetwarzania danych przechowywanych w korporacyjnej sieci
intranetowej lub w internecie. motna twonyf kwerendy sieci Web. Na rysunku 1.1 1
zaprezentowano pnyklad takiej kwerendy.

Rysunsk 21 1 .
T m e n i e kwerendy
skn' Web k n p
o m w
j
dane do arkusza

Funkcje internetowe
Ercel oferuje kika fhkcji inamaowych lstnieje na przyklad mdliwoSC zapisania arkusz?
lub caiego skoroqtu jako pliku HTML obstugiwanego pnez przeglqdarke interneto-.
Ponadto bezpogrednio w kornbrkach rnotna wstawiae hipertqcza (a takte adresy poczty
elektronicmej).
Pliki Excela mogq bye zapisywane jako pliki ETML z dodanq interakcjq. Funkcja ta opie-
rajqca sic na komponentach OWC (ang. QTce Web Component)umotliwia umieszczanie
na serwclzc WWW mtediymych skomzyt6w i udostgpnianie ich innym utytkownikam
(posiadajqcyrn licencje na komponenty OWC).
Aby uzyskd wisej informacji na ternat zapisywania plikdw w fomacie HTML, naleiy
B(=&d 0 &Z~&U 4.
56 Cz@C I + Podstawowe informacje

Funkcje zwiqzane z jezykiem XML


XML jest ogdlnie prtyjetym standardem umotliwiajqcym wymianp danych pomipdzy
r6tnymi aplikacjarni. lstnieje motliwo9C importowania zawartofci pliku XML i rnapo-

-
,c:*
- ,
j$
wania tych danych na okreJlone kombrki.
Funkcja ta jest dostepna tylko w wersji Professional Edition programu Excel 2003.

Aby uzyskaf wlwej informacji na temat funkcjl Excela 2003 zwiqzanych z j ~ k i e m


.n
(e / XML, naleiy zajrzeC do rozdziatu 4.

Narzedzia analizy
Pod wzgltdem rnotliwoSci analiy Excel z pewnohiqma sip czym pochwalib. W kodcu
wla9nie z tego powodu ukytkownicy k o n y s t a j ~z arkusza kalkulacyjnego. Wipkswg
zadafi analizy moze by6 realizowanych p n y utyciu formul, ale Excel oferuje r6wniez
inne narzpdzia.

Konspekty
Arkusz konspektu shrty do pratwarzania danych hierarchicmych, takich jak budtet.
Excel potrafi automatycmie generowab konspekt (poziomy, pionowy lub lqcqcy oba
kierunki), motna tet stworzyb go rqcznie. Po utworzeniu konspektu, w celu wyhvietlania
rirhych poziom6w szczeg6lowofci motna go nvijat i ronvijaC.

Automatyczne sumy cz+5ciowe


Exccl ponafi autornatycmie wstawiad d o tabeli b a y danych lub usuwae z niej fonnWy
obliczajqce sumy czeiciowe. Dodatkowo w oparciu o dane t w o q konspekt w taki spo-
s6b. t e widat tylko surny cz.$ciowe lub dowolny @any poziom szczeg6bwoSci. Na !

rysunku 2.12 pokazano kilka automatycmie obliczonych sum czpkiowych i powiqzany


z nirni konspekt. ..

Dodatek Analysis ToolPak


U c k An&sis ToofPak ofmje 19 specjalnych nanqdzi do analjr ( g h i e swyq.n-
nej) i wielc specjaliwwanych funkcji arkusza. N q d z i a te sprawiajg & Excel nadaje
sip do wykonywania sporadycznych analiz statystycmych.
Niektdre staty&pme funkcje Excela bywaEl nicdokladne w okndlonych sytuacjach.
Wydaje sie, ie te mstaly wyeliminawane w wersji 2003.
Rozdzial2. + Program Excel w zarysie 57

Rysunek 2.12
Excel mole
automatymle
wstawiaC fonnuw
obliczajqce
sumy c.~+Jclowe
1
konspeMy WlE -13 #co 5769
I))O 1Bfi 174l 1191
1?% 1- I224 4x3 1706 I l?Xl
1 ~ 9 ~ rm IIIO YII 16l7 1512 1m6
4722 1%~ in7 1x7,

SYW 5747 sari am 7m am mu


IIm lm 1155 JYI ls93 ICE2 1551
1- IIOH 1811 I914 I499 I941
1511 17U 1414 4 M I243 1493 1m
1- 1493 1211 LZU 1165 1013 1ra5
1973 1560 124, 4776 I 1115 1387,

7UI t?ZE *u llQ) Pi? (144


nln ~rn sim mn mni (1757

Ta bele przedawne
Jednym z najwydajniejs~ychi naj-iejszych &Exctla q tabele prrcstawvnc.
slu2qce do zcstawiania danych. Tabelp przcstawnq motoa pmtvmmd za pomoq j ~ k a
VBA lub modytikowaC przy u2yciu myszki. Dane pmchowywane w tabeli przcstawnej
pochodq z arkuszowj lub zewnpmej bazy danych i q urnieszczane w specjalnej pa-
rniqci e m c j urnotliwiaj&ej wykonywanie oblicteh natychmiast po modyfikbwaniu
za&ci tabeli pmstawnej. Na rysunku 2.13 pokazano tabelp prnstawna

TaDeIB
przes tawna
Excels ma dele
zastosowafi
58 CzefC I Podstowowe informocje

>-<- 4
Aby uzyskaC informacje na ternat rnanipulowanie tabelami przestawnymi przy uwiu
j~zykaVBA, nalety zajrzeC do rozdzlatu 17.

Dodatek Solver
Do rozwiqzywania specjalizowanych rbwnati liniowych i nieliniowych stuty dodatek
Solver Excela, ktbry w oparciu o kombrki zmieniane, komorki ograniczei i opcjonalnie
kombrki, ktbrych wartoid musi by6 jak najwiqhza lub jak najmniejsza, rozpatruje sce-
nariusze wamnkowe.

Dodatki
Dodatek jest programem do%czanym do aplikacji w celu poszerzenia zakresu jej funk-
cjonalnolci. Aby doiqczye dodatek Excela, z menu Narz&ia nalety wybrac pozycje
- do ~akietuExcel 2003, moma m .a t dodatkbw
Dodatki. Ovr6cz dodatkbw ddaczonvch
pobranych ze strony intemetowej Microsoftu. Dodatki opracowane p m z inne firmy moina
kuoiC lub vobraC za ~oirednictwcmich senvisbw internetowch. Poza tvm stworzenie
wbsnego dodatku jest bar& proste (wiccej na ten temat w rozdziale 21).

ZgodnojC wersji
Pocqwszy od Excela 97, kolejne cztery wersje aplikacji poshgujq sic takim samym
formatem pliku, dziqki czemu w ich przypadko zgodnolC plikdw nie stanowi pmblernu.
Jednak gdy tale@ ci na tym, aby plik by# zgodny z jesrcze wczeOniejszymi wersjarni
Excela, istnieje motliwolC zapisania skoronytu p n y utyciu slarszego formatu.

Ismieje r62nica p o m i w zgodndciq plik6w i zgodnokiq funkcji. Excel 97 co prawda


otworzy pliki stworzone przy utyciu pbiniejszych wersji aplikacji, ale nie jest w stanie
obs4ugiwad funkcji. ktbre zostaly dopier0 w tych wersjach wprowadzone.
Excel potrafi importawat d t n e pliki wygenerowane w irmych arkuszach kakulacyjinych I

i bazach danych (wivej na ten temat w rozdziale 4).

S A Aby uzyskl wive] informacji na tmrat zgodnoSci wenji, nalety zajrzd do rozdziatu 26.

Opcje ochrony
Excel ofemje kilka dtnych opcji ochrony. Moma na przyktad chronit s t d m r q skoro-
szytu i formuly pned nadpisaniem lub zmodyfikowaniem, a t a k e zabezpiecza6 haskm
kod j e y k a VBA i skoroszyt.
Rozdzial2. + Program Excel w zcrysie 59

Ochrona formut pned nadpisaniem


Aby ochronii Formute przed nadpisaniem lub zmodyfikowaniem, wykonaj nastepcjqce
kroki:
1. Zaznacz komarki, ktdre mogq zostaC nadpisane.
2. Z menu Format wybierz pozycj~Komdrki i kliknij zakiadkp Ochrona okna
dialogowego Formarowanie komorek.
3. W zakladce Ochrona wyiqcz o p c j Zablokuj.
~
4. Kliknij OK, aby zamknq6 okno dialogowe Formato,vanie komdrek.
5. Z menu Narzgdria wybierz pozycjp Ochrona, a nastqpnie Chrori arkusz.
co spowoduje otwarcie okna dialogowego Chronienie arkwza pokazanego
na rysunku 2.14. W przypadku Excela stanzego od wersji 2002 okno dialogowe
bpdzie mialo inny wyglqd.

Rysunek 2.14.
Okno dialogawe
Chronienie arkusza

6. W oknie dialogowym Chronienie arkusza w razie potrzeby podaj hado,


a nastppnie kliknij OK.

\SF**
W arkuszu chronlonym wszystkie korndrki sq dornySlnie zablakowane.

Pocqwszy od Excela 2002, opcje ochmny aplikacji sta4y sip macznie elastyczniejsze.
Okno dialogowe Chronienie arkma pomala okreilit, jakie elementy nie b@q podlegaly
ochronie. Motna wipc zemolit utytkownikom na sortowanie danych w chronionyrn
arkuszu lub na utywanie funkcji Aulofilh. (we wczcSniejszych wersjach wykonanie.ra-
kich zadait nie bylo matliwe). M o h a tet ukryt formuty, dziyki czemu uaktywnienie
komdrki nie powoduje uwidocmienia formuly na pasku formul Excela. W tym celu naleiy
zamaczyt kom6ki formul i upewni6 sip, czy w zakkidce Ochrona okna dialo,oowego
Formarownnie komdrek zamaczono opcjp U k y j .

Ochrona struMury skoroszyhr


Po uaktywnieniu ochrony struktury skoroszytu nie jest motliwe dodanic lub usuniwie
arkuszy. Aby wySwietliC okno dialogowe Chronienie skoroszytu pokarane na rysunku
2.15, r menu Nangakia naleiy wybrat pozycjq Ochrona, a nasrppnie Chron skoroqt.
60 Czeic I Podstowowe informacje

Rysunek 2.15.
Okno dlalogowe
Chronienie skoroszytu

Upewnij sig, czy jest wlqczona opcja Struktura. JeSli zostanie uaktywniona opcja Okna,
nie bqdzie motliwa zmiand wielkoici okna Iub jego lokalizacji.

Ochrona skoroszytu przy uiyciu hasla


W niekt6rych przypadkach u ~ k o w n i k o w imote zaletet na ograniczeniu dostppu do
skoroszytu tylko do o d b maj~cychhaslo. Aby zapisywany plik skoroszytu zabezpieczyd
haskm, z menu Plik naleg wybat pozycjp Zap& j a b , a nastppnie w oknie dialogowym
Zapisyuanie jako kliknqk przycisk Narz&zia i wybaf pozycjp Opcje ogdlne. Spowo-
duje to otwarcie okna dialogowego Opcje z a p i v n i a pokazanego na rysunku 2.16.

Rysunek 2.16.
Okno dialogowe
Opcje zapisywania
um2Ihvia
zabezpieczenie
haskm
pliku skoroszytu

Po wprawadzmiu hash kliknij OK. Aby o M l i t typ sq&owania, ktbre zostanie zasto-
sowane, nalety k l i k n ~pnycisk
t Zoowansowane.

Ochrona kodu jezyka VBA przy uiyciu hasla


Aby zabezpieczyk h a s h kod jeyka VBA zawarty w skorosycie, naleZy uaktywnit
edyror VisuaI Basicn, w oknie Project zamaczyC prajekt, a nastppnie z menu Tools wy-
brat pozycjq xra Properties, gdzie nxx odpowiada namie p r o j e h . Spowoduje to
otwarcie okna dialogowego Project Propertier.

e s klkpd
W oknie dialogowym P r o j e ~ t ' P ~nalety Protection {rysunek 2.17).
~aznaczytopcjq Lock projecrfor viewing, dwukrohie wpromdzit haslo. kliknqd OX
i zapisac plik. Po zamknipciu pliku i jego ponownym otwarciu, przed q s k a n i e m mot-
liwoici przeglqdnipcia kodu lub jego modyfikacji konieczne h d z i e podanie hash.
Excel tak naprawde nie jest bezplecmq apl1kq.q. Owszern, funkcje ochrony blokujq
prpadkowym u2ytkDrnlkom dostep do r6bych kornponent6w sk~roszytu.ale k.fdy.
kornu naprawde zalety na zlarnaniu zabezpieczefi. dokona ego, siqgajqc po tatwo
dostepne n a t z w a sMqce do tarnania hasel lub poznajp kilka "tajemnlc" Excela.
Rozdziat 2. + Program hcel w zorysie 61

Rysunek 2.1 7.
Okno dialogowe
Project Properties
umoMwia wtqczenie
ochrony projektu
j w k a V8A

System pomocy Excela


Jednq z najwatniejszych fimkcji Excela jest jego system pomocy. Gdy nie wiesz, co
dalej w b i f , wystarczy wpisat kilka st6w klucwwych w polu Wyszuk@ (znajduje siq po
prawej stronie paska menu Excela, a takte edytora Visual Busica). W panelu zadah 20-
stanie wySwietlona lista temat6w. Gdy klikniesz jeden z nich, jego zawartoit: pojawi s i ~
w oddzielnyrn oknie (rysuntk 2.18). Sq spore szanse na to, t e majdtiesz odpowiedf na
zadane pytanie. W ostatecznoki system pomocy naprowadzi c i t na wlafciwq droge.

Xysunek 2.18.
Panel zadatf
Wyswiem ternsty
pomocy, natorniast
ich zawattoe
jest pokazywana
w oddzielnym olmle

sz?lx
(-1u'J
Wwletlanle ternatdw wmocy w utyciu panelu zadari to nowoe acela 2003.
~&ertoff tematu pomocyjest pkazybana w oddzlelnym oknie. OczywiScie omacza
to, te obecnle system pornocy wymaga "*la dw6ch okien. Wedhrg mnie osoba.
62 Cz$SC: I + Podstowowe informacje

JeSli kornputer jest podlqczony do Internetu, smkane sbwa kluczowe zostanq uzupehione
aktualnymi tematami pomocy zamieszczonymi na stronie intemetowej Microsofiu. Aby
ograniczyc zakres wyszukiwania tylko do lokalnego systemu. nalety w polu Wy.~zztkq'
w dolnej czqsci panelu zadan wybrat pozycje Pomoc w tvbie Offline.
Wybrane zasady
stosowania formul
Prawie katda poprawna aplikacja oparta na arkuszu kalkulacyjnym korzysta z formul. Tak
naprawdp tworzenie formul mote byC traktowane jako odrniana .programowania.
- W ryrn
roldziale dokonam przeg1a.d~funkcji Excela powiqzanych z formujami i omdwie kiika
metod, Mbrych motesz jeszcze nie znaC.

OczywiScie dzieki fonnutorn arkusz kalkulacyjny jest tym, c y m jest. Bez forrnul by.tby
tylko statycmym dokurnmtem, kt6ry rdwnie dobtze m o m by uysM przy utyciu edyora
tekstu obshgujcpxgo tabele. Excel posiada bogaty zestaw wbudowanych funkcji i oferuje
wyjqtkowq obslugq nazw umieszczanych w formulach, a nawet formuly tablicowe (spe-
cjalny typ formuly wykonujqcy obliczenia, ktbre w przeciwnym razie bylyby niemotliwe).

Formula wprowadzona do korndrki mote sie skladaC z nas&pujwych dowolnych ete-


rnent6w:
operator6w takich, jak + (dodawanie) lub * (mnotenie),
D odwdah do komorek (w tym kombrek i zakresbw posiadajqcych nazwy).
liczb lub ~ c u c h 6 wtekstowych,
B funkcji arkusza takich, jak SUMA lub SREDNIA.

Formula mo2e zawierat maksymalnie 1024 znaki. W kornbrce, do ktbrej zostanie y m -


wadzona, uka2e sic wynik. Sama formula pojawia signs pasku formuiy po uaktywnieniu
komdrki.

W Excelu trybem domy?ilnym jest autornatycme i natychmiastowe obliczanie formui


wvrowadzonych do arkusza JeSli wiec zawartoSC komdrki u2ywanej prza formule zostank
Aieniona, formula samormmie Ggenemje nowy wynik. ~blic&jzicformu@ w tym
trybie, Excel korrysta z nastqpujqcych regui:
64 Czeic I + Podstawowe informacje

8 po dokonaniu miany, na przyktad po wprowadzeniu lub edycji danych bqdz


forrnd. Excel natychmiast oblicza forrnuly, ktdre sqpowiqzane z nowyrni
lub zrnodyfikowanyrni danyrni:
8 jeSli rnodyfikacja ma miejsce w trakcie wyhonywania ztotonych obliczeh, Excel
wstrzymuje je na czas realizacji zadan wynikajqcych z rnodyfikacji;
r forrnuly wykonywane sq w logicznej kolejnoici. Oznacza to, te jeili formula
zawana w komdrce D l 2 zale2y od wyniku forrnuly zdefiniowanej w komorce Dll,
kornorka Dl 1 zostanie~przetwononaprzed komdrkq D12.

Jednak czasarni ukytkownik powinien kontmlowat pmces obliczania forrnut. Na prty-


ktad w arkuszu zawierajqcym kilka tysipcy ztotonych fonnul automatycme obliczanie
bpdtie sip ciilgnplo w nieskonczonofc. W takim pnypadku nalety uaktywnit tryb rpcz-
nego obliczania. W tyrn celu nalety przejSc do zakladki Przeliczanie okna dialogowego
Opcje. Po wlqczeniu tego trybu Excel, jesli zidentyfikuje jakiekolwiek nieobliczone
formuty, na pasku stanu wyjwietli stowo Oblicza. Aby ponownie obliczyt forrnuly,
m o h a wcisnqc:
klawisz F9, co spowoduje obliczenie formui we wszystkich otwartych
skoroszytach;
r kombinacje klawiszy Shifr+F9, co spowoduje obliczenie formut zawarrych tylko
w aktywnyrn arkuszu -inne arkusze z tego samego skoroszytu nie zostang
obl iczone;
kombinacje klawiszy Ctrl+Alt+F9, co wyrnusza ponowne obliczenie wszelkich
forrnul. Postut siq niq, gdy z jakiegol powodu Excel niepoprawnie wykonuje
obliczenia lub gdy chcesz wyrnusit ponowne obliczenie formul korzystaj;lcych
z niestandardowych funkcji stwortonych p n y utyciu jpzyka VBA.
Tryb rqcmega obllczanla nie jest powiqzany z okradlonym arkwzem. Zrnieniony tryb
* obliczania brjdzie datyczyl wszystkich ohvartych skoraszytdw, a nie tylko aktywnego.

Odwolania do kom6rki Iub za kresu


WiqkszoSC formul odwduje sip do jednej lub kilku kombrek. Odwojanie takie mote by6
wykonane prty uzyciu adrcsu lub nazwy ljeSli jq zdefiniowano) komdrki, bq& zakresu.
Motna wyr6Znit cztery typy odwolah do kombrek:
8 Wzglebne. Tego typu odwoCanie jest calkowicie wglqdne. Po skopiowaniu
forrnuly odwojanie do kombrki zostanie dopasowane do jej nowej lokalizacji.
-
Pnyktad adwdania A l .
n Be-wg!edne. Tego typu odwolanie jest calkowicic bezwzglcdne. Po skopiowaniu
formuty odwolanie do kombki nie ulegnie zmianie. Przykiad odw&ia - SASl.
8 B m g i p d n e do wiersza. Tego typu odwolanie jest czqSciowo bczwzglpdne
(mieszane). Po skopiowaniu formuky c q S t kolurnnowa zostanie dopasowana,
natorniast cqSC wierszowa nie ulegnie zmianie. Pnykhd odwohnia -A S I .
Rozdziol3. + Wybrane zasady stosowanio formul 65

BmgIedne do kolumny. Tego typu odwdanie jest czeiciowo bezwzgledne


(mieszane). Po sko~iowaniuforrnuh. czeSC
. wierszowa zostanie dopasowana.
natomiast cz@C kolumnowa nie ulegnie zmianie. ~rzyktadodwdania - SAI.
Dornyslnie wszystkie odwoknia do kornorek i zakresbw sq wzglcdne. Aby zmienid typ
odwolania, konieczne jest c y m e dodanie symboli $. lnna metoda polega na umieszczeniu
- w trakcie edytowania zawartojci komorki w pasku formuly - kursora przy adresie
kornorki i wciskaniu klawisza F$ do momentu wybrania jednego z cnerech rodzajow
odwotan.

Dlaczego warto stosowaC odwdania, kt6re nie sq wzgledne?


Jedynym powodem. dla k t b ~ g ow og6le warto zmieniaC typ odwdania, jest zamiar
skopiowania formuly. Na rysunku 3.1 pokazano, dlaczego tak jest. Formula zawarta
w komorce C4 ma nastcpujqcq postat:

Ryrunek 3.1.
Pwad
zastosowania
w formule odwolafi.
Mdre nie 54 wzgledne

Rx+'y2~taformula oblicza powicrzchnie prostokqt6w o r62nej szerok05ci (wartoki


podane w kolumnie B) i dlugdci (wartoici podane w wierszu 3). Raz opracowanq for-
mutp motna skopiowaC do wszystkich kom6rek obszaru ograniczonego p n e z kombrki
C8 i F8. Ze wzgledu na to, t e formula w stosunku do wiersza 3 i kolumny B uQwa od-
wotafi bezwzglpdnych, natomiast dla pozostatych wierszy i kolumn odwdafi wzplqd-
nych, katda skopiowana formula generuje poprawny wynik. JeSli formula u2ywaiaby
jedynie odwdan wqIi$nych, jej skopiowanie spowodwatoby modyfikowanie wszystkich
odwdah, a tym samym uzyskano by nieprawid+oweretultaty.
s

Notacja W1 K1
Standardowo Excel posluguje sip n u t u q q ~ /w, pnypaclku kt6rej adrcs katdej kom6rki
sktada sic z litery kolumny i numeru w i e m , Jednak Excel obshguje te2 notacjg
W1Kl. W t - m przypadku kombrka A1 jest identyfikowana jako kombrka W I K I , kom6rka
A 2 jako W2K1 itd.

Aby pmjSC na notacjq W l K l , z menu ,Ymrt$zia nalety w y b d pozycje Opcje, a nastqpnie


kliknaj zakladkq Ogdlne i iramaczyd opcje Sod o M m i a W l KI.Po wykonaniu tej operacji
Iitery kolumn nnieniqsiq na liczby, a w ~ y n k i odwdania
e do k o d n k i m k r e s h =wane
w formuiach zostanq odpowidnio dostosowane.
66 Czgic I + Podstowowe informocje I

W tabeli 3. l wwarto kilka pnykhrli..* ' ych notacji standardowej i Nix!.


Przyjqto. t e formula 7 1 4 ' . '1.
Tabela 3.1. / notacji
Notncjn stnnd
-Al+l

Nie zdziu :st ona taka zfa w pny-


padku sto: sic odwotah wqlcdnych,
nawiasy k\

Liczby w r,-.,, hwaararowych odnoszq sip do wzglednego polotenia odwdan.


Pnykladowo zapis W[-5]K[-31 identyfikuje komdrkp majdujqcq sip pipe wiwszy powy2ej
i trzy kolumny na lewo. Z kolei zapis W[51K[3] odnosi sip do kom6rki pdotonej pied
wierszy ponitej i trry kolumny na prawo. JeBli nawiasy kwadratowe zostanq pominicte,
notacja dotyczy tego samego wiersza lub kolumny. Przykladowo zapis W[5lK odnosi sip
do kom6rki pdotoncj piet wierszy ponitej w tej samej kolumnie,

Przynajrnniej w jednym przypadku warto zastosowai notacjp WlK1, rnianowicie do wy-


chwytywania Mdnych forrnuL Katda skopiowana formula utywajqca notacji WlKl wyglqda
doktadnie tak samo, niezalemie od typu stosowanych odwolan do kom6rek (wzglpdne.
bezwzglqdne lub mieszane). A zatem m o m przetqccpi sip na notacjp WlKl i sprawdzii

skopiowane formufy. JeSli kt6rakolwiek r6hi siq od s@iadujqcych. z d q m paawdopo-


dobieristwem motna powiedziet, te'jest nieprawidtowa. Motesz tet dojfi do wniosku.
i e jeSli piszesz w jpzyku VBA kod generujqcy formu@ arkusza, zadanie b~dziehtwiejsze
po zastosowaniu notacji WlKl.

Odwotania do innych arkuszy tub skoraszyt6w


Odwotania do komdrek i zakres6w nie m u s q dotyczyc arkusza, w kt6rym znajduje sie
formuh. Aby odwdac siq do kom6rki w innym arkuszu, nalely p m d odwdaniem wpro-
wadzic nazwg arkusza i znak wykrzyknika. Oto pnyktad f o r n u b uzywajqcej odwolania
do komorki innego arkusza:

Motna tet utworzyt formub lqccty odwoiujqce sie do kom6rki w i ~ y mskomszycie.


W tym celu p m d odwofaniem nalcty wstawiC n a m e skoroszytu (w nawiasach kwa-
dratowych), n a m p arkusza i mak wyknyknika Oto pnyklad:
-[Budiet .xlslAr4uszl!A!+l
Rozdziat 3. + WySrane zosady stosowcnia formut 67

Uiycie tqczy do ptzywracania zawartoJci uszkodzonego pliku


Excel 2002 i 2003 oferuja funkcje wykfywajqcenaprawiajacq, ktora probuje naprawiC: uszkodzone
pliki. Jesli funkcja ta sie nie sprawdza lub jesli utyrvasz starszej wersji Excela, sprobuj zastoscwat
metode omiwiona poniiej.
Gdy nie jeste5 w stanie zaladowaC uszkodtonego pliku skoroszytu, rnoiesz s t w o r n forrnute tacza
przywracajacq wszystkie lub czqSE danych (jednak bez formul). Jest to rnoiliwe, poniewal olik
ir6diowy u w a n y przez forrnutq tqcza nie rnusi by6 otwarty. Jejii przyktadowo uszkodzony pliic
nosi name Zly_plik.xls, w celu prrywrcicenia danych z arkusza Arkuszl tego pliku nalej otworqd
pusty skoroszyt i w komirce A l arkusza Arkuszl wprowadzid nastqpujaca forrnute:
-'C \Pl?ki\[Z?y-plik.zls]&rkuszl'!Al
Z&glikxls jest namq uszkodzonego pliku skoroszytu. Aby pqwr6ciC jak najwiqksq ilofC inforracji.
w nowym skoroszycie naleiy skopiowae formute do komorek pdoionych poniiej i po prawej stronie
korn6rkl A l . Jednak lepszym rozwiazaniernjest wykonywanie kopii zapasowej waznych plikdw.

JeSli nazwa skoroszytu w odwohniu zawiera jednq lub kilka spacji, konieczne jesr umiesz-
czenie jej wraz z nazwqarkusza w pojedynczych znakach cudzyslowu. Oto przyklad:
-' CBudtet na rok 2003. xl slArkusz1' ! A l + l

JeSli skorosyt jest zamkniety, trzeba w odwdaniu wpisat jego pefnq Scietkp. Oto prqklad:
-'C:\MSOffice\Excel\[Budtet na rok 2003.~1s1Arkuszi' !Al+l
Co prawda odwdania formul lqczy mogq bye wprowadzane bezpoirednio, ale moina
teo definiowak je p n y utyciu standardowych metod wskazywania. Aby to bylo rnotliwe.
konieczne jest otwarcie pliku Mdlowego. Po jego otwarciu Excel utworzy bezwzgledne
odwohnia do kom6rek. Aby skopiowac f o r m u l ~do innych komorek, nalety zamienit je
na odwdania wqlpdne.

Przy korzystaniu z lqczy nalety zachowat osao2noit. JeSli na pnyklad w celu wykona-
nia kopii zapasowej lowe ego arkusza z menu Pfik wybierzesz pozycjp Zapis-. joko.
autornatycmie zostanq nnodyfikowane formuiy Iqczy, talc aby odwdywaiy sip do no-
wego pliku (zwykle nie na tym ci zalety). Kolejna sytuacja, w ktorej dochodzi do
uszkodzenia l v z y , ma miejsce, gdy jest mieniana nazwa ir6diowego skoroszytu, ale
powi-ny z nim skoroszyt nie wstal wczeiniej otwarty.

Zastosowanie nazw
Jednq z najpnydatniejszych funkcji Excela jest motliwoSk nadawania charakterystycz-
nych nazw r6tnym elementom (kom6rkom. zakresorn, kolumnom, wykresom i innyrn
obiektom). U n i k a t o q zaleq Excela jest motliwoSC nadawania nazw wartosciom lub
formulorn, ktore nawet nie m j d u j q sip w kombrkach arkusza (podpunkt ,,Nadawanie
nazw staiym" w dalszej czqsci rozdziaiu).

Nadawanie nazw korn6rkom i zakresorn


Poprzez wybranie z menu Wstuw pozycji Na-wa, a nastppnie Definiuj (lub poprzez rvci-
S n i ~ i ekomb.inacji klawiszy CfriW3) m o a a nadac n a m e kombrkom lub zakresom.
Jeszcze szybszy spos6b definiowania nanv polega na u v c i u lisry roiwijanej Pole ncn*?.
68 Czgic I + Podstowowe inforrnacje

poloionej po lewej stronie paska fomuly. Wystarczy wybraf komClrke lub zakres. wpro-
wadzit na liscie nowanazwe pola i wcisng Enter.

Aby w oparciu o tytuly wierszy lub kolumn arkusza automatycmie twonyt nazwy kombrek
lub zakresbw. z menu IVstmv nalety wybrat pozycjq Nu--a, a nast~pnieUtwdrz. Na ry-
sunku 3.2 zakresowi C3: F3 nadano nazwp Pdlnoc, zakresowi Cc: F4 nazwe Polzrdnie itd.
W pionie zakresowi C3:C6 nadano n a m e Kwartall, zakresowi D3:D6 nazwq KwnrtoI2 itd.

Rysunek 3.2.
Ercel upraszcza . .. . .
twonenie nazw d -*b;~ . a r ~:rragg-hcm_~S:*S.;i,-~-A-
bedqcych opisowyml
laricuchami
:_I

-.
u
A
-
-. B
~ 8
c I
5
-10

~
0.-; e F I G i-.H d !

Zastosowanie nazw jest s m g 6 l n i e istotne pny pisaniu kodu w jpyku VBA Wywajqcego
odwohli do kombrek lub zakresbw. Jaki iest terra - .pow6d? Po pnemieszczeniu kom6rki
lub m h e s u , do ktbrych odwohno sip w jnstrukcji jpzyka V B odwdania
~ nie sq auto-
matycmie uaktualniane. JeSli na p r q k h d kod jmka VBA q i s z e wartoSC w Range( "C4"I,
dane zostanq urniesznone w d e j kombrce, gdy M o w n i k wstawi nad korn6rkq C4 nowy
wienz lub kolurnnp po jej lewej stronie. Po zastosowaniu o d w o h i a do nazwy kom6rki
(np. Range("InterestRate")) uniknie sip potencjalnych problembw.

Nadawanie nazw istniejqcym odwdaniam


Excel nie zastosuje automatyanie nowej nanvy kom6rki lub zakresu w miejsce o d w m
majdujqcych sip w formdach. Dla przykladu zat6hny, t e w kom6rce F I O wstawiono

Jdli dla komorki A1 zdefiniujcsz nazwp Prvclrdd, natorniast dla kom6rki A2 Kwzty,
Excel nie dokona automatycmej zmiany formuty do postaci -Przychbd-Koszty. Jednak
zaskpicnie odwdan do kombrek lub zakres6w powiqzanymi z nirni namami jest doSC
prosqm zadaniem. Najpierw nalcty zamaczyt zakres, ktory zostanie modyfikowany.
Rozdziol3. + Wybrane zosady stosowania formut 69

Ukryte nazwy
Niektdre makra Excela i dodatki twonq ukryte nazwy. ZnaJduJqsiq one w skoroszycie, ale nie sq
widocme w oknie dialogowym Definiowanie nazw. Przyktadowo dodatek Solver tworzy kilka ukrytych
nazw. Zanvyczaj puwinny by6 one ignorowane. Jednak czasami ukryte n a y sq pnyczynq pre
blemu. JeSll skopiujesz arkusz do innego skoroszytu, w trakcie operacji zostanq tet uwzglednione
ukryte nazwy, ktdre mogq stworzyt lqcze bardzo trudne do wyklycia.
Aby usunqC ze skoroszytu wszystkle ukryte namy, rnoina pashr# siq poniiszym kodemJezyka VBA:
Sub DeleteYiddenNames( )
Dim n As Name
Dim Count As Integer
For Each n I n ActiveWorkbook.Nams
I f hbt n.Visible Then

-
n.Delete
Count Count + 1
End I f
Next n
MsgBox Count & " ukrytych nazw zostalo usunietych."
End Sub

Z menu W s t m naleky w y b d pozycjp Nmwo,a nasttpnie Zastmj. W oknie dialogowym


Stosowanie n m nalety wybrad nazwy, ktbre zostanq utyte, a nastppnie kliknqf OK.
Excel w zamaczonych kom6rkach w miejsce odwohn do kom6rek wstawi n a w .

Niestety nie istnieje metoda automatycmego wycofywania nazw. lnnymi sbwy, jeili
formula U r n nezwy, nie moha zarnienit jej na pawiqzane z niq odwohnle do komdrki
lub zakresu. Co gonza, jeSll zostanie usunigta nazwa zastosowana w formule, Excel
nie p w r 6 c i adresu komdrki lub zakresu puwiqzanego z nazwq. Zarniast tego zwrdcl
p0 postu blfl INAZ'dA?

W sk+addodatku M y Power LmNlty Pak (majduje sle na dokiczonym dysku CDROM)


wchodzl nangdde sprawdzajqce wszystkie forrnuly w zamaczonych komdrkach
i automatycznie zastgpujqce namy powlqzanyml z nimi adresami komdrek.

Stosowanie nazw z operatorem pneciqcia


Excel oferuje specjalny opeator nazywany operatorem przeciecia, stosowany do
przetwarzania zakredw. Operatorem tym jest znak spacji. Utycie nazw wraz z operato-
Ern pneciwia macznie upraszcza h v m n i e aommialych fonnul. Prryklad takich nazw
rnoma zobacyf na rysunku 3.2. Po wprowadzeniu do kombrki formuly:
-KwartalZ Poludni e

- uzyska sip wynik 440 majduj4cy sic na sknytowaniu -6w Kwarfal2 i Poludnie.
Aby uzyskak sum? dla obszaru Zuchdd. nalety uzyC formu@:
-SUMA( Zach6d)
70 Czest I Podstowowe inforrnacje

Nadawanie nazw kolumnom f wienzom


Excel umotliwia tet nadawanie nazw wierszom i kolumnom. W poprzednim przykta-
dzie nanva Kwartall zostata nadana mkresowi C3:C6. Altematywnie nazwa K~vartall
moghby zostad przypisana catej kolumnie C, nazwa KtvarraU kolumnie D itd. Tak samo
motna postapit w pnypadku wierszy. Wierszowi 3 m o a a nadad nazw? Pdinoc, wier-
szowi 4 name Poludnie itd. Operator pneciqcia spehia t a b samq funkcje jak powytej, ale
teraz bez koniecznoici modyfikowania istniej~cychnazw motna dodac wiecej regionljw
lub kwartalbw.

Po nadaniu nazw kolumnom i wienzom nalety pamiqtat, aby nie umieszczac w nich
tadnych zewnttmych informacji. Nalety mieC SwiadomoSt, Ze na przykfad po wsta-
wieniu wartoici w kombrce C7 zostanie ona uwzglpdniona przez zakres Kwartall.

Obszar obowiqzywania nazw


Nanvana kom6rka lub zakres zwykle mogq by6 stosowane w calyrn obszarze skorosqtu.
lnnymi skwy, nazwq motna posh~i?yesic w dowolnym arkuszu skoroszytu.

Kolejna motliwoSC polega na stworzeniu nazw obowiqzujqcych na obszarze arkusza. W tym


celu nalety zdefiniowat n a m e poprzez wstawienie przcd niq nanvy arkusza i znaku
wykrzyknika, na przyklad Arkuszl!Sprzedat. JeSli nazwa zostanie utyta w arkuszu,
w ktbrym jq zdetiniowano, ptzy odwdywaniu siq do niej rnotna pominqd identyfikator
arkusza Lista nazw obowiqmjqcych dla takiego arkusza mstanie wy5wietlona w oknie
dialogowym Dejiniowanie nam, tylko wtedy, gdy arkusz bqdzie aktywny. Jednak do
nazwy obowiqujqcej w okreSlonym arkuszu mokna odwofywat sic z innego arkusza.
umieszczajqc ppred niq identyfikatora arkusza.

Jclli zdecydujesz siq -6 nazw obowizgujqcych jednoczeinie na obszam skoroszytu


i arkusza, konieczne jest dobre nozumimie takiego wariantu W pncciwnym razie mo;lesz
spodziewat siq niespodzianek, gdy nazwy nie bpdq odwoiywat sic do tego, do czego
powinny.

I
Nadawanie nazw statym
Prawie katdy dolwiadczony utytkownik Excela wie, w jaki s p o d b utwonyC nazwy dla
komdrek tub zakredw (chociat nie wszyscy korzystajq z tej motliwobci). Jednak wigk-
szosd uQtkownik6w Excela nie wie, t e za pomoca nazw m o h a odwdywad sie do
wartolci, kt6re nie wystppujq w arkuszu. Mam tu na mysli stale.

Zal6bny. Ze wiele forrnut arkusza wymaga zastosowania okrellonej stopy procentowej.


Niektony wprowadzq wartoSt stopy procentowej do komorki i nadadzq jej nazwq takg
jak STOPA, dripki czemu bqdq mogli u2yc jej w formutach. Oto przykhd formuly ko-
nystajqcej z nazwy STOPA:

lnne rozwiqzanie polega na otwarciu okna dialogowego Definiowanie narw i wprowa-


dzeniu wartoici stopy procentowej bezpojrednio w polu Oa'woluje sic do (rysunek 3.3).
Rozdziat 3. + Wybrane zosady stosowania formui 71

Rysunek 3.3.
Excel umoiliwja
nadawanie n a m
stafym.
ktdie nie znajdw.4 sip
w komdrkach arkusza

Po wykonaniu tej operacji w formu+ach motna u w a c nazwy, tak jakby powiqzana z niq
wartoif byta przechowywana w komorce. JeSli wartog stopy procenrowej ulegnie zrnianie.
wystarczy zmodyfikowaf definicjc nazwy STOPA, po czym Excel uaktualni wszystkie
kombrki jq zawierajqce.

Nawiasem mbwiqc, metoda ta sprawdza sie tet w przypadku tekstu. Przyktadowo


motna zdefiniowae nazw PKP. bedqcg skrbtem od Polskie Koleje Paristwowe.
a nastepnie wprowadzid w komdrce -PKP, co spowoduje wyswietienie w niej pehe!
nazwy.

Nadawanie nozw formulorn


W cclu pnypisania nanvy formule m o h a wprowadzid jq bezpolrednio w polu O&ohje
sic do okna dialogowego DeJiniowanie n a w . Wprowadzona formula postuguje sic odwda-
niami do komorek wzglqdnymi w stosunku do komorki aktywnej, ktora pmechowuje
formute. Je91i jcdnak w trakcie tworzenia forrnuly w celu wskazania powiqzanych z nia
kombrek utyjesz myszy, odwohnia bpdq bezwzglpdne.

N a rysunku 3.4 pokazano formule (-AIAfll), ktbra zostala bezpo5rednio wprowadzona


w polu Ohvduje siq do. W tym przypadku kombrkq aktywnq jest kombrka C1. dlatego
formula odwduje sic do dw&h kom6rek znajdujqcych sic z jej lewej strony. Odwojania
do kom6rek sa. wzglcdne. Wprowadzenie zdefiniowanej nanvy do kom6rki ( - P o t ~ a ?
spowoduje podniesienie wartosci kombrki majdujqcej sic dwie komdrki na lewo od niej

0dwo)ania ,jmka natutalnsgo"


Poczqwszy od Excela 97, istnieje moiliwo5C tworrenia pny u j c i u "jpzyka naturalnego" formui
korzystajqcych z etyklet wierszy i kolumn. W rreczywisto5ci nie jest koniecme definiowanie e v
kiet, poniewat Excel identyfikuje je automatycznie. Takie pseudonamy motna tqczyf za wmocq
operators pmxiwia, czyli znaku spacji. Pnykladowo mozna zdefiniowd nastepujwq formule:
-5:yczefi Sptzedaz
Excel wygwietli wartog na p t z e c i ~ i ukolumny o etykiecie Sprreda2 i wiersza majqcego etykiet~
Styclerf.
Co prawda, takie rozwi@zanie mote by6 wygodne, ale sugeruje jego unikanie. Stosowanie pseu-
donam jest niepewne i trudne do udokumentowania. Poza tym nie moina ich ulywaC w kodzie
jezyka VBA. Gdy funkcja ta pojawila sie po raz pierwszy. Microsoft zachvat do jej ujcvanis.
podkreSla]qc d u a tatwo5f korrystania z niej. Obecnie Microsoft umniejszyl znaczenie tej fur.kc.ii.
ktdra domydinie jest wytqczona. W celu jej mczenia w zaktadce Prrelicranie okna dialogowego
Opcje, naleiy zaznac* OPCje Akceptuj eiykiefy w formulach.
72 Czgic I + Podstawowe inforrnacje

Rysunek 3.4.
~MoinanadaC
name formule,
ktdra nie wystepuje
w iadnej komdrce
~lrkusza

do potcgi bpdqcej wartofciq komorki bezpoSrednio z niq sqsiadujqcej. Jefli na pnyklad


kombrka B10 zawiera wartosf 3, natomiast kornorka ClO wartoit 4, wprowadzenie for-
muiy do kombrki Dl0 spowoduje nvr6cenie wartosci 81 (3 podniesione do 4, potqgi).

Gdy po nadaniu formule nanvy otworzysz okno dialogowe Definiowanie nnnv. w polu
Odwoluje sic do zostanie wyfwietlona formuta wzglqdna w stosunku do aktywnej ko-
morki. Jefli na pnyktad komorkq aktywnq jest kom6rka 032, w polu O h v o h ~ esic do
pojawi sip nastppujqca formuta:
=Arkuszl! 83ZAArkuszl!C32

Excel w odwdaniach do kom6rek stosowanych w formule urnieszcza nazwq arkusza.


Oczywi4cie spowoduje to, t e nazwana formuta wygeneruje nieprawidlowe wyniki. jefli
nie zostanie uzyta w arkuszu, w ktdryrn jq zdefiniowano. Aby zastosowaf nazwanq
formulq w arkuszu innym n i t arkusz Arkuszl, trzeba usunqd z niej odwdania do [ego
arkusza (pozostawiajqc jednak znak wyknyknika). Oto przyklad:
-!AI-!Bl

Nadawanie nazw formulorn przynosi korzySci w niektdrych s p c j a c h . Aby na pnykhd


zmodyfikowak nazwanq formulq, nie trzeba edytowat katdcj jej kopii - wystarczy
zrnienik definicjp zawartq w polu Ohuoluje sie do.
Na ddqczonym dysku CDROM majduje sib skoroszyt prezentu]qcy kilka przykladdw
zastosowania nazwanych Tormul.

Klucz do mzumienia n a m komdrek i zakreadw


Uiytkownicy Excela czesto uiywajq termindw nazwane zakresy i nazwane komdrki. Faktycmie
sam czesto sie nimi poslvgiwatem w niniejsrym rozdzlale. WlaSciwie oba terrniny nie sq zbyt
precyzyjne.
Gdy nadajesz nazwe kom6rce lub zakresowi, wlakiwle definiujesz nazwanq formulg. kt6ra maj-
duje sie nie w kornbrce. ale w pamivi Excela. Gdy korzystasz z okna dlalogowego Deliniowanie
nazw, pole Odwoluje sie do zawiera formute, natomiast w polu Namy w skoroszycie majduje si?
jej nazwa. ZawartosC pola Odwotuje sic do zawsze romczyna sie od znaku -, M61y identyfikuje
formub.
Nie jest to moie a i tak zaskakujwe odkrycle, ale zapoznanie si? 2 p0wy2~zqinforrnacjq moie
porndc w uozurnieniu, co sie dzleje w tle podczas twortenia i stosowania nazw w skorosrytach.
Rozdziat 3. Wybrone zasady stosowania forrnut 73

- Nadawanie nazw obiektom


Nazwy motna let przypisywaf takim obiektom, jak wykresy i ksnalty. Dzieki temu ta-
twiejsze mote by€ odwolywanie sic do tego typu obiektdw, z w b z c z a gdy ma to miejsce
w kodzie jqzyka VBA. Jednak naleiy parniqtaC, t e polecenie Dejinit,j zawarte w podmenu
Nmva menu N~tmvdziala tylko w przypadku komdrek i zakres6w i nie pozwala nadawac
nazw obiektom. Jedyna rnetoda zmiany nazwy obiektu niebpdqcego zaknsem polrga na
utyciu pola Pole nu--rwy znajdujqcego siq po lewej stronie paska formuly. Wystarczy za-
znaczyc obiekt, wprowadziC w polu Pole n e w y nowq nazwq i wcisnq? Enrer.
JeSll po wprowadzeniu nazwy w polu Pole nanvy kllknlesz w innym miejscu skoroszytu,
nazwa nle zostanie zachowana. Konieczne jest wcifnlwle klawisza Enter.

Bledy formul
C z p t o po wprowadzeniu formuty uzyskuje sip Mqd. Formu5 mogq zwrbcif wartote
blpdu, gdy komdrka, d o ktbrej sip o d w o h j g zawiera nieprawidlowq wanof€. Okresla
sic to mianem efekrufalowego, ktdry polega na tym. te pojedyncza wanoff Mpdu za-
warm w korn6rce mote spowodowaf wystwienie Mqdbw w i ~ y c hkomdrkach p n e -
chowujrlcych formuly odwotujqce siq do tej kombrki. Pasek nanqdzi lnspekcjo formul
zawiera narz$dzia pomocne p n y identyfikacji irddla blqddw. W tabeli 3.2 zamieszczono
typy wartoSci bl$d6w, ktdre rnogq pojawiC sip w komdrce zawierajqcej formu+?.

Tabela 3.2. Wartogcl MeQdw w Excelu

Wartoit blpdu Objdnienle


-

$DZIEL/O! Formula spr6bowata wykonat dzielenie przez zero (na n a m j planecic jest to operacjn
niedonvolona). Blqd taki wystwi te& gdy formula spr6buje dokonab dzielenia p r z a
pustq kombrkp.
#N/O! Fonnula odwdda sip ( p o k l n i o lub bezpohdnio) do kom6rki u+vaj~ej funkcji
arkuszowej B M K stwierdzaj4cej nicdostqpno% danych. B I d #ID! jest tet nvlncany u r n
funkcjp WYSZUW. kt6ra nie mote zlokaliwwaC wmo9ci.
#NnZWA? Formuh utyws narwy, ktbnj Excel nie rozpoznaje. Taka sytuacja mote mieC miejscc,
gdy usuniesz n m p uzywanqw fonule lub gdy w teldcie brakuje jtdnego ze makbw
cudzystowu. Formuh m o k wygenerod ten blqd tak2e w6wczas, gdy korzysta z funkcji
dodatku, kt6ry nie wstal zainstalowany.
#ZERO! Formda korzysta z przecir;cia dw6ch zakredw, kt6re faktycmie siq nie przccinajq.
Zagadnienie ombwiono wczeiniej w niniejszym rozdziale.
#LICZSA! Wystwit problem zwivany z argumentem funkcji. Przykladowo funkcja PIERUIASTEK
urbbuie obliczyt pienviastek kwadratoww dla liaby ujemnei. Taki bid wystlpi tez
idy obliczonawarrofd jest rbyt duta lubzby mat; ~ x c c nie
l obslugu~ew-art&ci rotnych
od zera mniejszych od LE-307lub wi~kszychod 1E+308.
#ADAOR! Formula odwoluje sir; do nieprawidlowej kombtki. Taka sytuacja mo& mi& rnicjsce,
gdy komdrka zostmic usunipta z ark-
#A% ! Formula utywa nie.vl&iwcgo typu argumentu. Argument jest wartdciq lub odwolaniem
do kodrki uiywanym pnez fomutp pmy o b l i m i u wyniku. TJki bt# mozt wysqpic, gdy
formula utyjc niestandardowej funkcji arkusn nqisanej w j w h VBA k r b n w i m b i d .
74 Czeit I + Podstawowe informacje

Forrnuly ta blicowe
Tubiica jest prostym zbiorem komdrek lub wartolci przetwarzanych grupowo. Formz~trr
rablico\va jest specjalnego typu formulp obslugujqcq tablice. Formula tablicowa mote
wygenerowad pojedyncy wartoSC lub wiele wynikow, z ktdrych katdy jest wyiwietlany
w oddzielnej komdrce, co wynika srqd, t e Excel mote w kom6rce wstawic tylko jednq
wanoSC.

Pnykladowo efektem mnotenia tablicy I x 5 przez innq tablice 1 x 5 k d z i e trzecia ta-


blica I x 5. lnnymi slowy, wynik tego typu operacji zajmie pip6 kombrek. Katdy ele-
ment pienvszej tablicy jest mnotony przez adpowiadajqcy mu element drugiej tablicy.
W wyniku opencji uzyska sip pied nowych elementdw, z kt6rych katdemu zostanie
przydzielona wlasna komorka. Ponitsza formula tablicowa mnoty wartoici zakresu A1 :A5
przez oapowiadajqce irn WartoSci zakresu 61 :65. Taka formuh tablicowa jest jednoczeinie
wprowadzana do piqciu kombrek:
-A1 :A5*81: 85

i*:- Aby wprwadziC form* tablicokq, nalety WisnqC komblnacje klawlszy M+Sh/ft+Enter.
Aby przypornnieC u&tkownikowl, t e okreSlona forrnuta jest fomutq tablicowq. Excel
urnieszcza jq w pasku formufy w nawiasach klarnrowych ({I). Nie wprowadzaj sarnernu
takich nawias6w!

Przyklad formuly tablicowej


Fomuly tablicowe Excela umotliwiajp wykonywanie na katdej kom6rce zaknsu poszcze-
gdlnych operacji w prawie taki sam spos6b, jak pqtla jezyka programowania pozwala
przetwarzak elementy tablicy. JeJli nigdy wczesniej nie u2ywateS fonnul tablicowych.
w tym podpunkcie zapomasz siq z nirni dzieki przytoczonemu pnykbdowi.

Na rysunku 3.5 pokazano arkusz, w kt6rym w zakresie A1 :A5 wprowadzono tekst Celern I
Cwiczenia jest stworzenie pojedynczej formuly nvracajqcej po zsumowaniu calkowitq
liczbp znakbw zawartych w zakresie. JeSli nie byloby wyrnagane stworzenie jednej
!
formuly, wynik motna by uzyskaC po zdefiniowaniu fomuly utywajpcej funkcji DL,
przekopiowaniu jej do kolejnych kom6rek kolumny, a nastepnie zastosowaniu funkcji
SUHA w celu zrumowania wynikbw zwr6conych przez poirednie fonnuv.

Aby zadernonsmwaC, w jaki spos6b formula tablicowa mo2e zajrnowat wiecej ni2 jednq
komdrkq, stworrykm arkusz pokazany na rysunku 3.5, po c y m wykonajern nastqpujqce
kroki:

2. Wprowadzikm formule:

3. Wcisnqkrn kombinacjp klawiszy CtrI+Shifl+Enrer.


Pojedyncza formula tablicowa zostah wstawiona do pipciu kom6rek. Dodatkowa fonnuh
oparta na funkcji SWA zsumuje wartoSci zakresu B1:85, dajqc y n i k 21.
Rozdziol3. Wybrane zasady stosowonio formul 75

Rysunek 3.5.
Komdrka 61 zawiera
formu& tablicowa
obliczajaca
cajkowita liczbq znakdw
z zakresu A1:A5

A teraz najwatniejsza uwaga. WlaSciwie nie jest konieczne wySwietlenie tych pieciu
. elementdw tablicy, poniewat Excel mote pnechowywai tablic~w pamieci. Wiedqc o em,
do dowoinej pustej kombrki mo2na wprowadzit ponibzq fomulq:

- a nastcpnic wcisnqd kombinacjp klawiszy C~rl+Shifr+En:er.Formda zostanie by-


iwietlona na pasku fomul w nawiasach klamrowych (rysunek 3.5):

PowyBza forrnuta twony piecioelementowq tablicp (umieszczonq w pami~ci)pne-


chowujqcq dlugoft ka2dego lahcucha z zakresu A 1 :A5. Funkcja SUMA utywa tablicy jako
swojego arg&entu. wynikiem m c a n y m przez formutt jest wartosc 21

Kalendarz oparty na formule tablicowej


Na rysunku 3.6 pokazano arkusz wyiwietlajqcy kalendarz dla jednego miesiqca. Mo-
tesz wierzyf lub nie, ale kaiendarz stwornno przy utyciu jednej fonnuJy tablicowej
zajmujqcej 42 kombrki.

Na cbtqczanym dysku CDROM majduje siq skoroszyt z kalendarzem, a takie kilka


dodatkowych pnyktadbw zastosowania formut tablicowych.

Zalety i wady fonnuly tablicowej


Moma wymienit nastqpujqce zalety stosowania formu# tablicowych zamiast formuf
jednokomorkowych:
czasern zajrnujqmniej pami~ci.
macmie poprawjajq wydajn&c pracy.
pozwalajq wyeliminowad formuiy poiednie,
76 CzgSc I + Podstawowe informacje

Rysunek 3.6.
Jedna
formula tablicowa
viystarczy
do shuorzenia
kalendarza
dla dowolnego
miesiaca
dowolnego roku

umotliwiajq wykonywanie operacji, ktdre w przeciwnyrn razie byiyby m d n e


do zrealizowania lub niernotliwe (na przyktad fonnuly tablicowej motna utyC
do wykonywania obliczen opartych na wielu kryteriach, o czym pisze w nastqpnym
punkcie).

Oto kilka wad fomul tablicowych:


czasami macmie wydlutajqczas wykonywania ponownych obliczen w arkuszu
kalkulacyjnym,
sprawiajq, t e stwonony arkusz mote byC m d n i e j s y do mzurnienia dla innych,
konieczne jest parnietanie o zatwierdzaniu formu9 tablicowej poprzez wcifnipcie
kombinacji klawiszy Ctr[+Shift+Enrer.

Metody zliczania i sumowania


DoSC duto czasu spqdzam na czytaniu arlykulbw z internetowych grup dyskusyjnych
poSwitconych Excelowi. Wiele pytali pnesylanych do tych p p dotyczy zliczania lub
sumowania rdtnego typu komorek. Probujqc udzielit na nie odpowiedzj, zamieszczarn
w tym rniejscu kilka pnyklad6w formu1 dokonuj&cych rbtnych obliczeh. M o a a je
oczywijcic dostosowywaC do whsnych potrzeb.

Zastosowanie funkcji LICZ.JE~ELI


lub SUMA.JEZELI
Poniewat pneznaczenie knkcji Excela takich, jak SUVA, ILE. LICZB, ILE. NIEPUSTYCH
i LICZ.PUSTE jest doSC oczywine, pominp je i zajrnq sie od ram omdwieniern przydat-
niejszych funkcji L I C Z . JEZELI i SUMA.JEtEL1.
Rozdziat3. + Wybrane zasady stosowonia formut 77

Funkcja LICZ .JEZELI pobiera dwa argurnenty:


M zakres przechowujqcy dane. ktore zostanq zliczone,
M kryteriurn stosowane do okreilenia, czy kornorka zostanie uwzgledniona
prty zliczaniu.
Funkcja SUMA. JE2ELI pobiera trzy argumenty:
zakres, kt6ry nalety oszacowat,
m kryteriurn sk2qce do okreiknia, czy kornbrka zostanie uwzglcdniona
przy sumowaniu,
zakrcs zawierajqcy sumowane dane.
W tabeli 3.3 zadernonstrowano r d h e zastosowania funkcji LICZ.JEZEL1. W uZytych
fonnuhch prryjcto, t e stosowany zakres nosi nanvq dane. W formutach koniectne bdzie
zastapienie tej n a y nazwq rzeczywistcgo zakresu lub jego adresem. D ~ g argument
i
hnkcji LICZ. JE~ELImote by6 odwoianiern do komdrki zawierajqccj krytcrium wyszu-
kiwania.

Tabela 3.3. Pnyklady wswh zastosowarl funkcji LICZ.J~ECI

Formula Zwrncann wartoif


-LICZ.J€2iLI(dane: 12) Liczba kombrck tawierajqcych wart096 12
-LICZ.JEtELI(dane: l)*LICZ.JEtELI(dane: 12) Liczba kombrek zawierajqcych wart096 1 lub I2
-~iCZ.J€tELI(clane: "<O') Liczba kombrck zawierajqcych wartode ujemnq
-~lcZ.JEtELI(dane: "00') Liczba wartofci r6mych od zera
-LICZ.JEtELI (dane: "-1'1 -LIU .JL!ELI(dane: ">lo") L i a b a kom6rck zawicraj&cychwartdC z pmcdzialu
od I do10
Liczba kom6rek zawinajqcych slow tak
(wielkoft makbw nie jest rodtniana)
..
-LICZ.J€2ELI(dane: "*'I Liczba kombrck zawierajqcych dowolny ld~cuch
Liczba kombrck zawierajqcych litere s
(wielkoX makow nie jest rozr6:niana)
+ICZ.J€2ELI(dane: "???'I Liczba ntylitcmwych slbw

Zastosowanie forrnul tablicowych do zliczania i sumowania


Jejli M a zt standardowych metod zliczania nie spelnia twoich oczekiwad, mozesz
stwonyt formu+ tablicawm( (pipoznaj sip z zawartoiciq punktu ,,Fomuly tablicowe"
zarnieszczonego wczegniej w roodziale). Nic zapomnij o tym, aby po wprowadzeniu
formuly tablicowej wcisnqt kombinacjq klawiszy C~rl+Shg+Enrer.

Aby o w l i t liczh w d i numerycmych (pomijajqc hicuchy tekstowe i puste ko-


mbrki), nalety poshkyt sip formulq
78 Czgit I + Podstowowe inforrnocje

Aby okreSliC liczbe korn6rek zawierajqcych wartoSC Medu, nalety utyC ponitszej formuly
tablicowej:
-SUMA(JEtELi(CZY .Bt(dzne! i l . 0 ) )

Aby okreSliC liczbp unikato~vychwartoici nurnerycmych (pornijajqc tekst: puste korndrki


sq niedozwolone), nalety utyC nastcpujqcej formuty tablicowej:

W tabeli 3.4 pokazano kilka przykladbw form& tablicowych opartych na arkuszu


przedstawionyrn na rysunku 3.7.

Tabela 3.4. Zlozone fomufy tablicowe oparte na funkcji SUMA

Formula tablicowa Zwraeana wnrtdf


=SUMA( (A2:AlO-"Sty")*(B2:BlO~"Pblnoc")
*C2:C10) Miesiqc - "Sty" i Region -
Suma wartoici kombnk zakresu Sprzedai. dla kl6rych
"P6lnocU
-SUMAt (A2:h10-"Sty")*(B2:B1O~'P6lnoc")
*C2:ClO) -
Suma wartosci kom6rak zakrcsu Sprzedat, dla kt6rych
Miesiqc "Sty" i Region 0 "F61noc"
-SUMA( (A2:AlO-"Sty" )*(B2: BlO-"Pblnoc"))
Miesiac - "Sty" iReglon -
Liczba kombrek zakresu Sprzedai. dla kt6rych
"P6lnoc"
-SUMA( (A2 :AlO-"Sty" )*((82:BlO-"PbInoc')+
(02:BlO-"Paludnie"))) Region -
Liczba kom6rek zakresu Sprzedat, dla ktbrych
"P6lnoc" lub "Poludnie" i Miesiqc - "Sty'
-SUMA( (A2 :AlO-"Sty" )*(C2: ClOr200)
*(CZ:ClC)) Miesipc -
Sums wartohi kombrck takresu Sprzedat, dla k-tbrych
'Sty" i Sprzedai >- 200
-SW((C2: C13~-30O)*(C2:C10<-400) Soma wartoSci kom6rek zakresu Sprzedat zawienjqcych sic
'tC2:ClO)) w pradziale od 300 do 400
-SVMAl(CZ: ~10~-300)*(~2:~10~-400~1 Liczba kom6rck zabesu Sprzedat, kt6rych wart036 zawiera
sic w pnedziale od 300 do 400

Rysunek 3.7.
Ta pmsta b a a d a w h
demonstmje
kilka przydatnych
diczajqcych
i sumujqcych
formut tablicowych

Skoroszyt zawierajqcy f m u t y pokazane w tabeli 3.4 znajduje sie na ddQzonym


4 . k ~CD-ROM.
Rozdzial3. + Wybrane zasady stosowanio forrnut 7?

lnne narzqdzia zliczajqce


Funkcja LICZ .JESELI jest przydatna, gdy stosuje sic jedno kryterium zliczania. W p r q -
padku bardziej zloionych pordwnan motna u t y t funkcji ED. ILE.REKWDGW.Aby z niej
skorzystac, konieczne jest uporza.dkowanie danych w formacie bazy danych (z nnzwami
p61 w pierwszyrn wienzu), a takie zdefiniowanie oddzielnego zakresu spelniajacego
funkcjp kryteriurn zliczajqcego. Zakres spelniajqcy funkcje kryterium przy utyciu du-
datkowych wierszy mote Eet obslugiwaf operacje logiczne wykorzystujqce operator i33.
Aby uzyskat w i ~ c einformacji,
j nalety zajrzet do systemu pomocy.
Funkcja SUM.POSREDNIEmote bye bardzo przydama, gdy trzeba okrejlid liczbq wierszy
przefiltrowanych przy utyciu funkcji Aurofilrr. Pienvszy argument hnkcji SlWY .POSREDNIE
okreila typ funkcji wykonujqcej operacjc obliczania sum czqsciowych. kgument o wanosci
3 reprezentuje hnkcjp I L E . NIEPUSTYCH. kt4ra zwmca liczbp widocmych komorek zakresu.

Ostafecma rnetoda z1iczani.a opiera s i na


~ tabeli przestawnej. Jefli nie rnasz doswiadczenia
z e g o typu tabelarni, oznacza to, i e nie korzystasz z jednego z najwydajniejszych narzedzi.

Uiywanie daty i czasu


Evcel do pnechowywania dat utywa systernu nurnerbw seryjnych. Najstarszq d a q roz-
pomawanq przez Excel jest 1 stycmia 1900 mku. Dacie tej odpowiada nurner seryjny I .
dacie 2 stycmia 1900 roku jest przypisany nurner seryjny 2 itd. W wipkszoici przypad-
kow nie musisz pnejmowaf sic tym systemem. Po prostu wprowadzasz datq w znanym
ci formacie i Excel zajmuje sip resztq. JeSli na pnyklad rnusisz uQC daty I a e n v c a
2004 roku, wystarczy, t e wprowadzisz lahcuch 1 czerwiec 2004 (lub zastosujesz do-
wolny inny format daty). Excel interpretuje wprowadzonq date i przechowuje wan046
38 139, ktdra jest numercrn seryjnym z niqpowiqzanyrn.

~ ~ W tym mzdzlale
& " u&to forrnatu daty stosowanego w Polsce. Jelli twdj system utywa
;IV=- innego forrnatu daty, konleczne bazie dokonanie odpowiednich rnodyfkacji.
Na pnyktad mote byt konieczne wprowadzenie daty w fonnacie: 2004-36-0:

Wprowadzanie dafy i czasu


Dane dotycqx czasu wpmwadza sip do kom6rki. korzystajqc z zrozpomawanego fonatu.
System Excela reprezentujqcy daty jako pojedynae wartoSci zostat rozszerzony o obsiugq
wartoki dziesictnych identyfikujqcych pory dnia. lnnymi slowy, Excel p o s m g a czas przy
utyciu tego samego systernu, niezaletnie od tego, czy czas dotyczy okreslonego dnia. go-
dziny czy sekundy. Przykhdowo numer seryjny dla daty 1 czenvca 2004 roku ma wartcic
38139. Pdudnie (Srodek dnia) w wewnqmym zapisie jest identyfikowane pnez wartost
38139,5. R6wniet w tym pnypadku zwykle nie rnusisz sip pnejmowat czedciq u t m -
kowq nurnerbw seryjnych.
Poniewat data i czas sq zapisywane jako nurnery seryjne, motna na nich rvykonywac
oueracie dodawania i odeimowania. Na ~ n v k t a dw celu okreSlenia liczby dai oddziela-
< 8 <

jqcych dwie daty mo2na zastosowac formuiq. Jejli zar6wno w kornorce A l i komorce A2
znajduje sic data. poni2sza formula m6ci liczk dni stanowiqcych rotnlcp:
-a2-A1
e0 CzgSC I + Podstawowe informacje

Wykonujqc obiiczenia m i ~ z a n ez czasem, naiezy zachowaf wiekszq ostroznoSt. Jesli


do kom6rki zostanie wpisany czas bez powiazanej z nirn daty, Excel przyjrnie, i e chodzi
o 0 stycznia 1900 roku. Nie stanowi to problemu do momentu uzyskania w wyniku
obliczeh wartoSci ujemnej. Gdy do tego dojdzie, Excel wySwietli blqd (postaci W W ) .
Jakie jest rozwiqzanie? W tym pnypadku naleiy uaktywnit system daty 1904.
W tym celu z menu Narzedzia naleiy wybraC pozycje Opcje, a nastepnie w zakladce
Pneliczanie zaznaczyt opcje System daty 1904. Przeiqczenie na system daty 1904
moie jednak spowodowat problerny, gdy w pliku j u i znajdujq sie daty lub daty
zawarte w skoroszytach 59 z nlm powiazane.

:,s::z\ W przypadku dodawania czas6w nie jest motliwe wySwietlenie wiwej n i i 24 godzin.
!.sa+. Dla kaidego 24-godzinnego okresu Excel po prostu do surnarycznej wartoSci dodaje
kolejny dziefi. Rozwiqzanie tego problemu poiega na wybraniu takiego forrnatu liczb.
kt6ry umieszcza czqSt godzinowq w nawlasach kwadratowych. Na przyklad poniiszy
format liczbowy wyswietla wiecej n i i 24 godzlny:

Stosowanie dat sprzed roku 1900


OczywiScie pocqtki Bwiata nie sq datowane od Istycznia 1900 mku. Osoby pnetwamjqce
w Excelu historyczne dane czesto m u s q korzystac z dat wczesniejsqch. Niestety jedyna
metoda umotliwiajqca u m a n i e takich dat polega na wprowadzaniu ich do k o m b k i jako
tekstu, jak w ponitszym przykladzie:

Taki tekst nie spowoduje negatywnej reakcji Excela, jednak nie jest rnotliwe jego mody-
fikowanie - nie motna nnienik formatowania daty, okreflit, ktdremu dniowi tygodnia
wymacqC daty wystepujwej siedem dni pbtniej.
odpowiada, a takttakte

Na do)wzonym dysku CDROM majduje sie stworzony przez mnie dodatek o nazwie
@@ m e n d e d Date Functions. Ofewje on osiern nowych funkcji arkusza umoillwiajqcych
prretwarzanie dowolnej daty z przedzlalu lat od 0100 do 9999. Na rysunku 3.8
pokazano arkusz uiywajqcy tych funkcjl do okreSlenla liczby dnl pomiedzy r6inymi
datarni sprzed roku 1900.

Rysunek 3.8.
Dodatek m e n d e d
Date Functions
umoZliwia
przetwaffanfe dat
spffed roku 1900
Rozdzial3. + Wybrone zosody stosowonio formvt 81

Tworzenie megaformut
W celu wygenerowania wyniku arkusze kalkulacyjne czgto wymagajq zastosowanin
formut potednich. lnnymi slowy, formula mote byC zaleaa od innych formu+. ktdre
z kolei opierajq sic na jeszcze innych formulach. Gdy jut wszystkie te formuly poprawnie
dzialajg czqsto motna wyeliminowat formuly poirednie i zamiast nich zastosowaC poje-
dyncqmegaformulq. Jakie uzyskuje siq korzysci? Utywana jest mniejsza liczba korndrek
(panuje mniejszy nieporqdek), a ponadto ponowne obliczenia mogq by6 wykonywane
szybciej. Porn iym wtajemniczone osoby bdqpod wrakeniem twoich umiej@loSci. A jakie
sq wady? Niemotliwe mo2e okazaC sip nozumienie lub zmodyfikowanie formuly.

Oto przyktad. W y o b d sobie arkusz zawierajqcy kolumnp z personaliami osbb. Zatdtmy.


t e zostdeS poproszony o usunipcie z personalibw drugiego imienia i drugiego inicjalu.
Jednak nie wsystkie personalia zawierajqdrugie imip lub inicjal. R~cznaedycja komdrek
zajqiaby wielc godzin, dlatcgo decydujesz sip na rozwiapmie wykorrystujqce formulq.
Nie jest to trudne zadanie, ale zwykle w i e e sip z utyciem kilku formut poirednich.
Na rysunku 3.9 pokarano wyniki zastosowania wygodniejszego mnviqzania, w pnypadku
ktbngo wyrnagane bylo utycie szeSciu formul poirednich zawartych w tabeli 3.5. Per-
sonalia znajdujq sip w kolumnie A, natomiast wyniki w kolumnie H. W kolumnach od 0
do G sq przechowywane formuly pojrednie.

Rysunek 3.9.
Usuniqcie d ~ g i d ,
imion i iniyaMw
wymaga
zastosowanla
szeSciu fonnul
pogrednich

Komdrka Formula padrednis ; .. Przanrtlenle


01 -usuri. ZBEDNE. OOSTEPY ( A 1 1 Usuwa zb~dnespacjc.

01 -ZHAIOam ":Bl:Cl+l) Lokalizujc drum spaej~J d l i tskiej spacji nit znajdde.


zwraca blqd W G ! .
El J E Z E L I (CZY . W ( O l ) :C1:011 Wli druga spacja nie istnicjc. utywa pierwszj.

GI -PRAlrlY[Bl:DC~Bl)-El) Zwraca nazwisko.


H1 -Fl&G1 Lqxy imie z nnzwiskiem.
82 Cz&t I 4 Podstowowe informacje

Poprzez utworzenie megaformuly rnoha wyeliminowaE wszystkie formuly pobrednie. t

W tym celu nalety utworzyt wszystkie fomuly poirednie, a nastqpnie przejit do for-
muly generujqcej ostateczny wynik i w rniejsce W d e g o odwbtania do kombrki wstawit
!
kopiq formuly znajdujqcej siq w kom6rce, do ktorej shvonono odwolanje (bez maku ;
rbwnojci). Na szczeicie do kopiowania i wklejania rnotna u t y t schowka. Powtarzaj :

operacjq do momentu, gdy w kom6rce H1 bqdq siq znajdowaly jedynie odwolania do I


kornorki A l . Ostatecznie w jednej kom6rce majdzie sit nastqpujqca megafornula:

Gdy uznast, t e megaformula dziala, mo2erz usunqt kolurnny z formulami podrednimi.


poniewat nie bqdq jut potrzebne.
11
Co prawda. stwierdzenie, te megaformuh wykonuje doktadnie takie same zadonia. jak
wszystkie formuly podrednie, jest prawie niemotliwie dla kogokolwiek, nawet dla autora,
ale tak faktycmie jest. Zanim zacmiesz twonyt megafornub, sprawdf, cry fomuty
p o M n i e wykonujq poprawne obliczenia. Jeacze lepszym rozwi@zaniern jest pnechowy-
wanie kopii formu+podrednich w innym miejscu na wypadek wykrycia Mqdu lub w razie
koniecznoSci dokonania modyfikacji.

'
SF Jedyne ograntczenie w stosowaniu megaforrnut polega na tyrn, te lorrnuty Excela
nis mogq zawleraf wlqcej nit 1024 maki. Rozwiqzanie tego problemu poiega
na stworzeniu w jgzyku VBA nlestandardowej funkcji arkusza, a nastepnle zastqpieniu
megaforrnuly nastqpujqcq prostq formulq:

Tak naprawdg naplsakm funkcj? HOMIDDLE, aby por6rmaCjq z formutami pogrednirni


i megafomutami. !
Ze wzgl~duna tak du~zlootanoMrnegaformuly motesz dojX do wniosku, t e jej uqcie
spowolni wykonywanie ponownych obliczefi. WEaSciwie nie jest to regutq. Aby to
sprawdziC, stwonylem arkusz, kt6ry uruchamia megaformu@ 65 536 razy. Poiniej

stworzylem kolejny arkusz konystajqcy z a c i u formut poSrednich. Uzyskane wyniki


por6wndem z rezultatem zwr6mnym przez funkcjg, ktdq napisakm w jezyku VBA. I

Zarejestrowalem statystyki dotyczqce dw6ch metodologii. Wynikri zawiera tabela 3.6.

Tabela 3.6. Pordwnanie fbnnul ~Srednich2 rnegaformuhj I fink& napisanq w j w u vsA


Metoda Czss panownego obliczenia (w sekundach) Rozminr pliku
Fomuly poSlednie 10.8 24.4 MB
Megaformula 6.2 8.9 MB
I
Funkcja napisana w j~qzykuVBA 106.7 8.6 MB

Rzeczywiste wyniki b d q sip r6aily w zale2rtodci od szybkdci systemu i pojernnoici


II
zainstalowanej parnivi.
1
I
1
Rozdziat 3. + Wybrone zasady stosowanio formul 53

Jak m o a a zauwa2yC, dziqki zastosowaniu megaformuly pnyspiesrono ponowne obli-


czenia. a takte uzyskano skoroszyt o dzro rnniejszym rozmiane. Funkcja napisana
w jczyku VBA byla macznie wolniejsza. Tak naprawde czas jej dzialania nie by} nawer
zblitony do innych czas6w. To doSC typowe dla funkcji napisanych w jezyku VB.4. zc
zawsze sq wolniejsze od wbudowanych hnkcji Excela.

Trzy pliki u j t e w powyiszym pardwnaniu czasdw znajdujg sie na dot3czonym dysku


Rozdziat 4.
Pliki Excela
Jesli zamierzasz wykonywat p n y utyciu Excela zaawansowane zadania. powinienei
zapomat sic z r6tnymi rnetodami jego umchamiania, jak rbwniel zrozumict. co sic
dzieje w trakcie tej operacji. Warto tet m a t formaty plik6w stosowane i generowane
pnez Excel.

Urucharnianie Excela
Excel mote byt umchamiany na r62ne sposoby w zalc2noSci od tego, jak zostal zain-
stalowany. Wszystkie metody ostatecmie powodujq taladowanie pliku wykonywalnego
Excela o r m z e n e n i u .ere.

W trakcie urucharniania Excel wczytuje z rejestru systemu Windows wlasne ustawienia


i otwiera wszystkie zainstalowane dodatki (re, ktbre uaktywniono w oknie dialogowyrn
Dodatki, wy4wietlanym po wybraniu z menu Nanqa5iolDodatki). Nast~pnieotwiera
pusty s k m s z y t Lictbg jego arkuszy o w l a rnodyfikowahe uslawienie, przechowywane
w rejestm systemu Windows. Aby je mienit, nalety wprowadzit wartoit w polu Ar-
h e w nowym skorarzycie majdujqcym sip w zakladce Ogdlne okna dialogowego
Opcje ( nalety wybrat Narrq&ia/Opcje).
. .
JeSli w katalogu XLSturt majdujq sig jakiekolwiek skorosyty, zostanq otwarte auto-
matycmic, natomiast pusty skoroszyt sic nie pojawi. JeSli w katalogu XLSrart jest zawarty
plik obszaru roboczego, skomzyty mstanq ofwarte w obszarze roboczym dostorowanym
do zapisanych ustdwied W o w n i k a M o h a t& okreSlit inny katalog startowy, w kt@m
b& przechowywane inne pliki skoroszytbw lub obszaru roboczego przcmacmne do
automatycznego A d o w a n i a . W celu okreSlenia altematywnego katalogu srartowego
nalety podat Scic?kt w polu Przy uruchomieniu ofwdn wszystkie pliki w, majdujqcyrn
s iw~ zakladce Ogdlne okna dialogowego Opcje. W poprzednich wenjach Excela pole
nosilo nazwp Inne poloienie pli& startowych.

a> Aby mien& dornySlne formaty lub rawartog otwieran~hnowych skoroszyth, n a l a


s t w o r n domy5Iny skomszyt. a nastppnie zapsa6 go j a b szablcin v kafalogu XLStan
pod narwq Shoroszytxlt. Szczeg6ly datyctqce twonenia i uzywania plikdw szablondw
opisuje system pomccy Excela.
Excel rozpoznaje 10 p ~ ~ d ~ c m i kstosowanych
bw w wienzu poleced. Zawarto je w ta-
beli 4.1.
86 Czgit I + Podstawowe informacje

Tabela 4.1. Pnefqczniki wiersza poleceri obshgiwane pnez Ewcel

Przelqcznik Opis dzialania


/automation Uruchamia program bez ladowania dodatk6w i szablon6w lub przetwarzania plikorv
zawanych w katalogu XUfarf, bqdt w innej lokalizacji przechowujqcej pliki
startowe. Utyj tego przelqcmika aby wykonat ,.czystcWumchomicnie Excela.
Utyj tego przetqcznika gdy zalety ci na umchomieniu Ex,cela bez tworzenia nowego
skoroszytu i wyiwietlania ekranu powitalnego.
f enbedded tadujc niewidocmq kopiq Excela (niezalccnne).
Zrnusza Excel do utworzenia nowego skoroszytu znwicrajqcego pojcdynczy nrkusz
makr aplikacji MicrosoR Excel 4.0 (nieutywane).
10 Powoduje. 2e Excel sarn rejestruje sic w rejtstrze systemu Windows. W trakcie
operacj~zastGpowane sq brakujqce wpisy rcjestm, natorniast nic sqpoprawiane wpisy
nieprawidlowe (spmwdi przclqcmik /regserver znajdujqcy siq nitcj w tabcli).
I p kdtalog Ustawia aktywnq Scietkq dla katalogu innego nit katalog dornyflny.
/ r ndzwdpliku Zmusza Excel do otwarcia okrefloncgo pliku w trybie tylko do dlczytu.
lregserver Zmusza Excel do ponownego sarnodzielnego zarcjestrowania siq w rejestrze systemu
Windows, a nast~pniezamknipcia UZyj tego przetqcmika gdy zalety ci. aby Excel
ponownie zapisat w rejatrze wszystkie swojc klucze i powi@ je z plikami na
pnyklad skorosyt6w i w y h d w .
Zrnusza Excel do uruchornienia w rrybie awaryjnym. w przypadku kt6rego
nic qladowane tadne dodatki, ani pliki przcchowywane w katalogu XUfarf
lub alternatywnym katalogu zawimjacym pliki startowe.
lunregserver Zmusza Excel do samodzielnego wyrcjestrowania siq z rejestm systemu Windows
i zamkniqcia

Jeden ze sposobbw o l d l e n i a p r d q c m i k a polega na poddaniu edycji wt&iwo$ci


skr6tu uruchamiajqcego program. Jefli na przykiad zalety ci na utyFiu katdogu PlikiXl
jako katalogu domyllnego, mo2esz zastosowat p n d q c m i k /p i wprowadzit go w polu
Element docelowy w oknie dialogowym Wlaiciwos'ci powiqzmym ze skrdtem Exceia.
Aby je otwonyt, naleky prawym pnyciskiem myszy kliknqt ikon? skr6ty a nastqpnie
wybraC pozycjq Wldciwoici i kliknqk zakiadkp Skrdt. Pnykladowo zawartoit pola
Element docelowy m o a a zmienit na nast~pujqcq:
"C: \Program Flles\Mlcrosoft Office\Officell\EXCEL .EX€' /p C: j.Pl i k i X 1

Nalety pamistab, Ze fcietka pliku EXCEL.EKE m o t e b y t inna w p q p a d k u r62nych in-


stalacji i wersji.

*&* W jednyrn systemie motna uruchornit wiele kopll Excela. W a kopia jest traktowana
<.!/ jak odddelne zadanie. WiekszoX osdb z pawodzeniem urucharnia w jednym systemie
rdine wersje Excela. Aby o s i g g n g jak nallepsze rezultaty, kolejne w e ~ j enaleiy
instalow& zgodnie z ich datq powstanla.
Rozdziat 4. + Pliki Excelo 87

Obstugiwane formaty plik6w


arkuszy kalkulacyjnych
Co prawda, domyilnyrn formatem pliku jest format XLS pliku skoroszyru, ale Excel potrnti
rbwniet otwierat i zapisywac formaty plikow generowane przez kilka innych aplikacji.

Wybierajqc format, naley brat pod uwagq, czy okreslony typ pliku przetrwa ,.podroz'.
i wr6ci z niej caly. lnnymi slowy. czy po zapisaniu pliku w okreslonym formacie i jego
ponownym otwarciu przy utyciu tej samej aplikacji zostanq utracone jakiekolwiek in-
- -
formacie? Zaodnie z oczekiwaniarni zastosowanie wlasnego formatu pliku Excela
(o rozsierzeniu .xis) daje gwarancjq, ze nie zostanq utracone absolutnie tadne dane. pod
warunkiem t e u2yto najnowszcj wersji formatu XLS.
Odczytywanle pliku zapisanego w forrnacie lnnyrn nii aktualna wersja formatu XLS
nlesie z sob4 ryzyko utraty okreSlonncgo typu lnformacji, zazwyczaj dotyczqcych
formatowania i makr. ale czasern tei formul i wykresdw.

W kolejnych podpunktach ombwiq rdtnego typu pliki. ktdre sq i nie sq obslugiwane


przez Excel.

Pliki arkusza kalkulacyjnego 1-2-3 firmy Lotus


Arkusz kalkulacyjny finny Lotus obshguje nastqpujqce typy plikbw:
PIikiformmu WKS qjednoarkuszowymi plikami stosowanymi przez program 1-2-3
w wersjach Release 1.x f w DOS. Excel potrafi odczytywat i zapisywai tego typu
pliii.
Excel jest tet w stanie otworqf pliki aplikacji Microsot? Works 2.0, r6wniez ma~qce
rozszerzenie .wks.

Plikiform- WKI sqjednaarkuszowymi plikami stosowanymi przez program 1-2-3


w wersjach Release 2.xfor DOS. W pnypadku tego typu plikow formatowanie
jest pnechowywane w plikach o rozszeneniu .all (generowane przez dodatek
Allways) lub .fmI (twotzone przez dodatek WYSIWYG). Excel potrafi odczytywac
i zapisywat wszystkie tego typu pliki. Po zapisaniu pliku w formacie WKI moma
okreSiiC, jakiego typu pliki formatowania CjeSli sq uiywane) wygenerowac.
Pliki formam WK3 generuje program 1-2-3 w wersjach Release 3.xfor DOS,
Release 4.x for DOS i Release I.xfir ~ i n d c n v s . ' ~ o gzawiera~
q wipcej n i i jeden
arkusz Fonnatowaniejest pnechowywane w plikach orozszerzeniu Jm3
(generowane przez dodatek WXSIWYG). Excel potrafi odczytywat i zapisywac
pliki formatu WK3, bez lub wraz z towanyszqcymi plikami formatu FM3.
Pliki formatu WKJ generuje program 1-2-3 w wersjach Release 4.xfor Windows
i Releare 5.x for Windows.Lorus wreszcie sic postaral i wyeliminowat oddzielny
plik formatowania. Tego typu pliki rnogq zawierac wipcej n i t jeden arkusz. Excel
nie jest w stanie ich odczyrywac i zapisywac. Je91i zalety ci na otwarciu w Excelu
88 CzeSc I + Podstowowe infarmocie

pliku forrnatu WKJ,jedynym rozwiqzaniem jest utycie aplikacji 1-2-3 Release 4


for Windows lub jej nowszej wersji i zapisanie pliku w formacie WK3, kt6ry
Excel rozpoznaje.
Pliki formatu 123 sq generowane przez programy 1-2-3 97 i 1-2-3 Millennium
Edition. Mogq zawierac wiecej nit jeden arkusz. Excel nie jest w stanie ich
odczyrywad i tapisywaf. JeSli zaleZy ci na otwarciu w Excelu pliku forrnatu 123,
jedynym rozwiqzaniem jest q c i e aplikacji 1-2-3 i zapisanie pliku w forrnacie
WK3, ktdry Excel rozpoznaje.

Pliki arkusza kalkulacyjnego Quaifro Pro


Program Quartro Pro obshguje nastqpujqce typy plikbw:
Plikiformatu WQl sqjednoarkuszowymi plikami generowanymi przez program
Quattro Pro for DOS w wersjach Version 1,2.3 i 4 . Excel potrafi odczytywac
i zapisywaf tego typu pliki.
Pliki formatu WQ2 generuje program Quattro Pro for DOS Version 5. Excel
nie potrafi ich odczytywad i zapisywak.
Plikiformatu WBI generuje program Quattro Pro for Windows w wersjach
Version I i 5 (Uwaga: nie ismiejqwersje Version 2,3 i 4). Excel potrafi odczytywaf
pliki tego fonnatu, ale nie potrafi ich zapisywaf.
Pliki formatu WB2 generuje program Quartro Pro for Windows Version 6. Excel
nie potrafi ich odczytywaf i zapisywaf.
Pliki formaru WB3 genrmje program Q u a m Profor Windows w wersji Version 7
i nowszych. Excel nie potrafi ich odczytywaf i zapisywaf.

<SF*Konwerter
' pllk6w twononych przez Quattro Pm moma pabrd ze drony lntemetowej
Microsoftu. Na-e to ponvala importowat pllki formatu wygenmwane przez
WB3
Quattro Pro 97. Aby zlokalizowaC konwerter, nalety pneszukaC a w a r t o s strony
internetowe] Microsoftu, poniewat adresy URL czgsto sig zmieniajq.

Formaty plik6w baz danych


Pfikiformav DBF sq jednotablicowymi plikami b a q danych generowanymi przez pro-
gram dBASE i kilka innych baz danych. Excel potrafi odczytywac i z a p i s p a t pliki
formatu DBF we wszystkich wersjach, wlqcmie z plikami stwononymi p m program
dBASE 4.

Excel nie jest w stanie bezpofrcdnio odcytaf lub zapisat tadncgo innego formatu pli-
k6w b a q danych. Jednak aby uzyskaf dostep do innych format6w plikdw b a q danych,
moma ugt narqdzia Micros09 @my, a n w p n i e skopiowaf dane do arkusza Excela
lub s t w o w do nich hcze. Narzedzie Microsoji Query mote zostaf uruchomione bez-
poirednio z Excela poprzez wybranie z menu DandImpormj dane zewn~crsnelNowa
kwerenda bazy danych.
Rozdzial4. + Pliki Excela 89

Formaty plikdw tekstowych


Pliki tebtowe zawierajq jedynie niesformatowane dane. lstnieje kilka wzglqdnie standar-
dowych format6w plikow tekstowych, jednak nie ma dla nich standardowych rozszenen.
I Katda linia tekstu w plikach uipajqcych w roli separatora rnaku tabltlacji
.
sktada sie.z ~ 6 oddzielonvch
1 tabulatorami. Excel potrafi odczytywat takie pliki,
zamieniajqc katdq liniq na wiersz i katde pole na kolurnn$. ~e;tiet w stanie
zapisywad tego typu pliki, utywajqc dornySlnego rozszerzenia .mr.
Katda linia tekstu w plikach utywajqcych w roli separatoraprzecinka sklada siq
z p61 zwykle oddzielonych przecinkami. W krajach, w kt6rych jako syrnbolu
dziesiwego uzywa siq przecinka, w plikach forrnatu CSV bedzie stosowany
Srednik. Czasami tekst jest umieszczony w makach cudyslowu. Excel potrafi
odcyrywaf takje pliki, zamieniajqc kkadq l i n i ~na wiersz i katde pole na kolurnnq.
Jest tet w stanie zapisywaf tego typu pliki. uqwajqc dornySlnego rozszerzenia .m.
W a linia tekstu w plikach u@wajqcych w roli separatora spacji sklada sic z p61
oddzielonych spacjarni. Excel pomfi odczytywaf takie pliki, zamieniajqc katdq
liniq na wiersz i katde pole na kolumnq. Jest tet w stanie zapisywaf tego typu
pliki, utywajqc dornyflnego rozszerzenia .prn.

Gdy sprdbujesz ohNorryC w Excelu plik tekstowy, rnoke pojawit sip Kreator imporfu
tekstu, kt6ry pomote w okrefleniu sposobu wezytania pliku.

Aby pornin# Kreatora impom tekstu, nalety przed kllknigclern OKw oknie
dlalogowyrn OOHieranie nacisn* klawisz Shift.

Kwerendy rnogq tei byC wykanywane w oparciu o pllki tekstowe. W tym celu naleiy
* wybra( z menu Dane./lmportu] dare i!ewnetme/\mportu] dane.

lnne forrnaty piikbw


Do innych formatbw plik6w arkuszy kalkulacyjnych motna zalicyf:
IDIF (ang. Data Interchange Format,). Ten format pliku by# stosowany przez
program VisiCalc. P m z wiele lat nie spotkakm sic z plikiem w tyrn formacie.
Excel potrafi odcqtywaC i zapisywat tego typu pliki.
I SYLK (ang. SYmboolic LinK). Ten format pliku byl m a n y pnez program
MultiPlan. Pliki formatu SYLK obecnie q r 6 w n i e t doff nadkie. Excel potrafi je
odczytywaf i zapisywaf.

Pliki tworzone przez Excel


Excel zapisuje pliki w kilku formatach, orndwionych w tym punkcie.
90 C z e i t I + Podstowowe informocje

Pliki formatu XLS


Pliki skoroszytow formatu XLS generowane przez Excel 2003 u2ywajq tego samego
formatu, co Excel w wersjach 97,2000 i 2002. Nie jest motliwe ich orwarcie za pornocq
wcrsji Excela stanzej od wersji 97. Motna natomiast zapisaC skoroszyt w dowolnym ze
starszych formatow obshgiwanych przez Excel, ryzykujqc jednak utrate informacji
specyficznych dla nowszego formatu.
.1-.
Plik skoroszytu lub dodatku Excela mote m i d dowolne rozszerzenie, lnnymi slowy,
tego typu plikom przy ich zapisywaniu ni!e musi by6 nadawane rozszerrenie .xls
(skoroszyty) lub .Ma (dodatki).

Pliki obszaru roboczego


Plik obsearu roboczegojest specjalnym plikiem zawierajqcym informacje na temat ob-
szaru roboczego Excela. JeSli na przyklad stworzy4ef projek korzystajqcy z dwbch sko-
roszyt6w i chcialbyi mieC ustawione ich okna w okreilony sposdb, w celu zapisania
konfiguracji okien motesz wygenerowai plik f o n a t u X L W (z menu Plik nale2y wybrac
pozycje Z a p k obszar roboczy). Pbtniej po katdym otwarciu pliku o rozszerzeniu .xlw
Excel pnywr6ci tqdany obszar roboczy.

Plik obszaru roboczego nie zawlera skoroszytbw, a jedynie konflguracje powodujqcq.


-C h skoros@y sq idoczne. A zatem jedll rarnienasz pnesk? konflguracjq obszaru
roboczego komul innernu, nie zapomnij o dotqczeniu plikdw skoroszytdw i pliku
formatu XLW. Poza tym polecenie Zapisz obszar roboczyz menu Plik nie zapisuje
samych skoroszyt6w.

Jaka wersja Excsla woEe)a utjta do utwwrsnla tego pliku fomatu XLS?
Niestety nie istnieje bezpodrednla metoda pozwalajqca stwlerddb, prry uiyciu ktdrej wersji Excela
unvorrono okreSlony plik formatu XLS. JeSli korzystasz ze stars4 wersji Excela i pr6bujesz
otworzyb pllk formatu XLS stworzony przy uiyclu nowszej wersji, prawdopodobnie zobaczysz ko-
munikat btpdu lub ekran peten nic niemaczqcych znakew. JeSli jednak uda ci siq otwo@ plik,
w celu okreSienla wersji Excela motesz pasluiyC sie prostq instrukcjq jqzyka VBA.
Otw6rz skoroszyt I upewnij siq, czy zostat uaktywnlony. Wcienij kombinacje klawlszy Alt+F11, aby
wIqcrp2 edytor Visual Basic, a nasepnie w celu uaktywnienia okna Immediate wcisnij kombinacje
klawiszy Ctrl+G. Wprowadf poniiszq instNkcje i wcisnij Enter.
Prl n t Act1 veUorkbook. F i leformat
W oknie Immediate pojawl slg wart& identyIikujtp wersh pliku a m e g o skoroszytu. WartoSclq
jest jedna z pokazanych w ponltszej tabeli.

WartdC Wenjs Exccla


16 Excel 2
29 Excel 3
33 Excel 4 .
39 Excel 5.95
-4 143 Excel 97.2000,2002 i 2003
Rozdziol 4. Pliki Exceio ?:

Pliki szablonow
Dowolny skoroszyt mote zostaC zapisany jako plik szablonu (rozszerzenie xlr). Sza'clon
jest przydatny w przypadku czpstego hvorzenia podobnych plikdw. Aby na przyklad co
miesiqc generowat podobne raporty sprzedaty i przy okazji zaoszcz~dzicczas. naicz}
utworzyt, szablon przechowujqcy fonuly i wykresy wymagane do mygenerowanla ra-
portu. Po stworzeniu plikdw w oparciu o nowy szablon wystarczy jedynie wprouadz~c
odpowiednie wartoici.
Aby stworzyc nowy skoroszyt oparry na istniejqcyrn szablonie. naleiy z menu P!ik ivy-
brat poycjg Nowy, a nastepnie szablon w oknie dialogowym Szublory. W Excelu 7002
lub 2003 trzeba wykonad dodatkowq czynnoSC. Po wybraniu powyiszej pozycji zostanie
otwarty pasek narzpdzi Nowy skoros-yt, za pomocq ktorego motna okreSliC lokalizacje
szablonu, w tym takte rnotliwych do pobrania ze strony intemetowej Microsofiu. Klik-
niecie pozycji Nu moim komputene wywola okno dialogowe Szablony umotliwiajace
wybranie pliku szablonu.
Klikniwie prrycisku Nowy paska naredzi lub wciSnigcie komblnacji klawiszy Ctrl+.W
nle umoiliwia wybrania szablonu, a jedynie otwonenie domyllnego skoroszytu.

JeSli stworzysz szablon o nazwie Skorm~t.xIt,w oparciu o niego bqdq generowane nowe
skoroszyty. Ponadto motna stwonyt szablon o nazwie Arkusr.xlt, ktory b&ie ut)lwany
przy dodawaniu do skoroszytu nowycb arkuszy. Nie jest mozliwe utworzenie szablonu
arkusza wykresbw, poniew& Excel w inny sposdb obsluguje szablony wykresow.

Szablony mog&by6 prtechowywane w dw6ch katalogach lokalnege, systemu:


XLStarI. W tym katalogu majdujq sip szablony o nazwie Skoroszyr.xlt i Arkus=..rll
(domyilne szablony). W katalogu mogq tet zostac umieszczone szablony innych
skoroszytbw.
Templntes. Szablony skoroszytbw mpisane w tym katalogu sq wySwietlane w oknie
dialogowym Nowy.
Lokalizacja katalogu Templates zmienia sig w raletnoki od wersji Excela.
Aby go znale26. naleiy ~ k 0 n . tnastqpjqcq instrukcje j m a VBA:
Msgbx Am1ication.TwoplatesPath

Pliki pask6w nangdzi


Konfiguracjp paskbw n a q d z i i menu Excel zapisuje w pliku formatu XLB. Po za-
mknipciu Excela 2003 aktualna konfiguracja jego paskdw narzqdzi jest pnechowywana
w pliku ExceIIl.xtb. Doktadna lokalizacja i nazwa pliku zmienia siq wraz z kolejnymi
wersjami Excela, dlatego tez w celu jego odnalezienia, prry pneszukiwaniu dysku
twardego nale2y utyE kuicucba *.xlb. Plik zawiera informacje o poloieniu i widmmosci
wszystkich niestandardowych paskow narsdzi i menu wraz z modyfikacjarni wbudo-
wanych paskbw narqdzi i menu.

System pomocy Excela 2003 zawiera list? rotnych n a m i lokalizacji plikow XL3 570-
sowanych w kolcjnych wenjach Excela. Aby uzyskac te informacje, nalezy w polu sy-
szukiwania wprowadzit iaricuch xl b.
92 Czqic I + Podstowowe inforrnacje

4
,e,h JeSli plik formatu XLB zostanie uszkodzony, nie powiedzie sie uruchomienie Excela.
,6m~fl* W taklej sytuacji nalety sprdbowat zmienit nazwe pliku XLB. Excel po stwierdzeniu,
ie nie istnieje pllk XLB, stworzy now. Co prawda, zostanq uiracone wszelkie
modyftkacje dokonane w menu lub paskach narzqdzi, ale prawdopodobnie bedzie to
leosze od braku rnozliwo5ci uruchomienia Excela.

Pliki dodatk6w
Dodarek jest plikiem skoroszytu r6tniqcym sie nastepujqcyrni watnyrni elementami:
m wlaSciwoSC IsAddin skoroszytu ma wartoif True, co omacza, t e rnotna go
zaladowat przy uQciu polecenia menu Nanea!zia/Dodatki;
I skoroszyt dodatku jest ukryty i nie mote zostat wyBwietiony pnez utytkownika
- w konsekwencji dodatek nigdy nie bedzie aktywnym skoroszytem;
w pnypadku korzystania zjezyka VBA skoroszyt dodatku nie jest c q i c i q zbioru
Workbooks.

Dodatki wzbogacajq Excel o nowe funkcje lub wlaSciwoSci. Motna z nich korzystaf
tak, jakby by4y wbudowane w program. W oparciu o pliki XLS rno2na tworzyC wlasne
dodatki. Dodatki sq preferowanp rnetodq dystrybucji niekt6rych aplikacji przemaczonych
dla Excela. DomySlnie plikom dodatk6w jest nadawane rozszerzenie . x h , ale rnotna
utyf dowolnego innego.

e# Poza dodatkami o rozszerzenlu .xla Excel obstuguje .dodatkl XLL i CUM (pocrqwsry
L!. od wersji Excel 2000). Tego typu dodatkl sq tworzone przy utyclu lnnego
dprogramowania nii Excel. W tej ksiqice om6wiono jedynie dodatki X U .
Dodatki szczegt5kwo om6wiono w rozdzlale 21.

Excel i jqzyk HTML


HTML (ang. HyperTmt Markup Language) jest jgykiem m n internetowych. Plik HTML
zawiera tekst oraz specjalne macmiki opisujqce spodb jego formatowania Przeglqdarki
internetowe pobierajq dokumenty zapisane zazwyczaj w formacie HTML. interpretujq
macmiki, stosujq formatowanie i wydwietlajq informacje.
Pocqwszy od wersji 2000, Excel mote &ywat formatu HTML jako whnego. I n n p i
slowy, istnieje mo2liwodf zapisania skoroszytu jako pliku formatu HTML. Po ponow-
nym ohvarciu w Excelu plik HTML b g z i e wygl@al dokhdnie tak, jak w momencie,
gdy po raz pielwszy by1 zapisywany. Wszystkie dane Exccla takie jak makra, wykresy,
tabele przestawne i ustawienia skoroszytu, powstanq niemienione. HTML jest stosun-
kowo prostym formatern pliku. To, t e skoroszyt Exclela potrafi pnehwaC takq operacjq,
jest niemalte zadziwiajqce.

C h d utycie formatu H7UL jako wlasnego formatu plikdw Excela mo2c zdumiewae,
MicrwoR raczej pnesadnie podkreila m o b t tej opcji. W rzeczyuristoSci - z.wyj$-
-
kiem niewielkiej liczby sytuacji taka motliwo3t nie jest zbyt przydama.
Rozdziat 4. + Pliki Excela 73

W jaki spos6b Excel korzysta z formatu HTML?


NajOepsza metoda pomalajqca nozurnief. w jaki sposdb Excel utywa forrnatu H T M
jako wlasnego formatu plikow, polega na wykonaniu prostego fwiczenia. Utworz nowy
skoroszyt i sprawdt czy zawien tylko jeden arkusz. Wpmwadf formule i kilka wartoici.
zastosuj kilka prostych formatowan, a nastqpnie zapisz skoroszyt w fomacie HTML.
Z menu Plik wybierz pozycjp Zapisz jako strone sieci Web i sprawdi, czy jest zama-
czona opcja Ca& skorosqt. Na rysunku 4.1 pokazano prosty skoroszyt zawierajqcy
dwie wartosci i formule. kt6rej korndrkp sformatowano przy uyciu stylu Pogrztbienie.

Rysunek 4.1.
Taki pmsty skoroszyt
bez problemu
rnoina zamienid
na plik formatu HTML

Pi- ten podpunkt, pnylqkrn, te jest& zaznajomiony z jtzykiem HTML.

Otw6n plik HTML w oknie przeglqdarlci. OczywiScie plik bqdzie badzo pnypominal
oryginahy skoroszyt. Jednak skoroszyt jest ,,martwym" dokumemem pozbawionym
motliwoici interakcji. Aby zobaczyC kod Wdlowy pliku HTML,z menu Widok pne-
glqdarki Internet hplorer n a l e e wybrat pozycjq Zrddlo. Motesz byC zaskoczony tym,
co zobaczysz Nawet ckspcrci z zakresu jpzyka HTML mogq byf przytloczeni stopniem
dokonoki tak nvanego prosttgo dokumentu sieci Web.
Ponitej wymimilem kilka cech pliku formatu HTML.
Cab skoroszyt Excela ~tzwyczajmote byt reprezentowany p n e z pojedyncy
plik HTML.Innymi sbwy, wszystkie informacje wymagane do slworzenia
dokladnej kopii oryginalnego skoroszytu sq zawarte w pliku HTML.Jednak
nie zawsze tak jest. W toku dalszej lektury dowiesz sip, kiedy zwykb plik HTML
jut nie wystarcza.
8 WiqkszodC dokumentu jest zawarta pokiqdzy macmikami <head>i </head=-.
m Sporq cz& stanowiq defulicje styli. Tego typu infonnacje majdujq sip pornidzy
macmikami cstyle> i </style> osadzmymi wwnqbz macmikdw <head> i </head>.
m Wla4ciwa zawartog m n y Wwietlana w oknie pneglqdarki majduje sip w tabeli
(ograniczonej przez m c m i k i *able> i <Itable>).
8 Fornukt jest prrechowywana pny W c i u niestandardowego argurnentu znacmika
<td> - tag. Przeglqdarki ignorujq ten argument,ale Excel konysta z niego,
gdy otwiera plik ponownie.
Plik WA4L wygmerowany dla prostego skomzytu zajmuje ponad 4000 bajtbw, co jest
d d f d m wartoSci$ biorqc pod uwage prostote wyiwietlanej strony. OczywiScie do-
datkowymi danymi Excel poshrguje sit pny twomniu skoroszytu, otwicrajqc ponownie
piik HTIUL.
94 Czeic I + Podstowowe informocje

Zwiqkszanie zlozonofci
Przykladowy skorosyt z poprzedniego podpunktu jest banalnie prosty. Teraz zwiek-
szyrny nieznacznie jego zlotonoSC i zobaczymy, co sic stanie z plikiem HTIML. Zaznacz
zakres A1 :A3 i w celu utworzenia nowego arkusza wykresu wciinij klawisz FI I. Po po-
nownym zapisaniu pliku otworz go w oknie przeglqdarki. Zauwat. Ze plik przypomina
skoroszyt Excela do tego stopnia, t e na dole okna sq widocme karty arkuszy i strzalki
nawigacji!

WielkoSC pliku NTML zwipkzyki sig ponaddwukroanie. Obecnie wvynosi okoto 10 000
bajtow. Co watniejsze, w katalogu, w kt6rym zapisale3 plik, pojawit sip nowy katalog
zawierajqcy dodatkowe pliki (w przypadku skoroszytu z pnykhdu jest to szeSt plik6w).
Dodatkowe pliki sq niezbedne do wyiwietlenia w przeglqdarce kopii skoroszytu i jego
ponownego utworzenia po kolejnym otwarciu pliku HTML w Excelu.

Plik HTML jest bardziej ztokony od oryginalnego pliku i zawiera trochq bardziej za-
awansowany kod tr6dlowy jezyka skryptowego JavaScript (JavaScript jest obstugiwany
przez wiqkszoX przeglqdarek). W tym momencie uzyskany plik HTML jest poza zasiegiem
przeciqtnego tw6rcy stron internetowych. I nawet nie biorp pod uwagp innych plikbw
urnieszczonych w podkatalogu. Sq to nastqpujqce pliki:
pliki HTML @o jednym dla M e g o arkusza oraz plik wyhvietlajqcy pasek kart),
plik formatu GIF (wykres),
plik formatu CSS (kaskadowy arkusz styl6w przechowuj@cy informacje m i m e
z formatowaniem i wyfwietlaniem),
plik formatu XML.Ombwienie jpzyka XML wykracza poza zakres ksi&i.
(Przeciet mbwitem, ze to sic macznie skomplikowalo!)
Mo2na otworzyC inne skoroszyty Excela i zapisak je jako pliki HTML. Wkr6tce w pod-
katalogu zostanie utwomny kolejny typ pliku. Jest to plik formatu MSO (ang, ~Uicrosoft
W c e ) . Ten binarny plik przechowuje informacje wymagane do ponownego wygenerowa-
nia elementbw specyficmych dla Excela, takich jak maloa, tabele przestawne, formarowanie
warunkowe itp.

Po zapisaniu skoroszytu Excela Jako pllku fonatu HTML pojawia sie mnbstwo
potencjalnych problemdw. JeSli na pnyklad musisz przesla-5 plik w inne miejsce,
konieczne jest uwzglpdnlenle wszystklch towarzyszqcych mu pilkbw. JeSli MBrykolwiek
dodatkowy pliklest uszk.odzony, Excel nie bqdrie w stanie ponownie wygenerowat
skoroszytu. Aby tego uni knqf, moina zapisa-5 skoroszyt jako jednoplikowq stronq
sieci Web majqcq rozszelirenie .mht. Jednak zwiqzany jest z tym kolejny problem
- tego typu pliki obstuguje jedynie przeglqdarka Microsoft Internet Explorer.

Tworzenie interaktywnych' plikhw HTML


JeSli jeszcze sie nie miechqciki, pora przejSC na kolejny poziom ztotondci. E ~ c epotrafi
l
mpisywaC pliki HTML zachowujqce interaktywnoSC arkusza kalkulacjjnego. lnnymi
sbwy, po wyiwietleniu pliku HTML w pmglqdarce, utydrownik mote - podobnie jak
Rozdziot 4. + Pliki Excela 05

-
w przypadku arkusza kalkulacyjnego - prowadzic z dokumentem inrerakcje, a wiqc
wprowadzai dane. edytowac fomuly, modytikowac formatowanie komorek. przegiqdac
dynamicznie mieniajqce siq wykresy, a nawet przeciwac dane w tabelach przestnwnych.
.9--
.-e
'
".il Excel 2003 umoiliwia utworzenie interaktywnego pliku HTML na bazie wleloarkuszcwgc
skoroszytu. W poprzednich wersjach prograrnu interaktywne pliki HTML byty ograniczore
do lednego arkusza.

Aby sic zorientowat, jak to dziata, uaktywnij arkusz zawierajqcy formuly. Z menu Plik
wybierz pozycjq Zapis: jako srronq sieci Web. W oknie dialogowvym Zapisyur~niejrrko
zamacz opcje Zarnaczenie: Arkuss, a nastepnie opcjp Dodaj inrerakcjq. Kliknij prrycisk
Opublikuj. Zostanie otwarte kolejne okno dialogowe Publikowanie jako strony sieci
Web. Zaakceptuj domyflne ustawienia i kliknij przycisk Opublikrrj.
Arkusze kalkuiacyfne zapisywane z uwzglgdnieniem lnterakcji rozpoznaje tylko
przeglqdarka Mlcrosoft Internet Explorer.

Arkusz kalkulacyjny w formacie HTML jest wyiwietlany w pneglqdarce Inreme:


Explorer jako faktycnie interaktywny obiekt. Istnieje motliwo9t modyfikowania war-
todci, a nawet fomul. Na rysunku 4.2 pokazano pnyklad.

Rysunek 4.2.
Pnykjad
hteraktpvnego
skoroszytu E x d a
wySwietlonego
w oknie przegtqdarki
Internet fiplofer

Okreflanle dnl hi* amerykarisl

I oru:rro l 5 . i

Mo2na by octekiwat, 2e plik M i M L wygenerowany dla interaktywnego arkusza Wdzie


o wielt bardziej &Wny od pliku z w k i a d u zamieszczonego w popnednim podpunkcie.
Jest to blcdne pnypusrczenie. Taki arkusz midci sic w pojedynczym pliku HT:LfL. Ztu
tonoh5 jest obshgiwana przez kontrolkq Acrivd. Z tego powodu, aby rn6c przeglqdaC
w oknie przeglqdarki Interne1 Explorer interaktywny plik Excela, koricowy uytkown~k
musi mieC minstalowany pakiet Oflce 2000 lub nowszy (bqdi posiadai. licencje dln
kontroiki ActiveX Microsofi Ofjice Web Components).
90 Czeic I 4 Podstowowe informocje

A eo z natzflziem Script Edltor?


W tej ksi@ce catkowicie ignoruJu]ejeden element Excela - narzgdzie Microsot Script Editor, sluzwe
do rnodfikowania kodu ir6dtowego pliku HTML, napisanego w jgzyku JavaScript lub VBScript.
Uznalem, te ten temat wykracza poza zakres ksiqiki. a ponadto jest przydatny tylko dla niewielkiej
grupy cqtelnikbw. Tak naprawdg nigdy nie miatem kontaktu z kimkolwiek zainteresowanym tyrn
zagadnieniem. W efekcie skoncentrowakm sig na tym, co w przypadku Excela jest istotne, czyli
na projektowaniu w jezyku VBA aplikacji niekorzystajqcych z przeglqdarki internetowej.
.
.-. .,I:- W tym podpunkcie dokonatern krdtkiego przeglqdu rnoiliwoSci Excela w zakresie
.->: wsp6lpracy z jgzykiem HTML. Zagadnienlu temu zdecydowanie moina poSwiviC catq
h ksiqikg, ktdrej napisania sig nie podejmuje. Dzlekuje bardm.

lrnportowanie i eksportowanie plik6w XML


Jednq z kilku nowoici oferowanych pnez Excel 2003 jest motliwoii importowania
i eksportowania danych zapisanych w plikach formatu XML.

,s)
$j Niniejszy punkt dotycry tylko utytkownikdw Excela 2003. U2ytkownicy Excela 2000
lub 2002 bgdq mogll o t w o m niektdre pliki XML (z menu Plik naleiy wybraE pozycjq
OM=). Jednak funkcje tu opisane nie zadzlatajq.

Czym jest XML?


XML jest ogblnie pizyjetym standardem wymiany danych pomiqdzy r6hymi aplika-
cjami. Jqzyk XML, podobnie jak HTML,u t y w a znacmik6w, ktore definiujq elementy
dokurnentu. Znaoniki jezyka XML definiujq elementy struktury dokumentu oraz ich
znaczenie. W pneciwi;hiiwie do macmikbw ~ ~ Z . ~ ~ - H T kMt 6Ln, okreilajq wyglqd
dokumentu lub jego formatowanie, macmiki -jezyka
- - XML m o m WSWC do Aefinio-
wania struG i-zawarto~cidokumentu. W konsekwencji w p&adkh jqzyka XML
zawartoSt dokumentujest oddzielona od dcfinicji jego wyglqdu.

PoniZej zmieszczono bardzo prosty plik XML zawierajqcy wiadomoSC pocziy clew
nicznej:
<?ml version-"1.0" encoding-"150-8859-2" ?>
cwi adomo$c>
cdozJan NOWdk</do>
<od>Tmasz Kowal sklclccb
c t m t 7 D a t a spotkaniacttematr
ctresc>Spotkanie odb@zie s i e we wtorek o 8 rano. <{:reso
-=/wia d m s w

Po wyfwictleniu pliku w programie Internet Explorer pojawi sie struktura dobmentu


(rysunek 4.3).

Pliki wspcmniane w tym punkcle, czyfi wisdomo&5.xml i klientl.xml, mafdujq sig


na dotwzonym dysku CDROM.
Rozdziol4. Pliki Excela 97

Rysunek 4.3.
Program Internet
Explorer wyfwietla
pliki XML wformacie
st~ktLNalt?fl

W pneciwidshvie do jezyka HTML, specyfikacja jezyka XML nie zawiera samych


macmikbw. Zamiast tego oferuje standardowq metodp detiniowania macmikbw i powiq-
zah pomityizy nimi. Ze wglpdu na to, t e nie ismiejq prcdefiniowane maczniki, jpzyk
XML mote poslutyt do modelowania niemalte katdego typu dokumtntu.
Intomacje z tego rozddatu stanowlq tylko pobletny pneglqd motliwofci jezyka XML
Tak napraw* je* XML mote by6 wyJqtkowo do2my. Pa.4Wmno mu viele
odrgbnych kslqiek.
W kolejnych trzech podpunktach opisano uproszcmne pnyktady pozwalajqce sip zo-
rientowat w sposobie przetwarzania plikbw XML przez Excel.

lmportowanie zawartogci plik6w XML przy uiyclu mapy


W p q k h d z i e z rysunku 4.4 zastosowano jedm a r k Dane z kolurnny B s w do wy-
generowania harmonogramu spMy potyczki. Zaibkmy, te s m e r generuje pliki XML,
z kt6rych kaZdy zawiera dane klienta. Oto przyktad zawartdci takiego pliku:
c?ml versSorr'l.0' ?>
<Kllem>
c;mieMazwi s k d a n H o w a k < / I ~ e N a m i s k o ~
cNrKonr.a>32374-94</NrKonta>

Plik posiada pipi elementbw -


IrnleNazwl sko, HrKonta. WysokoscRaty, StopaProcentowa
i Okres. Dwa pola ( D m sp-enia i Liuba rut) sq obliczane w w c i u formu# i nie
s a uwatane za elementy danych. Zadanie polega na uzyskaniu matliwoici zaimporto-
wania takich plikbw i umieszcmia danych w odpowiednich kombrkach arkusza.

Pierwszym krokiem b e e dodanic mapy do skorosytu. S p r a w e CZY w panelu zadan


jest widocmy pnycisk hxkito X M (z menu nalety wybraf DondXWUZddto XML),
PO czym:
98 CzeSC I + Podstowowe informacje

1. Kliknij przycisk Mapy,YML w dolnej czqSci panelu zadan. Zostanie otwarte okno
dialogowe kfapyXktL.
2. Aby wySwietliC okno dialogowe Wybiari .frddto,YML,kliknij przycisk Dodaj.
3. Wybierzjeden z plik6w XML zawierajqcych dane klienta. Nie ma maczenia,
kt6ry to bcdzie plik. Jego zadaniem bedzie jedynie stwonenie schematu.
4. Kliknij OK, aby zamknqd okno dialogowe Mapy XML. W panelu zadari zostanq
wySwietlone elementy danych zawarte w pliku (rysunek 4.5).

korzysta z danych
zairnportowanych
z pliku XML

Rysunek 4.5.
Panel zadarf
zawierajacy
elementy danych

Nasgpny krok b+ie polegal na przepmwildreniu mapowania elementdw danych na


odpowiednie kom6rki arkusza. W paneh zadah nalety kliknqk element Imi Ma mi sko
i przeciqpqt go do kom6rki 83. Podobnie trzeba pmciqgnqt element NrKonta do ko-
morki 85. element WysokoscRaty do kom6rki 86, element StopaProcentowa do kom6rki
87 i wreszcie element Okres do kom6rki 08.
Rozdziat 4. + Pliki Excela 99

Na ko~icumo2na zaimportowaf plik XML. W tym celu z menu Done nalej wybrac po-
z y j e M L , a nastppnie Importuj, i zaznaczyd plik X.WL zawierajqcy dane klientn. Dane
zostanq umieszczone w odpowiednich komorkach. Aby przeliczyt kolejny harmono-gam
splay poiyczki. wystarczy zaimportowac kolejny plik,Y~UL.

lmportowanle zawartojci plik6w XML do listy


W przykladzie zarnieszczonym w poptzednim podpunkcie uzyto plikbw XML zawiem-
jqcych tylko jeden rekord. Pliki XML c z ~ s t ozawierajq wiele rekordow nazywanych
elementamipowtonajqcymi sic. Przykladem mote bye lista klientow lub dane dotycwce
wszystkich pracownikow przedsiqbiorstwa.

Aby otwonyt plik XML zawierajqcy elementy powtarzajqce siq, nalety z menu PIik
Excela wybrat pozycje Otwdrz. Po podaniu nazwy pliku Excel wyswietli okno dialogowe
Otwieraniepliku XML pokazane na rysunku 4.6. Okno zawiera trzy opcje:

Rysunek 4.6.
Okno dialogowe
Ohvieranie pliku XML

Jako 1isteXML. Po otwarciu pliku Excel nadaje danym postat listy.


J a b sbrarryi rylko do o d q ~ t uDane
. sq importowane do arkusza, ale skoroszyt
jest tylko do odczytu. Ma to zapobiegaf pnypadkowemu nadpisaniu
oryginalnego pliku.
U2yj okienka tadoh &ddto XML. Excel tworzy schemat dla danych pliku XML
i wydwietla go w panelu zadan. Same dane nie sq importowane. Pbhiej motna
dokonat mapowania elernentbw na kom6rki i zaimportowak wMciwe dane.

Na rysunku 4.7 pokazano zawartoSC pliku XML zaimportowanego do arkusza.


Elernenty powtarzajqce sit, wyfwietlone w panelu zadari, postugujq si? inn@ikonq
(p~dwdjnykataiog). Elemnty, h-t6re nlq nie puwtarrsfq, uiywajq ikony pnedstawlajqcej
pojedynczy katalog.

Eksportowanie zawartoki plIk6w XML z Excela


Aby wyeksportowad dane w formacie XML,koniectite jest dodanie do skoroszytu mapy,
Mbra musi odpowiadac uZywanyrn danym. W celu utworzenia pliku XML z menu Dane
nalety wybrac pozycje XML,a nastepnie Ehportuj.

Wbrew tcmu, czego mofna si~'spiziewaf,nie jest moAiwe wyeksportowanie jako pliku
formatu XMI, dowolnego zaluesu danych. JeSli na pnyklad w arkuszu zostanie stworzony
zakres listy, jego wyeksportowanie jako pliku XML nie bpdzie motliwe do momentu
ddqczenia do arkusza odpowiedniej mapy. Poza tym nie jest motliwe stworzenie lub
modyfiowanie mapy prry utyciu Excela.
100 C z e f t I + Podstawowe informocje

Rysunek 4.7.
Zaimportowana
zawartodC
oliku XML

W W pmedulyftzyka VBA genmjqcej prosty pllk XML w oprciu o dane z zakresu


kom6rek majduje sig w rozdzlale 27.
Eanm
Po wybraniu z menu PFik pozyc)i Zap/sz]ako zauwaiysl te Jednq z opcji JestArkusz
kalkulacyjny XML (*.ml).Urno2liwia stwouzenie pllku XML u2ywajqcego schernatu
Microsoft XMLSS. OpcJa ta nie eksportuje danych do nonalnego pllku XML.
kt6ry mote by5 odczytany pnez inne aplikacje.

Ustawienia Excela w rejestrze systemu Windows


W tym punkcie zamidcilrn kilka podstawowych informacji na temat rejestru systemu
Windows i wyjdniiern. w jaki spos6b Excel konysta z niego do pnechowywana wla-
snych ustawien.

Rejestr systernu Windows


System Windows 3.1 do przechowywania informacji o p o w i p i a c h plikdw i rejestro-
wania obiekt6w OLE uQwd bazy danych Regirpation Databare. Rejestr systemu
Windows 95 lub nowszyh wersji ronzcrryl tq bazq o infbnnacje na temat komputera
oraz konfiguracji aplikacji wsystkich typbw.

Zasadniczo rejesb jest h i e m h i m barq dimych, do )b6rtj do- dyopomjq aplikacje.


Aby przejrzeC rejestr, a nawet zmodyfihwaC jego zawatoSC (o ile wiesz, co robisz),
nalety q C programu EJutor rejestm (plik regeditme z katalogu systemu Windows).
Na rysunku 4.8 pokazano okno Edytora rejest?%.
Rozdzjal4, + Pliki Excela 101

Rysunek 4.8.
Edytor rejestn,
umoiliwia
nr-I
prreglqdanle arc-owcan ommmm~o)
i modyfikowanie .r~~mmoiormmmmmmwmltlmm~
rawartosci rejestm R l o.mmmol(I)
~ ~
arc- -fo)

QmmDIIsfIwn
aP.r.s.t.o.7.1S.Wr~rI

mmmmmmmmmmmmmommm~
PEG- amrmaO(lW
RIG- -1s In)
UG- msomlrn(rn
W G m V mmmmmmlOMl~mll0lmm~~rn~
m,z.6.aalS.*
DgpOml(1)

Jak ju2 wspomnialem, n j a ma hieranhicmg Skhda sip z kluczy i wartoki.


Wstqnie zdefiniowane klucze odpowiadajqce &6wnym nqgciom rejestnr to:
HKEY_CLASSESSROOT
HKEY-CURRENT-USER
HEY-LOCAL_U/ICHINE
m HEY-USERS
HKEY-CURRENT-CONFIG
HKEY -D Y D A T A

UstawienSa Excela
lnfonnacje m e prtez Excel sq przechowywane w nastqpujqcej cqSci rejestru:
HKEY_CVRRENT~LISER~o~meIMi~aso~\~cel!
1.01Excel.
Znajduje siq tu kilka kluczy tawierajqcych specyficme m o l c i m j q c e na spsbb
dzi2dania Excela. Ustawienia rejestru sq automatycmie uakluahiane przez Excel w mo-
mencie jego zarnykania.

Lanlm dakonaa modyflkacji w rejsstm ...


Pby cokoMek mienld w rejSm, w tym i n f m majqce by$cma maczenle dla pracy systemu,
motna uzyC nangdda regedit-exe. Ale JeSli modytikujesz niewtaklwe dane, system Windows
mole przestaC poprawnie dB&&.
Wyrbb w sobk nawyk wyblerania t menu Pllk pugfarnu €@?or @esttu polecenla EkspotTuj. Pde-
cenie umoiliwia zapisanie w fonnacie ASCII zawartoScl c a k e rejestru lub tylko wybranej WScl.
Jefli stwlerdzisz. ie zroblk9 coS nie tak. w celu pcqwrkenla rejestN do popzednlego nanu
zawsze moiesz rairnpofiowaC pllk ASCII (z menu Plik naleiy wybw po~ycjeImportuj). Aby uZYskaC
szczeg6bwe informacje, nalety zajrzed do pliku pornocy dolqczonego do Edytora mjestrv.
102 Czeit I + Podstowowe informacie

-
Excel wczytule zawartoS6 relestru systemu Windows tylko raz przy ~ ~ C h a r n i a n i u .
Ustawienla rejestru uaktuainia teZ tylko raz - gdy zostanie prawidfowo zamkniety.
JeSii Excel zawiesi sie (niestety zdarza siq to). zawartodf rejestru nie zostanie
uaktualniona. Jedli na przyktad zrnodyflkujesz jedno z ustawieri Excela. takie jak
wyjwietlanie paska statusu. dokonana zrniana nie zostanie zapisana w rejestrze
do rnomentu poprawnego zamkniecia aplikacji.
W tabeli 4.2 pokazano te sekcje rejestru, Mdrych utywa Excel 2003. W p q p a d k u rejesbu
znajdujqcego sic w twoirn kornputem motesz nie znalekC wszystkich tych sekcji.

Tabela 4.2. Dane konfiguracjjne Excels zawarte w rejestne


Sckcjs Opis
Add-in Manager Zawiera list^ dodatk6w widocmych w oknie po wybraniu z menu Narzedzia pozycji
Dodatki. Na li5cic nie q widoczne dodnrki doiqczonc do Excela. JeSli na lilcie
znajduje s i wpis
~ dotyczqcy dodntku, kt6rego j u t nie uZywasz, motes2 go usunqt
za pomocq progrnmu Mylor rejestru.
rl ulhFave Przechowje dane o ustawieniach opcji aurornatycmego znpisu.
Converters Zawiera listc dodatkowych (aewnqtrmych) konwener6w pfik6w. ktdrych
nie wbudowaoo do Excela
Delete Commands Umotliwia okrcSlenie. k t b polemia menu mstanqukryte.
Error Checking Przechowuje ustawicnia dotyczqce sprawdmia bipddw w formulach.
lnir Commands Przechowuje informacje o niestandardowych poleceniach.
Init Menus Pnechowuje infomacjc o niestmdardowych menu.
Line Print Przechowuje ustawienia utywane przy wyhialaniu rnakr programu 1-2-3. Excel
uaktualnia tp sekcjc po Worazowym wykonaniu makra programu 1-2-3
zawierajqcego opcjp lwgdu {an& Workrheet Global Defodt U N t e ) .
Oph'om Przechowuje r62nego typu ustawienia, w tym 4ciaki plik6w automatycmie
otwicranych przy umchamianiu Excela (np. dodatk6w).
Reced Files Przechowuje namy ostamiazapisanych plikow (maksymalnie 9 nazw).
Recent Templates Przechowuje nanvy ostatnio u2ywanych szablodw.
Resiliency lnfonnacje utywane p a y przywracaniu dokument6w.
Security OkreSla poziom bezpieczdsova otwieranych plikbw zawierajqcych makra.
Spell Checker Przechowujc infonnacje o opcji modulu sprawdzajyego pisowniq.

Co prawda wiekszoSC ustawiei Excela motna zmieniC za potednictwem okna dialo-


gowego Opcje, ale kilka innych przydatnych wartoki nie mo2e zostaC w ten spos6b
zmodyfikowanych (w tym przypadku rnotna poshkyC sic programem Edytor rejestm).

Kcnieczne JestJeszczejedno osttzetenie. Przed dokonaniern Jakichkolwiek zmian


w rejestrze, nale j zapomat sig z zawartokiq ramki .Zanim dokonasz modyfikacji
w rejestrze.. .".
Projektowanie
aplikacji w Excelu
Rozdziat 5.
Czym jest aplikacja
arkusza kalkulacyjnego?
W tym rozdziale spr6bujq wyjaSniC, w jaki s p o d b w praktyce sq utywane arkusze kal-
kulacyjne, co powinno porn& w oluefleniu nakladu pracy potnebnego do realizacji
wybranego projektu prograrniJtycmego. Po przeczytaniu razdzialu powiniencf doSC
dobrzc wiedziet, co mam na mylli, utywajqc terminu aplikacja arkusza Mkulacyjnego.
Z kolei po przecytaniu resay ksi- majdziesz sip na wtakiwej drodzc do zaprojekto-
wania p n y W c i u Excela whnych aplikacji arkusm kalkulacyjnego. Jednak najpienv
zajmijmy siq podstawami.

Robocza definicja
aplikacji arkusza kalkulacyjnego
Z arkuPzami kalkulacyjnymi prawdopodobnie masz do czynienia ju2 od kilku lat, jednak
zapewnc twonyle9 do@ jedynie proste arkuszc rcalizujqce r 6 h e zadania i nigdy nie
zastanawiaw siq nad og6lniejszymi zagadnieniarni, takimi jak rodzaje u2ytkownikdw
aplikacji arkusza kalkulacyjnego, czy spodb klasyfikowania tych aplikacji. Motliwe,
2e nie pabafi1byS nawet powiedziek, dlaczego utytkownicy w ogdle korzystajqz aplikacjj
arkusza kalkulacyjnego. Aby jednak stat sie dobrym programis@ musisz mac i rozurniet
te kwestie.

Pro~ramowrmiem f m eze stasowaniem a r k kaUrulacVinwhjest moccsern twotzenia


apl<kji, k t h zamiait tradyeyjnych jeyk6w pro&mowan%&c& j& C, Pascal i BASIC
utywajq arkusza kalkulacyjnego. Jednak w obu pnypadkach aplikacje bqdq stosawali
uZytkownicy, a nie ich tw6rcy.

Na potrzeby ksiw tmnin aplikncja m h a kalkulacyjnego onacza plik arkusza (lub


grupe powiwnych plikbw) opracowany przez projektanta w taki sposbb, t e inny urn-
kownik bez koniecmoici przechodzcnia obszemego szkolenia, mote z jego pomocq
wykonaf pnydama operacjp. Zgodnie z takq definicjq wiqkszog p l i 6 w arkusz). kal-
kulacyjnych nie zostanie uznana za aplikacje arkusza kalkulacyjnego. Mo2esz posiadat
na dysku hHardym dziesiqtki lub sedci takich plikdw, ale zalotc sic, te wipkszo4d z nich
nie zostala zaprojektowana do wykorzystania ~ n e innych
z uiytkownikdw.
106 Czgit II + Projektowonie aplikocji w Excelu

Dobra aplikacja arkusza kalkulacyjnego posiada nastqpujqce cechy:


m umotliwia koftcowemu utytkownikowi wykonanie zadania, ktore w przeciwnym
razie prawdopodobnie nie rnogtoby zostat walizowane,
m oferuje odpwiednie r o z w i ~ a n i eproblemu (Srodowisko arkusza kalkulacyjnego
nie zawsze jest optyrnalnym rozwiwniern),
realizuje zatotony cel (mote to byf oczywisty warunek wstqpny, ale czesto
zdarza sic, t e aplikacje go nie speiniajd,
genemje dokiadne wyniki i jest pozbawiona w o w ,
w celu wykonania pracy konysta z wtasciwych i wydajnych metod
oraz algorytmow,
wychwytuje blqdy. zanirn bedzie koniecma interwencja utytkownika (nalety
zauwatyf. t e Mqdy i wady nie sq tym samym - pr6ba dzielenia przez zero jest
blqdem, natomiast brak identyfhcji kgo b l d u p d jego wystilpieniem jest wadq),
uniemotliwia utytkownikowi pnypadkowe, b d f cclowe usuni~cie
lub modyfikowanie w m y c h kornponent6w,
interfejs aplikacji jest przcjnysty i zgodny, dzipki czemu uZytkownik zawsze wie.
jak postcpowat,
fonnuly, makra i elementy intcrfejsu q d o b m udokumentowane, dzipki czemu
w razie koniecznofci umotliwiajq dokonanie modytikacji.
m o k by6 modyfikowana p n y utyciu prostych metod bez dokonyania
wiekszych m i a n (przede wszystkim z czasem nieuniknione s q m i a n y wyrnagh
stawianych przez utytkownika),
m posiada hhvo dostqny system pornocy ofemjqcy pnydatne infomacje
pnynajmniej o podstawowych procedurach,
m mote byf przenoszona i urucharniana na dowolnym systemie p o s i a d a j m
odpowiednie opmgrarnowanie (w tym pnypadku jest to kopia wtdciwej wcnji

Motliwe jest tworzmie aplikacji a&asza kalkulacyjnego przemacmnych do zastosoh i


o r6tnym stopniu ziotonogci, pocplwszy od pmstych szablonbw do wypdnienia, a skori-
czywszy na wyjqtkowo zaawansowanych p m p m a c h u2ywajqcych niestandardowych
menu i okien dialogowych, ktbre mogqnawet nie przypominaf arkuszy kalkulacyjnych.

W ksi- c m o stosujp terminy pwjekrmt i rdytkavnik bicowy. Ich deiinicje q proste.


" - - sic twomniern aplikacji a r m kalkulacyjnego
Osoba zaimuiaca .. . to projekunr. Nad
mzbudowanymi projektami pracujc' wiel; projektantdw tworqcych re$$. Osoba ko-
nystajqca z wynik6w prac projelctanta jest uiytkownikiem koricowym (ktorego w skrocie
nazywam uiyfkavnikiem). W wielu plypadkach istnieje d m liczba u2ytkawnikow
kohcowych i czpsto jednym z nich jest projektant.
Poniewat dotark4 do tego miejsca bi@ki,bezpiecznie mogq przyje tc jest& albo pro-
jektantem aplikacji arkuna kalkulacyjnego, albo potenjalnym kandydatem na projektanm.
Rozdzial5. + Czym jest oplikocjo orkuszo kolkulacylnego~ !C7

Kim sq projektanci i czym siq zajmujq?


Od IS lat wymieniam sie metodologiami z osobami uwatajqcymi siq za projek~antow
aplikacji arkusza kalkulacyjnego. Podzielilern ich na dwie p p y : projektantow wewnctrz-
nych i zewnttrznych. Projektanci wervn(frni sq w bliskirn kontakcie z uiytkownikami
i dokladnie rozurniejq ich potrreby. W wielu pnypadkach sq tei ulytkownikarni aplikacji.
Czesto t w o r q aplikacjq, aby rozwiqzad okreilony problem. Projektanci zewn<trzni sq
zatrudniani, aby znalcif mzwiapnie problemu. W wickszofci pqp3dkow majq ogolne
pmmaczenie tworzonej aplikacji, ale nie majq szczegotow. Czasarni sa zatrudniani przez
f m p decajqq wykonanie aplikacji (jednak zanvyczaj pracujq w innym miejscu). Spora
liczba projektantdw zewnptrznych wiedzie tycie na pnyzwoitym poziomie, tworyc
aplikacje dla rdtnych odbiorc6w.

Niektdrzy projektanci, zar~wnowewnetrzni, jak i zewnetrmi, swojej pracy po9wipcajq


caly czas, ktdryrn dysponujq Z kolei inni nawet nie zdajq sobie sprawy. t e two- tego
typu programy. Tacy projektanci czesto sq firmowyrni guru, ktbny wydajq sic wiedzied
wszystko na ternat komputer6w i oprogramowania. Aplikacje arkusza kalkulacyjnego
tworzq, aby sobie &atwid pracp. Czas poiwipcony na stwonenie dobrze przernyilanej
aplikacji mote zaoszczpdzif innyrn wielu godzin szkolenia i w macmym stopniu n e -
dukowac ilosf czasu traconq na udzielanie odpowiedzi na pytania.

Projekanci aplikacji arkusza kalkulacyjnego zanvyczaj sq odpowiedzialni za nastepujqce


zadania, c e s t o realiNqc samodzielnie wszystkie lub wipkszo5C z nich:
o h l l a n i e wymagari utytkownika,
planowanie aplikacji spehiajqcej wymagania.
W okreSlanie najodpowiedniejszego interfejsu utytkownika,
tworzenie arkusza kalkulacyjnego, formuf, makr i interfejsu utytkownika.
W testowanie aplikacji przy uwzglednieniu wszystkich uzasadnionych wanmkdw,
twonmie stosunkowo odpornej aplikacji (cqsto w oparciu o wyniki testow),
tworzenie aplikacji est'etycmie wyglqdajqcej i intuicyjnej,
m dokumentowanie prac projektowych,
m prrckazanie aplikacji +ownikom,
m w razie koniecznoSci uaktualnianie aplikacji.

Pwy2sze obowiqzki projektamta bardziej szczegblowo om6wie w rozdziale 6.

Projektanci muszq w pehi rozumiet Smdowiska shriqce do tworzenia aplikacji (w tym


pnypadku jest nim Excei). Wedhrg wszelkich standarddw Excel jest prosy w utyciu.
ale zdefiniowanie tego, co jest latwe, zalety od u2ytkownika. Z pewno9ciq biegte ko-
rzystanie z Excela wymaga sporych umiejqtnolci. Z kolei twonenie p n y u2yciu Excela
nieaywialnych aplikacji arkus,za kalkulacyjnego wymaga doptqbnej wiedzy nz ternat
108 CzgfC II + Projektowanie oplikacji w Excelu

formul, funkcji, makr, niestandardowych okien dialogowych i pask6w narzqdzi. mody-


Fkowania menu o m dodatkow. OczywiScie wiekszoif utytkownikbw Excela nie spehia
tych wymagah i nic ma zamiaru zaponawac sic z tym zagadnieniami. To pozwala mi
przejif do kolejnego ternatu - klasyfikacjj utytkownikbw arkuszy kalkulacyjnych.

Klasyfikacja uiyfkownikdw arkuszy kalkulacyjnych


Pnez lata stwierdzilem, t e czqsto przydame jest klasyfikowanie uQtkownikdw arkuszy
kalkulacyjnych wedtug dW6ch kryteri6w -
doiwiadczenia Mipanego z utywaniem
arkuszy i zainteresowania zdobywaniem wiedry na ich temat.

Aby podzial ten sprecymwat, w katdym z kryten6w wyr6tnikm trzy poziomy. W cfckcie
uzyskalem dziewi@ kombmacji zawariych w tabeli 5.1. W praktyce tylko siedem wariant6w
jest ~odnychrozwatenia, poniewat zar6wno umiarkowani, jak i bardzo dofwiadczeni
&ytytkown-icy arkusy kalk;lacyjnych zazwyczaj ptzejawiaj~przynajmniejd&e zainte-
.. -
resowanie arkuszarni kalkulacvinmi. W koricu to one motywowab ich do zdobywania
doiwiadczenia. UZytkownicy o sporym doSwiadcaniu i w niewiclkim stopniu Aintere-
sowani zdobywaniem wiedq sq najgorsymi kandydatami na pmjektantbw.

B r r k zsinternowrnir Umierkmrnc Dute uintensowrnle


uinternownsie
Nicwielkie doSwiadczenie Utytkownik Ukytkownik UQtkownik / potencjalny
projekfant
Umiarkowane dofwiadclenie Brak Uytkownik Pmjckfant
D u t dohviadczenie B~ak Utytkownik Projektant

OczywiScie projektanci aplikacji arkusza kalkulacyjnego m u s q posiadat macrne d e


Jwiadczenie zwiazarie z arkuszami. a tak2e wykazywf dute zainteresawanje nimi.
Osoby majqce niehelkie do~wiadczeniez zakresuarkukzy kalkulacyjnych, ale wykamjwe
wore zaintercsowanie a potcncialnyrni kandydatami na projektant6w. Brak im jedynie
doiwiadczenia. Jdli c$Az iq prawdopodobnie-z~iczaszsip do jednej-z kate-
goni majdujqcych sip w ostatniej kolurnnie tabeli.

Odbiorcy aplikacji arkusza kalkulacyjnego


Pozostale pola tabeli identyfikujq uytkownikbw kodcowych arkusarkuszy katkulacyjnych
za ktckych m o h a u w W odbiorcbw aplikacji arkusza kalkulacyjnego. Gdy projdrmjesz
aplikacjq arkusza kalkulacyjnego przeznaczonq dla innych os6b, koniccmc jest stwier-
dzenie, do ktbrej kategorii moma je zaklasyfiowat.

Osoby z m aw ddwiadneniem i brakicm zainhmowania prawdopodobnie tworzq


najwi~kszysegment spdr6d wszystkich u2ytkownik6w arkuszy kalkulacyjnych. Nie-
ktdny m u s q w pmcy korzystad z arkusza kalkulacyjnego, ale W a j q go tylko w takim
zakrcsie, jaki jest potrzebny do wykonywania obowipk6w sWbowych. Dysponujq za-
nvyczaj niewielkq w i e h . na temat komputerow i opmgramowania, a talde nvykle nie
Rozdzial5. + Czym jest oplikocjo orkvszo kolkulacyjnego? 109

przejawiajqzainteresowaniajej poszerzaniern. Mogqnawet traktowat kornputery w troche


bojailiwy sposbb. Cysto nie wiedq nawet, jakiej wersji arkusza kalkulacyjnego utywaja
i nie majq jego motliwobci. Oczywiicie aplikacje tworzone z rnyslq o tej grupie utyt-
-
kownikow nie moga wzbudzaC obaw m u s q by6 proste, pnyjame, latwe w obstudze
i odpome na Mpdy.

Z punktu widzenia projektanta bardziej interesujqcq grupq sq utytkownicy majqcy nie-


wielkie lub umiarkowane doiwiadczenie zwiqzane z arkuszami kalkulacyjnymi, ale re2
bardziej zainteresowani zdobywaniern wiedzy. Tego typu uiytkownicy rozumiejq formuly.
poshgujq sic wbudowanymi funkcjami arkusza i orientujq sip w ogdlnych motliwoSciach
produktu. Zazwyczaj tet doceniajq trud wtotony w stworzenie aplikacji i czpsto sq pod
w d e n i e m twoich staraf~.Co ciekawsze, c q s t o podsuwajq ~ a k o r n i t epomysly popra-
wiajqce jakoSl aplikacji. Aplikacje zapmjektowane z mySlq o tej grupie t e t powinny
by6 p q j a z n e w obsiudze (proste w utyciu i odpome na blqdy), ale tet mogq byt bardziej
zto2one i ofemwad wiqksze rnotliwoici dostosowywania n i t programy stwonone dla mniej
doiwiadczonych i zaintercsowanych utytkownikdw.

przy uiyciu aplikacji arkusza kalkulacyjnego


Om6wilem ju2 podstawowe zagadnienia dotyczqce a p l ~ h c j iarkusza kalkulacyjnego,
sklasyfikowalem ich koncowych u2ytkownik6w i pmjektantbw, a nawet sprbbowalem
dociec, dlaczego w ogble sq utywane arkusze kalkulacyjne. Teraz para przyjrzed siq za-
daniom, do wykonania ktbrych nadajq sic aplikacje arkusza kalkulacyjnego.

Tradycyjnie a r k ~ ~ tkalkulacyjne
e s t o s o m o do wykonywania obliczen numerycmy&
w wipkszo9ci cechujqcych sip intw&ywnolciz+ Doskmalym tego pnykladem q fir-
mowe budtety. Po stworzeniu modelu (wi* sip to ze zdefmiowaniem fornut) ppraca
nad W e t e m sprowadza sic do wprowadzania wartoSci i analizowania wynik6w. Cqsto
tworzenie b u W 6 w sprowadza siq jedynie do przyddelenia stdych zasob6w r62nym
zadaniom i zaprezentowania wynikdw p n y utyciu odpowiedaio atrakcyjnego Iub pny-
najmniej aytelnego fonnatu. OczywiScie arkusz kallculacyjny nadaje sit do tcgo idealnie.

Jednak czas tworzenia a h q o zastosowaniach padabnych do tych mkganych z pnygo-


towpanicm budtetu prawdopodobnie stanowi niewielk~c& czasu po8wi~anegona
projektowanie aplikacji arkusza kalkulacyjnego. Zastosowania arkusza kalkulacyjnego
(szczeg6lnie w ostarnich latach) czpsto wykraczajq paza zalcres zadaii. z mySlq o ktwch
tego typu oprograrnowanie pocqtkowo bylo tworzone.

Oto kilka pnyldad6w niemdycyjnych z a s b s o h arkusza kahlacyjnego takiego, jak


Excel:
Nmzg&ieprezentacji. Ply minimalnym nakladzie pracy. u2ywajq tylko Excelq
moma na pnyktad stwonyC atrakcyjny interaktywny ekranowy pokaz slajddw.
w Nangdrie umotliwfujqcewprm&anie dunych. W przypgdku powtanajzlcych
siq a d d zwiqw~ychz wprowadzaniem danych arkusz kalkulacyjny c q s t o jest
najwydajniejszymnamylziem. Dane mom byt nastqpnie eksportowane w rbaych
formatach i -wane w innych progmnach.
110, Czqst II + Projektowanie aplikocji w Excelu

B Generutorfonnularzy. Wiele os6b mo2e m a t , t e aby wydrukowac amakcyjnie


wyglqdajace formulam, wystarczy wykorzystat funkcje formatujqce Excela mniast
uczyt sip obshgi oprogramowania DTP (na przyklad PageMakera).
B Edyror tekrru. Funkcje przetwanajqce tekst dostcpne w katdym arkuszu
kalkulacyjnyrn urnotliwiajq manipulowanie tekstem na wiele sposobow.
kt6rych nie oferuje edytor tekstu.
B Platforma obslugujqcaproste gry. OEywiScie Excela nie stworzono w tym celu.
Jednak utywajqc nnanpdzi dostepnych w Excelu i innych arkuszach kalkulacyjnych
napisalem kilka interesujqcych gier strategicznych.
I
-
WszechstronnoSC erkusy kalkulacyjnych ma tet istomy minus prbbuje sic ich uqwac
do rozwiqzania katdego problemu. kt6ry wystapi, a przeciet niejednokrotnie lepiej byjoby
posluqt siq innyrn narztdziern.

Podstawowe kategorie
aplikacji arkusza kalkulacyjnego
WJr6d aplikacji arkusq kalkulacyjnych m o m wyr6fniC kilka podstawowych kategorii.
Ma to na celu uzyskanie lepszej o r i m j i w funkcjach, jakie te aplikacje spdniaja Oczywi-
Scie zastosowany podzial jest calkowicie umowny i oparty w y l m i e na moim dogwiad- I
I
neniu. Ponadto w pewnym stopniu kategorie sip polaywajq, jednak swoim zakresem I

obejmujq wiqksz09C aplikacji arkusm kalkulacyjnego, Wd6n widzialern i laprojektowakm.

Nazwy kategorii q nastquj~ce:


II
I

B
arkurn kalkulacyjne p m a c z o n e wykqcznie do u 2 y h prywarnego,
aplikacje jednego w o w n i k q
I
B aplikacje typu ,,spaghettin,
I
aplikacje utytkowe,
I
jednoblokowe budtcty,
modele wanmkowe,
I
I
aplikacje przechowujqw h e i u d d e l a j w do nich dam, 1

aplikacje komunikujwe siq z b m i danyeh,


aplikacje ,pod klucz".

W kolejnych podpunktach om4wiq poszc~eg6lnekategorie.


Rozdziai 5. 4 Czyrn jest aplikacjo arkuszo kolkulacyjnego? lli

Arkusze kalkulacyjne twonone szybko i niestarclnnie


Prawdopodobnie sq to najczqsciej spotykane arkusze. Wickszo9C z nich jest niewizlka
i projektowana w celu szybkiego rozwiqzania problemu lub uzyskania odpowiedzi na
pytanie. Dla pnykhdu zaWmy, ke zamierzasz kupit nowy samochM. w m i e u z czym
pnygotowujesz symulacjc splat dla romych kredyt6w. aby wybrac takq wysokoit mie-
siecznej ray, kt6m ciq satysfakcjonuje. Mote tet byt ci pohzebny ~~~s p~edsrawiajqcy
poziom sprzedaty firmy w zeszbm roku z podziatem na miesiqce. Szybko wprowadzxz
12 wartoici i natychmiast uzyskujesz wykres. ktory wklejasz w oknie edytora tekstu.

W obu pmjtocmych sytuacjach pnwdopodobnie caiy model zdefiniujesz w cirgu kilku


minut i z pewnoiciq nie poiwiqcisz czasu na udokumentowanie efektow pncy. Pnwdo-
podobnienie pmyjdzie ;i na my91 twonenie jakichkolwiek m a h lub niestandardowych
okien dialogowych. Mottsz nawet dojit do wniosku, t e takie proste arkusze kalkula-
cyjne nie q warte zapisania na dysku. Oczywiicie arkusze kalkulacyjne zaliczajqce siq
do tej kategorii nie sq aplikacjami.

Arkusze kalkulacyjne
pneznaczone wylqcznie do u5ytku prywatnego
J& sama nazwa wskazuje, nikt poza projektantem nie mote u2ywat takich arkuszy, ani
dysponowac dostppem do nich. Pnyktadem takiego arkusza mote byC plik, w ktbrym
sq przechowywane informacje o podatku dochodowym. Utytkownik otwiera go kazdo-
ramwo, gdy o v a poem czek poniesie koszty m i m e z prowadzonymi interesami
lub kupi produkt, kt6rego koszt mote odliczyC od podatku. Kolejnym pnykiadem jest
arkusz kalkulacyjny shkqcy do rejestracji czasu pracy podleglych pracownikow (mol-
nienia lekarskie, urlopy itp).

W odr62nieniu od arkuszy ombwionych poprzednio, arkusy tego typu u j w a siq wiq-


cej n i i jdm raz i zapisuje siq je w plikach. Jednak r6wniet w tym pnypadku nie warto
poSwiccaf zbyt wiele crasu na ich dopracowywanie. M o a a zastosowad jakie9 pro*
formatowanie, ale nic ponadto. Taki arkusz pozbawiony jest tet detekcji b?$dow, po-
niewat d z i a h i e definiowanych f o n d jest wzumiale. Posiadana wiedza j e a wystar-
uejqca, aby uniknat wpmwadzania danych, kt6re spowodujq wygenerowanie bt~dnych
wynikdw. J d l i wysuipi Mqd, od razu wiadorno, co jest jego powodem.

Arkwzy kaikulacyjnych zaliczajqcych siq do tej kategorii nie mo-a uznat za aplikacje,
mimo te wraz z udvwem czasu ich z+otonoSC sie zwieksza Pmxkiadowo dvsponuie
2

skoroszytern Excels, !&rego -am do ~ledzeniamo&h dochodbw w oparci" o ich


M b .Skomszyt byi prosty, gdy go tworrylem, ale main tcndencje do regularnego po-
s z e m i a go o dodatki takie, jak Wksza ti& formui podsumowujacych, lepsze forma-
towanie, a nawet w y h q 4 w i e t l a j w dochody wedhg miesiecy. Ostatnia rnodyV6acja
skoroszytu polegda na dodaniu do w y h linii najlepszego dopasowania, ktorej zadaniem
byjo okrdlenie dochodu w oparciu o poprtednie trendy. Prawdopodobnie nadal k d q roz-
budowywaI plik i ostatecmie zakwalifihjq p do kategwii aplikacji jednego Wytkozytkownika.
112 Czesc H + Projektowanie oplikocji w Excelu

Aplikacje jednego ulyfkownika


Tego typu aplikacji u-ajq tylko ich tw6rcy, ale ze wzglpdu na stopieri zlotonoBci nie
motna ich w a c za przeznaczone wylqcmie do utytku prywatnego. Kiedyi zaprojek-
towatem skoroszyt, ktdry sledti1 zarejestrowanych u2ytkownikow moich aplikacji typu
shareware. Pocm$kowo byla to prosta arkuszowa baza danych (zaliczana do kategorii
,,przemacwne wytqcmie do utytku prywatnego"), ale pdtniej zdaiem sobie sprawc, t e
za jej pornocqm6glbym generowat etykiety na koperp i fa-. Pewnego dnia twonenie
makr zajelo mi okoto godziny, po czym uiwiadomitem sobie, t e aplikacja mienila sit
z przemaczonej wylqcznie do urytku prywatnego na aplikacjq jednego utytkownika.

Nikt inny nie utyje tej aplikacji, ale jest to bardzo prosty w u&ciu, niewielki i povcmy
program. W tym szczeg6lnym przypadku czas poJwivony na zamianp aplikacji z prze-
naczonej wyiqcmie do uwku prywatnego na aplikacje jednego W k o w n i k a by1 zde-
cydowanie dobne wykorystany, poniewat. dziqki temu zawzqdzilern kilka godzii pracy.
Aktualnie aplikacja posiada przyciski wykonujqm rnalrra, a ponadm w z n a q c y r n stopniu
zmniejszyiern Ijczh operacji z w i q n y c h z mechanizmem Sledzenia klientbw i wysyta-
niem pocztq produktdw.

Twornnie aplikacji jednega uZytkownika jest makomitym s p s o b m nabycia wprawy


w atywaniu narqdi pmgrarnistymych Excela Prrykladowo motes2 n a u w siq twanyC
niestandardowe okna dialogowe, modyfikowat menu, projektowad niestandardowe paski
mrzqtzi,pisat rnakra w j ~ y k uV8A itd. Dojdziesz do wniosku, t e realizaj a warcoScio-
wego projektu (nawet, jdli stanowi wartoSt tylko dla ciebie) jest najlcpszym sposobem
opanowania mawansowanych funkcji Excela lub innego oprogramowania.

Aplikacje typu ,spaghetti"


Aplikucjq fypu ,,spugheni" nazywam arkusz kalkulacyjny bardzo c w o spotykanego
typu. Termin wywodzi siq stqd, t e czqSci aplikacji sqtrudne do agarnipcia, podobnie jak
taler2 spaghetti. Na pcqtlar w i @ s o 6 C tego typu apljkacji jes2 rozqfnie ukimmkowanyni
aplikacjami jedncgo Wkownika. Jednak z czasem sq p m k a q w a n e innym mobom,
!dore wprowadzajjq wlasne modyfikacje. Wraz zc zmmq wymagai i rotajq ~ o ~ ' l l i k 4 w
dodawane sq nowe c q k i , natomiast im q ignorowane. Bardno srybko gubi sip po-
cqtkowy cel skoroszytu. W efekcie plik jest cztsto stosowany, ale tak naprawdq nikt
dokladnie nie wie, jakie sqmechanizmy jego dziaiania

K d y , kto miai do czynienia z aplikacjq typu ,spaghettin, wie, 2e powinna zmtaC d-


kowicie pmbudowana. Jednak ze wzgl@u na to, k nikt tak naprawde jej nie m m i e ,
z u m e m czasu sytuacja mykle sip pogarsza. Konsultanci specjalizujag sip w a h -
szach kalkulacyjnych zarabiaja spore pieni- na pmbudowywaniu Qkich aplikacji.
W wi&z&i przypadkdw najefektywniejszym rozwiqzaniem jest ponowne okreilenie
wyrnagah utytkownika i stwomnie aplkacji ML podstaw.

Apflkacje uiytkowe
Nikt nie jest cafkowicie zadowolony z posisiadanego arkusza kalkulacyjnego. OsobiScie
uwatam, 2e Excel mimo wysokiejjak& nadal ma spare W 6 w . W ten spos6b p r z d d q
do nastgpnej kategorii aplikacji arkusg kalkulacyjnych, c y l i oplikacji qtkowych. Sq
Rordziot 5. + Czym jest aplikacja arkusza kalkulacyjnego? 113

to specjalne narqdzia wykonujace powtarmine zadania. JdIi na p r y k h d czcsto impor-


tujesz w Excelu tekst, mote byC przydame q c i e kilku dodatkolwych poleceri zajmujqcych
siq jego przetwarzaniern. Przykhdern jest polecenie konwertujqce maki zamaczonego
tebtu na duke (bez zastosowania forrnul). Jakie jest rozwimnie? Nale j stworzyC na-
nedzie przetwarzajqce tekst, ktbre wykonuje doktadnie to, czego oczekujesz
Nangdzle Power UtlIRy Pak jest zblorem apllkacjl utytkowych przemaczonych
dla kcela. dztalajqcych podobnie jak jego standardowe polecenia. Sfnrzylern je
w ceiu rozszerzenla rno2llwolci prograrnu. Na do@zonym dysku CD-ROM znajduje s i t
wersja shareware tego nacqdzia. Dla zalnteresowanych dostepflyjest tei jego kompletny
kod fr6dtowy napisany w jvzyku VBA.

Aplikacje Uzyaowe z natury q bardm ogdlne. W i p W C makr jest tworzonych z myflq


o wykonaniu okdlonej opcracji, pnetwamjqcej konkrctny typ danych w wybranym
skoroszycie. Dobra aplikacja w o w a zasadniczo dziata jak standardowe polecenie
Excela Innymi slowy, program utytkowy musi okreJliC kontekst. w jakim jest wykony-
wane polecenie, i wdrotyt odpowiednie dziakmie. Zazwyczaj w tym celu tt-zeba zastosowak
kod obshgujqcy bdy,d z i ~ kktdremu
i nmqdzie poradzi sobie z dowolnq sytuacjq.

Aplikacje utytkowe zawsze konystajq z makr, mogq teZ niestandardowych


okien dialogowych. Na szn@cie Excel w macznym stopniu upraszeza twonenie takich
narzqizi. Moga one zwtaf m i e n i o n e na dodatki i po przylqczeniu do interfejsu utyt-
kownika, stanowit m$f Excela.
Zagadnlenle tworamla epllkacjl utytkowych Jest na tyle Istotne, k poSwlecikrn mu
m(y rozdzlal16., w ktdrym ombwikm, w jski spos6b pmj ujciu lezyka YBA stworryC
wlasne narzgcMa mp6)pracujqce z Excelern.

D o d d d zawierajqce funkcje arkusza


Excel posiada.wkle funkcji arlmsza, kt6n motna stosowa6 w hrmuiach. M o g b sip zda-
rzy-5, Ze ptrz&m&J olaeSIonj hnkcji, ale stwierddled, b taka nie istnieje. Co w takiej
sytuacji nobid? Wystarcy ~ n z utyciu
y j w k a VBA stwonyC wtasnq funkcjp. Niestan-
dardowe fimkcjc arkusza w o moga upro3ciC fonnuly i spmwiC, te modyfikowanie
a h = kalkulacyjnego bedzje pmstsze.

RozcMaI10. &era Infonnacje na ternat tworzenla nlestandardowych funkcji arkusza


wmz ze sporq l i d q r n t a d b w .

Jednoblokowe budf edy


Ugwajac terminnj ~ buubt, mam o na myfli arkusz
~ kalkulacyjny (niekoniecz-
nie zawierajqcy model budtau) zasadniczo sldadajqcy sip z jednego bloku kom6rek.
Gbrny wiersz mote zawied nazwy powhpne z czascm (miesiqce. kwartaly lub lata),
natomiast koltmma pototona najbardziej na lewo zanvyczaj identytikuje okrdlone ka-
tegorie. Zwykle dolny wiersz i skrajna prawa kolumna pnechowujq fonnub sumujqce
wartoSci W arkpuu m a g q ~ w a sia t formuly obliczajqce sumy a e c i o w e d h wartdci
zawartych w bloku.
1:4 Cz&c I1 + Projektowanie aplikacji w Excelu

Tego typu a r h z kalkulacyjny jest spotykany bardzo c-. Program VisiCalc (pienvszy
arkusz kalkulacyjny na Swiecie) z o s d zapmjektowany z my4lq o budowaniu takich modeli.
W wiqkszo4ci pnypadkow jednoblokowe budtety nie sa. wlaSciwymi kandydatarni na
aplikacje, poniewat sq zbyt proste. Jednak zdanajq sic wyjqtki. Dla pnyk(adu motna
wziqt pod uwagq zarnian~na aplikacje arkusza, ktdrego model jest oparty na trudnym
w obshdze tr6jwymiarowym arkuszu. Mope tet by6 to arkusz konsolidujqcy dane pobieiane
z innych plik6w lub arkusz utywany p n e z kierownikdw dziaiow, ktorzy nie rozumiejq
dzialbnia arkusza kalkulacyjnego.

Modele warunkowe
Wiele osdb uwata modele wcuunkows za najlepsq przyklad aplikacji arkusza kalkula-
cyjnego. Motliwo54 natychmiastowego ponownego przeliczenia tysiqcy formul sprawia,
t e arkusz kalkulacyjny idealnie nadaje sip do wykonywania modeli finansowych zalef-
nych od wartoSci zmiennych. WMciwie prawie katdy arkusz kalkulacyjny zawierajqcy
formuly motna m a 6 za model warunkowy (tego typu arkusze c w t o sq rozprowadzane
w postaci szablonbw). Zmiana wartohci kom6rki utywanej p r a z fonnuiq jest jak zadanie
pytania: ,.Co siq stanie, je8li ...?" Jednak ja postrzegarn tq kategorie nieco inaczej. Do
modeli warunkowych zaliczmn arkusze kalkulacyjne zaprojektowane w y + m i e w celu
systematycmego analizowania efektdw wprowadzania rbtnych wartogci.

Modele w d o w c to aplikacje tworzane z myilq o utytkowniku. Wypos&mie aplikacji


w dobry interfejs utytkownika mote w du2ym stopniu uproSciC jej obsh~gpkatdemu,
nawet kornputerowemu laikowi. Dla przyktadu m o a a utworzy6 interfejs urnoMiwiajqcy 5

wprowadzenie nazw dla r6tnych zestawbw tatDtefi a nastqmie natychmiastowe r a p o m i e


siq z wynikami uzyskanyrni dla wybranego wariantu. Na koniec, po klikniviu jednego
przycisku, bqdzie motna stwonyC doskmale sformatowany w y h s podsumowujqcy.

Aplikacje pnxhowuJqcedane I udzielajqce do nich dostepu


Arkusze kalkulacyjm q s t o sh@ #doprzechowywania wynik6w mdyfikacji list lub I

niewielkich k danych. Wi&&t os6b w a Q b przegl&mie i manipulowanie danymi


jest o wiele prostsze pny utyciu arkusm kalkulacyjnego nit typowego oprogramowania
bazodanowego. Poczaczawszy od Excela 97, M y arkusz zawiera 65 536 wierszy, co sta-
nowi pnyroa m a c q o nvipkszajqcy rno2liwoSci tastow~varibazodanowych.
..
Z arkusy kalkulacyjnych zalimmych do rej kategorii cqsto powstajq prawdziwe aplikacje,
nvtaszcza gdy Wytkownikom kodcowyrn zalw na wykonywaniu Srednio zaawanso-
wanych operacji. Jednak wbudowane okno dialogowe Formulm i polecenie AutoFi/tr
tak bardzo ulaoviajq obstuge baz danych, Le nawd poczqtkujqcy utytkownicy w kr6tkim
czasie sq w stanie opanowat wykonywanie prostych operacji bamdanowych.

W przypadku W e j Abnych mtoswah opartych na wielu tabel- potnipkg kt6lymi '


mdy zdefiniowane relacje, lepiej skonystat z prawdz'iwej a p l k j i bazodanowej, takiej
jak Access.
Rozdzial5. + Czym jest aplikacja arkusza kalkulccyjnego? 115

Aplikacje komunikujqce siq z bazami danych


Coraz czeiciej arkusze kalkutacyjne sq utywane w celu polqczenia sic z zewnctrzn:;rni
bazami danych. Stosujqc narzqdzia oferowane przez Excel, utytkownicy arkusq kalkula-
cyjnych mogquzyskaC dostep do danych prrechowywanych w zewn~trmychplikach -
nawet posiadajqcych r d h e fomaty. W odniesieniu do aplikacji s h q c e j do tego celu
czasami jest stosowany termin EIS (ang. Execltrivr information System). Tego iypu
system Iqczy dane z kilku kr6det i dokonuje dla utytkownikbw ich zestawienia.

Konieanoit! ~d;lezeniasic z m e t r.z n y.m i bazami danych czcsto wywohie przeratenie


u pocztltkujq&ch utytkov+kk6w. A zatem system jest idealnq gplik&ji opartq na
Excelu, poniewatjej podstawowym celem jest zanvyczaj uproszczenie obstugi.

Aplikacje ,pod klucz"


Arkusze kalkulacyjne zaliczane do ostamiej kategorii sq najbardziej zlotone. Utywajqc
terminu ,pod kluu", rnam na rnyili produkt gotowy do *cia, wymagajacy od koncowego
u2ytkownika nieznacmego lub tadnego przygotowania. Przykladowo po zatadowaniu
pliku utytkomik widzi interfejs utytkownika, ktdry sprawia, t e decyzje sq podejmo-
wane bez tadnych v~@liwo$ci. Aplikacje ,,pod klucz" mogq nawet wyglqdat talc, jakby
nie opierafy sip na arkuszu kalkulacyjnym. Czqsto utytkownik prowadzi interakcjp nie
z kom6rkami, ale wytqcmie z oknami dialogowymi.

W c i w i e wiele aplikacji n a l a c y c h do ombwionych w tym rozdziale kategorii mote


& zamienionych na aplikacje ,,pod klucz".. Ich wspdnyrni elementami o !uytycmyrn
maczmiu, Ib6re omlrwiq w pomstatej cyfci ksiqtki, sq: odpowiednie planowanie, obshga
Meddw i projektowanie interfejsu utytkownika.
Rozdziat 6.
Podstawy
projektowania aplikacji
arkusza kalkulacyjnego
Celem tego wldtialu jest pmentaeja kilku ogdnych wytycmych, pnydatnych w trakcje
nauki tworzmia efektywnych aplikacji przy utyciu Excela. Nie istnieje prosta i nieza-
wodna recepta dotyczqca projektowania wydajnych aplikacji arhsza kalkulacyjnego.
Katdy posiada wtasny sty1 tworzenia takich aplikacji. Nie znam najllepszej metody
sprawdzajqcej siq w kazdym przypadh. Ponadto katdy rcalizowany projekt jest imy,
a zatem poazebuje indywidualnego podejdcia. Wreszcie wymagania i ogblna postawa
oGb, z ktorymi kdziesz wsp6lpracowa4 (lub dla kt6rych kdziesz praeowao, r6wniet
w-plywajq na sposbb, w jaki bedzie pnebiegal proces projektowania.

Podsfawowe etapy projektowania


~ p r p d n h roxlziale, pmjektanci aplikacji arkuszy kahlacyjnych
Jak w s p o m n w
razwycnij wykonujq nastqpujqce zadania:
okmllanie wymagali e o w n i k a ,
R planowanis aplikacji spelniajqccj wymagania,
okreSlanie najodpowiedniejszego interfejsu uzydcormika.
tworamie arkusza kalkulaeyjnego, fonnul, makr i interfcjsu utytkownika,
m t e s t o m i e aplikacji oraz wykrywanie i usuwanie b$dbw,
R t w o m i e dpomej aplikacji,
twonenje aplikacji inbuicyjnej i estetycmie wyglqdajqcej,
R dokumemtowanie prac projektowych,
stwwzenie systemu pomocy i dokumentacji przepraczonej dla uZytkomika.
prrekazanie aplikacji utytkownikom,
uaktualnianie aplikacji w m i e konieczno6ci.
118 Cze% II t Projektowanie aplikocji w Excelu

Nie wszystkie wymienione c z y ~ o f csq


i wymagane w przypadku W d e j aplikacji. Poza tym
koleinoSC ich wykonywania mote by6 inna w r6tnych proiektach. Kaida czynnoe zostata
omiwiona w dalszej czqSci rozdziilu. W wiekszofci br&adkbw techniczne szczegoty
zawarto w kolejnych rozdziaiach.

Okreglenie wymagah uiytkownika


Jednq z pierwszych czynnobci projektanta aplikacji arkusza kalkulacyjnego jest dokladna
identyfikacja wymagai utytkownikdw koncowych. B&dy w ocenie ptrzeb utytkownikow
czqsto prowadq do zwiekszenia nakhdu pracy, gdy w gotowej aplikacji trzeba doko-
nywa6 poprawek, aby aplikacja wykonywala to, czego sip naprawde od niej oczekuje.

W niektbrych sytuacjach projektant ma bliski kontakt z kodcowymi ukytkownikami, a nawet


mote by6 jednym z nich. W innych - na pnyklad dotyczy to konsultantbw realizujq-
cych projekt dla nowego klienta - dysponuje niewielkq lub tadnq wiedzq na temat
m k o w n i k d w lub charaktm ich pracy.

W jaki s p o d b o W l i C wyrnagania wkytkownik6w ko6wwych? Nale2y spotka6 sip z nimi


i zadaC irn bardw konkretm pytania Jeszcze lepsze b&e zapisanie odpowiedzi, stwo-
rzenie diagram6w przep4ywu informacji, zwrkenie uwagi na mniej istotne szczegttly
i wykonanie wszelkich innych czynnoki, kt6n zagwarantuja 2e projektowane oprogra-
mowanie hdzie zgodne z oczekiwaniami. Ponitej wymieniono kilka wytycmych, ktore
m o m utatwi6 realizowanie tego etapu pmjektu.
Nie zakladaj, te masz wyrnagania utytkownikdw. Zgadywanie na tym etapie
pmjektu prawie zawsze jmt przynynqp62niejszych problem6w.
W rniarq mokliwobci rommwiaj bezpoirednio z kohcowymi utytkownikami
aplikacji, a nie tylko z dynktorem lub kierownikiem.
m Dowiedz siq, czy aktualnie sq czynione jakiekolwiek stamnia majqce na cclu
spelnienie wymagah utytkownik6w. Poprzez zwykk zaadaptowanie istniejqcej I

aplikacji rnotesz sobie zaoszczqdzid wiele pracy. W ostatecmoJci pnyjrzenie sip


aktualnie stosowanym mzwiqpniom ponvoli zapozna6 siq z ich funkcjonowaniern.
Zidentyfikuj -by dostppne po sbonie utydrownika. Motesz na prryktad
spr6bowad okr&lif, c y istniejqjakiekolwiek ograniczenia spmtowe
lub programowe, ktbre h d q musiaIy zostad mi* pod uwagq.
w W mimq motliwdci okreSl, j a k e konkretne platformy sprzwwe k s t q w e .
JeSli s t w m n a aplikacja bqdzie ugrwana na wolniejsqch systemach, rneba
wzi@ to pod uwagq. Zapomaj siq zzawartolciq podpunktu ,.SqbkoSt systemu"
znajdujqcego sip na koncu mzdzialu.
Zidentylikuj m e wersje Excela Co prawda, Microsoft robi wszystko,
co rnodiwe, aby uzyrkownicy jak najszybciej aktualizowali oprogramowanie,
ale malaziem osacowania, wedlug ktbrych mniej nit 50% utytkownik6w
pakietu Mimosoj Ofice posiada jego najnowsq wwsje.
Bqd2 Swiadom poziornu umiej@noSci koricowych u2ytkownik6w. Taka informacja
porno* w odpowiednirn zaprojektowaniu apiikacji.
Rozdzial6. + Podstowv ~roiektowaniao~likaciiarkusza kalkulacvineao ;I9

OkreSI czas utytkowania aplikacji i upewnij siq, czy w trakcie nwania projektu
z nia. nviqzanego sq planowane jakiekolwiek zmiany. Dysponujqc taka.
infonnacjq, motesz okref lit naktad pracy potrzebny do nealizowania projektu
i latwiej zaplanujesz zmiany.

Ostatnia uwaga. Nie bqd2 zaskoczony, jesli specyfikacja projektu zmieni sip przed a-
konczeniem prac. Jest to doSt powszechne, dlatego majdziesz sic w lepszej sytuacji.
gdy lamiast okazywat zaskoczenie, przygotujesz siq na miany. Wystarczy siq upewnid,
czy w urnowie (jdli takq zawarto) wspomniano o zmianie specyfikacji.

Planowanie aplikacji
spetniajqcej wymagania uzytkownika
Gdy wymagania kohcowych utytkownikow z o s t a ~ okreSlone,
~ bardzo kusqce jest natych-
miastowe rozpoczpcie twonenia aplikacji w Excelu. JeSli ktoS tak postqpuje, uswiadom
mu, tc jest to z4a metoda. Budowniczowie nie stawiajq domu bez zestawu planow, row-
niet i ty nie powinienei improwizowat, t w o m c aplikacjc. Co prawda, strona fonnalna
planu zalety od skali pmjektu i ogolnego stylu pracy projektanta, ale przynajmniej troche
czasu tneba pogwiqcit celowi projektu i okreSleniu etapow postwowania.

Zanim podwiniesz ~ k a w yi zasiqdziesz przy klawiaturze, przez chwilq zastandw sip nad
r6tnymi metodami umotliwiajqcymi rozwiqzanie pmblemu. WMnie na tym etapie wiele
zyskuje sit dziqki dogtebnej majomoSci Excela Unikanie wejicia w Slepe uliczki zawsze
jest najlepszym sposobem postppowania.

Dziesiviu 162nych ekspert6w. kt6rych poprosisz o zaprojektowanie aplikacji w oparciu


o bardm prccyzyjnq specyfikacjp, zapewne pnygotuje dziesiqC r6tnych implementacji
projektu spdniajqcych podane wymagania. SpoSrbd zaproponowanych rozwiqmi kilka
z p e m o k i q b e e lepszych ad imych, poniewa2 Excel czesto umotliwia wykonanie
okdlonego zadania na kilka htnych sposobbw. JeSli doglpbnie masz ten program, b p
dziesz mial ddC d o h r o m a n i e w dostqpnych metodach i od razu wybiemsz tp, ktdra
najlepiej sprawdzi sic w projekcie. Cqsto efektem odrobiny kreatywnofci mote byt
niezwykle rozwiqzanie, macmie lepsze od innych.

W p-tkowej fazie planowania nalety wziqt pod uwagq nastppujqce kwestie:


Strukiuraplikdw. Zastandw sip, czy chcesz stworzyt jeden skomszyt zawierajqcy
wiele arkuszy, ny kilka jednoarkuszowych skoroszytyt6w lub plik szablonu.
ShuGtura danych. Zawsze powinienel zastanowid sip nad struktuq danych.
Wi@e sip z tym w y b pomi@zy utyciem plikdw nwnetrmej bazy danych.
a arkuszami, w kt6rych sqprzechowywane wszystkie dane.
Zastwowanie formul lub procedur jezyka YEA. Do wykonywania obliczen r n o ~ a
u@ formul, albo nalety napisat procedury w j~zykuVBA. Obie metody majq
swoje zalety i wady.
120 CzeSC II + Projektowanie oplikacji w Excelu

r Zasrasowanie dodafkdw czyplikbw XLS.W niektdrych pnypadkach dodatek to


najlepsza postat ostatecmego produktu. A mote warto zastosowat dodatek razem
ze standardowym skoroszytem?
Wersja Excela. Czy tworzona aplikacja bedzie uwvana tylko z Excelcm 2003.
czy mote tet z wenjq2000 lub 2002? A jak ptzedstawia sip sytuacja w przypadku
wersji Excela omacmnych numerami 97, 95 i 5? Czy aplikacja bqdzje tet
uruchamiana na komputerze Macintosh? Sq to bardzo w&ne kwestie, poniewat
katda nowa wersja Excela jest poszenona o funkcje, kt6re nie by& dostepne
w poprzednich wersjach.
Obshrgn biqddw. O b h g a blpd6w jest podstawowq kwestiq dotyczqcq aplikacji.
Konieczne jest okresienie, czy aplikacja bedzie wykrywala i obshgiwaia Mqdy.
JeSli na przyklad stworzona aplikacja stosuje forrnatowanie w aktywnym arkuszu,
konieme bedrje obslutenie prtypadku, w kt6rym zostanie uaktywniony arkusz
wykresu.
Zcrrtosavanie specjalnychfinkcji, Jefli aplikacja dokonuje sumowania wielu
.
danvch.. warto sie zastanowit nad zastosowaniem tabeli vrnstawnei Excela.
M o h a tet w eel; sprawdzania poprawndci wpmwabbych danyEh postutyt sip
excelowskq W c j q walidacji danych.
Kwe~liemiqronez nydajdciq. Nalw zastanowiC sip nad nVi@szcniem szybkdci
i efektywnoSci a p l i i j i na etapie jej projektowania, a nie wtcdy, gdy w e gotowa

Poziom bezpieczelistwa. Excel ofemje kilka mo2liwoSci ochrony ograniczajqcej


d o w g do okrdlonych elementdw skomszytu. Rzykkadowo rnotna tak zablokowat
korndrki, t e nie b&ie motliwa modyfikacja foAut. Motna teZ zdefiniowat
haslo uniernot~iw~aj~ce nnjeautoryzo&n~u2ytkownikorn pneglqdanie
ohe~lonych
- plikdw
. i uzyskanie do nich dostqpu. Praca w e ktwiejsza,
jeSli wczeSniej okreflisi co musi by6 chroniine i a a jakim poziomie:

=+* Funkcje ochrony Excela nle sq w 100%skuteeme. JeSll potrzebujesz Wnego


I absolutnego bezpiecnfistwa rplikacji, prawdopodobnie Excel nie bqdzie najlepsq
p r o p ~ j qplanormy.
Na tym ctapie projektu najw-i ejsze jest to, aby wzi@ pod uwagp wszystkie opcje i nie
p n y w i v a t sip do pienvszego rozwie&anja, kt6n pryjdzie na mySl. Nale? t a k e
pamiptac o uwzglpdnianiu mian. Zrobisz sam sobie przysluge, j&li stwonysz aplikacjp
tak u n i w e m l n ~jak to tylko m d i w e . Nie nale2-y na pnykhd pisad proccdury, ktora
prretwana tylko olcreSloay zakres komdrck. Zamiast tego nalety stworzyt procedur~
-
akceptujqcqjako argument dowolny z a k s gdy pojawi sie Qdanie dokonania mian.
przeprowadzenie modytikacji m e udwczas prostsze. Para tym pmjektowane aplikacje q
czgto do siebie podobne. S d l i zaplanujesz w~elokrotnezastmwanie niektorych raz-
wiazari, wyjdzie ci to na dobre.
Z wbsnego dohviadczmia wiem, te kokoury uytkownik nie powinien deqdowak o mz-
wiapmiu pmblemu. Dla pnykJaduzalir2my, 2e wedlug kimwnika dzjatu jego pracownicy
potnebujq aplikacji tworzqcej pliki tekstowe, kt6re sq importowane do innego programu.
Nie pomyl wymagafi utytkownika z r o z w i p i m . Rzeczywistym wyrnogiem stawia-
nyrn pnez utytkovmika jest wspWzielenie danych. Zastosowanie po9redniego pliku
Rozdziot 6. + Podstawy proiektowania aplikacji arkuua kalkulacyjnego 121

Zdobywanie wiedzy w trakcie projdctowanie


A teraz kilka sMw na ternat rzen/wistobi. Excel ciqgle si.$ zrnienia. Cykllego aktualizacji w prz'li-
ieniu wynosi od 18 do 24 rniesisy. Oznacza to, ze mast rnniej n i i dwa lata na wykorzystanie
aktualnych innowacjl acela, zanim bedziesz musiat mag& si.$ z Ich jeszcze wipkszq liczbq.
W m d z e n i e i e z p a VBA do Excela 5 spovlliodowab, k pojektmcl aplikacji opartych na tym arkuszu
kalkulaqgnym a u u e n i zostali do macmej zrniany sposobvl pograrnowania. Dot@ tysiwe osdb
utnyrriywab sie z p~jektowaniaaplikacji dla Excela, Mdre p m a b i e oplerdy sie na jesyku rnakr
XLM stosowanym w wersjach prograrnu omaczonych numerarni 2, 3 i 4. W wersji Excel 5 pojawk sip
kilkadzieslq nowyh n q d d i w MekszoSci pwpadk6w projektanci chmie z nich konystaii.
Po ukazanlu sie Excela 97, w kt6rym wprowdzono nowy format pliku, edytor Wsual Basic i form*
l a m UserFon zastqpujqce arkusze dialogowe, pfojektanci ponownie musieli mieniE platforme.
W Excelu 2000, 2002 1 2003 zastosowano dodatkowe funkcje, ale zrnlany nie byly tak radykalne,
jak w przypadku poprzednlch aktuallzacji.
Jqryk VBA nie lest trudny, ale z pewnoSclq dobre opanowanie go wymaga czasu. Aby zostaC
ekspertem z zakresu tego Bzyka, potrzebne jest tet doSwiadczenie w projektowaniu. Uwaiarn. 2e
nie rnotna nau- si9 @*a VBA, nie pojektujqc aplikacji, w ktdrych sip z niego konysta. P-j
czy p6fniej r6wniet ty dojdzlesz do podobnego wniosku. Teoretycme jedynie opanowanie jezyka
VBA zwykle nie daje dobrych remltatdw.

tekstowcgo, kt6ry to urnokliwi, jest jednyrn z r o m i m . Ismiejq inne rozwicpnia pro-


blemu takie, jak bezpogrednie pnestanie informacji przy utyciu technologii DDE (ang.
Cynumic Dora &change) lub OLE (ang. Object Linking rmd Embedding). lnnymi slowy,
nie nalety pozwolit u ~ o w n i k o m ,by narmcali sposbb ronviqzmia problernu. Okre-
Slenie najlepszego r o m i w n i a jest twoim zadaniem.

OkreSlenie najwtafciwszego inkrfejsu uiytkownika


Projektujqc a h = kalkuiacyjne. kt6rych b& u2ywat inm oscby, trzeba zwr6cid szczo
g6h4 u w a na intcrfejs u?ytkownika Inrejejs utytkownika oznacza maodq, za porno-
kt4rej utytkownik kornunikuje sit z aplikacjq Mote to by6 klikanie pnyciskbw, posh-
giwanie siq mmu, wciskanie klawiszy, uzywanie pask6w nanpdd itp. RdwnieZ w tym
pnypadku m e je* aby mi& na uwadze kohcowych ~ k o w n i k 6 w Prawdopodob-
.
nie dysponujesz macznie wiekszym n i t oni doSwiadczeniem w dziedzinie komputerbw.
Interfejs, kt6ry jest intuicyjny dla ciebie, mote taki nie byt dla innych.

Jedna z metod twonrnia interfijsu utytkawnika opiera siq na wbudowanych elementach


Excela, takick jak menu, paski n-dzi, paski przcwijania itp. Imymi slowy, motna po
prostu stwotzyt skoroszyt, a nastppnic zenvoliC uzytkomikowi na poslugiwanie sic
nim w dowolny spos6b. h f o h to by6 dasko& ronviqzanie, jdli aplikacji bgda *at
Q[ko osoby d o b r n majw Excel. Jednak czcfciej W e s z mial do czynienia ze stosun-
kowo niedohviadczonymi lrtydtownikami aplikacji (-to M nie minteresowanymi nid.
co na pcwno m d n i pracq.

Excel ofenje kilka funkcji, ktdre q utywane przy tworzcniu interfejsu uZytkownika.
Oto one:
niestandardoweokna dialogowe [forrnularze UserFonn),
m kontrolki umieszczaM bezpo$ettnio w arlcusu takie, jak ListBax lub C m n d k t t o n .
122 CzgfC II + Projektowonie aplikacji w Excelu

niestandardowe menu,
niestandardowe p s k i narzqdzi,
niestandardowe skrdty klawiaturowe.

Powyaze elernenty w skr6cie zostarq omdwione w kolejnych podpunktach. a bardziej


szczeg6towo w nastepnych rozdziatach.

Tworzenie niestandardowych okien dialogowych


K&dy, kto od dlu&zego czasu korzysta z komputera osobistego, bez wqtpienia jest za-
znajomiony z oknami dialogowymi. W konsekwencji niestandardowe okna dialogowe
Excela rnogqodgrywaC w interfejsach utytkownika twononych aplikacji podstawowqrolq.
W Excelu 97 pojawlta sie zupetnie nowa metoda tworzenia niestandardowych oklen
t
w dialogowh oparta na fomulnach UserForm. Jednak w kolejn~hwenJsh Excela
nadal sq obstugiwane arkusze dialogowe z wersji 5 I 95. W te] ksi@ce "wage
skupiono wytqcznie na forrnularzach UserForm.
Niestandardowe okna dialogowe tworzy sit, aby urnotliwit u2ytkownikowi wprowa-
dzenie danych, zaznaczenie wybranych opcji lub whhiwoSci i sterowanie dziahniem
calej aplikacji. Niestandardowe okna dialogowe sq przechowywane w fomularzach
Il~erForm(na M y formulan prrypada jedno okno dialogowe). Mogq byf one twonone
i edytowane pny W c i u cdytora VBE, ktdry jest otwierany po w c i i n i ~ i ukombinacji
klawiszy AIt+FlI. Elernenty twamce okno dialogowe (pnyciski, listy romijane. pola
wyboru itp.) sq nazywane kontrolkumi, a bardziej precyryjnie kontmlkami AcfiveY. Excel
ofemje standardowy zbidr konbolek ActiveX, a pondto m o m utyC konimlek twommych
przez innych programistbw lub finny.

Konkokc umiestaolul w oknie diabgowym m o m skojanyt z k o r n 6 r l ~arkusza, co


nie wym&a utycia *&ego makra (z &yj&iem prostego rn&.wySwietl~jacego o h o
dialogowe). O p m j a hczenia kormulki z kombrkq jest prosta, ale nie zawsm jest to
najlehza hetoda pdbrania danych wprowadzonych f i e z utytkownika w oknie dialogo-
wym. W wipksdci -4w bpdzicsz jednak pisal malaaj ~ k VBA,
a w ~ c u j a c e
z niestandardowymi oknami dialogowymi.

o n
m?m
Szezeg6towe orndwienle formulany UserFammajduje slq w czwartej ce5ci ksiqtki.

Zastosowanie kontrolek ActiveX w arkuszu


Excel panvala tet umicszczaC kontraki ActiveX fowulm User Fmm w wmstwie ry-
sunkawej arkusza {niewidoczna warshva majdujqca siq nad arkuszem, przechowujqca
obrazy, wykresy i inne obiekty), Na rysunku 6.1 p o k a z m prosty model a r W zawie-
rajqcy kilka kontrolek formularza UserForm umieszczonych bezpoSrednio w arkusm.
Sa to kontrolki OptionButtcn, ScrollSar, C m n d B u t t o n i C+eckBon.
Rozdziol6. + Podstowy projektowania oplikacji arkusza kalkulacyjnego 123

Rysunek 6.1.
Poptzez
bezpoirednie
umieszczenie
w afkuszv kontrolek
fomulatza
UserFom rnozna
upro2ciC jego
obsluge

U@ty skomszyt, zawierajqcy tei kilka prostych makr, jest dostepny na dolqczonym
dysku CD-ROM.
mzm
h d o p o d o b n i e najcqkiej stosowana jest kontrolka CmndBution. Sama kontrolka
CcmnandButton nie wykonuje a d n e j opemcji, dlatego tet z katdq z nich trzeba p o w i ~ k

BezpoSrtdnie z a s t ~ ~ ~ w akontrolek
nie okna dialogowego w arkuszu c-to eliminuje ko-
niecm& twonenia niestandardowych okien dialogowych. Z kolei poprzez umieszczenie
w a&szu kilku kontrolek ActiveX w macqcy sposdb m o h a upmScic dzialanie arkusza
kalkulaqjnega. Dziqki temu ~ o w u i nie k musi wprowadzak danych do komorek,
a decyzje maze podejmowat, utywajac manych mu kontrolek.

Kontrolki ActiveX majdujq sit na pasku narrphi Pnybornikformantdw. Motna tel


w arkurn umie9ciC kontrolki komparybilne z Excelem w wenjach 5 i 95. Tego typu
kontrolki niebtdace kontrolkami ActiveX majdujq sip na pasku narzpdzi Formularze.
W tej ksiqtce ich nie ombwiono. W tabeli 6.1 zestawiono obie klasy kontrolek.

Dostosowanfe menu
KoIejna met& mzqdzania interfejsami u2ytkownika aplikacji arkusza kalkulacyjnego
. - na rnociyfikowaniu menu Excela lub tworzeniu wtasnego svstemu menu. Zamiast
pol*
tworzyf pnyckki wykonujqce rnakra, rnoma dodad jedno lubkiika nowych menu b q d l
ich pozycji. Mre b& wywolywaly jut napisane rnakra. Zaleg niestandardowych menu
jest to. te ich p a c k jest zawszc widoczny. natomiast pnycisk umieszczony w arkuszu
z latwokiq moze mikrqt z pola widzenia.
124 Cr$Se II + Projektowanie aplikacflw Excelu

Tabela 6.1. Porbwnanie kontrolek ActhreX z kontrolkarni Excels

Kontrolki AetivcX Kontrolki Excela


Wersje Excela 97,2000,2002 i 2003 5.95.97.2000.2002 i 2003
Pasek narzqdzi Pl;ybornikfonn~bw Formubrre
Dostepne Chectbx (pole wybom), Textsox (pole tckstowe), Label [etykieta), GroupBox (pole
kontrolki Cmand0utton (przyeisk poleccnia), Optionbtton grupy), Butron (pnycisk), CheckBcx
(przycisk opcji), L i s t b x (pole listy), CmboBox (pole wyboru). OptionButton
(pole kombik ToggleButton (prycisk pmtqcmika), (prrycisk opcji). ListBox (pole listy).
SpinButton (pnyeisk pohtia), Scrol \Bar (pasek DrooDoMl (ComboBox) (pole kornbi),
prrewijania], Label (etykieta). Image (obraz) [inne Scml lBar (pasek pnewijania).
mogq zostaC dodane) Spinwr (pokr@lo)

Prrechowywanie W kodzic mdulu powipincgo z arkuszcm W dowolnym standardowyrn


kodu makra module j ~ k VBA
a
Nazwa rnakra Odpowiadananvic kontrolki (na pnykled Dowolna wprowadzona nazwa
CmandButtonl-C1 Ick)
Odpowiedniki Kontrolkj formulam UserFotm Kontrolki arkusza dialogowego
MotliwoSci Du~c,przy u2yciu okna Propsrtfc~ Minimalne
dosm~wania
Rcakcja na Tak Tylko na zdazcnia Click i Change
zdanenia

Poczqwsq od E x d a 97, Miemsdn wprowaddl calkonide nawq metode obslugi


@
, $@ menu. Jak zobacrjsz w rozdziale 22., p s e k menu w zasadzie jest zarnaskowanym
pasklem m@z Nai.rysunku 6.2 pokazano a + a dno!wego menu dodanego
do Excela. Menu zcstab utwmone przez napisany pmze mnie dodatek Power UtiIh'y
Pak, znajdujqy sie na dotqczonyrn dysku CD-ROM. Kazda pozycja tego menu
UNchamia makro.

nowe menu
zostab stwonone
pnez dadatek
Power Utility Pak
Rozdziot 6. + Podstawy projektowaflio aplikacji arkusza kalkulocyjnego 125

lstniejq dwie metody modyfikowania menu Excela - za pomocq jqzyka VBA lub po-
przez bezpoiredniq edycjq. Zgodnie z tym, co napisalem w rozdziale 23., zazyczaj
najlepsze jest zastosowanie instrukcji j ~ z y k aVBA. Utytkownik dysponuje wtedy pehq
kontrolq nad menu i mote nawet wykonac takie opcracje, jak wylqczenie pozycji menu
lub dodanie do niej symbolu zaznaczenia. Modyfikacje bezpoirednie, dokonane poprzez
wybranie z menu pozycji Widok/Parkin~q&ilDoxtosuj. s q m f e (rysunek 6.3). lnnymi
stowy, jeSli utytkownik usunie z menu jednq z jego pozycji, miana bedzie obowiqqwala
nawet po ponownyrn uruchomieniu Excela.

Rysunek 63.
Okno dia/ogowe
Dostosowpvanie
umoiliwia
reczns rnoc!vTkacje
systemu menu Excela

sit.&* Edytoc menu, Wry go raz plemuy potawit sic w Excelu 5 , ZO* usunietyju2 w wersji 97.
~ e n tiwonone
u 2 ;ego p
ontmmoeq bd; nadal dpiataty po otwrciu skom* w ~ r c e l u97
lub nowszyrn. Alejedyna metoda ich usuniqda lub modyfikowania palega
na umhomleniu Excela 5 tub innego natz-a. Mdre zostato w tym celu napisane.

Matliwe iest dostosowanie W c p o menu whvietlanceo w Excelu. nawet menu uodrecz-


nych poj~wiaj;lcychsic po klilcni@iu obiektu>rawym p ~ c i s k i e r n*yszy. Aby &sowat
menu podrccme, koniecm jest Wck jczyka YBA. Vie jest moPliwe inne wykonanie
tcj qeracji. Na r y m k u 6.4 pokazano dostosowane menu p o r n m e pojawiajqce siq po
klihiqciu ~ y k r e s uprawym pizyciskiem myszy. Menu posiada dwa polecenia, ktore
standardowo nie sq dostqne (dwie ostatnie pozycje menu).

Nlestanda- menu szczegMowo orndwrone zostaly w rozdziale 23.


mm

Paski nanpdzis q b d m popubane w aplikacjach Windows. Excel oferuje s p r y ich zestaw.


Zwykle p n y ~ i s k ipask6w narzpdn spetniajq fimkcje skAt6w do czcsto stosowanych
poleceh menu umotliwiajyych ~ o w n i k o mjch szybsze wykonywanie. Poniewa;!
w pnypadku pnycisku paska n a d z i koniecme jest W c i e myszy, zwykle nie stanowi
on jedvne] met* umotliwiajqcej wykonanie okn5lonej operacji. Paski narydzi Excela
umotliwiaj~malizowaniewi@z&ci operacji c-o wkonywanych w arkuszu kalkula-
cyjnym nawet b a poshgiwania sie menu.
126 Cze5C li + Projektowanie aplikacji w Excelv

Rysvnek 6.4.
Przyktad
zmodflkowanego
menu podrpcznego

Motna utworyC niestandardowy pasek zawierajqq tylko n w d z i a udos~pnioneutyt-


kownikom. J d l i z tyrni narqdziami powi@esz rnakra, niestandardowy pasek n ~ d z i
stanit siq odpowiednikiem gupy pnyciskbv umjeszaonych w arkuszu. Taki p e k w e
zawsze widoczny i mama go umiekic w dowolnym miejscu ekranu - w odr6;tnieniu
od pnycisk6w osadzonych w arkuszu, kt6re majdujq siq w jednyrn miejscu i mogq zniknqd
po pnewinieciu zawartoki okna.
Poczqwszy od acela 97, do paska narzedzi motna tet dodawae menu.
,F=$$%*
\ !
mma
Motna tak skonfigurowaC aplikacjq, t e po W y m jej uruchomieniu pojawi sip pasek
narredzi. Aby to osiagnqk, n a l w pny W i u prrycisku D d q znajdujqcego
~ sip w za-
ktadce Paski narrqci-i okna dialogowego D o s t o s ~ a n i e(rysunek 6.5) dodat pasek

Rysunek 6.5.
Okoo dialogowe
Dotqmanje paskdw
fla~eda'
umoifiwiadbdsnie
do skomszytu
nies:andardowego
paska nafz@zi

Tym sposobern poszcmg6lne paski + s&~ h o - w s k o m q c i e aplikacji,


dzi&i czernu mokliwe jest ddystrybwwanie ich do uWkownik6w.
Rozdziot 6. + Podstawy projektowonio oplikocji orkuszo kalkulacyjnego 127

< Paskt narzpdzi szczeg6lowo zostaiy orn6wione w rozdziale 22:

Tworzenie skr6t6w kiawkturowych


Ostatniq opcjq zwiqzanq z interfejsem utytkownika jest motliwoSd tworzenia wlasnych
skrbtow klawiaturowych. WciSniccie kombjnacji klawiszy zazwyczaj jest szybsze od
wybrania pozycji menu, ugcia paska namdzi lub otwarcia okna dialogowego. Excel
umokljwia p q i s a n i e do makra kombinacji (skr6tu) utywajtjcej klawisza CIrl lub kla-
wiszy ShiJI i Crrl. Makro zostanie wykonane po wcihiqciu pnez Wtkownika kombinacji
klawiay.

Nale2y jednak miet hiadom036 dwbch 17ceczy. Po pierwsze, t m b a wyja9niC uZytkow-


nikowi, kt6re klawjsze sq aktywne i jakq spelniajq hnkcjg. Po drugie, nalety uwataf,
aby nie u t y C kombinacji klawiszy, ktdra zosrala jus! wykorzystana. Innymi stowy, kombi-
nacja klawiszy pnypisywana do m a h ma piemszedstwo nad wbudowanymi s w t a m i
klawiaturomi. Na p m k h d kombinacia Cwl+S jest wbudowanym skr6tem klawiatu-
rowym ~ x c e i as m do zapisania d i e ohvartego pliku. ~dli-tata sama kornbinacja
tostanie .m i-.s a n a do malaa. stmcisz moaiwoSC zauisana vliku DW utvciu s M t u Ctrl+S.
Nale2y pamiqtaf, 2e skrbq klawiaturowe rozr6tniajtj wielko~imak&, dlatego m o a a
uat kornbinacji CClrl+Sh$+S.
Trzecia cw.% ksi$tki zostata po5wiwona jezykowl VBA stutqcemu do plsania makr.

Rozpoczecie prac projekfowych


PO o k d l m i u wymagafi w a w n i k a , wybraniu rozwipnia umotliwiajqcego ich spd-
nienie o m wybraniu kompanent6w, ktbre wejdq w sWad interfejsu u2ytkownika, naj-
wy2sza pora pnjX do sedna sprawy i roqmzi@tMxzmie aplikacji. OdzywiScie realizacja
tego etapu zajmie sporq c q S C cakowitego czasn podwieconego na wykonanie projektu.
S@b, w jaki bdziesz pracowai nad aplikacjg rale2y od twojego w k n e g o stylu

i specyfiki prograrnu. Prna prostymi stablonami skoroszytbw zawierajqcych pola pne-


macLane do wypclnienia, w aplikacji prawdopdobnie zostanq zastosowane rnakra.
Tworzenie makr stanowi trudniejsq fa%.Z latwoScitj m o a a twonyC makra w Excelu,
ale sztuhjest napisanie dobrych mah.

Zadania realizowane

W lyrn punkcie m b w i p m e kwestie zwi-e z projektowaniem. ktbrc uwidacmiajq


sie, gdy stopierj FunkcjonalnoSci apljkacji staje sip coraz wy?szy i nadchodzi moment
pakowania i p m y l a n i a produktn.
128 II Projektowanie aplikocji w Excelu
CZQ~C

Testowanie aplikacji I
Ile ray zdarzyio ci siq, 2c w bmdzo wahym momencie komercyjne oprogramowanie
uleglo zawieszeniu? Prawdopodoboic powodem probiernu byla niewystarczajqxi liczba
test6w. w trakcie kt6rych nie wykryto wszystkich w 6 w . Wszystkie zloeone aplikacje
zawinajq Mqdy, ale w oprogramowaniu najwytrzej jakoici M@y sq po prostu bardziej
u!qte. Czascm w celu uzyskania poprawnego dziahnia aplikacji koniecme bcdzie omi-
nipcie W 6 w Excela za pornocq rnodytikacji programu.
Gotowq a p l i i j p koniectnie haba pmtastowai. Jest to jeden z najwazniejstych eta-
p6w. Cysto zdaiza sip, 2e tesrowanit i usuwanie MH6w z aplikacji zajrnuje takq samq
iloSC c m u , jak jej hvonenie. WlaCciwie na ctapie pmjektowania aplikacji powinno sip
wykonat qmq l i c w tm5w. W koncu niezalehie od tego, czy pines2 proceduq w jpzyku
VBA, czy tworzysz forrnuly M. arhruszu, musisz mi& pcwnog, 2 aplikacja dziala zgodnie
z przyjqtymi zaloteniami.

Podobnie jak standardowe pmgramy kompilowane. projektowane aplikacje arkusza


kalkulacyjnego sq podame na Medy. Bfqd zanvyczaj jest definiowany jako cod, co wy-
st~pujew trakcie dziahia aplikacii. a nie wwinno. lub d.co sie nie .~ o i a w *i a mwinno.
< a

Oba przypadki Mpddw sq h r6wnym sYopniu nieprzyjeAe. z tego powodu aplikacjp


m b a testowad bardm dokladnie, uwzgl@niaj@ wszystkie motliwe przypadki i usuwajqc
wszclkie wykryte problerny. Niestety czasami pmblerny pojawiajq sip nie z twojej winy
(ramka ,Blpdy w Excelu?").
spr6buj prznvidziet wszystkie b@ly i po-
I jeszcze jedna spraw8: pracujqc nad apl~lcacj~
mylki i dot62 wszelkich starah! aby im zapobiec lub przynajrnniej powiqae z nimi od-
powiednie komunikaty. Takie dziatania nie tylko sq potyteczne dla kolicowego utyt-
kownika, ale i tobie ulatwiq pracp i pozwolq zachowaf reputacjp. Wez rbwniet pod
uwagq tcm beta. Mdre powinni pneptbwadziC koricowi u@tkownicy aplikacji, poniewat
ostatecmie to oni bed&z programu korzystai (ramka ,Testowanie beta").
Co prawda, nie jest motliwe sprawdzenie wbzystkich pnypadkh, ale twonone makra
powinny obskgiwae cqsto wystppujqce typy blqd6w. Co sip na przyklad stanie, jefli
utyrkownik zarniast wartohi liczbowej wprowadzi Wtcuch? Co sip stanie, j&li sprbbuje
wykonaC rnakm, gdy nic otwarto jeszcze skomszytu? Co w e , gdy zamknie okno
dialogowe bcz wybrania tadnych opcji lub wcihie kombmcjp klawiszy Cb.I+F6 i prrej-
dzie do nasgpnego o h ? W miaq zdobywania ddwiadaenia pomasz te kwestie bardzo
dobrze i bez chwili namysh uwzglpdnisz w projekcie odpowiednie rozwiapnia.

Zwiqkszanie odporno5cl apllkacji


Uszkodzenie arkusza kalkulacyjnego jest do& proste. Usuniqcie jednej istotnej forrnuly
i
-1

lub wart&; c ~ t powoduje


o wygenerowanie MN6w w calym arkuszu, a m o k nawet
w innych p o w i m y c h z nim arkuszach. Co gorsza, jdli uszkdzony skoroszyt zostanie
zapisany. zastagi na dysku poprawnq kopip. Jdli nie istnieje pmcedura wykonywania
kopii zapasowcj, utydcownik kdcowy majdzie sip w trudnej sytuacji i prawdopodobnie I
winaza to obarczy ciebie.
i
I
Roz&iat 6. + Podstawy projektowania aplikacji arkusza kalkulacyjnego 129

B@dy w Excelu?
M6gtbyS pnypuszczd, te taki p ~ d u k tjak
, Excel, m a n y przez mlllony osdb na c a m fwiecle,
powinien byC pozbawiony bW6w. Nlc bardzlej myinego. Excel jest tak ziaionym programem, i e
-
wrqcz nalety $19 Ich spodzlewae. I fahtycznie Excel je pasiada.
Wpmwadzenie do sprzedaw taklego produktu, jak Excel nle jest tatwym zadaniem nawet dla
Mlcrosoftu, korporacli na poz6r majqcej nieograniczone rnotliwoSci. Z przygotowywaniem opr*
gramowania zwlqzane sg komprornisy i dylematy. Powszechnie wiadomo. te najwigksi wytw6rcy
oprograrnowania wprowadzajq do sprredaiy produkty, majqc petnq SwiadomoSd. i e zawlerajg M d y .
WlgkszoSC btgddw jest ignorowana, poniewai sq uznawane za niewystarczajqco powaine. Firmy
mogtyby opdfniC wprowadzenie produkt6w o kilka miesiwy i usunaC wiele btqd6w, ale r6wniet
w tym przypadku rzqdzq prawa ekonomii. Korzydci wynikajwe z takiego opdfnienla czgsto nie
wyrdwnujq ponlesionych strat flnansowych. Co prawda. Excel poslada sporq pule bled&, ale
Wpuszczam, te wiqkszoSC ujtkownikdw tej aplikacji nigdy nie bqdzie miata z tadnym z nich
do czynienia.
W tej kslqke wskazakm problerriy z Excelem, ktdre sq ml znane. Z pewnofciq Sam napotkasz
kilka dodatkowych. Niekt6fe pojawlajq slg tylko w okredlonej wersjl Excela i w dodatku w przy-
padku specflcznej konflguracji powiqzanej ze sprzqtem i (lub) oprogramowaniem. SpoSrbd
wszystkich Meddw takie sq najgorsze, poniewai trudno je odtworryC.
W takim ade, co mote zroblC projektant? Powlnien wykonad obelgcle (ang, workaround). JeSli
coS nle dzia+a, a zgodnie z wszelklml zatokniami powinno, para przejg do planu 8.Frustrujqce?
Na pwno. Strata czasu? Zdecydowanie. Wladnie z tyrn wszystkim ma do czynlenia projektant.

-
Testawanle beta
Wytw6rcy opmgramowanh armywaj stosujq rygorystycme procedury testowanla nowych produk-
tdw. Po zakor(czeniu intensywnych test& wewnmych wstepna wersja produktu jest zwykle
wysyiana do grupy utytkownik6w zalnteresowanych testowaniem beta. Na tyrn etapie sa identy-
fikowane dodatkowe problemy, usuwane zaryczaj przed pojawieniem sie ostatecmej wersji
produktu. OczywlScie testowanie beta zajmuje dodatkowy czas i nie prry wszystkich projektach
moina sobie pozwollc?na taki luksus.
J e l l tworzysz aplikacje, z kt6ryeh bedzle korrysta6 wiwej nlt kilka osdb, motesz wzl# pod
uwage testowanie beta. Ddgki temu wtaSclwl (zazwyczaj) uiytkownicy sprawdq apllkacje na r62-
nych komputerach z docelowymi ustawleniami.
Testowanie beta powinno rorpocz# sie po zakoriczenlu wszystkich testdw wewngtrznych i uzna
niu, te apllkacja jest gotwa do dystrybucji. Koniecme bgdzie okreflenle grupy uiytkownlkbw,
ktdrzy pomogq w pneprowadzenlu test6w. Proces test6w beta pmyniesie najlepsze rezultaty, gdy
utytkownikom zostanq przekaane wszystkle elementy, wchodzz)ce w skhd ostatecznej aplikacji
(dokumentacja u2ytkownika. program instalacyjny, system pomocy ltp). Wyniki testdw beta moina
uzyskaC na kilka sposob6w, w tym popnez bezpoSrednle spatkania, kwestionarluue i rozrnowy
telefoniczne.
Po zakoficzeniu test6w beta pawie zawsze w z i e s z Swiadomy pr&lem6w, ktdre muszq by6
usuniete, lub udoskonalefi. Mdre mu= zostaC wykonane.

Oczvwi4cie niemdno sic zorientowaC dlaczeeo koniecme iest stosowanie okreSlonvch


rntckani~n6wochrony arkuszy, gdy b-& z i i c h korzystac wtytkownky, a zwlaszcza
pocqtkujqcy. Excel oferuje mechanimy ochtony arkuszy i jego elementow.
1 30 Czqft II + Projektowonie oplikacji w Excelu

Blokowrmie okdlonych komdrek. Istnieje motliwoSC blokowania wybranych


kom6rek (pny utyciu zakladki Ochrona okna dialogowego Formatowanie
komdrek), dziqki czemu nie rnotna ich zmodyfikowat. Funkcja jest aktywna
tylko wtedy, gdy dokument jest chroniony (z menu Nanedzia n a l e y wybraC
pozycjp Ochrona, a nastqpnie Chrori a r b ) .
Ochrona calego skoroszyfu. Istnieje motliwofC ochrony calego skorosqtu
-jego srmktury oraz pozycji lub romiaru o h a (bqdi obu parametrbw).
W tym celu z menu Narzec)ria nalety wybrat pozycjq Ochrona, a nastqpnie
Chroh skoroszyt.
Ukrywanieformul okreflorych komdrek. Lstnicje motliwoSt ukrywania fortnut
zawartych w wybranych korndrkach (przy utyciu zakiadki Ochrona okna
dialogowego Formatowanie komdrek), tak t e inni ich nie zobaczq. Rdwniet
w tym przypadku hnkcja jest aktywna tylko wtedy, gdy dokument jest chroniony
( 2 menu Narzedria nalety wybrat pozycjq Ochrona, a nastqpnie Chroh arkwz).

Blokowanie obiekthv arhsza. Istnieje motliwofC blokowania obiektdw arkusza


(pny utyciu zakladki Ochrona okna dialogowego Formatowanie obiektu, gdzic
slowo obiekt identyfikuje nanvq pnetwananego obiektu). Funkcja jest aktywna
tylko wtedy, gdy dokurnent jest chroniony (z menu NarzqrDiu nalety wybrat
pozycjq Ochrona, a nastqpnie Chrori arkusr).
Ukrywanie wiersry, kolumn, a r m i dokumentdw. Istnieje rnotliwo4d ukrycia
wiersy (z menu Format nalety wybrat pozycje Wiersz, a nastqpnic ubyj3,
kolumn (Format/Ko/umna/C/~j3, arkuszy (FormatlArkunlURryj) i dokument6w
(Okno/Ukryj'>.Dzicki tcrnu mo2na zapobiec zaimieceniu arkusza, a t a k e tapewnid
ochrone przed niepowolanym dostepem.
Udosrepnienieskoroszytu Excela w ~rybiei y I b do odczytu. lstnieje rno2liwoSt
udostepnienia skorostytu Excela w trybie tylko do odczytu (z utycicm hash),
dziqki czemu zyskuje sip pewnoit, te w pliku nie zostanq dokonane tadne zrniany.
W tym celu nalety p o s w f sip oknem dialogowym Opcje rapirywania. Aby je
otwonyd, z menu Nursed-ia okna dialogowego Zapiqwaniejako nale2y wybrad
pozycjq Opcje ogdlne.
Przygisanie hasku. Aby uniemotliwjd nieautoryzowanym utytkownikom
otwarcie pliku, moma ustawit dla niego haslo. W tym celu nalety poshZyC sic
oknem dialogowym Opcje zupisywania. Aby je otwolzyt, z menu Nanqdzia
okna dialogowego Znpisywanie jako n a l q wybraf p o z y c j ~Opcje ogdlne.
Utycie dodatku chronionego haslem. Istnieje rnotliwoSt zastosowania dodath
chronionego hasiem, ktory nie ponxala uiytkownikowi na dokonanie w jego
arkuszach zadnych modyfikacji.

<=, Pocqwsry od Excela 2002, dostgpnych jest kllka navych opcji ochrony arkusza.
Po wybranlu z menu Nanedzia pozycji Uchmne, a nastepnle Chrofi arkuszzostanie
otwafle okno dialogowe Chronlenie arkvsza. Okno urnoiliwia doktadne okreblenle,
jakle operacje moina wykonyuuaC w chronionym arkuszu. Poza tym w oknie dlalogowym
O w e zapiswanid majduje sif!przycisk Zaawansowane. Po ]ego klikniviu rnoina
I Rozdziat 6. + Podstawy projektowania aplikacji arkuna kalkulacyjnego 131

Jak bezpleczne st)hash programu Excel?


Z tego, co wlem, Microsoft nlgdy nle reklamowal Excela jako prograrnu bezpiecmego. Mlat ku temu
odpowiedni powbd. Tak naprawde do&? tatwo motna spowodowab, ie system haset Excela
przestanie spetniad swojq funkcjg. Dostgpnych jest kilka komercyjnych prograrn6w s+uzqcychdo
tamania has&. Excel 2002 i 2003 wydajq sie oferowad lepsze zabezpleczenia nit starsze wer-
sje. Jakl z tego wnlosek? Nle rnysl, te ochrona oparta na ha5ie jest pewna. Z pewnoSciq bedzie
skuteczna w ptzypadku prostego utytkownika. JeSli jednak komuS naprawdg zalej na ztamaniu
hasta. prawdopodobnie tego dokona.

i Tworzenie apllkacjl intulcyjnej I estetycznie wyglqdajqcej


1 Jefli miald do czynienia z rdtnymi pakietami oprogramowania, na pewno widziatei
._pnyklady kiepsko zaprojektowanych interfejsdw utytkownika, prograrndw trudnych
w obshdze i po prostu nieestetycznie wyglqdajqcej zawartoici ekranu. T w o w c aplikacje
arkuszy kaklacyjnych dla innych osdb, powinieneS saczcg6lnq uwagq nvr6cit na wyglqd
prograrnu, gdyt odgrywa on bardzo du* role. Jednak nie wszyscy tak sarno postrzegajq
aaakcyjnoE. JeSli twoje urniejqtnoSci sq bardziej m i w e z naukami Scislymi, skonystaj
podczas prac projek-towych z pomocy kogol, kto posiada wi~kszewyczucie estetyki.
Utytkownicy aplikacji doceniq dobrze wyglqdajqcy interfejs utytkownika JeSli poSwiqcisz
trocht czasu, aby zadbat o jego estetyke, wyglqd aplikacji btdzie bardziej dopracowany
i pmfesjonalny. Dobrze premtujqca sit aplikacja Swiadczy o tym, te projektantowi na niej
zaletalo, wiec postaral sie i polwipcit dodatkowy czas. Pod uwagq nalety wziqC kilka
sugestii:
Deenie do zgoclnoici. T w o m c na pnykhld okna dialogowe, spr6buj wsydzie,
gdzie to tylko motliwe, imitowak wyglqd i i s d b obshgi okien dialogowych
Excela. Zachowaj zgodnolt pod mglpdern formatowaniq czcionek, wielkoki
tekstu i kolorbw.
Dqtenie do prostog. Cz@ym Mdem p r o j e h t 6 w q prbby pomieszczenia
na pojedynczym ekranie lub w oknie dialogowym zbyt wielu informacji. Dobrq
zasa& jest prezentowanie w danej chwili tylko jednego lub dw6ch Fragmentdw
infomacji.
Potial okien slutqcych do wprowodzanio danych. Jegli utywasz okna sluQcego
do p o b y i a danych od utytkownika, wet pod uwagq podzielenie go na kilka
mniejszych i pnejrzystszych. Jefli konystasz ze zlokonego okna dialogowego,
mo2esz je podzielik pny ukyciu kontrolki Mu1tipage (urnotliwia twonenie d o b m
manych okien dialogowych z zakladkarni).
Oszczqdne wiywanie kdorbw. Rzadko utywaj kolorbw. Bardzo iatwo pod tym
wzgldem przesadzit i spowodowaC, te ekran k d z i e zbyt jaskrawy.
Koniroknuanie gpogrdi i gr@ki. Zwr6C uwagq na formaty liczbowe, a talde
zachowaj zgodno5C kroju i romiaru czcionek oraz m e k .

OknSlanie jakohi walorbw estetycmych jest bardm subiektywne. W razie wq~tpliwoici


mienaj do prostoty i przejnystolci.
Tworzenle sydemu pornocy pneznaczonego dla uiytkownika
Dostepne q dwie formy dokurnentacji pomocy -papimwa i elekrronicma. W przy-
padku aplikacji Windows standardem jest oferowanie pornocy w wersji elektmnicmej.
Na szczcscie aplikacje pneznoczone dla Excela tet rnogq posiadad system pomocy, na-
wet w wersji kontekstowej. Opncowanie zawartoSci pomocy wi@ sip z doSC sporyrn
dodatkowym nakhdern pracy, ale w przypadh dutego projektu mote sic optaciC.

Nalety rdwniet zaplanowad wsparcie technicme dla aplikacji i m.in. rozstrzygnaf. kto
odbiene telefon, gdy utytkownik k d z i e cllcial zgbsit problem. JeSli nie jestes prry-
gotowany, aby u d z i e r odpowiedzi na bkQce pytania, musisz maleft kogos. kto siq
tym zajrnie. W niekt6rych pqpadkach kdziesz chcial otrzymywat jedynie informacje
o blcdach oraz pytania typowo technicme.
W mzddale 24, omdwiono kilka akematywnych metod oferowania pomocy
dla utytkownikdw apllkacjl.

Dokumentowanle prac projektowych


Skompletowanie aplikacji arkusza kalhlacyjnego to jedno, natomiast sprawienie, aby
byla zrozurniala dla innych osdb, to drugie. Podobnie jak w pnypadku tradycyjnego
programowania, w-e jest, aby dokladnie dokurnentowaC prace projektowe. Taka do-
kumentacja przyda sip, gdy trzeba bpdzie cohqt sic do wczeJniejszego etapu projektu.
Postuty rdwnief k&demu, komu aplikacja mstanie przekazana.
Twonqc dokurnentacje projtktu, trzeba zawczasu ustalld, co slew niej znajdzie.
lefli na pnyktad wyiwnu]csz apIIkac]q Excel. na zlecenie. mo2e ci nle zaleh5 na t p .
aby udostgpnk2 innym wszystkle snezegbly wtasnej pracy. W takirn przypadku pwlniene.5
przygotowat dwie wersje dokumentacji - szczeg6towq I poblehq.
W jaki sposdb twomysz dokumentacjp aplikacji opartej na skoroszycie? Jej mwartoif
r n m a umie9cii w a r k lub w i n n-w pliku.
. Motna nawet dla wlasnei- wyp;ody
- - - stworzyC I
wersje papierow Prawdopodobnie najpmstszy sposbb pwhowywania k o m e n t a 6
. - na zastosowaniu oddzielnego arkusza W kodzje
i kluczowych inhrmacii o proiekcie polega
~ l o wjw y k~a VBA nal;ty stosowat duta( liczb komentarzy. ~ i e r s kodu
z 2rddlo-
wego jpzyka VBA rozpoczynajqcy sip makiem apostrofu jest ignorowany, poniewaZ
jest komentarzcm. JeSli nje wkyjesz kommtany w kodzie, kt6ry w czasie pisgnia wydaje
sie aczywisty, to gdy po kilku m i e s i w h ponownie spojrzysz na kod doshz2est oczywi-
icie jego doskona$elegancjq, ale wnioski, jakie wyciqgniesz, niezawsze b&prawdziwe.

Przekaxanie aplikacji uiyikownikom


Ukohcykg pmj& i jesteS gotowy do pmkazania go koficowym utydmwnikom. W jaki
sposbb to wbisz? Do wyboru masz 16he m e t d y dystiybucji. Wybdr najodpowied-
niejszej zalety od wielu nynnikdw.

Motes2 po pmstu przebzat dysk CD-ROM,napis& insbukcjp i mief to z glowy. Motesz


sam zainstalowat aplikacjq, ale nie zawsze jest to rnotliwe. Kolejnq opcjqjcst stwmenie
oficjalnego pmgramu instalacyjnego, M6ry automatycmie pmprowadzi takq operacjp.
Rozdziol6. * Podstawy projektowonia oplikacji arkusza kolkulocyjnego 133

Motna go napisad przy W c i u myklego jqzyka programowania, zakupif uniwersalny


program instalacyjny lub napisak wlasny w jezyku VBA.

Excel 2000 i nowsze wersje konystajq z technologii Microso# Altrhenticode umotli-


wiajqcej projektantom cyfrowe ,.podpisywanie" aplikacji. M a to ulatwiC uZytkownikom
identyfikacjejej twbrcy, zagwarantowad, te projekt nie zostat d y f k o w a n y , i zapobiec
rozprowadzaniu wirusbw m a h lub innego potencjalnie desbukcyjnego kodi~frbdlowego.
W celu .,podpisania" projektu wystarczy zwrbcif sie do urzedu zarzqdzajqcego cyfro-
wymi certyfikatami z proSbq o jego pnymanie. Projekt motna tet ,.podpisat", tworqc
wlasny certyfikat. Aby uzyskat dodatkowe informacje, nalety skonystaf z systemu
pomocy lub zajrzet na strone internetowq Microsoftu.

Uaktualnianie aplikacjl w razie koniecznoici


Czy po zainstalowaniu aplikacji nas$pil oczekiwany koniec projektu? Czy m o t e u teraz
usiaff. nelaksowaf sip i spr6bowaC zapomniet o problcmach, ktbre napotkatei (imz-
wi@eS) w trakcie pra& nad aplikacjq? &szem. w k d k i c h p&adkach moze osi&ieto
koniec projehu. Jednak macmie cqSciej w k o w n i c y aplikacji nie bed& calkowicie
usatysfakcjonowani. Co prawda, aplikacja jest zgodna z wszystkimi poczqrko~ymispe-
cyfiacjami, ale z czasem wymagania ulegajq zmianie. Urytkownik czesto korzysrajqcy
z aplikacji zaczyna zastanawiad sic nad innymi zadaniami, ktbre moghby wykonywaf.
Aplikacja wymaga w takim pnypadku akfualizacji.

Gdy pojawi sip koniecmoff uaktualnienia lub modyfikowania aplikacji. docenisz to, t e
od p q t k u st;u;tnnic jq pmjektowalef i w p h i udokumentowalei wykonanq pracp. JeSli
jednak tak nie bylo...No c b t uczymy sit na btdach.

Dlacrego nle istnieje wersja runtime Extela?


W trakcie rozprowadzania apiIkacJi koniecme jest sprawdzenle, czy katdy koricowy uiytkownik
poslada licencjonowanq kopie wtatiwej wersji Excela. Nielegalne jest dystrybuowanie Excela
waz z utwwronq apiikecjq. Mote buddC zdziwienie, dlaczego Microsoft nie oferuje wersji runtime
Excela, Mora rnogtaby by6 dotqczana do aplikacji. Wersja mntime ma pasta6 pliku wykonywalnego,
Mdry taduje diki, ale nie pozwala ich W o w . Gdyby byia dostepna, koficowy uiytkownik nie musimy
posiadat Excela, aby uruchomit stwortonq przez ciebie aplikacjq. Tak jest czesto w przypadku
aplikacji bazodanowych.
Nigdy nie udato mi sie male26 jasnego lub przekonujqcego powodu, dla kt6rego Microsoft nie
udostepnli wersjl runtlrne Excela. Nle Hem tet, dlaczego pxfobnie postqpujq inni producenoi
arkuszy kalkulacyjnych. Najprawdopodobniej obawlaj* sig, te.udostqpnienie wersji runtime s p
wodowatoby spadek sprZedaty oprogramowania. Ponadto z jej stworzeniem wlqte sie wykonanie
ogfornnej iloSci prac pmgrarnlstycznych, Mdrych koszt po pmstu nigdy by si? nie mrbclt.
Skoro jui a lyn rnowa, nalety wspomnie, te Microsoff oferuje przeglqdark pllk6w stwononych
prry u w l u Excela. Narzvdzie umotliwia przeglqdanie tego typu plik6w. jefli nie posiada sie
Excela, jednak nie pozwala wykona-5 rnakr. Darmowq wen]? przeglqdarki rnoina pobraC ze strony
internetowe] Micmsoftu (h~p://oMce.micmsoR.com/downloads).
134 CzefC I1 Proiektowanis o~likaciiw Exceb

PozostaCe kwestie dotyczqce projektowania


W trakcie projektowania apiikacji koniecme jest uwzglqdnimie kilku innych kwestii,
nvlaszcza gdy nie wiesz doktadnie, kto ma by6 uhrtkownikiem kotlcowym. JeSli twonysz
aplikacjp, kt& b e e powszechnie utywana (np.-programy shareware), nie dowiesz Sip,
w jaki sposbb utytkownicy bqdq z niej korystali, na jakim systemie zostanie urucho-
miona lub jakie inne programy w tym samym czasie bqdqaktywne.

Wersja Excela zainstalowana przez uiytkownika


Wraz z pojawieniern siq nowej wersji Excela wama staje sip kwestia zgodno9ci. Gdy
pisalem ten rozdziah Excel 2003 wtaSnie miat pojawit sip w sprzedaty, a wiele d u e c h
korporacji nadal korzystato z wersji 97 (nicktbrc nawct ze starszych).

Niestety nie ma gwarancji, te aplikacja stworzona z mySlq na pnyklad o Excelu 97 lydzie


idealnie dzialala w przypadku jego nowszych wersji. JeSli zalety ci, aby aplikacja ws@-
pracowala z rbtnymi wersjami Excela, najlepszym rozwiqzaniem jest skorzystanie
z najstarszej z nich, a nastqpnie dokladne przetestowanie aplikacji pod kqtem zgodnoSci
z wszystkimi pozostalymi.

Sprawy skornplikujq sip jeszcze bardziej, gdy pod uwage w e h i e sip podwersje Excela.
Microsot? rozprowadza dodatki SR (ang. service rdeme), kt6re usuwajq wykryte Mqdy.
Prryktadowo utytkownicy mogq korzystat z oryginalnej wersji Excela 2000, albo po-
szerzonej o dodatek SR-l lub SR-2.

%
(3,
Jeszcze wieksze problemy pojawiajq sie w przypadku Excela 2003. Mlcrosott
sprzedaje kllka r6inych wersjl pakietu Ofnee. Wiele nowych funkcjl Excela jest
dostemych wyiqcznie w wersjl Professional.
Kwestie dotyczqce zgodnofci wersji mstaty om6wlone w rozdziale 26.
mma?l
3
I
Wersja jezykowa
Motesz uwatat sip za d u e g o szcqkiarra, jeSli wsyscy kodcowi u2ytkownicy aplikacji
korzystajq z anglojezycmej wersji Excela. h e wersje jqzykowe Excela nie bpdq w pehi
zgodne, co omacza koniecmoit wykonania dodatkowych testow. Ponadto nalety mieC
$wiadomoX, te dw6ch utytkmikdw anglojctycmej wersji Excela moZe koqfstat z 162-
nych ustawietl regionalnych systemu Windows. W niekt6rych pnypadkach rnogqpojawit i

sip problemy z tym zwiqzane.

@A Kwestle dDtyczqce wersji jqzykowych w skrbcle om6wiono w rozdziale 26.


Rozdzial6. + Podstowy projektowania aplikacji arkusza kolkulacyjnego 135
I
i
Szybkof6 systemu
Prawdouodobnie zaliczasz sit do doSC zaawansowanvch uMkownikbw kom~uterai masz
tendencjp do w. m i q rozs&ego m o d e m i z ~ w a n i a ~ ~ r zInnyrni
~ & . slowy,'dysponujesz
doSc wydajnym systemem, kt6i-y prawdopodobnie jest lepszy od komputera przecipmego

Czasami b@iesz doldadnie wiedzial, z jakiego s p q m korzystajq koficowi Wkownicy


aplikacji. W takim przypadku szczegdlnie watne jest, aby testy aplikacji pneprowadzif
p n y utyciu podobnego systemu. Procedura, wykonywana na twoirn komputerze prawie
natychmiastowo, na innym potnva kilka sekund. Tych kilka sekund jednak mote byf nie
do pnyjqcia.

a> Po zdobyciu wlekszego dogwiadczenia w zakresle hzyka VBA stwierdzisz, te istniejq


rnetody pozwaiajqce q i w n a t zadanle I metody umtllwiajqcejego rzybkIe
zrealizowanie. Naleiy wyrobid w sobie nawyk twonenla wydajnego kodu frddbwego.
lnne rozdzialy ksiqiki z pewnoSciq pomogq w oslqgnl~clutego celu.

Tryby karfy graficznej


Utytkownicy korzystajq z rbtnych kart graficznych. RozdzielcdC karty graficznej wy-
nosqca 1024 x 768jest najcmiej spotykana, ale wiele systemdw korzysta z mzdzielcmici
800 x 600.Coraz popularniejsze stajq sip monitory o w p z y c h mdzielczoSciach. Ty'ylko
na postawic tego, Ze posiadasz monitor pomalajqcy ustawif bardzo wysokie rozdziel-
czodci, nie motesz zaktadat, t e W d y nim dysponuje.

RozdzielcmSC kaRy graficmej mote. bye pnyczynq problemu, j d l i aplikacja konysta


z informacji wySwietlanych na pojedynczym ekranie. JeSli na przyklad projehjesz
okno wpmwadzania danych oparte na rozdzielczogci 1024 x 768, ukytkownicy nie dys-
ponujqcy monitorem obslugujqcyrn ten tryb bqdq musieli korzystaf z paska przewijania.
aby zobaczyd cafe okno. Poza tym pnywrdcone okno skomszytu (czyli ani zmaksyma-
lizowane, ani zminimalizowane) jest wydwietlane w poprndnim pototeniu i posiada
dotychczasowq wielkolt. W krahcowym przypadku okno zapisai~epny wytszej rozdziel-
czoSci mote cafkowicie zniknqt z ekranu po otwarciu go w systemie wykorzystujacym
ni2sz;l rozdzielczodf.

Niestety nie istnicje meroda automatycmego skalowania, tak aby okna byly wySwietlane
poprawnie niezalemie od rozdzielczodci karty m f i c n e i . W niekt6rych przypadkach
. -.
?smieje motliwoft powiekszenia arkusza (z minu View naleky ~ ~ b r a ~ ~ oPowiqk- z y c j ~
szenie), ale uzyskanie stabilnych wynik6w tei operacii m o k byf trudne. JeSli nie jestd
pewie", j* r&zddelczo~C k& &ficmej &tosuj<&ytko&icy aplikacji, zaprojektuj
jq w oparciu o najmniejszy wspdlny mianownik, czyli rozdzielcw4C 800 x 600.

Jak dowiesz siq w dalszej czqSci ksi&i (rozdzial lo.), moma oknfliC rozdzielcdC
karty graficznej W o w n i k a za pomocq wywdiili API systemu Windows wykonywa-
nych z poziomu kodu hddlowego j m k a VBA. W niekt6rych sytuacjach, w zalehoSci
od rozdzielcmSci karty graficmej utytkownika, za pomocajqzyka pmgamowania mo2na
odpowiednio modyfikowak ustawienia.
Jezyk fisual Basic
for Applications
Rozdziat 7.
Wprowadzenie
do jezyka VBA
Rozdzial zawiera wpmwadzenie do jpzyka VBA (ang. Visual Basicfor Applications) i do
obiektdw Excela. Progmmowanie przy u2yc:iu Excela S~r0wadZ.asie do manipulowania
obiektami, co polega a; pisaniu initrukcj; w jqzyku &zurnialyrn &z ten kkusz kal-
kulacyjny. jest nim wbSnie jqzyk VBA.

Podstawowe informacje o jezyku BASIC


Ddwiadczony pmgramista, gdyby zapmpomwano mu programowanic w jqzyku BASIC,
udrniechnqtby sic. Sama nazwa jeyka ( s b t od Beginner's All-purpose
. -
rSlymbolic Instruc-
tion Code - uniwersalny kod instmkcji symbolkznych dla pocqtkuj~cych) sugemje.
te nie jest b j p y k dla pmFesjonalist6w. Tak naprawde BASIC zosM stworzony na pocqt-
ku lat 60. w celu uczenia student6w metod pm~&mowania. Szybko sic przyjql i dostcpny
jest w kilkuset odmianach dla wielu typbw komputerlrw.

P m z lata BASK rorwijano i ulepszano. We wczesnych implementacjach by! to jpzyk


interpretowany. Przed wykonaniem k&y wienz kodu by4 interpretowany, co obnitato
wydajnoSC (wielokm!nie wykonywany wiersz kodu by! za &dym razem powt6mie
interpretowany). Nowsze odmiany jmka BASIC umotliwiajq kornpilOwanic kodu, ktory
dzieki temu dziata o wiele srybciej. Zwickszajajq sip tet motliwoSci jego przenoszenia.

BASIC zdobytsporr urmmic w 1991 mku, gdy Microsoft wpmvaddl do spmxky produkt
o nazwie Visual Basic for Windows. Znacznie ubtwil on tworzenie niezaletnych apli-
b c j i dla systernu Windows. Co prawda, ma niewiele wsp6lnego z wczesnymi wersjami
jezyka BASIC, ale w o w i u o niego stworzono jpzyk VBA.

Jezyk'VBA
Excel 5 by1 pierwsq aplikacjq na rynku ofemjqcq j p y k VBA. Najlepiej jqzyk VBA
&owat jako og6lny s ! q p o w y jpzyk Microsoh s w c y do twonenia aplikacji.
Obemie jest doQczany do wszystkich aplikacji pakietu qffice 2003, a nawct wchodzi
w skhd programdw innych producentdw. A zatem jdli opanode.4 j w k VBA, to ko-
nystajqc z Excela, hdziesz mdgl od razu z a c q t pisaf makra dla innych produkt6w
140 Cr@C Ill J w k Visual Basic for Ao~licotions

Microsoftu. a t&c pmdukt6w innych wytwdrc6w opmgramowania. Co wiecej, bqdziesz


w stanie morzyC kompletne ronviyania wykonystujqce hnkcje oferorvane pnez r6ine
aplikacje.

Modele oblektowe
Sekret z w i q m y z zastomwaniem jqzyka VBA w innych aplibcjach tkwi w mzumieniu
modelu obiekrowego katdej z nich. Jezyk VBA po pmstu manipuluje jedynie obiektami,
a katdy produkt (Excel, Word, Access. PowerPoint itp.) pusiada w k n y unikatowy model
obiektowy. Aplikacja mo& zostat stwomna p l y utyciu obiektdw udosgpnionych prza
program, na kt6rym bazuje.

PrzykWwo mcdcl obiektowy Excela oferujc kilka bardzo ydajnych obiekt6w analiry
danycb takich, jak arkuszt. wykresy, tabele przestawne, scenariusze oraz sporq liczbq
funkcji matematycmych. tinmowych. intynieryjnych i potwzechnie stosowanych w biz-
nesie. Jqzyk VBA urnotliwia utywanie tych obiektbw i pmjektowanie zautornatymwanych
procedur. Utywajqcj w k a VBA. stopniowo zapoznasz siq z modelern obiektowym Excela
Na pocqtku hdzie to bardzo zagmatwane. Jednak ostatecznie wszystkie elementy u l o a
sic w catosd i nagle uiwiadomisz sobie. te to opanowaies!

Porbwnanie jezyka VBA z jezyklern XLM


Przed pojawienicm sip wenji 5 Excel ofemwnt bogaty w motliwoJci (ale bard20 tajern-
niczy) j p y k makr o nanvie XLM. Co prawda w nowszych wersjach Excela nadal sq
wykonywane makra XLM, ale od wersji 97 usuni~tomotliwdd ich rejcsmwania. Jako
projektant powiniend wiedzief o istnieniu j w k a XLM (na wypadek spotkania siq kie-
dykolwiek z makrarni napisanymi w tym jpzyku), ale przy tworzeniu aplikacji konystaj
z jtzyka VBA.
:ep=°Nle pomyl jgzyka makr XLM z jezyklem XMC (an& eLmensibk Markup Language).
imr Co prawde. &a skr6ty utpvajq tych sarnyeh liter, ale nie majq z sobq nic wspdlnego.
Skr6t XML Identynkuje format przechwrywania stnrkturalnych danych. Excel 2003
oferuje kilka n o w h funkcji rwivanycfi z jqzyldern XML.
Na rysunkach 7.1 i 7.2 pokazano proste procedury napisane w jpqkach XLM i VBA.
Utwomne r n h pnetwarza wybrane kornbrki. Zmienia kolor tla kombnk i wok&
nich umicszcza ramkq. ~rawdo~odobnie zgodzisz siq, 2e kod Wdlowy j q y k a VBA jest
o wiele czynlniejszy. Latwiej go r6wniet modyfjkowd, gdy zaistnieje taka koniecznoit.

Wprowadzenie do jezyka VBA


Zanim przejdq do konk~etbw,sugerujq dokladne zapmanic sip z materiatern zawartym
w tym punkcie, stanowiqcyrn obszerny pmglad zagdnieh, ktbrc zonanq om6wione
w pozostdej W c i rozdziatu. Ponitaa lista zawiera nieuporzqdkowane zestawienic
pojqf charakteryzujqcych j ~ y VBA.
k
Rozdnat 7. + Wprowadzenie do jqzyka VBA 141

Rysunek 7.1.
Pmste makm
wle.?vkuX M ,
zapisane
w arkusm makra

Rysunek 7.2.
Proste makro
w1eryku vm.
zapisane
w module VIM

KodirtMhyv. Wykonanie kodu 2rodkwego napisanego w jezyku VBA pozwala


malizowat edane operacje. Wprowadzany lub rejeswowany kod Mdlowy
jpzyka VBA jest umiemzany w modute VBA.
M O M .Moddy VBA qprsechowywane w skorosycie Excela, ale w celu ich
przeglqdniqcia tub nodyfikowania nalety utyC edytora VBE (ang. Visual Basic
Ediror).
W Modut VBA zawiera procedury.
W Procedmy. Zasadniczo procedura jest jednostlq kodu k6dlowego nalizujqcq
ohellone zadanie.
Sub. Po&j zarniesrczono pmktad procedury Silb o nazwie Test. Procedura
oblicza prostqsume, a nastqpnie wynik wySwietla w oknie komunikatu.
Sub Test(]
Sum -1 + 1
b g h x 'Wynikien jest ' 1 Sun
End Sub

1 Function. Poza procedurami Sub w module mog4 tez byt umieszctane procedury
Function. Praecdua Function m c a pojedyncqwartoSE Lub tablicq. Mote
zostat w y w h z innej procedury jczyka VBA lub byt zastosowana w formule
W s z a Oto przyktad procedury Function o nazwie Addiwo:

-
Functron PddTwt argl , arg2)
AMTw argl + argZ
EM Fwction
142 Czerc Ill + Jqzyk Visual Basic for Applications

Obiekty. Jleyk VBA manipulde obiektami powitpnej z nim aplikacji.


W tyrn pnypadku takqaplikacjqjest Excel. Excel ofemje pnad 100 klas obiektbw,
kt6rymi motna manipulowat. Prgkbdami takich obiekt6w sq skoroszyt, arkusz.
zakres arkusza. wykres i narysowany pmstokqt. Dostepnych jest macmie wipcej
obiektdw, kt6re motna zmieniad p n y W c i u kodu trodtowego jezyka VBA.
Klasy obiekt6w majq struktuq hierarchicmq. Obi- m o m m i a d w stosunku
do innych obiekt6w funkcje kontener6w. Pnykiadowo Excel jest obiektem
Application i zawiera inne obiekty takie, jak Workbook i CmndBar. Obiekt Workbook
mote pnecbowywa< jnne obiekty takie, jak Worksheet i Chart. Z kolei obiekt
Worksheet stanowi kontena dla takich obiektbw, jak Range, PivotTabl e itp. Sposdb
uporzqdkowania takich obiektow jest nazywany modelem obiektowym Excela.
Zbiory (ang. Collections).Zbibr jest tworzony p m z podobne do siebie obiekty.
Pnykladowo zbior Worksheets sklada sit z wszystkich arkuszy okreSlonego
skoroszytu. Zbi6r CcmnandBars zawiera wsgstkie obiekty Cmandflar. Zbiory
same w sobie t e t sqobiektami.
Hierordria obi&w. Pny odwdywaniu siq do obiektu pdm$dnego nalety o w l i d
jego lokalizacjp w hierarchii obiekt6w p n y u2yciu maku kropki (ang. dot)
spehiajqcej funkcjt separators oddzielajqcego kontener od obiektu podnpdnego.
Pnykhdowo w nastepujqcy spos6b mama odwoiat sip do skoroszytu o nazwie
Zeszyt! . x l s :

~ skomsytu Zeszytl. xl s zawartego w zbione


Instrukcja o d w h j e s i do
Workbooks. Zbidr Workbooks jest zawarty w obiekcie kontenene Application,
czyli w Excelu. Po przcjSciu na kolejny n i t s g poziom moms odwoiad siq
do arkusza Arkuszl:

Po przejlciu na kolejny poziom w nastqpujqcy spos6b m o a a siq odwdaf


do okreSlonej kornbrki:

Obiekty akfpne. JeSli zostanie paminim okrrSlone odwolanic do obiektu, Excel


posh2y sip obiektami aktywnymi. JeSli aktywnym skoroszytern jest obiekt Zeszytl,
popnednie odwotanie mote zostaC uproszczone do nastepujacej postaci:
Worksheets ("Arkuszl") .Range( 'Al")
Jeili aktywnym arkuszern jest arkusz Arkuszl, odwohnie motna jeszcze bardziej
uprolcif:
Range( 'Al")
WIeSciwoSci obieki6w. Obiekty posiadajq wtaSciwoSci. WlaSciwoSt m o i by6
trakowana iak ustowienie o b i e h . Przykladowo obiekt Ratwe posiada takie
w1a3ciwok~jak Value i Nam. Obiekt Chart dysponuje w~ciwokciamiHasTi t i e
i Type. PIzy utyciu jqzyka VBA moma definiowat i rnodytikowaC wI&ciwoSci
obiektu. Prrj odwdywaniu sip do wldciwoSci obiektu,jej nazwp od nazwy o b i e h
oddtiela sip za pomocqkropki. Utywajqc na pnykkd pni%zej instrukcji. mows
odwobt sip do wartdci kom6rki A1 arkusza Arkuszl:
Uorksheets!"Arkuszi') .Rarqe('AI"> .Value
Zmienne jwku VBA. Z m i e ~ y r jpzyka
n VBA m o m prrypisywat wartosci.
Zmiennqnalety traktowat jak nazwp s m c q d o przechowywania okrdlonej
wartoici. Aby prrypisat zmiennej Interest wartodt kom6rki A 1 arkusur Arkuszl,
n a l e y u2yC poniazej instrukcji jezyka VBA:
Interest - Worksheets['Arkuszl") .Range("Al") .Value
Meroc+ obiekrh. Obiekty posiadajq metody. Metoda jest operacjq wykonanq
na obiekcie. Pnykladowojednq z metod obiektu Rangejest rnetoda C1 earcontents,
kt6ra powoduje wyczyszczenie zawartoSci zakresu. W celu u e c i a metody nalety
ra nazwqobiektu wstawit kropkq, a nastqpnie jej namt. Aby na przyklad w y c y k i t
zawartoit kom6rki A1 aktywnego arkusza, nalety u2yt nastppujqcej instrukcji:

Standardowe elementyj~kuprog~mowanio.
Jqzyk VBA posiada t a k e wszystkie
elementy nowoczesnych jqzyk6w programowania takie, jak tablice, petle itp.

Analogla
JeSll lublsz analogle, oto Jedna z nlch, w kt6rej por6wnujq Excel z sleciq bar6w szybkle] obsiugl.
Analogia mote porn& w rrozumlenlu zwlqzkbw pomiedzy obiektami, wlaSclwoJciami i rnetodaml
JgzykaVBA.
Podstawowq jednostkq Excela jest obieM Workbook. W pnypadku sled bar& szybkiej obslugi taka
jednostkq jest jeden bar, k c e l umotliwia Ovonenle I zarnykenie skoroszytbw. WszysWe otwarte
skorusryty zbi6r Workbooks (Zloiony Z obiektb hbrkbook). POdobnie klerownlctwo sieci bar6w
moie otwierat i zamykaf bary. Wszystkie bary sieci mom by2 potraktowane jak zbi6r Bary zioiony
z obiekt6w 3ar.
Skoroszyt Exctla jest obiektern, ale sarn pmchomje inne oblekty takle, jak arkusre, wykresy,
modub VBA ltp. Ponadto katdy obiekt zawarty w skoroszyele mote posiada6 wtasne oblekty.
Prryktadnwo oblekt Worksheet mote prrechowywaC takie oblekty, jak Range, PivotTable. Shape itp.
Rbwniei bar szybkie] obslugi (odpowiednik skorosrytu) zawiera takie obiekty, jak Kuchnia, Jadalnia
i Stoly (zbiw.Ponadto kierownictwo mote d o d d lub usunq5 obiekty zawarte w obiekcle Bar. P m
kledowo do zbiom Staly mote dodaC w i v e j stolbw. Keidy z tych dblekt6w mote poslada6 inne
obiekty. Rzyk(@m obi& Kuchnia pmchowuje o b i i Kuchenka, Uentylator, GlhyKucharz, Zlm itp.
Jak na razie wszystko sle zgadza. Wydaje sip, te przytoczona analogla slq spawdza. PrzekonaJmy
sle, czy bgdde tak dale].
Obiekty Excela posladajq vAa9dwoSci. Rrykladowa obiekt Range dysponuje taklml vAaSciwo5ciarni.
jak Value I Name, natornlast oblekt Rape oferu)e takie ~ S c i w o S c l jak
. Width, HelgM itp. Obiekty
w barze szybkiej obslugl t e i posladajq WaSclwdcl. Pnylctadawa ablekt KuChenka ma takie wiaSci-
woC1, jak T=peratura i LiczbaPalnikb. Obiekt Wertylator tet posiada zbi6r wlasnych wiaSciwoSc1
(k'lqczony, LiczbaObrcrtMaMinute itd).
Poza wIakl&larnl &My B e l a pasladajq te2 rnetody wykonbjp na nlch opmcje. pnvkhdauo
metoda ClearContents usuwa rawarto!E obleMu Range. O b l e w powiqzane z barem szybklej o b
stugi r6wniet posiadajq metody. Z +atwoSclq rnoina soble wyobmzld dla obiektu Kuchenka metad?
Z~i8naClstawieniaTemstatulub dla obiehtu Wentylator metode W~~crente.
W F.rrypadku -la met* czasarnl rnodytlkujq wart&i wtaJclwo4ci obiekt6w. Metoda Clearcon-
tents obiektu Range modyflkuje wta&iwoSf Value. Podobnie rnetoda ~ r n l a n a ~ s t a w l e n i a ~ e m s t a t u
obiektu Kuchenka rnodflkuje jego wt&ciwo~ Temperatura.
JBZyk VBA urndlwia plsanle procedur pnetwarz@zlc)ch&My Exesla. W pzypadku baru szybkiel C&
siugl k i m i c t w o moie wydaC poleoenie wykonania operacji mlqzany~hz DMektaml w rdrn sic ma&
dujqcyrni [wtqczenie kuchenki i ptzetqczenie wentyiataa na wywkle obroty). Czy teraz Jestto Jasne?
1 44 CmIC Ill + J
w V b d Basic for Applications

Motest wiaryC lub nie, ale powytsa zcstawienie w d d t du2ym stopniu opisuje jpzyk
VBA. Tcnz nalety jedynie tapomat siq ze s z c z c g h i , ktbrt zawarkm w pozastakj

Edytor Visual Basic


Wszystkie opaacje zwjqzane z twoiEeniem kodu w jpzyku VBA sq wykonywane w edy-
-
tone Visual Baric (ang. VBE VlmafBasic Editor). Edytor Visual Basic jest oddzielnq
aplikacjq SciJle wsp&ipncujqq z Excelem. Gdy na pnyklad otwierasz edytor Visual
Baic, Excel zajmuje sic wszystkimi sm
-i tej operacji. Nie jest motliwe urucho-
mienie edytora Virual Bmic bez upmdniego uaktywnienia Excela.
-J+* Mod* VBA sq -an8 w pllkach skoraszytdw. Nle bvdq widoczne
<mi do momentu otwarcla edytora Wsual Basic.

Uruchornienle edytora VBE


Przy korystaniu z Emwla istnieje matliwoM przchpenia sip do olola edytora VBE.
W tym celu nalcty utyC jednej z nastcpujqcych metod:

m w y b M z rnmu Nanq&ia pozycjp Makro, a naswpnie Gdytor YisudBmic,


kli!utcnqC przycisk Edytw VisualBasic na pasku narzpdzi V f m lBmic.

Ponadto prry utyciu ponizszych metod motna uzyskat dostqp do dwbch specjal-
nych modu+6w VBA (obydwa zawierajt procedury obshrgi zdancfi omdwione w roz-
dziale 19.):
prawyrn pnyfiskiern myszy klihij kartp arkusza, a nastqnie w celu uzyskania
dostppu do rnoduh kodu fr6dlowgo aktywnego arkusza, wybien pozycje
WyJwietl kod,

prawym przyciskiem myszy kliknij ikont Excela (znajduje siq po lewej


stronie paska menu), a nastppnie w celu uzyskania dostepu do modulu kodu
tr6dlowep obiektu Tht sblorkbook ahyamego skoroszytu wybierz pozycjp
Wyiwierl kod.
Nle pomyl edytota Wsuaf Bask z pfogremem MlmsoR Scrlpt Editor.-a to nrpe)nle
'* lnne W q . Naqdzle Smpt E d h M.I do edytowania skrypt6w n a l s a n F h u jpzyku
b VBScrIpt lub JwaScript i u m i e r w m p h w pflku HTML Elhfora W p t Editorw taj
ksiee nie omdwlono.
Na rysunku 7.3 pokazano okno edytora Yisud Basic. M o h sie okazaC, t e w twoim
przypadkn okno tdytora Visual Bmic &dtic N d a b nieco inaczej. h i e j e mkliwoSC
ukrjwania okien, zmieniania ich rozmiar6w, blokowania i miany ich lokalizacji itp.
Rozdziat 7. + Wprowadzenie do jqzyka VBA 145

Rysunek 7.3.
Okno edytora
Visual Basic

Okna edytora Visual Basic


Edytor Yirtld Busic skhda sic; z kilku elementow. W kolejnych podpunktach w skrbcie
om6wit niektore kluczowe komponenty edytora.

Pasek menu edytora Visual Basic


OczywiScie pasek menu edytora fisual Basic dziala jak katdy imy pasek menu, z kt6rym
siq spotkalek, Zawicra polecenia wykorzystywane w pracy z r6hymi komponentami
edytora. Wiele poleceh posiada powi$tane z nimi skroty klawiaturowe. Pnykladowo
pofeceniu ~mmediate~ ~ i i d owwmenu view przypisano sk6t klawiaturowy C~;I+G.

Edytor V I M Basic oferuJetef menu podwzne zawlerajqce c q s t o u2ywane


plecenia. PoJa* r 4 ono 0 klikrtl~ciupawym przyclsklern rnyszy w darolnym
mlejscu okna edytwa Wsual Basic.

Paskl narzdzl edytora Visual Basic


Pasek m @ z i StundurtidomySlnie majdujgy siq 6ezpo4rednio pod paskiem menu jest
jednym z udciu dost~pnychpask6w narzqdzi edytora Visual Basic. P,asek menu tet
jest u m n y za pasek n q d z i . Paski narqdzi edytora Visual Basic dzialajq tak samo,
jak tego typu elemmty w Exoelu. Mogq bye dostosowywane, pmrnieszczane, wyiwietlane
i uloywane w zalefnohi od polneb. Aby dostosowC paski nmqdzi edytora Visual Basic.
2 menu Yiew nalety w y b d pozycjq Toolbors, a nastcpnie Dosrosuj.
146 Cz&C Ill + Jezyk Visual Basic for Applications

Okno Project Explorer edyfora Visual Basic


Okno Project Explorer zawiera diagram majqcy postat dnewa, uwzglcdniajacy katdy
skoroszyt aktualnie otwarty w Excelu (w tym t a k e dodatki i uluyte skoroszyry). Katdy
skomszyt jest okreilany mianem p r o j e h . Okno Project Explorer bardziej szczeg6lowo
zostanie om6wione w kolejnyrn punkcie zatytubwanym ,,Zastosowanie okna Project
Explorer".

JeSli okno Project Explorer nie jest widocme, nalczy wcisnqt kornbinacjc klawiszy
Ctrl+R. Aby ukryC okno'Project Explorer, nalezy klikn* prycisk Zamkng w jego pasku
tytulowym. Motna tet prawym pnyciskiem m y s y kliknllf w dowolnym miejscu okna
Projecr Explorer i z menu pod~ycznegowybrat pozycjp Hide.

Okno Code
Okno Code (czasem nazywane oknern Module) zawiera kod trddlowy jpzyka VBA.
Z katdym elementem projektu jest powizgane okno zawierajqce kod hddlowy. Aby dla
okreSlonego obiektu otwonyt okno Code, n a l c e go dwukromie klikn;iC w oknie Pro-
ject Explorer. Aby na przyklad otworzyC okno Code dla obiektu Arkuszl, nalety go
dwkmtnie klilol$ w oknie Project Explorer. JeSli dla obiektu nie zostanic zdefiniowany
kod irodlowy jgzyka VBA, okno Code b@e puste.
Kolejna metoda umotliwiajqca otwotzenie okna Code dla obiektu polega na jego za-
znaczeniu w oknie Project Erplorer i kliknicciu ptzycisku View Code znajdujqcego sic
na pasku narzcdzi w gornej c*ci okna Project Explorer.
Okno Code zostanie om6wione w dalszcj c q k i mzdziatu w punkcie zatytulowanym
,,Zastosowanie okim Code".

Okno Immediate
Okno Immediate jest najbardziej pnydatne w pnypadku bezpogredniego wykonywania
inmukcji jezyka VBA, ich testowania i usuwania M ~ d b wz kodu trodlowego. Okno
mote by6 widocme lub ukryte. JeSli okno immediate jest niewidoczne, nalety wcisnqt
kombinacje klawiszy Crd-G. Aby je zamknqc, naleg, ktiknqk przycisk Zamkng na pa-
sku tytuIowym. Moms tet p r a y m pnyciskiem myszy kliknat w dowolnym miejscu
okna Immediare i z menu podwmego rvybrat pozycjp Hide.

Zastosowanie okna Project Explorer


W trakcie utywania edytora Visual Basic katdy aktualnie otwany skoroszyt i dodatek
Excela jest W o w a n y jako projekt. Projekt motna potraktowat jako zbi6r obiekt6w
uponi@kowanych na wz6r konspektu. Aby rozwimj zawartdk projektu, nalety kliknqk
ikon? + majdujqcq sip z lewej strony nanvy projektu w oknie Project ExpIorrr m p l o -
-
rutoraprojek?&j. W celu minipcia zawartofci projektu nalety kliknai ikonq widocmq
z lewej strony nazwy pmjektu. JeSli spr6bujesz m m a t zawartoSC projektu chronionego
hasiern, zostaniesz popmszony o jego podanie.
Rozdziot7. + Wprowadzenie do jezyka VBA 147

W gdmej c q k l okna PraJect Explorer znajdujq sle tlzy w i s k l . Trzeci przycisk


o narwie Toggle FoIders decyduje o tym, czy obieMy projektu b@i) wyswietlane jako
hierarchia czy w postacl pojedynczej listy.

Na rysunku 7.4 pokazano o h o Project fiplorer zawierajqce trzy projekty (jeden dodatek
i dwa skoroszyty).

Rysunek 7.4.
Okno Project E.xp/orer
H.rSw/et/a]qce
tny ProjeMy

Bywa, te po uaktpvnienlu edytora Wsual BasicwySwletJony rnodut kodu fr6dbwego


nle odpowiada obiektoW maszonemu v okne Project E i p l m r . Aby mi& pewnoY.
2e jest przetwarzany odpawiednl modut kodu frbdtowego, tawsze nalety w oknie
Project Olplomrdwukrotnie klikn* obiekt.

J d l i otwahf wiele skoroszytdw i dodatk6w. zawartoSC okna Project fiulorer mote


4
e motliwe ukrycie projektdw zakrtych tym oknie.
byC troehp przytlaczajip. ~ i jest
Jednak prawdopodobnie nvininz te projekty, kt6rych aktualnie nie utywasz.

Ronviniety projekt wySwietla przynajmniej j a pozycjp o nazwie Microsoy? Excel 06-


jects. Po jej ronviniviu k d q widoczne pozycje dla katdego arkusza i arkusza wykresu
zawartych w skoroszycie (katdy arkusjest haktowany jak obiekt), a takte obiekt o nanvie
T h i sworkbook, ktdry reprczentuje obiekt Activeworkbook. JeSli projekt zawiera moduty
VBA, w jego drzewie pojawi sie e t pozycja Modutes, kt6ra p m h o w u j e moduty. hojekt
mote tet zawiwat element o nazwie Fornts przechowujqcy obiekty UserForrn (inaczej
naywane niestandardowymi oknami dialogowymi). JeSli projekt posiada jakikolwiek
modul klasy, pojawi sie kolejny element o nazwie Class Modules.

~ o d a n i enawego moduiu VBA


A b ~ d oprojektu dodaC mwy rnodui VBA, nalety w o h i e Project Ejrplorer zamaeyt
nazwq projektu, a nastcpnie z menu Insert wybrad pozycje Module. M o h a re2 prawym
&skiem myszy k l i W name projektu i z menu podrvmego wybraC pozycje Insert,
a nastpnie .Mudule.
W prrypadku rejestrwmla rnakra Excel automa9cmle wstawi modul VBA pnechowujqcy
wygenerowany kad frddtowy.
1 48 Crgft Ill + J ~ z y kVisual Bosic for Applications
I
Usuwanle modulu VBA
JeJli mlety ci na usuniqciu z projektu modulu VBA lub modulu klasy, naleky w oknie
Project Exprorer z m a c z y t nazwq moduh, a nastqpnie z menu File wybrat pozycjp
Remove ux. gdzie xa identyfikuje n a m e moduh!. Moms tet prawym przycjskiem
myszy kliknqd nazwq moduh! i z menu podqcmego wybrat pozycj~Remove xxx. Zo-
staniesz zapytany, czy pried usunieciem modulu chcesz go wyekspoltowat. Wipcej in-
formacji na ten temat znajdziesz w kolejnym podpunkcie. Parnietaj, t e nie jest rnotliwe
usuniqcie rnodulbw z kodem Mdlowym powipnych ze skoroszytem (modut kodu
ThisWorRbook)lub arkuszern (na przykjad modut kodu dla obiektu Arkuszl).

Eksportowanle i impoltowanle oblekt6w :

Wyjqwszy elementy pnynale2qu do pozycji References. kazdy obiekt pmjcktu mote


zostat zapisany w oddzielnym pliku. Operacja zapisu jednego obiektu jest nazywana
ekportowuniem. OcywiScie obiekty rnogq byt r6wniet importowane. Eksportowanie
i importowanic obiektbw przydaje sie, gdy ralety ci na zastosowaniu w innym projekcie
okreSlonego obiektu, takiego jak rnodul VBA lub formulan UserForm.

Aby wyeksportowa6 obiekt. naldy zaznaczyt go w oknie Project Erplorer, a nastgpnie


z menu File wybraC pozycjg fiport Fife (lub wcisnqt kombinacjq klawiszy Ctrl+Ej.
Ohvorzy sit okno dialogowe, w kt6rym zostaniesz poproszony o podanie nazwy pliku.
Obiekt nadal pozostanie w projckcic (eksportowana jest jedynie jego kopia). Jdli eksporm-
jesz obiekt UsetFam wyekiportowany mstanie takte k-y kod Wdkwy z nirn powiqzany.

Aby do projektu taimportowat5 obiekt, w oknie Project Explorer nalew zamaczyd nanvq
projektu, a nastwnie z menu File wybrat pozycjq Import File. Zostanie otwarte okno
dialogowe, w kt6ryrn zastanierz poprwmny o podanie nazwy pliku. Zairnparrtowat m o h a
tylko plik, krdry zostal wczesniej wyeksportowany pny utyciu polecenia Export File
menu File.
'
Aby skmowaf! modd lub obiekt UserFom do lnnego prolektu, tak napraw* nie trzeba
go eksportowar!. a nastepnie ~~~~~6. W s s r i e , gdy oba projekty sq OM.
.. _ wystarcry uakl)wnlC okno Pwect Explorer I przeciqgnqt oblekt z jednego projektu
do drugiego.

Zastosowanie okien Code


Gdy j u t nabimesz wptawy w kofqsaniu z j w k a VBA, mn6stwo czasu s p e n p d
oknami Code (kodu Wdtowego). Z W y m obiektktem p r o j e h jest powiqzane o h o I

Code. Oto te obiekty:


sam obi& skomszyhl (w oknie Project Erplorar jest nirn obiekt Thi skrkbook), i

arkusz lub arkusz wykresu za- w skomszycie (np. obiekty Atkuszl


lub Wykresl zawarte w oknie Project Explorer),
Rozdzial7. Wprowodzenie do iqzyka VBA 149

m& Mary (specjalny typ rnodub umotliwiajqcy twomnie nowych klas obiektdw),
formularz UserForm.

Minirnaiizacja i maksymallzacja okien


Gdy w edytora V i m 1 Busic zostanie otwartych jednocteSnie wiele okien Code, mote po-
wstac mate mieszanie. O h a Code sq bardzo podobne do okien arkuszy Excela. M o ~ a
je minimalizowat, maksymalizowat, ukqwad, zmieniat ich pototenie itd. Wielu osoborn
najefektywniej sip pracuje ze imaksymalizowanymi oknami Code. Dzipki temu mogq
zobaczyC wiqksq ilosd kodu trddlowego i skupit sic na wykonywanym zadaniu. Aby
maksymalizowaC okno Code, nalety kliknqt przycisk Mahymalizuj na pasku tytulowyrn
o h a lub dwukmmie kliknqd pasek. W celu prrywr6cenia popmdniej wielkoici okna Code
(cofnipcie maksymalizacji) nalety kliknqt pnycisk Pqwrdi. okno na pasku tytuiowyrn.

Czasem mote ci zaleteC na jednoczesnym wygwietleniu dwdch lub wickszej liczby


okim Code. Pnyktadowo motesz chciet por6wnat kod fr6dkwy tawarty w dwdch
moduhch lub przekopiowae kod z jednego moduh do drugiego. Minimalizacja okna
Code spowoduje jego schowanie. Aby caikowicie zamknqc okno Code, nalety kliknqt
pnycisk Zamknij na pasku tytulowym okna. Aby ponownie je otworzyd, wystarczy
dwukrotnie k1ikn;tC odpowiedni obiekt w oknie Project Explorer.

Edytor Yirual Basic nie umotliwia zamknivia skoroszytu. Tp operacjq motna wykonad
tylko w aktywnym oknie Excela. Jednak w celu zamkniwia skorostyru lub dodatku moms
poslutyt sie oknem Immediate. Wystarczy uaktywnit to okno, a nastcpnie wprowadzic
w nim instrukcjq jezyka VBA podobnq do ponitszej i wcisnqc Enter:

lnstrukcja wykana metode Close obiektu Workbook, ktdra zamknie skoroszyt. W tyrn
pnypadku skoroszytem jest dodatek.

Przechowywanie kodu ir6dtowego jqzyka VBA


Zasadniczo okno Code mo2e przechowywat caery typy kodu krdd+owego: procedury
Sub i Function, proccdury wlaSciwoSci o m deklaracje. Procedura jest zbiorem in-
strukcji realhjqcych okeSlone zadanie. Funkcja jest zbiorem instsukcji zwracajqcych
pojdpmqwartoSC lub tablicq @od wtglqdern dziahia podobna do funkcji arkusza takiej.
jak na przykhd SUM). Procedrvy wiaiciwoici q to specjalne procedury stosowane
w moduhch klas, natomiast deklaracja jest infonnttejq na ternat miennej zastosowanej
w kodzie k6dlowym jqzyka VBA. Pnyktadowo motna zdeklarowaC typ danych dla
planowanych miemych.

Pojedynczy modut VBA moZe pmchowywad dowolnq liczLy procedur Sub i Function
oraz deklaracji. Sposdb mrganizowania rnoduiu VBA jest calkowicie zaletny od ciebie.
NieMdrzy preferujq umies~czaniecalego kodu irbdIowego jqzyka VBA dla aplikacji
w jednym module VBA. Z kolei inni przechowujqkod w kilku r62nych rnodutach.
150 CzeJC Ill + Jezyk Visual Basic for Applications I

Co prawda, dysponujesz d u a mobadq dotyczqcq rniejsca prrschowywania kadu


tr6dbwegoJezyka VBA, ale istniejq pewne ograniczenia. Procedury obstugi zdarzerl
mwzq znajdowd sle w oknie Code obiem odpowiadajqcego zdarrenlu. JeSli na pnyklad
napiszesz procedure wykonywanq w trakcle otwierania skomsrytu, musi ona zosta6
umieszczona w oknie Code obiektu ThisWorkScok. Ponadto procedura musi mieC
specjalnq name. Zagadnienie to stanle siq bardziej nozurnlak po omdwieniu zdamrl
(rozdzial 19.) i formulamy UserForm {IV czeX kslqiki).

Wprowadzanie kodu irbdtowego jqzyka VBA


Zanim bpdzie mozliwe wykonanic jakiejkolwiek macqcej operacji, koniecme jest
wczeiniejsze wprowadzenie do okna Code kodu trdd+owegojezyka VBA. Dodatkowo
kod musi mieC postat procedury. Procedura sklada siq z instrukcji j ~ z y k aVBA. Na razie
skupimy sic na jednym typie okna Code, c g l i module VBA.

W celu umieszczenia kodu trbdlowego w module VBA m o a a skonystad z h-zech metod:


metoda rra+cyjno -wprowadzanie kodu irfidlowego w tradycyjny sposirb
przy utyciu klawiatury;
-
rejesImwanie makm zastosowanie funkcji Exccla umotliwiajqcej zarejcstrowanie
wykonywanych operacji i zarnienienie ich ma kod trddlowy jqzyka VBA;
W -
kopiowanie i wklejanie skopiowanie kodu z innego modulu i wklejenie go
do moduh, nad ktdrym pracujesz.

Rqcme wprowadzanie kodu ir6dtowego


Czasem najprostsza metoda okazuje sic najlepsza, jak w prrypadku bezpdredniego
wprowadzania kodu z klawiatury. Aby pogrupowad elementy logicznie z sabq powiqzane,
odpowiednie wiersze kodu rnoina poprzcdzit wciqciami wykonanyrni za pomocq klawisra
Tab. Prykhdern sq insmtkcje warunkowe pomiqdzy instmkcjami I f i End I f . Tak na-
prawdq nie jest to koniecme, ale ulatwia analizowanie kodu, a zatem warto wymbiC w sobie
nawyk konystania z tabulatora.
,
Wpmwadzanie i edytowanie kodu krddtowego moduh VBA wyglqda tradycyjnie: tekst
motna zamaczaE, kopiowaC lub wycinat, a nasqpnie wklejat w inne miejscc. UhgoSE
pojedynczej instmkcji jpzyka VBA jest dowolna. Jednak dla zachowania czyteln6Sci
dug* insrmkcj~motna podzielie na dwie lub wipksq liczbe wienzy. W tym celu na
kohcu wiersza po spacji naleq wstawic ask podkre9lenia, wcisnqt klawisz Enter i cjag
dalszy instrukcji urnieSciC w nastqmyrn wierszu. Oto pnyktad pojedyncaej instrukcji
urnieszczonej w caerech wierszach:
YsgEox "Nie mind z n a l e t t ' 8 WAS~{~Y~RTWT~ENJFILE: -
& v b C r i f d vbCrL' L ' P l i k p w i n i e n b y t tirnieszcz~nyw " -
& ThrsWorlbook.?ath I vbC-Lf h vbCrLf -
& 'Hate byC konimne pcnorne z a i n s t a l w a n l e aplitacji @udqetMan". vbCrit4cal
APPNME

Nale2y z a u w w , te ostatnie try vliersze inshukcji zostaly w c i ~ W


. c b i a 5%opcjonalne,
ale pozwalajq podkdlif, te te a e r y wiersze rzeczywiScie twomjedna insrrukcjq.
Rozdzial7. + Wprowadzenie do jezyka VBA 151

P n w a na odrobinp tsnnlnologli
W ksipice potugujq siq taklmi termlnaml, jak program, procedura I makm. Zazwyczaj programihi
u j w a j q termlnu procedvra w celu ,opisania zautomatyzowanego zadania. W przypadku Excela
procedura jest tet okreglana mianem makra. Z technicznego punktu widzenia procedura moie byC
pacedurq typu Sub lub Function, wobec ktdrych czasarni uiywa siq okreflenia program. Osobi-
Scie wszystkich tych termlndw u w a m zamiennle. Jednak pomitylzy proceduraml Sub i Function
qsteprje istotna rbtnica. Rozrbtnienie to stanie sie widoczne w rozdziatach 9. i 10.

Edytor Visual Basic, podobnie jak Excel, ofetuJe wiele poziomdw operacji realizowanph
F e z polecenia Undo I Redo. A zatem Jefli stwierdzlsz, i e usunqieS instrukcje, ktdrej
nie powlnieneg by( usuwaf, molesz klikaC przycisk Undo (lub wcisngf kombinacje
klawlsq Ctrl+Z) a t do momentu jej pmpr6cenia. Po wykonanlu operacji prrywracania,
w celu cofniecla Jej efektdw motna klikng przycisk Redo. Funkcja ta moie .ocaliC
iycie", dlatego namawiam do poeksperymentowania z niq do rnornentu petnego
zrozumienia zasad jej dziatania.

Spr6buj umiekiC w projekcic modul VBA, a nastepnie w powiipnym z nim oknie Code
wpmwadt ponitszq procedurq:

--
Sub SayHello( 1
Ksg 'Czy odzywasz sle " I Application.UserVame b '?"
Ms UsgBoxtMsg. vbYesNo)
-
I f Ans vSHo ;hen
MsgBox "Nic s i e nle stalo."
Else
MsgBox 'MusZ~ byt J~SWidzem! '
End I f
End Sub

N a rysunku 7.5 pokazano, jak wyglqda ten modut VBA.

Ryrunek 7.5.
Pienvsza
pocedvra
napisana
w jezyku VBA
1 52 CzeJe Ill + Jew Vlwal Basic for Applications

Podczas wprowadranla kodu edytor Usual Basic dokonuje pewnych jego rnodyfikacji.
JeSll na prryktad pned lub pa maku f6wnoSci (-) pornlnlesz spacjq, edytw Wsual
Baslc wstawl jq za ciebie. Poza tyrn zrnieniany jest kolor nieM6rych st6w. Wszystko
jest bardzo normalne i z czasem to docenist
Aby uruchomic! pracedurq Szybkl:a, ncrlety sprawdzic!, czy kunor znajduje sic w do-
wolnym miejscu obszaru. w ktbqrn wprowadziled tekst, a nast~pniewykonaf jednq
z nastepujqcych operacji:
wcisnqd klawisz F5,
W z menu Run wybraf pozycjp Run SuMVser Form,
kliknqk prrycisk RunSuWUserForm na pasku n w i Standard.

Po poprawnym wprowadzeniu kodu procedura zostanie wykonana i w efekcie pojawi


sic proste okno dialogowe (rysunek 7.6) zawierajqce nanvt umkownika podanq te2
w oknie dialogowym Opcje Excela. Nalety zauwatyf, ?.e po uruchomieniu makra Excel
jest uaktywniany. Na tym etapie nie jest istome, czy romrnicsz. w jaki sposdb dziah kod.
Stanie sic to dla ciebie jasne niebawem.

Rysunek 7.6.
w i k wykonania
procedury pokazanej
na rysunku 7.5

W rviekszolci prrypedkdw makra wq wykonywane z podornu Excela. Jednak czpsto


efektywnlejszejest pnetestowanle rnakra popnez jego bezpoSrednie LI~chornienie
w edytorze Usual Baslc.

Przed chwilq stworzyU proceduq Sub jpzyka VBA (naqvmq t& mahem). Po wykonaniu
polecenia uaktywniajqcego makm edytor Visuoi Basic szybko skompilowd i uruchomil
jego kod fr6dkwy. Innyrni siowy, przehvorzona zostala W a instmkcja i Excel po
prostu wykonal to, co mu nakazano. Makro mote by6 wykonane dowolnq liczbq razy,
chociat po jakimg czasie operacja m nic b~dziej u t tak amkcyjna.

W pmstej procedurze majdujq siq nastpujqce elementy:


deklaracja procedury (pierwszy wiersz),
przypisane n i e n n y m wartdci (zmienne 13sg i Ans),
lqczone +a~Icuchy(pny utyciu operatom 81,
wbudowane funkcje jezyka VBA VsgBox),
wbudowane stale jczyka VBA (vbYesNa i vbNo),
konstrukcje ztotonej z jnstrukcji If, Then i Else,
I zakohmnie pmcedury (ostatni wiersz).

Nietle jak na pimvszy rat? Wszystkie te zagadnienia omdwiono w dalsaj cz&i ksi@ki.
Rozdzial7. + Wprowadzenie do jszyka VBA 153

Zastosowanie rejestratora makr


Kolejna metoda urnieuczania kodu ii6dlowego w module VBA polega na rejestrowaniu
operacji p n y utyciu rejestratora makr Excela. Niezaletnie od tego, jak bardzo bqdziesz
siq starat, w tadnym razie nie jest rnotliwe zarejestrowanie wczegniej zarnieszczonej
procedury SayHel lo. Rejestrowanie rnakr jest bardm przydamq funkcjsb ale posiada pewne
ograniczenia W praktyce przy rejesmwaniu rnakra prawie zawsze trzeba zmodyfikowat
kod lub ecznie wprowadzif jego czqSd.
Nastqpny przyklad demonsmje, w jaki sposdb zarejestrowat rnakro, ktbre zrnienia
orientacjq strony na poziomq. JeSli chcesz sam nealizowai ten przyklad, o w 6 n pusty
skoroszyt i wykonaj ponisze kroki.
1. Uaktywnij dowolny arkusz skoroszytu.
2. Z menu N a t l c i a wybierz pozycje Makro, a nastqpnie Zarejestruj nowe makro.
Excel otworzy okno dialogowe Rejeshowanie mukra.
3. Aby zaakceptowat wattoici domyllne, wystarny kliknqt OK. Excel automatycmie
umieszcta w pmjekcie nowy modul VBA. Od tego momentu Excel wykonywane
operacje zamienia na kod jqzyka VBA. W trakcie rejestrowania Excel w pasku
statusu WwietIa slow0 Rejesfruj,a t a k e ,miniaturowy ruchorny pasek narz~dzi
zawierajqcy dwa pnyciski (Zurrrymuj rejestrowanie i Oabolonie xglpdne).
4. Z menu PIik w b i e r z pozycjp Ustawieniasirony. Excel otworzy okno dialogowe
Ustawieniustrony.
5. Zamacz opcjp Poriorna, a nastqpnie w cclu zamkniqcia okna dialogowego kliknij OK.
6. Kliknij przycisk Zatrzymaj rejeswowonie na miniaturowyrn pasku narzqdzi
(motna tet z menu Narzqfzia wybrad pozycjq Makro, a nastqpnie Zarrzymaj
rtfssfmwunie).Excel zakoitczy rejestrowanie wykonywanych operacji.

Aby przyjrreC sip wygenerowanemu makru, naleg, uaktywnik edytor Visual Baic (naj-
prolciej poprzez wcifniqcie kornbinacji klawiszy Alt+FII) i w oknie Project Explorer
zlokalizowaC projekt. Aby zobanyC zawarto9C elernentu Module, nalety go kliknqc.
W celu wyiwietlenia okna Code powipnego z elernentem Module1 nalety go kliknqc.
JeJli w pmjekcie jut.majdowat sic element Modulel, nowe rnakro zostanie urnieszczone
w elmencie 1ModuIe2.Kod M d o w y wygenerowany przy lctyciu tego jednego polecenia
zawarto w listingu 7.1. N a l w pamipic, t e wiersze kodu, na pocqtku ktotych znajduje
sic m a k apostrok, sq komentarzarni i nie zostanqwykonane.
UsHng 7.1. Kod M&wy makra zmleniajqcego orlentacje strow na podomq
Sub HakrolO

' Matml Matm


' MaLm zarejertmane MC4-02-217. autor Jan Mowak

--
h'ith Activesheet .Pagesetup
.PpintTitleEto*s "
.PrintTitleColvnns "
End U! t h
ActrveSheet .PageSetm. Printllrea = "
I
154 Cz&C Ill + Jezyk Visual Basic for Applications

.LeftHeader --
With Acti veSheet .Pagesetup
""

---
.CenterHeader ""
.RlghtHeader ""
.LeftFooter ""

---
CenterFooter " "
.kiahtFooter ""
. ~ e i t ~ a rng i Pppl i c a t i o n . InchesToPoints(O.787401575)

-
.Righ:Margi n Appl icatiw. InchesToPot nts(0.787401575)
.TopMargin ~ p p l l c a t i o nInchesToPoints(O.904251969)
.

--
B o t t m t l a r g i n -.Applicaticn.InchesToPoints~0.984251969)
.HeaderMargin Appl i c a t i c n . InchesToPotnts(O.5)

.Printt!eadiqgs --
.FwterMargin App?i c a t i c n . InchesToPotnts(O.5)
Fa1se
PrintGrldlines

- - - False
Printbmnents x l P r l ntNoComnents
.PrintCuality 300

- -
.CenterHorlzontally
.Centervertically
False
False

.Draft - -
.Orientation xlLandscape
False

-
.PaprSize x l PaperA4

- -
.FirstPageNumber
Order x! DwnThenOver
xlktanati c

.
- -
BlackAndblhite False
. i m 100
.
PrintErrors x l PrlntErrorsOisplayed
End W i t h
End Sub

Mote zaskakiwat ildt kodu krddlowego wygenerowana za pomacq jednego polecenia.


Tak wmnie b y b w moirn przypadku, gdy po raz pienvszy stworzylem takic rnakro. Co
prawda, zostalo nienione tylko jedno proste ustawienie w oknie dialogowyrn Ustawieniu
srrony, ale Excel generuje kod ir6dlowy zawierajqcy informacje o wsrystkich parame-
trach okna. W tym przypadku wygenerowany kod h6dlowy jest nadmiarowy. Makro,
kt6re jedynie zmienia orientacjq strony, rnotna macmie uprokid, usuwajqc zbcdny
kod. Dzieki [emu makro staje siq przejnystsze i dzia4a szybciej, poniewe nie wykonuje
zbednych operacji. W praktyce powyhze makro moZna znacinie uproSciC:
Sub MakmlO
-
With P c t i w S k t . ~ a g e S e t u p
.Orientation x l l a n d s c a x
End With
End Sub

Usunqtem wsystkie wiersze kodu Zrbdlowego, z wyjgkiem instrukcji ustawiajqcej


wartoid wkkiwoSci Orientation. Makro mote m& icszcne bardziei uoroszczone. > .
poniewat przy rnodyfikowaniu tylko jednej w+a5ciwdci oie jest wymaganc stosowanid
konstrukcji opartej na instrukcjach hli t h i Enb With.
Sub MakmlO
PctlveSheet . PageSetup .Orientatlcn
i l d Sub
- xlLandscaire
Rozdziot 7. + Wprowodzenie do jezyka VBA 155

W pnytoczonym pnykkdzie makro zmienia wartoSC wMciwoSci Orientation obiektu


PageSetup aktywnego arkusza. Przy okazji nalety wspomnieb, te xlLandscape jest wbu-
dowanq stat% kt6rej zadaniem jest uproszczenie programowania. Stab x l Landscape ma
wartoid 2, natomiast stah x l P o r t r a i t wart096 1. Ponitsze rnakro daje taki sarn wynik,
jak poprzednie o nazwie Macrol.
Sub Macrola0
ActiveSheet.PageSetup.Orlentation
End Sub
- 2

Profciej jest chyba zaparniqtad nazwq statej n i t rdtne wartoJci liczbowe. Aby zapomac
sic ze statymi powiqmnyrni z okreSlonymi poleceniami, nalety postutyd sic systemem
pomocy.

Powytsza procedura mote zostab bezpogrednio wprowadzona do moduh VBA. W tym


celu nalety wiedziet. ktbrych u2yf obiektbw, wlaSciwo9ci i metod. OczywiScie o wiele
szybsze jest zarejestrowanie makra. Dzieki przytoczonemu pnykhdowi dowiedtialeS
sic te2, t e obiekt PageSetup posiada whSciwoSC Orientation.

W catej ksiqtce podkreSlam, te prawdopodobnle najlepszq m t o d q nauki jezyka VBA


jest rejestmwanie wykoryvanych operacji. Jesli masz wqtpllwoSci, spr6buj zarejestn,waC
wykonywane crynnofci. Ca prawda, uzyskane wynikl rnogq nie byt dokladnie takie.
jakich oczeklwatel, ale Jest szansa, Le dzieki nim twoja praca bqdzie postepowda
we wtalciwyrn kierunku. Aby zapoznad sip z oblektami. w+alciwosciamii rnetodami
pojawiajqcymi sip w zarejestrowanym kodzie frbdtwyrn. nalezy posluzyC sle
systemem pomocy.

4 Rejestrator makr barddej snneg6lowo mstanie omdwiony w dalszej c q l c l mzdziah.


Iapomaj s* z zawartoklq punktu .Rejestrator makr Excelam.
MmEf!l
Kopiawanie kodu irhdlowegoJqzykaVBA
Dotychczas ombwikm bezpofrednie wprowadzanie kodu h6dlowego i rejestrowanie
operacji w celu wygenerowania kodu jezyka VBA. Ostamia metoda urnieszczania kodu
w module V B A polega na skopiowaniu go z innego moduh. Motna stwonyf procedurq
w ramach jednego projekxu, kt6ra okate sic przydatna r6wnie2. w innym. Zamiast po-
nownie wprowadzat kod Wdlowy, motna po prosN otwonyC skoroszyt, uaktywnif
moduf oraz korzystajqc ze schowka, skopiowt kod i wkleid go do aktualnie utywanego
rnodulu VBA. W m i e koniecznoSci po wklejeniu kodu moaia go modytikowac.

Jak jut wcrefnle] wspornniatem, istnleje tet motllwoSE zairnportowanla do pliku


catego rnodutu, Mdry wczegniej wyeksportowano.

Dostosowywanie edytora Visual Basic


JeSLi naprawdp chcesz zostad programis$ h v o q c y m aplikatje Excela, mn6shvo czasu
sppdzisz, utywajqc edytora Visual Baric. Aby b y k to jak najwygodniejste, edytor Visual
Basic ofcruje do46 dute motliwo9ci dostosowywania
!
i
1 56 CzgfC Ill Jeryk V i a l Basic for Applications
iI
Po uaktywnieniu &a edytora Ykual Basic. z menu Took wybierz pozycjp Options.
Zostanie otwarte okno dialogowe zawicrajqce caery zaktadki -Editor, Editor Format,
General i Docking. W kolejnych podpunktach ombwiq kilka najprrydamiejszych opcji maj-
dujqcych siq w tych mkladkach. Nie pomyl tego okna z okmw diial~owymOpcje Excela
ktore jest wyiwietlane po wybmiu z menu NurzqdTia pozycji Opqe. Co prawda, obydwa
1
rnajq ta@ samqnazwp (w wersji anslojqzycznej), ale s+u@do ustawiania rfitnych opcji.

Zakladka Editor
Na tysunku 7.7 pokazano opcje d o s t w e po klikni~ciumkladki Editor okna dialogowego
Options.

Rysunek 7.7.
Zakladka Editor
okna dlalogowego
Omions

Opcja Auto Syntax Check


Opcja Auto Syntrn Check oknf la, czy edytar Visual Basic wySwietli okno dialogowe po
wykryciu b d u skhdni w trakcic wprowadwniu kodu ir6dbwego jpzyka VBA. Oleno
dialogowe w pnybliteniu informujc o problemie, ktory wysti@. JeSli opcja nie zosta-
nie uaktywniona, edytor Ykual Basic wySwietli btqdny kod przy utyciu koloru innego
nit kolor resay kodu Dziqki ternu na ekranie nie pojawi sip okno dialogowe.
Zazwycmj opcje 9 wytqmam, ponicwat okna dialogowe mnic irytujq i sarn stwierdmm,
jaki problem wynslpk JeSli jednak dopier0 zaczynasz uczyt siq jczyka VBA, opcja mote
okazac siq pomocna.

Opcja Require Variable Oeclaraifon


Jdli opeja Require Variable Dedarution mstanie w i & a n a , e-r YisuufBasic na po-
cqtku kadego hvomnego moduh VBA wnawi nastepujyq insmkcjq:
Option Explicit

J d l i instrukcja pojawi sic w module, koniecmc jest jawne zdefiniowanie katdcj W a n e j


zmicnnej. Jest to znakomity nawyk, kt6ty warto w wbie wyobif, chociat wymaga mchp
dodarkowych st&. Wszystkim niezdeklarowanym zmiennym z~stanieprzypisany typ
danych Vartant, ktbry jest elastyuny, ale malo wydajny pod wzglqdtm zajrnowanej
parnip5 i szybkoti. Zagadnienic d o k h i e j zostanie ornowione w rozdziale 8.
Rozdziot7. + Wprowadzenie do jgzyka VBA 157

Zmlana ustawlenia opcjl Requlre Variable Declaration b!$dzle obowiqzywala tylko


w przypadku nowych rnod*6w. a nie jut irtniejqcycn.

Opcja Auto List members^


Po uaktywnieniu opcji Auto List Members edytor Visual Basic zaoferuje pomoc w hakcie
wprowadzania kodu ~ b w e g jqqkao VBA. Bedzie ona polegala na wyiwietleniu listy
pozycji powiqzanych z obiektem. Naleq do nich metody i wlaSciwoSci w e g o obiektu.

Opcja jest bardzo pomocna, dlatego zawsze z niej konystam. Na rysllnku 7.8 pokazano
pnykhd dziatania opcji Auto Lisr Members (stanie sip to macznie bardziej zrozumiale
po mzpocqciu wprowadzania kodu b6dlowego jqzyka VBA). W prtytoczonym p q -
ktadzie edytor Vkuoi Basic wyiwictla listc element6w powiqzanych z obiektem Ap311-
cation. Wystarczy wybrac z listy pozycjq, dzicki czemu uniknie siq koniecznolci jej
wpisywania. Takie rozwivanie gwarantuje tet poprawnoif skladni.

Rysunek 7.8.
Pnykfad
dzidania opcii
Auto List Memben

Opcja Auto Quick Info


Po w@mniu opcji Auto Quick Info edytor Visual Basic wyfwietla infonnacje o dostep-
nych argumcntach wprowadzanych funkcji, wta4ciwoSci i metod. Mote to byf bardzo
pnydame, dlatego zawszc korzystarn z tej opcji. Na rysunku 7.9 pokazano jej dziaianie.
W tym pnypadku opcja powoduje wySwietlenie skladni dla wldciwo5ci Range.

Rysunek 7.9.
Pnyklad dziaanla
o p j i Auto Quick Info
oferujqcej pomoc
na temat
wla~ciwo8cfRange

Opcjrr Auto Data Tips


Po uaktywnieniu opcji Auto Data 7ipJ edytor Visual Bmic wySwietli wartosf zmiennej.
nad kt6m w trakcie szukania biedbw w kodzie 2rbdlowym zostanie urnieszczony kunor.
Gdy j~ dobnc zaznajornisz siez operacjilwykrywania i usuwania Mqdbw, z pdwnoiciq
docenisz tp opcjp. Osobikie zawsze z niej konystam.
1 58 C z g f t ill + Jezyk VEsual Basic for Applications

Opcja Auto Indent


Opcja Auto Inden1 okrella, czy edytor Visual Basic automatycrnic wstawi na pocqtku
katdego nowego wiersza identycme wciwie jak w pnypadku wzc4niej wprowadzonego.
Jestem wielkim molennikiem wciqC w kodzie Wdbwym, dlatego korzystam z tej opcji.
Moma tet podaf liczbp makdw wcipcia. DomySln~wartdciqjest 4.

s> Zamlast spacjl do wykonywania wcl& w kodzie frbdlawym utywaj klawisza Tab.
Powstajq wbwczas Dardziej regularne odstepy. Ponadto u celu urunl~ciawlecla
rnoina wcisnqt komMnacje klawiszy Shift+Tab. KombinacJa klawiszy sprawdza sie tei
w przypadku zamaczenia wiecej nii jednej instrukcji.

Opcja Drag-and-Drop Text Editing


Uaktywnienie opcji Drag-and-Drop Text Editing umozliwia kopiowanie i przenoszenie
tekstu popnez p n e c i ~ a n i ei upuszczanic. Co prawda, uaktywniam tp opcjp, ale nigdy nie
wykonywakm edycji w oparciu o rnetodq przeciqgania i upuszczania. Kopiujqc i wkle-
jajqc teksty, preferuj~skr6ty klawiaturowe.

Opcja Default to Full Module View


Opcja Defovlt to Fdl Module Y i m okreSla spos6b prxgl@mia procedur. Po jej uaktyw-
nieniu procedury zawarte w oknic Code b ~ d wy3wittlane
q w pojedyoczym pnewijanym
oknie. Po wytqcmiu opcji w danej chwili widocma bpdzie tylko jedna procedura.
Zawsze pozostawiam tq opcje wlqczonq.

Opcja Procedure Separator


Gdy opcja Procedure Separuror jest aktywna, na koncu W e j prucedury z a m j w oknie
Code b d z i e widocmy pasck scparatora. Lubie wizualnq identytikacjp kodca procedury,
dlatego mam tp opcjp wlqczonq.

Zakladka Editor Format


Na rysunku 7.10 pokazano zakladk~Editor Format okna didogowego Options.

Rysunek 7.10.
Zakfadka
Editor Format
okna dialogowego
Options
Rozdziat 7. + Wprowadzenie do jezyka VBA 159

Opcja Code Colors


Opcja Code CoIom urno2liwia wybdr koloru tekstu (thi pierwszego planu) i wskainika,
powiqzanych z rbtnyrni elcmentami kodu hbdtowego jczyka VBA. W tym przypadku
g h v n q role odgywajq indywiduahe upodobania. Domfllne kolory uw- ta odpowied-
nie. Jednak od czasu do czasu, chcqc zmienit sceneriq, modyfikujp ustawienia tej opcji

Opcja Font
Opcja Font umotliwia wybranie czcionki, ktdra zostanie utyta w modulach VBA. Aby
uzyskae jak najlcpsze wyniki, nalety pozostat p n y ncionce o stalej szerokoSci, takiej
jak Courier New. Wszystkie maki majq wbwczas dokhdnie takq samq szerokodt. Dzie-
ki temu kod Mdlowy jest cytelniejszy, poniewat w pionie maki sq tadnie wyrbwnane.
a spacje widocme.

Pole She
Pole Size pozwala okreSlit rozmiar czcionki stosowanej w modulach VBA. Ustawienie
jest zale2ne od indywidualnych upodobd i rozdzielczoSci karty graficznej. DomySlny
ronniar wynoszqcy 10 punkt6w jest dla mnie odpowiedni.

Opcja Margin Indicator Bar


Opcja Maen indicator Bar dccyduje o tyrn, c y bpdzie wyiwietlany pasek wskahika
pionowego marginesu. Opcja powinna by6 wlqczona W pmciwnym razie w trakcie
wykrywania i usuwania blqdbw w kodzie tr6dlowym nie zobaczysz przydamych gra-
ficmych wskafnikbw.

Zaktudka General
Na rysunku 7.1 1 pokazano opcje 28- w zaktadce Gener~Iokna dialogowego Opriom.
W prawie kbdym pnypadlcu ustllwienia domydlne sqodpwiednie.

Rysunek 7.1 1 .
Zaktadha General
okna dialogowego
Options
160 CzgE Ill + J w k Viswl Basic for AppLotions

Sekcja Ermr Trapphgpomala okre&llf, co siq stanie, gdy wysQpl biqd. JeSli stworzyu
jakikolwlek kod frddtowy obstuqujqcy bwy, upewnij sle, cry uaktywnlono opcje Break
on Unhmdled Errors. Je511 jest aktywna opcja Break on All Ems, tego typu kod
b@de lgnorowany (czego wale nie oczekujesz). Metody obstugi btedbw zostanq
omdwione w rozdziale 9.

Zastosowanie zakladki Docking


Na rysunku 7.12 pokazano zaktadkp k k i n g o h dialogowego Options. Opcje pozwa-
lajq okreflit zachowanie r h y c h okien edytora Vuual Bait. Po zablokowaniu okna
majduje sip ono przy jednej z kraw* okna edytora YisllaI Basic. Dziqki temu mcznie
latwiej zidentyfikowat i tlokalizowat okre3lone okno. Gdy wszystkie opcje zakladki
Docking wstanq wyhczone, okna b d q nieuporqdkowane. co y w o t a dute zamiesn-
nie. Zazwyczaj dornyilne ustawienia umasz za odpowiednie.

Rysunek 7.1 2.
Zaktadka Dacklng
okna dialogowego
Options

Aby zablokowat okno, wystarczy pncciagnqeje w 2qdane miejsce. Motna na prryklad


wblokowat jmy lewci luawcdzi ekranu okno Project ExpIorer. W tym celu wystarczy
pneciag.nqb;egb tytulrhy w Lewq strone, co spow&duje wykietlenie obrysu
kazujqcego wyglqd okna po zablokowaniu. Po nvolnieniu przycisku rnyszy okno zostanie
zablokowane.

,~&* Blokowanie oklen w edytorze Wsual Basic zawsze by4u troche problernatycme. Czesto
<W?- niektdryeh oklen dlugonle motna zablokowaC, ch&po wielu prdbach oitatecmie sig
to udaje. Niestety nle znam tadnych sekretdw dotycqcych rnetod blokowania oklen.

Rejestrator makr Excela


Rejeswdor mak, o Wrym w s p o m n jut ~ wczehiej, zamimia apcracje wykonywane
w Excelu na kod hWowy j e y k a VBA. Teraz n+e to ornowiq bardziej s~czegbl~wo.

Pasek narzgdzl Wsual Bask Excela poslada kllka prrydatny~hprrycisk6ur, takich jak
Uruchom maim, lare,estmj rnskm, Iatnym@n ~ t m m i IcEdytw Mstfa! B ~ s C
7 .FA.
Rozdziot7. Wprowadzenie do jer/ko VBA 161

Rejestrator rnakr jest wyjqtkowo przydatnym narzedziem, jbdnak nalety pami~tat,te:


nadaje sip tyko do rejestrowania prostych makr lub niewielkiego fragmentu
bardziej zbtanego m a w
nie mote generow& kodu h6dlowego wykonujqcegoperle (powtanajqce s i ~
instrukcje), pnypisujqcego m i e m e , pnetwarzajqcego instnukcje w oparciu
o warunki, wy4wietlajqcego okna dialogowe itp.;
generowany kod 2rMtowy zalety od konkremych ustawien, 'kt6re 20- podane.
czpsto b-esz modyfikowak zarejestrowany kod hddlowy w celu usunigcia
z niego nadmiarowych instnrkcji.

Co w!a5ciwie rejestrator makr zapisuje?


Rejestrator rnab Excela zamienia operacje wykonane za pornoq myszy i klawiatury na
kod trddkwy jpzyka VBA. Mdglbym napisad kilka stron opisujqcych ten proces, ale
najlepszq metohjest przytoczenie pnykladu. Wykonaj nastqpujqce kroki:
I. Owdrz pusty skoroszyt.
2. Upewnij sip, te okno Excela nie jest zmaksymalizowane. N'ie mote zajrnowak
calego ekranu.
3. W celu uaktywnienia okna edytora Visual Basic wciSni,j kombinacjt klawiszy
Ait+FII. Upewnij sit, teokno nie jest zmaksyrnalizowarue. W przeciwnym nzie
nie b m e s z w stanie zobaczyC jednoczegnie okien Excela i edytora Visual Basic.
4. Zmid wielkdt i lokalizacjt okien Excela i edytora Visual Basic, tak aby oba
by@ widoczne. W celu uzyskania jak najlepszych efektdw nalegr minimalizowac
wszystkie inne uruchomione aplikacje.
5. Po uaktywnieniu okna Excela, w celu rozpocztcia rejestrawania makra, z menu
Narqdzia nale2y wybrak pozycjp Makro, a nastgpnie Zorejesbuj nowe maba
i kliknqt O K . Excel wstawi nowy modul (o nanvie Modu'lel) i rozpocmie
rcjestrowanie operacji wykonywanych w arkuszu.
6. Uakfjmij OWdytora YislraI Basic.
7. Aby e w i e t l i t mdul w oknie Code, w oknie Project f i p b r e r nalety
dwukmtnie klikn& pozycje Modulel.
8. Aby nnaksymalizawd okno Code, nale2.y zarnkn5k okno Project Explorer
zawartc w o h i e edytora Visual Bait.

Eluan powinien by5 podobny do pokazanego na rysunku 7.13. Rozmiar okien bgdzie
zaletat od rozdzielcno6ci karty graficmej.

Teraz w arkvszu Excela wybieit kilka r6hrych polece6. Zaznacz i sfonnatuj kombrki,
wpromdit dane, zastosuj menu i paski narrgdn, utw6n wykres, zmodyfikuj obiekty
graficzne itp. W oknie moduh VBA obserwuj proces generowania kodu Frbd4owego.
Gwamntujp, 2e domasz ohviecenia.
162 CzeSC Ill + JeykVisual.Basic for Applications

Rysunek 7.13.
Upoizqdkowanie
okien
umo2liwiajqce
wygodne
obsenvowanie
procesu 1 R.bb3 R W 0
rejestrowania nnwro rarejcsrr- rao4-08-19, aurar .I.- Eon

makra
-1-u-I -I.*.
&L1..C.1L.IOrm.l.IIICL - -100-
RmL.aO.1-14-1 .¶.I-
&CLdCII.~D-LYIICL
u.qC1-u-I. S * I L C S
. -200.

A ~ c I Y ~ C ~ I I . ~ O ~ Y L C X-300-
~CL
bm 1.16.1 .¶cirSe
AerlvcCelI.T~mml.IIlC1 -
¶ c ~ c s ~ ~ ~ ~ . T c . ~ s .'
BoRIu m
~
~-3~(RI-JlCinI-LICl

Wzglqdne czy bezwrglqdne?


W trakcie reieshowania makr Excel w stosunku do uivwanvch kombrek standardowo
uzywa wktok be;wzgI~&ch. Innlnnymi s b w y , program &am& bczwzglgnq lokalizacjp
zaznanonei kom6rki. a nie odniesiona do aktualnie aktvwnei komdrki. Aby nozumiet,
w jaki sposib to dziaia. pncanalimjemy kod ir6dfowy ;oni&go przyktadu.
1. Uaktywnij arkusz i rozpocznij rejestrowie makra.
2. Uaktywnij kom6rkp 81.
3. W korndrce 81 wprowadi laticuch Styczefi.
4. Przejdi do komdrki Cl i wprowadf hricuch Luty.
5. Kontynuuj pmces at do wpmwadmnia w komdrkach z zahesu 8: :G1 nazw
pierwszych szekiu miesiecy roku.
6. Kliknij komdrkq 81, aby jq ponownie uaktywnik.

Excel wygeneruje nastppujqcy kod Lr6dbwy:


Sub H z t r o l O
Range( "01'). Select
Acti -11 .Formu1 aRlC1 - 'Styczen"
Range("C1-1 .Se! ect
Activecell .Fonnul aRlC1 - 'Luty"
Range("O1") . S e i e c t
ktiveCel1 .FonulaRlCl - 'krzec'
I
Rozdziat 7. + Wprowadzenie do jezyka VBA 163

Ranget "El") .Select


PctlveCell . FomulaRlC1 - "Kwiecleh"
Range( "Fl') .Select
Activecell.FormulaRlCl - 'Maj'
Range( 'GI.) .Select
ktiveCel1. FormulaRlCl
Range( '81") .Select
- "Czenriec"
End Sub

Aby wykonat powytsze makro, z menu Norzedria nalety wybrat pozycjq Makro, a na-
stqpnie M a h lub wcisn# kombinacjq klawiszy AIt+F8. Po wybraniu makra Makrol
(lubjego inncj nazwy) nalety 'kliknqt pnycisk Uruchom. Po mchomieniu maim ponownie
zostanq wykonane operacje zrealizowane w trakcie jego rejestrowania, niezaletnie od
tego, kt6ra korndrka b d z i e ak-tywna. Utycie odwdaf~bezwzglqdnych podczas reje-
strowania zawsze powoduje uzyskanie takich sarnych wynikbw. Je91i jednak zechcesz,
aby makro wprowadzato n a m y miesiqcy, poczqwszy od aktywnej kom6rki. wdwczas
podczas rejeswowania q j e s z ohuoiari wzgl~dnych.

W trakcie rcjestrowania m a b jest wySwietlany pasek narqdzi Zatrryrn4 rejestrawa-


rrie mwierajqcy tylko dwa pnyciski. Klikajqc pprzycisk Ohuohnie wzglcdne na pasku
Zatqvmaj rejeshowmie, rnoha zmimit sposdb, w jaki Excel rejestruje opaacje. Prry-
cisk jest dwupozycyjny. Po jego wciinieciu, rejestrowanie opiera sic na odwohniach
wzglqdnych. Gdy prycisk znajduje siq w standardowej pozycji, w trakcie rejestrowania
sq utywane odwolania benvzglpdne. Try4 rejestrowania mote zostat zmieniony w do-
wolnej chwili, nawet w czasie m a n i a pmcesu.

Aby sprawdzit, jak to dziatq wyczyst zawartoSt korn6rek z zakresu 01:Dl, a nastqpnie:
I. Uaktywnij kom6rkc 01.

Mukro, a nastqpnie Zarejestruj nowe makro.


2. Z menu Narqdzia wybierz p o y c j ~
3. Kliknij OK, aby rozpoczqd proces rejestrowania
4. Kliknij przycisk Odwokmie wzglcdne na pasku narqdzi Zatmymaj rejestrowanie,
aby zmienid hyb rejestrowania.
5. W komdrkach z zakresu BI:Gl wprowadt n a m y pierwszych szdciu miesipcy,
podobnie jak w poprzednirn pprzykhdzie.
6. Zaznaczk o d r k g 01.
7. Zakodcz rejestrowanie makra.

Po zarejestrowefiiu m h w trybje utywajqcym odwolad wzglpdnych kod hbdlowy


k d z i e miat caikiem imq pomC:
Sub H a k n ~ 2 0
-
ActiwCell .FonnulaRlCl "Styczeh'
-
ActiMell .Offset(O. 1).Range("Al') .Select
MlveCell .FomlaRlCl 'Luty'
-
ActllreCell.Offset(O. l).Range('Al').Select
ktiveCel1 .FomulaRlCl 'Narz&'
-
ActiveCell .Offset(O. 1) .Range( 'Al'l .Select
Activecell .FonrulaRlCl 'hieciefi"
Activecell .Offset(O, l).Ranget'Al").Select
164 CzpSC Ill + Jqzyk V i w l Basic for Applicdom t
I
!
ktlveCel1 .FomlaRlCl 'Maj' -
ActtveCel 1 ,FormulaRlCl "Czerwiec' -
ActlwCell .Offset(O. l).Range('Al').Select

Activetell .Offset(O. -5).Range('Al') .Select


End Sub

Aby wykonad po- makro, po uaktywnieniu arkusza z menu Narzecbia wybierz


pozycjq Makro, a nestqpnie Mob. Wska2 nanvt makra i kliknij pnycisk Uruchom.
Z d t uwagp, te w tym pnykladzie pmcedura zostala niemacznie zmieniona. P ~ e d
rozpoczviem r e j m c j i makra uaktywniiem pocqtkowq komorks. Ma to maczenie,
gdy rejestrujaz makra bazujqce na aMywnej kom6rce.

M W -sprawia wmhnie ramj skomplikowanego, ale tak naprawdp jest d o g prose.


Pierwsza instrukcja jedynie wprowadza lahcuch Styczef do aktywnej korndrki. Instruk-
cja kotysta z aktywnej korndrki. poniewat ptztd niq nie wystqpuje instmkcja, ktora ja
zamacza. Nastqpna i n m k c j a pny utyciu w+&ciwo5ci Offset pnenosi zamaczenie
o jednq kombrkp w prawo. Kolejna insfnkcja wstawia Iahcuch itd. Na kohcu poczqt-
. .
kowa komhka jest aonownie W tym celu zamiast stosowania odwolania
bnwzglpdntgo obliczane jest przesu~pciewGlCdne. W pmciwicristwie do poprzed-
niego rnakra, to makro zawsze rozpoczyna wpmwadmie tekstu od aktywnej komorki.

<s3$* Makm generuje kod t6dbwy, ktby odwoluje 910 do korndrltf Al, m maie wydawd siq
dzlwne, ponlewat ta kom6rka nle byia &?ywana pry refestracjl rnakra. Wynlka to po
pmstu ze sposobu dzlolanla ejestratora rnakr. WleSclwoe Offset zostanie ornchvlona
w dalszej clgScl rozdzlalu. W tym rniejscu rnuslsz wledzid jedynle, te makro dziata
zgodnie z oczekhvanlaml.

Nawiasm 1n6wi.s-c~kod M t o w y gcncrowany p r i m Excel jest zbyt ztoany. Istniejq


prostsze. szybsze i wydajniejsze sposoby k o d o m i a operacji. P o n h z e makro wprowa-
dzilem r ~ m i e Zawiera
. ono k d ir6diowy jtzyka VBA, kt6ry nie zaznacza kombrki
p m d wprowadrmiem do niej danych. Dziqki temu mama m a m i e pnyspieszyt wy-
konywaiie operacji.
Sub Hakra30
k t i v e C e l l .Mfset(O. 01 -- 'StyCZeh'
k a v e C e i i .Offset(O,
PctiwCell .Mfset(D.
11
21 -- '~uty'
larzec'
Actlwtell .Offset(D.
k t l v e t e l l .Offset(O.
ktiveCel1 .Offset(D.
3)
4)
5)
-- 'Kwfeciefi'
'Had"
'Czerwiec'
End Sub

Po -iu k&cji W i t h . .. End Wlth m a k o m& bye jeszcze wydajniejs~:


Sub Makro4()
Wlth ActiveCell
.Mfset(O, 0) -- 'Styczd'
.WfsettD.
.Gffset[D.
1)
21 -- 'Luty"
'Harzec"

--
.DffsettD. 31 'Kwiecieri'
.Wfset[D. 4) 'Haj'
.MfsettO. 5) 'Czerwiec'
End With
End Sub
Rozdziaf 7. + Wprowadzenie do jezyka VBA 165

Jefli zalicmsz sig do ekspat6w z zakresu j q k a VBA (jak redaktbr technicmy tej ksi&i),
motesz n o b i t W e n i e na kolegach i sprowadzit makro do jednej instrukcji:
Sub MakroS( )
-
MttwCell.Resize(.b) Array('Styczerim. "Luty". "Marzec". "Kwiecieh". -
"Ma j" . 'Crerwiec')
End Sub

W tym miejscu jeszcze raz przypomnb t e rejesmtor utqrwa dw6ch r6tnych tryb6w.
dlatego naleq zwrdcit u w a s , kt6ry z nich jest stosowany. W przeciwnym razie uzy-
skane wyniki rnogqbyt ningodne z oczekiwanymi.

Opcje miqzane z rejestrowaniern


Polecenie Zarejertruj nowe mabo majdujqce siq w podmenu Mabo menu Narzqkia
pned rozpoqciem rejesmwania wyiwietla okno dialogowe Rejestrowanie m a h .
Okno to w pewnym nopniu pozwala modyfikowat makro. W kolejnych podpunktach
om6wig dosqpne opcje.

fstnieje motliwoQ podania nanvy dla rejestrowanego makra. Domyflnie Excel dla ko-
lejnych rejestrowanych makr utywa nanv Makrol, MaboZ itd. Zanvyczaj akceptuje
domyflnq n a n y malaa, a p6fniej jq mieniam. Jednak motna podac wlasnq nazwq makra
przed rozpocz+cicm jego rejestrowania. Decyzja nalety do utytkownika.

Opcja Kfawisz sb6ru wnotliwia pnypisanie do makra kombinacji klawiszy, ktdrych wci-
S n i ~ i se p o d u j e jego wykonanie. JeSli na przyklad wprowadzisz malq liteq w, makro
zostanie wykonane po wciinigciu kombinacji klawiszy CtrY+ W. JeBli podasz d m litere
W, makro zostanie uruchomione po wciinbiu kombinacji klawiszy Cfri+Shifr+W.SMt
klawiaturowy rno2na dodad lub zmienit w dowolnej chwili, dlatego nie jest koniecme
jego definiowanie w trakcie rejesfmwania makra.

Opcja P n e d o w j m&o w informuje Excel, gdzie ma mtaC zapisane rejestrowane


m h o . Domfllnie Excel umieszcza makm w module aktywnego skoroszytu. Mote je
re2 zapisat w nowym skoroszycie (Excel otworzy pusty skoroszyt) 1ub w skoroszycie
m* osobistych @am: mmka).
t

Skorooryt makr osobirtyeh


Makra jqryktl YBA, Mre uwatasz za mzeg6lnle przydatne, mobsz zapisaC w skoroszycie rnakr
mobistych. lest to plk skmoszytu UrnleSzcIony w katabgu XLStslt o namie PemaLxls. Skomszyt
jest tadowany katdorazowa przy utuchamianiu Exceia. Skorosryt jest uklyty, dlatego nie koliduje
w pracy. Plik Personal.xls nie istnieje d o rnornentu zapisania w nirn rejestrowanego rnakra.
166 Czgit Ill J ~ z y kVisual Basic for Applications

Opis
Domyflnie Excel wstawia pip6 wicrszy komenram! {tmy z nich sq puste) zawierajqce mmq
makra, imiq i nazwisko uqtkownika oraz date. W komentiuzu mote by6 umieszczona
dowolna lub tadna infonnacja. Wedlug mnie wprowadzanie czegokolwiek jest straQ
czasu, poniewa po wySwietleniu zawartosci modutu zawsze komcntarz usuwam.

W wersjach Excela starszych od wersji 97 okno dialogowe Rejesbwvanie moba oferowalo


opcjq urnotliwiajqcq przypisanie do m a l w nowcj pozycji menu Nurzqrhia. W Excelu 97
opcja ta zostah usunipta. JeSli zalety ci na motliwofci wykonywania rnakra z menu.
koniecme bcdzie dodanie odpowiedniej poycji we w h n y m zabwie. W i p j na ten temat
napisalem w rozdziale 23.

Modyfikowanie zarejestrowanych makr


Wynikiem rejestrowania mlizowanych opcracji po wykonaniu jtdnego polccenia (pole-
cenie Usfawieniastrony menu Plik) moke by6 spora ildC kodu Wdlowego jpzyka VBA.
W wielu przypadkach zbedne instmkcje kodu trddlowego m o h a usunr(C.

Watne t e t jest, aby nozumieC, t e rejestrator makr nie zawsze gcneruje najwydajniejszy
kod. Excel zazwyczaj rejestruje to, co jest zaznaczane (czyli obiekt), a nastppnie w ko-
lejnych instrukcjach postuguje sie obiektem Selection. PoniZej zawarto przykladowy
kod ht5dtowy, kt61-yzostanie uzyskany po zarejestrowaniu operacji zaznaczenia zakrtsu
komorek. a nastqpnie utyciu pnycisk6w paska narzqdzi Formafowanie do miany typu
formatowania liczb oraz zastosowania pogrubienia i kursywy.

- --
Range iVAl:C5")Select
5election.NvnberFormat '#.#O.CO"
Selection.Fonr.Bold True
Selection.Fon:. I t a l i c Tme
I
Jedli w trakcie rejestrowania makra korzystasz z okna dlalogowego formatowania,
Excel wygenemie swrq iloSC nadmlarowego kodu frbdtowego. Rejestmwanie klikni@
prrycisk6w pask6w na&dzi czesta powoae stworzenie wydajnlijszego kodu.

Nalety parniptab o tym, tt jest to tylko jedna z metod wykonywania tego typu operacji.
M o a a tet zastoso\w2 wydajniejw kmtrukcjq W j ;h . .. End With. Oto pnykbdowy kod:
Rznge ('Al:t5"; .Select

- --
1 4 t h Se'lection
.NumberFomat "#.#': .00'
.Fcnt .W;d True
F o n t . Italic T-ue
Em! Wq?n

JeSli pominie sip metodp Select, motna stworqC jeszcze wydajnjejszy kod:

- --
With Range ('AZ:C5')
.Nu~rFamat 'if.#Q.BO"
.Font.Bold True
.F~nt.Itallc True
End With
Rozdziat7. Worowadzenie d o iezvka VBA 167

Przykhdy kod6w f r6dfowych


W ksl* zawarkrn llcme fragmenty kodu tr64Iowego jezyka VBA. Taki kod moie sktadab sie
tylko z jednej instrukcji. Czasami kod zawiera wyraienie, Mdre sarno w sobie nie jest instNkCj;l.
Oto pnyktad:
Ranget " A l " ) .'la1 ue
W celu pnetestowania wyratenia konieczne jest jego obliczenie. W tym pnypadku przydatnym
narzqdzlem jest funkcja MsgBox. Oto Jej pnyktad:
Hsgbx Range( "A]" I .Value
Aby zastosowa6 tego typu przykhdy. ttzeba umiehld lnstrukcje w procedune modulu VBA, po-
dobnej do ponitszej:
Sub Test ( )
instrukcja j e s t vstawlana w tym mlejscu
End Sub
Po umleszczeniu kursora w dowolnym rnlejscu procedury, w celu jeJ wykonania nalety wcisnqd
klawisz FS. Poza tym nalety sie upewnib, czy kod h6dlowy jest yrkonywany we wtalciwyrn kontek-
k i e . kSli na pnyklad instrukcja odnosl siq do arkusza Arkuszl, naleiy upewnib siq, czy aktywny
skomszyt faMycznie zawiera arkusz o takie] nazwle.
Jef li kod frbdkiwy sklada slg tylko z jednej Instrukcji, moha zastosowab okno lmmedlate edytora
Visual Basic. Okno to jest bardm prydatne w przypadku natychmlastowego wy)tmywania inst~kcji
bez konieczrmki twonenia procedury. l&li okno Immw'Iate nie jest wyfwietlone, w edytone Visual
Baslc nalety wcisnqd kombinacje klawiszy Ctrl+G.
Po wpowadzeniu In-cji wystarczy wcisnqE klawlsz Enter. W celu obllczenla wyratenia tawartego
w oknie Immedlate nalety na jego p o c w u mtawld znak pytajnika. M6ry pdni funkcje odpowiec!-
nika metody P n n t . Na prryktad w oknie Immediate motna wprowadzie nastepujqce wyratenie:
7 R a ~ n g e ( " A l " l.Value
Wynlk wyrahnla mstanle wyfwietlony w nastepnyrn wlerszu okna Immedlate.

JeSli szybkoK aplikacji ma dla ciebie znaczenie, zawsze powiniend dokfadnie prze-
analizowad zarejestrowany kod Wdlowy j p y k a VBA w celu upewnienia sic, te jest tak
wydajny, jak to tylko rnotliwe. Onywiicie przed rozpocqciem modyfikowania zareje-
strowanych makr koniema bdzie doglqbna majomoSC j w k a VBA.

Obiekty i zbiory
JeJli uwahie przecqmkd p i u w s q c@C rozdziah, dysponujesz og6lnq orientacjq
w j ~ k VBA u i znasz podstawy stasowania modutdw VBA w Mfytone Visual Baric.
Zapomalef, sip tet z kilkoma kodami Wdlowymi jpzyka VBA oraz takimi pojqciarni,
jak obiekty i wl.aciwoSci. W tym punkcie zawarto dodatkowe informacje o obiektach
i ich zbiorach.

Utytkownicy jqzyka VBA m u s q rozurnicC model o b i e h w y Excela, kt6ry pozwala


mySlet o obiektach w kategmii hierurchii. Na szczycie modelu znajduje sic obiekt Ap-
p l 'catiar, k-tdrym w tym pnypadku jest sam Excel. JeSli jednak tworzysz aplikacje
wjpzyku VBA oparte na programie Microsofl Word, obiektem Application b&ie
edytor tekstu Word. -
1 68 QeJt Ill + J m Visual Basic for AppEcations

Hierarchia obitkf6w
Obiekt Appllcatlon (czyli Excel) zawiera mnc obickty. Oto p q k l a d y obiekt6w za-
wartych w obiekcie Appl ication:
Workbooks (zbidr wswtkich obiektbw Workbook -skoroszyt),
l n d m (zbidr wzystkich obiekt6w Ulndm
W - oho),
AddIns (zbibr mzystkich obiehtdw MdIn - doduiek).
Niektdry obiekty q kontenerami dla innych obiekt6w. Przykladowo zbior Workbwks
sktada sip z wstysdcich otwamch obiekt6w Workbook. Z kolei obiekt WorkSook zawiera
inne obiekty. Oto niekt6re z nich:
Worksheets (zbibi obiektdw Norksheet - urbx)),
Charts (zbibr obiektbw Chart- wybes),
Names (zbidr obiektbw Name - nawu).
Z kolei katdy z powytszych obiektdw pmchowuje inne obiekty. Zbidr Worksheets
sktada sis z wszystkich obiektbw Worksheet zawartych w obiekcie Workbook. Obiekt
Worksheet zawiera wiele imych obiekbw. Oto niekt6re z nich:
Chartobjects (zbibr obickt6w ChanObJect).
Range,
Pagesetup,
r PivotTzbles (zbi6r obiektdw PivotTable - ~abelapr=utmvnnu).
Na razie wydaje sip to ragmatwane, ale na pewno z czasem ~Swiadomiszsobie, te hie-
rarchia obiektbw jest doif logiczna i d o b r a zbudowana. Diagram komplemego modclu
obiektowego Excela majduje siq w jego systemie pomocy.

Zbiory
Kolejnym kluczowym zagadnieniem zwiqimym z pmgamowaniem w j p y h VBA sp
zbiory. Zbidr jest gnrp4 obiekt6w tej samej klasy, a sarn w sobic tcil jest obiektem. Jak
wspornnialem wczesniej, h'orkbooks jest zbiorem wsrystkich aktualnie otwarrych
obickt6w Workbook. Worksheetsjest zbiorem wszystkich obitktdw Wbrksheet mjdujqcych
sic w o W l o n y m obiekcie Workbook. Istnjeje motliwoSE pmtwammia calego zbioru
obieM6w lub tylko jcdnego wybranego obiektu. Aby odwotab siq do pojedynczega
obiektu zbioru, nal* jego n a m e lub numer indeksu urniejcif w nawiasach okrqgtych
la nanva z b i m . Oto pnyklad:

Jegli erkusr.Arkuszl jest pierwszym arkusam zbioru, m o m pas- sip odwdaniem


o nastwjqccj postaci:
Rozdu'd 7. + Wprowadzenie do jgzyka VBA 169

Aby o d w h C siq do drugicgo arkusza obiektu Workbook, nalety uZyt odwdania Workshe-
etst2l itd. Istnieje tet zbi4r o nazwie Sheets zbtony z wszystkich arkuszy skoroszytu,
niezale2nie od tego, czy ssq to arkusze zwykk, czy .wykrwu. Jefli arkusz Arkuszl jest
pienvszym arkuszcm s k o r o s w , rnoha odwdat sie do niego w nnastqpujqcy spos6b:

Aby odwolaC siq do obiektu p n y utyciu imtmkcji jezyka VBA, czqsto trzeba go zi-
dentyfikowak, t ~ c q cza p o m o q kropki (nazywanej t e t operatorem kropki) nanvy
obiektbw. Jak p o s t ~ i s zw sytuacji, gdy otwonysz dwa skorosqq. a w katdym z nich
bedzie sic znajdowat arkusz o nanvie Arkuszl? Rozwipnie polega na stworzeniu od-
wotania do obiektu poprzez zawarcie w nim nazwy jego kontenera. Oto przyklad:

Bez W c i a identyfikatora skoroszytu interpreter jpzyka VBA szukalby arkusza Arkuszi


w aktywnym skoroszycie.
Aby odwdaC si$ do okredlonego h s u (np. komdrki Al) arkusza o nazwie Arkuszl
zawartego w skoroszycie Zeszytl, nalety zastosowat nastppujqce wymenie:
hb~W~&s(
'Zeszytl") .lforksheets("ARuszl').Range( "Al')

W pelnej postaci powytszego odwdania zostanie tet uwzgledniony obiekt Appl icatior;.
Ma ono nastpujaqpostat:
Appl lcation.Workbeoks[ 'ZeSZytl') .Worksheets( "Arkuszl'l .Range("Al0)

W wipkszo9ci pnypadkdw obiekt Application bqdzie w odwolaniach pomijany. JeSli


obiekt Zeszytl jest aktywnyrn skoroszytem. w odwdaniu m o h a go r6wniet pominqt
i zastosowaf nastqpujqce W e n i e :

Chybtt jut zorientowale.4 sip, do n e g o mierzam. JeSli obiekt Arkuszl jest aktywnym
arkuszem, wyratenie m o a a jeszcze bardziej uproSciC. Oto ono:
Ralrge('A1")

Excel nie posiada c+iektu o nazwie Cell odwo)ujqcego siq do pojedynczej komdrki.
P ~ j e d y m akorndrka jest po prostu oblektem Range skhdajqqm slq tylko z jednego
element".

Samo odwolywanie sie do obiekt6w ljak w powytstych prtykhdach) niczcgo nie daje.
Aby W o n a k iakrrkolwiek wartoJciowa mracie. trzeba odczvtat lub zmodvfikowat

W!uSciwoSci imefody
Tysiqce dosbpnych wMciwo3ci i metod mogq z latwoSci4 pnytloczyb. WyjaSniq teraz.
w jaki spos6b z nich konystat.
1 70 C z e f t Ill + Jezvk Visual Basic for A ~ o l i c a t i o n s

Okre5lanie agument6w metad I wla$ciwo&l


Zarnleszanie wlr6d programist6w utywajqcych jezyka VBA wpotujq nlekledy argurnenty rnetod
i wtafciwoSci. Niektdre rnetody korzystajq z argumentdw w celu dokladniejszego zdeflniowania
operacji. Z kolei niektdre wtadciwoSci korzystajq z argumentdw w celu uzyskania rnoiliwo5ci dm
datkowego okreslenia wartodci. W nlektdrych przypadkach argurnenty sq opcjonalne.
JeSli metoda utywa argument&, sq one wstawlane za jej nanvq I oddzleiane przeclnkarni. JeSIi
metoda posfuguje sie opcjonalnyrni argurnentarni. zarniast nich rnoha pozostawiC puste rniejsca.
W dalszej czqSci ramki wyjabniarn,jak to zrobib.
Wefrny dla pnyktadu rnetode Protett obiektu Workbook. Metoda Protect pobiera trzy argurnenty
dotyczqce hasta, ochrony struktury skoroszytu i ochrony okna. Argumenty odpowiadajq opcjom
-
zawartym w oknie dialogowyrn Chmnienie skoroszytu. JeSli na przyktad zalej ci na ochronie
skoroszytu o nazwie MbjZeslytxls, rnoiesz u j C instrukcji podobnej do poniiszej:

Workbmks{"%jZeszyt.xls": .Protect "xyzzy'. True. False


W tyrn przypadku skoroszyt jest chronlony hastern (argument 1).Dodatkowo jest chroniona jego
struktura (argument 2), ale okna j u i nle (argument 3).JeSli nie chcesz pr2ypisywaC hash, rnoiesz
uzyd nastepujqcej instrukcji:
Korkbooks("F6jZeszyt .XIS')
.Protect , True. 'alse
Pierwszy argument zostat porniniety. a zarniast niego pozostawilern puste mlejsce identynkowane
przy u2yciu przeclnka.
Kolejna rnetoda MriekszaJqcaczytelno6d kodu tbdtowego polega na zastosowanlu argurnentdw,
kt6ryrn nadano nazwy. Gto przyklad demonstrujqcy. w jaki spas6b w poprzedniej instrukcji zaste
sowat nazwane argumenty:
Workbooks~'M6jZeszyt.xls") .Protect Structure:-Tme. Yindows:-False
Zastosowanle nazwanych argurnentdw jest dobryrn pornyskm. Iwtaszcza w pnypadku rnetod
rnajqcych rnndstwo opcjonalnych argument6w, a takie w sytuacji, gdy koniecme jest uiycie Jedynie
kilku z nich. Przy konystaniu z nazwanych argumentdw nie ma potrzeby pozostawlaii? pustych
rniejsc Identyfikujqcych porniniqte argurnenty.
W pnypadku wtakiwofci I rnetod zwracajmh wart056 konieczne jest umleszczenie agurnent6w
w nawiasach okqglych. hzyktadowo wla5ciwoSb Address obiektu Range pobiera pie6 argurnentdw,
z ktdrych wszystkie sq opcjonalne. Ze wzgl@u na to, i e wtaSclwo5t Address zwraca wartost, g
o
niisza instrukcja nle jest poprawna. poniewai porninieto nawiasy okrqgk:
Msgbx Ranget"Al").Address False ' nieprawidtowa instrukcja
Aby sktadnia taklej instrukcji byta poprawna, konlecme jest zastosowanle nawlasdw okrqgtych:
MsgBox ?an*( "41"; .Address[False)
InstrukcJaw nastgpufwy sposdb mote tet z o s t d zapisana przy utydu namanego argurnentu:
PsgBox Range( "Al" .Address(rwASsolute:-Fa1 se)
Tego typu niuanse stalq siq bardziej aozumiate w rniarq zdobywanla doSwiadczenia z zakresu jp
zyka VBA.

Katdy obiekt ma wMciwoSci. Przykladowo obiekt Range ma w k k i w o f d o nanvie Value.


M o h a stworzyk kod M ~ o w j ey q k a VBA o d c t y t u j w lub ustawiajqcy wartoit wia-
JciwoSci Value. P o n h j pokazano procdurq u2ywajqcq M c j i j ~ y k aVBA o nazwie
Rozdziot 7. + Wprowodzenie do jezyko VBA 171

MsgBox, kt6ra wyfwietla okno zawierajqce wartoit komdrki A1 arkusza Arkuszl aktyw-
nego skoroszytu:
Sub ShowVa lue( I
MsgBox Worksheets( "Arkuszl").Range("Al").Val ue
End %b

nsgBox Jest W a t n q funkcjq, utywanq do wySwietlanla wynlk6w w trakcie wykonywanla


1 - 8
kodu trddlowego j+&a VBA. W pqkladach z tej ksi42XI bardzo c g s t o z niej korzystam.

Kod trbdlowy zawarty w poprzednim przykladzie wygwittla aktualnq wartoft wjaici-


wofci Value p o w i m e j z okrefloq kombrka, ktbq jest kom6rka A1 arkusza Arkuszl
aktywnego skorosrytu. JeSli aktywny skoroszyt nie zawiera arkusza o nazwie Arkuszl,
rnakro wygeneruje btqd.

A co nalety w b i f , aby mienif wartoft wMciwolci Value? Poprzez modyfikacjp wla-


SciwoJci Value komdrki A1 ponitsza procedura zrnienia wyswietlanq w niej wartolt:
Sub ChangeVal ( )
Uorksheets("Arkusz1").Range('Al*) .Value
End Sub
- 123

Po wykonaniu tej procedury w kombrce A1 arkusza Arkuszl pojawi sip wartoff 123.

*
Motest wprowadzid kod 2rbdIowy procedury do rnoduh i poeksperymentowat z nirn.
WlgkszoSC oblektdw ma domydlnq wtafciwoS6. W pnypadku obiektu Range takq
W a 3 c l w o ~ l ~ ~Value.
e s t A zatem jeH1 r kodzie pornlnlety zostanle +ah;uch Value.
uzyskany efekt bqdzle doktadnle taki sarn. Jednak za dobry nawyk uwaia sie
wstawianle wiaSclwoScl, nawet jeSIl jest to wtaSciwoSC dornyllna.

Metody obiekt6w
Metoda jest operacjq wykonywanq na obiekcie. Ponitej pokazano prosty pnykiad.
w ktbrym zastosowano metode Clear obiektu Range:
Sub ZapRangA)
Yorksheets( 'Artuszl") .Range('Al:W') .Clear
End Sub

Po wykonaniu procedury zawartoSC W komdrek A1 :C3 m e pusta, a ponadto wstanie


usuni~tewszelkie formatowanie. Aby usun& wartdci z zakresu i pozostawit fonnato-
wanie kornbrek, nalety zastosowa6 metode obiektu Range o nanvie ClearContents.

W i q k s d t metod pobiera tet argumenty umotliwiajqce d o k h i e j s z e zdefiniowanie


operacji. Poni2ej z a m i e s m n o przyklad proccd~uykopiujqcej pny ukyciu metody Copy
obiektu Range zawartofb komdrki A1 do kom6rki 01. W tym pnypadku metoda Copy po-
siada jcden argument (miejsce przemaczenia skopiowanych danych). W przykiadzie
poshtyltm sic sekwencjq (spacja, za kt613 znajduje sip mak pdkre.4lenia) kontynuujqq
i n d c j q w kolejnym wierszu. Isinieje m o ~ i w o f pdminipcia
t sekwencji i wprowadzenia
instmkcji w jednym wierszu.
172 +
C Z ~ IllE J@ Viwol BCIS~Cfor ~ p p i l c o t l o n ~

Sub Capfie( 1
hbrksheets("A~usr1').Range( 'A!"). Copy -
Worksheets("Arkusz1"). Sange( '81' )
End Sub

0biekt Comment
Aby lepiej n m u m i d w44ciwodci i metody obiekty nvrdcq uwagq na szczeg6lny obiekt
o nazwie C m n t . Obiekt ten jest tworzony w rnomencie wprowadzania w kom6rce
komentam, co jest realizawane poprzcz wybranie z menu Wsraw pozycji Komentarr.
Jefli material tawarty w tym punkcic trochp cip przyttoczy, nie rnartw sip. Omawiane
zagadnienia z czasern stanq sip bardziej mzurniale.

Pomoc dotyczqca obiektu Comment


Jedna z rnaod uzyskania informacji na temat obiektu polega na skorzystaniu z systemu
pomocy. Na rysunku 7.14 pokazano gt6wne okno pomocy dotycqce obiektu C o m m t .
Okno to zosta.to wyfwietlone pa wprowadzeniu stowa Camnt w polu Wyszuhj panelu
Visuul Basic - Pomoc. Dodatkowe tematy pomocy sq wyiwietlane w panelu zadah
edytora V h a l Basic.

Rysunek 7.14.
Mwne
okno pomocy
dotyczace
obiektu
Comment

Slowa umi- na kolorowym tle lub podkrcflone b&ce hiperkpami umotliwiajq


wyiwietlenie dodatkowych informacji. Prrykhdowo w celu uryskania listy wszystkich
w k c i h i obiektu ~ & t nal& kliknik hiperbze ~ro~eTties. Aby uzyskat list?
metod obielctu, nalety k l i w t hipcrfqcze rUerko&.
Rozdziot 7. Wprowadzenie do jezyka VBA 173

Zastoeowanls systemu pamocy


Najprostsza metoda uzpkania pomocy na temat okreflonego obiektu, WaSciwoSci lub metody
polega na wprowadzeniu nazwy elementu w oknie Code i wcigniviu kiawisza Fl. JeSli wystqpi
jakakolwiek niejednomacmoff dotyczqca wpisanego stowa, pojawi slg okno dialogowe podobne
do pokazanego na rysunku 7.14.
Niestety maczenle pozycjl pokazanych w oknie dlalogowym nie zawsze jest oczywlste, dlatego
t e i w celu zlokalizowania wfaSciwego ternatu pomocy mote by5 konieczne uprrednie sprawdzenie
kilku innych tematbw. Okno dialogowe pokazane na rysunku 7.14 pojawia si? pa wprowadzeniu
stowa C m n t i wcidnlqciu prqcisku Fl. W tym przypadku Comnent jest obiektem, ale mole t e t
ldentyfikowaf wtaJciwoSC. Klikniecie pierwsze] pzycji spowoduje wySwletlenie ternatu pomocy
powiqzanego z obiektem CMnment. Z kolel kiiknliecie drugiej pozycjl spowoduje otwarcie okna te-
matu pornocy dotyczqcego wlaSciwoSci Ccmnent.

W{aScfwoSci obiektu Comment


Obiekt C o m n t ma szefC wldciwoici. W tabeli 7.1 zawarto ich list? wraz z kdtkirn
opisem W e j z nich. JeSli wia4ciwosC jest VIko do o d c y ~ uinsnukcje
, kodu Cr6djowego
jezyka VBA mogq odczytywaCj e j wanoSC, ale nie mogqjej modyfikowad.

Tabela 7.1. 16ryaJchwJcio b i e h Comment


Wldciwo4C Tylko do odczytu Opis
~ -
- ~ -- - --

Appltcation Tak Zwraca obiekt reprrzentujqcy aplikacjp, kt6ra utwvorzyla komcntarz


(jest niq Excel).

Author Tak Zwraca idenNfikator osoby. kt6ra utworzyla komentarz


Creator Tak Zwraca l i c z b ~identyfikuj4qaplikacjs kt6ra stwonyla obiekt.
WlaSciwofC nie jest utywana w wersji Excela przcmaczonej
dla systemu Windows (dotyczy tylko wersji dlrsys~emuMacintosh).
Parent Tak Zwracn d r @ y obiikt komentarca (m- jest nim obickt Range).

Shaoe Tak Zwraca obi& Shape repmmhrjqcy ksdah p w @ y z komenmmrn.


Visible Nic WlefciwSC ma watt036 True. gdy komentarzjest widocmy.

Metody obieMu Comment


W tabeli 7 2 zawatto metody, W r y c h m o h a utywat w przypadku obiekn! Ccnment. Itym
razem metody te realizujqcqste operacje, &re mogrl by6 wykonane ~ m i na e obiekcie
C m e n t , ale prawdopodobnie nigdy nie m y i l a w ooich jak o metodach.

sp* Motesz by6 zaskcczony shvierdzenlem, te Text zamiast da3clwoSciq jest rnetodq.
ale rozr6Znienle pornigdq wla6ilMbEiarni i metodami nie zawsze jest oczywirte.
Ponadto model oblektow nie jest idealnle konsekwentnv. Tak naprawde moiliwode
odrdtnlenia wtaSciwoSci bd &tod n k Jest Istotna. DO& jest stbsowina poprawna
sktadnia, nie ma maczenia, czy slcwo zawarte w kodde irr5dtowym identyfikuje
174 Cq56 111 + Jezyk Visual hslc for Applications

Tabela 7.2. Metody oblektu Comment


- -

Metoda Opis
Delete Usuwa kornentarz.
Next Zwraca obiekt Comnenr reprezcntujqcy nastqpny korncntarz.
Previous Zwraca obiekt Comnent rcprrzentujqcy poprredni korncntarz
Text Zwraca lub wstawia tckst korncntarza (pobiera trzy argurnenty).

Zbi6r Comments
Zbidr jest gmpa podobnych obiekt6w. Ka2dy arkusz zawiera zbi6r Comnents ziotony
z wszystkich jego obiektdw C m n t . JeSli arkusz nie zawiera komentarzy, z b i b Com-
ments bqdzie pusty. Ponitsza insmkcja odwduje sic do pierwszego kornentarza arkusza
Arkuszl majdujqcego sic w aktymyrn skoroszycic:
Worksheets( "Arkuszl') . C a m n t ~ ( l )

Kolejna instrukcja wyiwietla tekst pierwszego komentarza arkusza Arkuszl:

W przeciwiefis&ie do wiqkszoici obiektdw, obiekt Cwnent nie posiada widciwofci


Name. Aby wiqc odwohf sic do oladlonego komentarza, konieeme jest utycic numcru
indeksu lub wMciwolci Comnent obiektu Range, kt6re go zwracajq.
Zbibr C m n t s t a k jest obiektem i posiada wlasny zestaw wtaSciwoSci i metod. Pny-
kiadowo ponitsza instrukcja wySwietla caikowitq liczh komentarzy:

Wldciwoff Count zbioru Comnents pnechowujc liczb!bp obiekt6w Comnent aktywnego


arkusza.Nastqna inshvkcja pokazuje adres kombrki zawierajqcej pierwszy kornentarz:

W pnypadku tej instrukcji Ccmnents(1) zwraca pierwszy obicld C o m t zbioru C m n t s .


WiJciwoSC Parent obiektu Comwnt m a e a jego kontener, kt6rym jest obiekt Range.
W oknie komunikatu jest wySwietlana wartoSf wla3ciwdci Address obicktu Range. Osta-
tecmie inmukcja wyfwietla adres kombrki zawierajqcej pi- komentarz.

Przy utyciu konstrukcji Far Each . . . Next mom


ramach pqtli przehvorzyf
te2 w
wszystkie kornentarze arkusza. Wiqcej na ten temat zawiera mzdzial 8. Oto przykiad
kodu Wdlowego wyfwietlajqcego oddzielne o h o komunikatu dla kaMtgo komentana
aktywncgo arkusza:
For Each ant i n PctiveSheet.Corments
n s g h x cnrt .Text
Next c*it

Jefli jednak seryjne okna komunikatdw ciq M a , w celu Mwietlenia komentarzy


w oknie Immediate edytora Y i m I Baric naldy &yC nastqpujqccj procedury:
Rozdzial7. + Wprowadzenie do jezyko VBA 175

For Each cmt i n k t i v e S h e e t . C m n t s


Debug. Prl nt cmt .Text
Next cmt

WlaSciwoSC Comment
Na razie orn6wilem jedynie obiekt C m n t . Obiekt Range posiada tet wMciwo9C o nazwie
Comnent. Jefli kom6rka zawiera kornentarz, wlaSciwoSC C m e n t zwr6ci obiekt Comnent.
Na przyktad ponitsza instrukcja odwohje siq do obiektu Comnt powiqzitnego z ko-
d r k q Al:

JeJli by*y to pierwszy kornentarz w arkuszu, do tcgo sarnego obiektu Comnent rnoaa
odwdaC sip w nastqpujqcy spos6b:
Acti veSheet .C m e n t s( 1)

Aby w oknie komunikatu wySwietlif kornentan umieszczony w kom6rce A l , nalezy po-


s h e f sip nastepujqcq instrukcjq:
MsgBox Range( "Al") .t a n e n t . Text
JeJli kom6rka A1 nie zawiera k o m e n t m powytsza instrukcja wygeneruje blqd.

Jesll zrozurnlemy, te wtaJclwofci mag* zwacaC obiekty, macmie pnyblitymy siq


@
, @ do pelnego opanowanla jezyka VBA.

Oblekty podlegajqce obrektowi Comment


Pocrqtkowo kwrystanie whkiwoki jest zagmatwane, poniewa2 niekt6rc z nich nvracajq
obiekt. Z a t h y , Ze zal* ci na identyfikacj koloru tG oMlonego kornentarza arkusza
Arkuszl. Jdli pmjtzysz l i q wladciwoti obiektu Cannent, nie majdzicsz tadnej zwiqzanej
z kolorami. Zamiast tego nal- wykonat nastqpujqce kmki:
1. U2yj WbwlaSciwdci Shape obiektu C m n t zwracajacej obiekt Shape zawarty
w komentarzu.
2. U2yj whwlaSciwoSci F i 11 obiektu Shape zwracajqcej obiekt F i 11Fonnat.

4 W celu identyfikacji koloru utyj w~SciwolciRGB (lub w ~ i w o l cSchemeCol


i or)
o b i e h ColorFomt.

lnna metoda identyfikacji kolom tta obiektu C m n t polega nautyciu innych obiektbw
podrrgdnych w stosunku do obiektu Comnt.'Oto hierarchia obiekt6w nviqzanych z Q
operacjq
Appl ication (Excel)
obiekt Workbook
obiekt Worksheet
176 Cz#C Ill Jqzyk Visual Basic for Applications I
obi& Corrment
obiekt Shape
obiekt F111Format
obiekt Co1orFom t

Pierwszy pszymam, t e to bnrdm zagmatwane! Jednak dla pokazania elegancji j p y k a


VBA p o n h j zamidcibm kod frddlowy zmimiajqcy kolor komentana, zapisany prry
utyciu jednej instrukcji:

Motna tet utyLyC wlaSciwoici SchemeColo r {o wartoSciach z przedziak od 0 do 80):


wo~sheets('Arkuszl").tanmts(l).Shapc.Fi11 .Foretolor.SchmeColor 12 -
Tego typu odwdywanie pocqtkowo z pewnosciq nie bpdzie zbyt inruicyjne, ale osta-
tecmie docenisz jega -St. Na s z q k i e po zarejcstmwaniu operacji wykonywanych
w Excelu prawie zawsze uzyska sip okreilonq l i c z b szczegbibw d o t y q c y c h h i e m h i i
zastosowanych obiektdw.

czy kdory zamkszanle?


Gcfy nablemsz wprawy w uiyanlu kzyka VBA i rozpocmiess deflnlowanle kolor6v dla rdtnych obi&
t6w, nadejdzie prawdopodobnie chwlla, te kdzlesz slq bepel po gfowie 1 zastanawlat, co slg ddeje.
Pamlqtaj, ie Excel posbguJe sle paletq ztotong z 56 kolordw, a ponadto okreflone kolory sq zapla
sywane w kafdyrn s k o m ~ e Takie
. kolory sq wldoczne po uFyclu pnyclsku Kolor wpehIenla paska
, nat-zflzl Formatowanie Excela (identycm.5 kolory sq widoczne w zakfaae Kolor okna dialogowgo
Opcje]. Co w taklm rarie oznacza to dla pmgramlsty uiywaJqcegoj m a VBA? Kolor zdefiniowany
w kodzle tr6dlowym )q*a VBA mote nie by6 tym, kt61-y faktycznle zostanle wyswietlony.
Mote to jeszcze barMeJzagmetwane. W zaletrdci ad oblektu konieczne b w i e zestosowanle
ki!ku rbhych oblekt6w i Ma6clwofci powlqzanych z koloraml.
Kolor dla obiektu Shape mo& zostd zdeflnlowany za p o m q ~ W d w o S c RGB l lub khemeColor.
WafclwofC E B umotllwla okreflenie koloru opartego na komponentach aemcrnym, zielonym
I niebieskim. Wla5ciwo56 ta jest stosowana w po)qczenlu z tunkcjq RGB jezyka VBA. kt- poblera
tny argumenty; katdy z nkh poslada wartokl z pmdzlalu od 0 do 255. Funkcfa RGB m c a war-
t o g z pnedziab od 0 do 16 777 215. Jednak - jak jut wspamnlatem - Excel obslugu]e tylko
56 kolor6w. A zatem neczywisty kolor uzyskany po zastosowaniu funkcjl ti63 bgdzle najbardziej
zbllionym do jednego z 56 kolw6w palety. WlaScrwDSE SchmColor ekceptuje wartoScl z przeddatu.
od 0 do 80. System pomocy prawle w ogdle nie zawlera informacji o tym, jakie kolo~yw rzeczy-
wistokl sq uzyskiwane. Jednak llczk kolor6w ogranlcza paleta powiqzana ze skoroszytem.
Pny definiwaniu kolw6w dla cbiektu Range kontecmgjest zastosowanie jego podwnego obiektu
Interior. Kolor mote zostaC zdeflnlowany pny W i u w(aW+mtl Color lub ColorIndex. Wla5ciwog
Cc!orIndex pzyjmuje wartoScl z przeddalu od 0 do 56 (0odpDwlada brakawl m i e n l a ) . WartoSci
wtablwotl adpowladajq kolwom palety skomsrytu. Niestety pamedry koleJnotlqWwietlania
kolwc5w i systernem numerowania stosowanym w w d k u wl&iwo5ci ColorIndex nle wyjtC+pUje
taden zwiqzek, dlatsgo tet bqdzle konleczne rarejestrowanie rnakra okreflajqcego wartoSC ds
SdwoSci ColorIndex d b wybranego koloru. Nawet stworzenle takiego rnakra nie gwarantuje, ie
uiytkownik nie zmlenrt palety kolordw skoroszytu. JeSll tak bqdzie, wtaSciwofC 3iorIndex lNyge
neruje kolor catkowicie dirty od tego, ktdrego oczeklwate5.
W prrypedku zastourrranla wIaSclwoSc1 Color, wart056 kotoru motna okreSliE za pomocq funkcji
AGB j e w a VBA. Jednak I tym rarern neczywlsty kolor bqdrie najbarddej zblltonym do jednego
z kdor6w palety skoroszytu.
Rozdzial7. W~rowadzeniedo iezvka VBA 177

Nawiasem rnbwiqc. aby m i e n i t kolor tekstu kornentana, konieczne jest utycie obiektu
TextFrame be&cego obiektem podrqdnym obiektu Comnent. Z kolei obiekt TextFrame
zawiera obiekt Characters, kt6remu podlega obiekt Font. Nastppnie koniecme jest za-
stosowanie wiaSciwo5ci Color lub Colorlndex obiektu Font. Oto przyktad instrukcji
ustawiajqcej dla wiaJciwoSci Col orlndex wartote 5:

Sprawdzanie, czy kom6rka zawiera kornentarz


PoniBza instrukcja wyfwietla zawartoX komentarza znajdujqcego sip w kom6rce A1
aktywnego arkusza:
tlsgecx Range('Al').Cmnt.Text

J d l i w kombrce A 1 nie ma komentarza., wykonanie instmkcji spowoduje wygenerowa-


nie tajemnictego komunikatu bt~du:Object variable o r with block variable not set
(Nie zdefiniowano zmiennej obiektowej lub zmiennej powiqzanej z instrukcjq W i th).
Aby stwitrdzit, czy okreSlona kom6rka zawiera komentarz, m o h a napisaf kod Zrd-
dtowy sprawdzajwy, czy obiekt Comnent jest typu Nothing. Zgadza sic, typ Nothing jest
poprawnym slowem .klucwwym. Ponitsza instrukcja wygwietli wartoit True, jesli
w kom6rce A1 nie zostanie maleziony komentarz:
MsgBox Range( " A l ' ) . r m n t Is Nothing

Nalety zauwatyt, tt zamiast znaku r6wnofci uvtem dowa kluczowego Is.


Idqc kmk dalej, m o b %stwDrzyC instmkcjq wyiwietlaj~cqkomentarz zawarty w komdrce
tyIko wtedy. gdy faktycmie on sip w niej majduje (w przypadku braku komentarza nie
zostanie wygenerowany blqd). tnstrukcja ta ma nastppujqcq postat:
If Not Range('A1') .Connent Is Nothing Then Msgbx Aange('A1') .Cment.Text

Dodanie nowego obiektu Comment


Lista rnetod obiektu Comnent nie uwzglpdnia melody urnotliwiaj~cejdodanie nowego
komentarza. Wynika to sqd, Le metoda AddComnt jest p o w i m a z obiektem Range.
P o n i m insbukcja umieszcza komentarz w kom6rce A 1 aktywnego arkusza:
Range('A1") . M d C m n t

Metoda A d d C m n t pobiera argument reprezentujqcy zawartoSC komentarza. A zatem


m o h a dodaC kornen- a nastppnie przy utyciu ponitszej instmkcji wprowadzit jego
zawartosd:
ange("A1").AddCmnt "Formula stworzma przez JW."

Metoda AddConment wygeneruje bhd, gdy w komdrce bedrle sie j u i znajdowa)


kornenta~..
NmEI
1 78 Czeft It1 + Jezyk Visual Basic for Applications

Aby zobaczyLl. jakle efekty motna uzyskaC po zastosowanlu wtafciwobi i metod


obiektu C m n t , nakty zapomae sig ze skoroszytem majdujilcym sle na dot&zonym
dysku CDROM. Skoroszyt zawiera ptzyktady pnetwana)qce oblekt C m n t pny ufyciu
instrukcji jqqka VBA. Prawdopadobnie caly kod fr6dtowy nie bedzie dla ciebie
zrozurniaty, ale dziekl niemu zorientujesz sig, w Jakl spos6b rnanipuluje sie obiektem.
korzystajqc z instrukcjl jqzyka VEA.

Kilka przydatnych wlaSciwoSci obiekht Application


W danej chwili utytkownik Excela konysta z tylko jednego aktywnego skoroszytu.
W pnypadku zwyklego arkusza aktywna jest tylko jedna kombrka (nawet jeSli zama-
czono zakres zlotony z wielu kom6rck). Jczyk VBA .jest tego Swiadom" i umotliwia
odwdywanie sig do aktywnych obiekt6w w uproszczony spos6b. Cqsto s i t to prqdaje.
poniewat nie zawsze wiadomo, kt6ry konkretnie skomszyt, arkusz lub zakres zostanie
utyty. Jpzyk VBA umotliwia to za pdrednictwem w+&ciwoSci obiektu Aopl ication.
Przykhdowo obiekt Appl i c a t i on posiada wMciwo3t A c t i veCel 1 nvracajqcq odwdanie
do aktywnej kom6rki. PonitPza instrukcja przypisuje aktywnej kom6rce wartoed 1:

W przyktadzie pominqknl odwdanie do obiektu Apol 1cat icn, p n i e w a t dosowany jest


domyflnie. Inmkcja jednak nie zadziaki, gdy aktywny arkusz nie bdzie zwyktym arku-
szern, JeSli na pnyklad interpreter jqzyka VBA wykona j g gdy aktywny b@ie arkusz
wykresu, pmcedura sip zawiesi i pojawi sit komunikat Mqdu.

Obiekt Appl icatlon p d a d a tct wlaSciwog Sel ectim zwracaj@ odwo)anie do dowolnego
zaznaczonego elementu, k t 6 jest ~ pojedyncq komdkq (akywnli], zakresem korndrek
lub takirn obiektern, jak Chartobject, Textfhx lub Shape. W tabeli 7.3 zawarto ljste wla-
fciwolci obiektu Apol ication pnydatnych w czasie przetwmania kom6rek i zakresdw.

Tabela 7.3. Kilka przydatnych wk5ciwoSci obiem Agpllcaffon

WlajciwodC Zwracany oblekt


ActiveCell Aktywna korn6rka
Actt veChart a y w n y arkusz wykmu lub wykres pwiqimy z obiektem b a r t ~ b j e c t
rnajdujgym sic w arkuszu. IeSli wykres nie jest aktywny. wlaSciwo4C bcdrie
rniala wartoit Nathirc
Act iveShset Akpwny arkwz (zwykly lub wykresu)
act?veWindw Aktywne okno
k t i veUorkbmk AkCywn~skmplyt
!bngeSelection Kombrki arkusza znznaczwe w ohilonyn okni+,nawa gdy zavlaczono
obiekt graficzny
Selctlm Zaznaczony obiekt. Mom to by6 t&ie abiekty jak Range, Shape, C h z r t O b j ~ titp.
Thi s k r k b o k Skomsyt zawicrajvy wykony~gnqprocedq
Rozdzial7. + W~rowadzeniedo iezvka VBA 1 79

Zale~stosowaniawi&ciwoSci m c a j q c y c h obiekt jest to, t e nie trzeba wiedziek, ktdra


korn6rkq arkusz lub skorosyt jest aktywny, ani tet nie jest koniecme tworzenie do
nich odwdania. Dzieki temu m o h a s t w m t kod ir6dtowy- -i w- k. a VBA, ktbry nie jest
4ci91e powiqzany z o k r r ~ l o n ~skomszytem,
m arkuszem lub zakresem. Na prGklad bo-
nitsza instrukcja cqki zawartoit aktywnej kornbrki, pomimo 2e nie jest many jej adres:

Kolejna instrukcja wySwietla komunikat zawierajqcy n a m e aktywnego arkusza:


WsgBox ActiveSheet .Name

Aby p o m t n a m e aktywnego skoroszytu, naiety u2yt nastqpujqcej instrukcji:


MsgBox Act 1 vebrkbook. Name

Gdy zamaczymy zakres w arkuszu, zit pornocq jednej insmkcji m o h a go w caloici


wypehit wartokia.. W ponitszym prtykiadzie wMciwo$t Selection obiektu Appl i c a -
t i o n m c a obiekt Range odpowiadajqcy zamaczonym komdrkom:
Selection.Value - 12

Instrukcja po pmstu modyfikuje wartoit whkiw69ci Value obiektu Range. Wynikiem


jej d z h h h jest Ares wypdniony jednq wartohi& Jefli mstanie zaznaaone cos innego
n i t zakres (np, obiekt ChartDbject lub Shape), insfrukcja wygeneruje Mqd, ponicwat
obiekty Chartmject i Shape nie posiadajq wlaSciwo9ci Value. Jednak kolejna instrukcja
ustawia w d t 12 dla w+afciwofci Value obiektu Range m a c z o n e g o przed obiektem
imego typu (wlaSciwoSC RangeSel ection jest p o w i m a lylko z obiektem Windows):

Aby dowiedzid sip, ile w aktpnym oknic m t a l o zamacwnych kombrek, nale2y utyi
wlafciwolci Count. Ota pnyklad:

Obiekty Range
Wiele zadah realizowanych pny W i u instrukcji jwka VBA jest p o w i w y c h z ko-
m6rkami i rakrrsarni arkuszy. W kolicu w tym celu stwornno arkuszc kalkulacyjne. Co
prawda, we wczeSniejszym podmaniu v b & rejestrowania mala (punkt ,Wzglqdne
czy bemzglcdne?") zapozmk.4 sic z przetwananiem kombrek pny utyciu jptyka
VBA, ale musisz zdobyC macznie wipksq wiedze na ten temat.

Obiekt Range zawarty w obiekcie Worksheet sklada sip z pojedynczej kom6rki ark-
lub ich zakresu. W kolejnych podpunktach omdwiq trzy metody odwolywania sip do
obiektu Range przy m i u instrukcji jpzyka VBA. Oto one:
w w h i c i d d Range obiektu Worksheet lub obiektu klasy Range,
R wMciwdC Cell s obiektu Worksheet,
wfaSeiwoSt Offset obieldu Range.
180 CzqfC Ill Jqzyk Visual Bosic for Applications
I
I
Wlaiciwo5C Range
WMciwo3&Range m a obiekt Range. Posiada dwic skladnie:

-
WWciwofC jest powiapna z dwoma typami obiektdw Worksheet lub Range. Stows
kombrkal i kcmbrka2 sq odpowiednikarni terminbw, kt6re Excel traktuje jako identyfi-
kator zakrtsu (pienvsza sktndnia) i jego granicc (druga sktadnia).

Do tej pory pomlel prryklady podobne do zamieszczonego ponitej:


Worksheets('Arlrusz1') .Range('Rl') .Value 1 -
Instrukcja wprowadza tu jedynie wartoSC do o M l o n e j komdrki. W tym przypadku do
komdrki A1 arkusza Arkuszl aktywneeo skoroszytu jest wstawiana wartosd 1. Wlahi-
wo4C Range rozpoznaje tet na& zdefiniowanie & sioroszytach. A zatern je4li korn6rce
nadano namq Input, p q Wciu ponitszcj ininstrukcji rnotna wpmwadzit do niej wartoit:
Uotksheets["Arkuszl") .Range('Input'). Value - 1

W kolejnym w k l a d z i c do zskresu dotonego z 20 komdrek aktywnego arkusm jest


wstawiana taka sama wartog (jeSli aktywny arkusz nie jest nvyklym arkuszem, zostanie
wygenerowany komunikat bkdu):
Activesheet .Range('Al:BlO') .Value - 2

Kolejna instrukcja dajc takie same wyniki, jak poprzcdnia:

Co prawda, pominiqto odwdania do aktywnego arkuwa, ale jest on utywany domySlnie.


Poza Wrn wminieto wlafciwo4t Yalue o b i e h Range, paniewat jest domy3lna W powyt-
szym p&kladzie u i y o drugiej skladni wl&iwoiei Range. w jej pnypadku pierwsym
argumentem jest g h a lewa komdrka, natorniast drugim -dolna prawa kombrka zalarsu.

W nmqpym p q k W e zastosowano operator przeci~iazakrcs6w E ~ c e l a(mak spa-


cji), Mdry m c a p t z e c i ~ i edwdch zakns6w. W lym pnypadku przeciviem jest jedna
kom6rka C6. A z a t m nastppujqca instmkcja wpromdza do kcm6rki C6 wartdf 3:

I wmzcie do M i u kombrek (twanqcych nkci;lgly za.kres) jest wprowadzana wartoft 4.


hzecinek @a funkcjp operatora fqcqcego:
Range('Al. A3, A5. A7. A9"I - 4
I

Dotych.czas we wszystkieh pnykladach zmtosowsno wldciwooK Range obiektu Work-


sheet. Jak jut wspomnialem, m o h a te2 utyC w h S c h S c i Rznge obiektu Range. Ponitej
zamieszcwno odpowiedni pnykbd, w ktbrym obiektem Range jest aMywna komdrka,
hktowena tak, jakby majdowala siq w gdmym lewym naroaiku arkusza:
Rozdzial7. + Wprowadzenie do jezyka VBA 181

Ponadto do korndrki, ktdrq b+ie komdrka 82, jest wstawiana wartoh? 5. Innymi slowy,
m 6 c o n e odwdanie jest wzglpdne w stosunku do g6mego lcwego narotnika obiektu
Range. A zatem instrukcja wprowadzi wartoff 5 bezpodrednio do kom6rki majdujqcej
sie na prawo od aktywnej kom6rki i jeden wiersz ponitej.
Troche to zagmatwane. Na s z c e c i e istnieje o wiele bardziej m z u m i a h metoda uzy-
skania dostppu do komdrki wzglpdnej w stosunku do z h e s u . Opiera sip na wlaiciwoici
Offset. M6ra zostanie ombwiona po nastppnym podpunkcie.

Wla5clwoBC Cells
Kolejna mctoda odwolywania sip do zakrcsu polega na zastosowaniu whiciwofci
Cells. Podobnie jak w pnypadku whiciwofci Range, wla4ciwoSC Cells jest utywana
w stosunku do obiekt6w Worksheet i Range. Aby z niej skorzystaf, rno2na poshtyf siq
jednq z trzech skhdni:
oblekt.C?lls[mInde%.colmlndex)
obiekt .CellsVcwlnde%)
obiekt.Cells

Zademonstruj~kilka pnykhd6w zastosowania wiakiwoki Cell s. W pierwszym z nich


du korn6rki A 1 arkusza Arkuszl zostanie wprowadzona wartoff 9. W tym pnypadku po-
s b p sip pierwsq skladniq akceptujqq numer indeksu wienta (wartoici z przedzialu
od I do 65 536) i numer indeksu kolumny (wartoSci z przedziatu od I do 256):
Llorksheets('Arkuszl").Cells(l. 1) -9
Oto instrukcja wprowadzajqca do kom6rki 03 (czyli wiersz 3 i kolumna 4) aktywnego
arkusza wartoff 7:

M m a tet utyC wMciwoSci Cells obiektu Range. W tym pnypdku obiekt Range zwracany
pnez w ~ i w o X Cells jest wzglpdny w stosunku do g6mej lewej kom6rki obiekm Range,
do kt6rego jest wykonywane odwdanie. Zagmatwane? Raczej tak. Kolejny przyklad
mote sprawif, te stanie siq to przejrzystsze:

l n m k c j a wprowadza do aktywnej komdrki wartost 5. Nalety parniqtaf, 2e aktywna


kom6rka jest traktowana tak, jakby byla kom6rkqAl arkusza.
Prawdziwa konyS4 wynikajqca z zastosowania tego typu cPdwolania do komdrek stanie
SIP wldomn. pmy ornwlaniu miennych i pplli (rozdzia+8).W wiqkszoJd przypadk6v
zamiast faktycznych wartaSei argument6w zastosujesz racpj mienne.
Aby do kom6rki mejdujqcej sip bezpoSrednio ponitej aktywnej kombrki wprowadzit
wartoSC 5, nalegr utyC nastppujqcej instrukcji:
182 CzefC Ill + Jqzyk Visual Basic for Applica:'ons

Instrukcjq tp m o ~ opisak
a za pornocq nastqpujqcego zdania: ,,Ftozpoczuij od aktywnej
kombrki i pryjmij. t e jest ona kom6rkqA1, a nastepnie uzyskaj kom6rkp majdujqcq sip
w dmgim wierszu i pienvszej kolumnie".
W drugiej skkidni w W i d c i Cells jest utywany jeden argument ktbry mote prryjmowat
wartoSci z przedziah od 1 do 16 777 216. Wartoif jest rdwna liczbie komdrek arkusza
(65 536 wierszy x 256 kolumn). P o c w y od kombrki A l , kom6rki sq numerowane do
korica w prawq stronp, a nastppnie od pocqtku nastepnego wiersza Na pnykhd 256.
-
kornorkq jest I'J1, natomiast 257. kom6rka A2.
W nastqpnym pnykladzie do kom6rki H3 ljest 520. kom6rkd aktywnego arkusza wpm-
wadzono wartodf 2.
Activesheet .Cells[520) - 2
Aby wygwietlif wart036 ostatniej kombrki arkusza, n a l c g u2yt nastppujqcej insmukcji:

Taka skiadnia mote tet zostaC u@ta w przypadku obiektu Range. W tym wariancie
M c o n a kom6rka jest wzglpdna w stasunku do obiektu Range, do kt6rego siq odwolano.
Jeili na pnyklad obiekt Range jest zakresem A1:DlO (40 kombrek), wlaSciwoiC Cells
mote pobraC argument o wartohi z przedziah od 1 do 40 i m 6 c i C jednq z kom6re.k
obiektu Range. W ponihzym ptzykhdzie wartoif 2000 jest wprowadzana do komdrki
A2, poniewat jest to piqta komdrka zakresu (Iicqc od gdry i w prawq stronp, a nastqpnie
od poczqtku nastqpnego wiersza), do kt6rego siq odwoiano:

&* W popnednim pzykladde argument wtahlwdci Cells nie jest ogranlczony do wartokl
(,!$ z przedziatu od 1do 40. JeSli wartoSC argumentu przekracza liczbe komCkek zakresu,
diczanie jest kontynuowane tak, jakby zakres byt wlgksry nit w rzecqwisto8ci. A zatern
inst~kcjapodobna do powyiszej moze zmienlC wartosf komdrki spoza zakresu A1:0?0.
Trzecia skhdnia w ~ c i w o S c iCells po pmstu zwraca wsystkie kom6rki arkusza, do ,
ktdngo jest wykonywane odwdanie. W praeciwierlshlie do M c h powstalych s k w i .
w tym pnypadku nie jest m c a n a pojedyncza komdrka. Ponitsza instrukcja u t y a
metody C l earcontents w stosunku do zakresu zwrdconego przez wlaSciwoSC Cell s ak-
rywnego arkusza. W wyniku wykonania instrukcji czyszczona jest zawartoSC ka2dej
komdrki arkusza.

Wlaiciwoii Offset
WlaSciwoSf Offset (podobnie jak wldciwoSci Range i Cell s) te2 m c a obiekt Range.
Jednak w pneciwienstwie do dw6ch poprzednich, wlaSciwo9C Offset jest powiqzana
tylko i wy4qcmie z obiektem Range. Oto jej sktadnia:
Rozdzial7. + Wprowadzenie d o jezyka VBA 183

WMciwoX Offset pobiera dwa argumenty odpowiadajqce wzglpdnemu pdoteniu od-


niesionemu do gdrnej lewej korn6rki okre$lonego obiektu Range. Argumentami mogq
by6 wartoSci dodatnie (p~esunipciew d61 lub w pnwo), ujemne (przesuniqcie w g b p
lub w lewo) lub zero. Ponitsza insdccja wprowadza wartoSC 12 do komdrki majdujqcej
sic bezpirednio ponitej komorki aktywnej:

Kolejna instrukcja wstawia wart066 15 do k o d r k i majdujqcej sip bezpoirednio powytej


aktywnej komdrki:
ActlveCell .Offset(-I. 0).Value - 15

Nawiasem m6wia.c, jeSli aktywna kom6rka znajduje sic w wierszu 1, wlaSciwoid Offset
z powytszej insmkcji spowoduje wygenerowanie Medu, poniewat nie b ~ d z i emogla
obiektu Range, kt6ry nie istnieje.

WtaSciwoSf Offset jest doSC przydatna, nvhzcza w przypadku stosowania miennych


w procedurach wykonujqcych petlp. Zostanie to om6wione w nastqpnyrn rozdziale.

Po zarcjestrowaniu makra w trybie odwdania wglpdnego, w celu odwolania siq do


korn6rek wzglqdnych w stosunku do pozycji pocqtkowej (kom6rki. ktdra jest aktywna
w momencie rozpocqcia rejestrowania makra) Excel u e i e whtciwoSci Offset. Przy-
khdowo *tern-rejestratora makr do wygen&owania pbniazego kodu k6dloweG.
Najpierw umiehilern kunar w korn6m 01, a nastepnie
-. wprowadzitem wartoici do ko-
m&ek zakresu 81 : 83 i powr6cilem do kombrki B1.
Sub HakrolO
ActiveCell .FomlaRlCl "1" -
-
ActlveCell .Offset(l. O).Range("Al').Select
ActiveCel 1 .FormulaRlCl "2"
Actlvetell .FomlaRlCl "3" -
Actfvetell .Offset(l. 0) .Range("AlS) .Select
Activetell .Offset(-2. O).Range("Al").Select
End Sub

Rejesirator &utyl tu wlaSciwoSci FonrulaRlCl. Zwykle w celu wpmwadzenia wartdci


do komdrki posWysz sie wMciwoSciq Value. Jednt po zastosowaniu whhiwoici
Formul aRlC1 lub nawet Formul a uzyska sip takie same wyniki.

Wygenerowane ochdania do kom6rki A1 mogq wydawaC sip t~ochqdziwne, poniewal

procedury nj&ttowania, ktdry sprawia, '


kombrka nie byla nawet u2yta w trakcie njesh-owania makra. Jest to nietyuow element
kod trddlowy jest nadmieriib zGtony. Po
usuniwiu wszystkich odwdafi do zakresu RarPge("A1') makm nadal bedzie nakornicie

Sub Znudyflkawane Nakrol( )


-
ActiveCell .FormulaRlCl "1"
-
ActiveCell .Offset(l. O).Select
ActiveCell .FonnulaRlCl "2'
-
ActlveCell .Offset(l, 0 ) .Select
ActlveCell .FonnulaRlCl "3"
ActlveCel 1 .Offset( -2. 0) .Select
End Sub
184 Czqlt Ill + Jeryk Visual Basic forApplications

Ponitej zawarlem jcszczc wydajniejsq wersjq makra (sam je stworzytcm), w kt6rym


nie jest utywana rnetoda Select:
Sub MakrolO
-
ActlveCell 1
kt~veCell.Offset(1. 0 ) -- 2
ActtveCell.Offset(2. 0) 3
End Sub

Co naleiy wiedziet o obiektach?


W poprzbdnich punktach zapomakm cie z obiektami (w tym re zbioramiX wldciwolciami
i metodami. Jednak jest to zaledwie wiencholek gbry lodorvej.

Podstawowe zagadnienia, M6re naleiy zapamigtaC


W tym podpunkcie s c h a r a k t e r y m ~ mkilka dodatkowych zagadniefi, ktdrych opano-
wanie zdecyduje o tym, czy zostaniea ekspertem w zakmie jpzyka VBA. Zagadnitnia
stanq sip bardziej zrozumiale w miarp zdobywania dolwiadctenia i po przcczytaniu ko-
lejnych mzdzialbw.
Obiekfyposiadqjq unikatowe wlaiciwdci i merody. Katdy obiekt dysponuje
- .
wtasnyrn mtawern wta$ciwotci i metod. Jcdnak niektdre obiekw wso6ldziela
kilka k ~ c i w o 3 c (np.
i Name) i mctod takich, jak k l e t e .
istnieje moxliwoi~manipulowania obiekumi be= ich smnacrania. Moh to byc
niezgodne z twoim wyobrateniem o standardowym prretwananiu obiektdw
w Excelu, mtaszaa jefli twony(e8 makra jqzyka XLM. Faktem jest.
te wykonywanie operacji na obiektach bcz ich uprzcdniego zaznaczania jest
zazwyczaj efcktywniejsze. W trakcic rcjestrowania makra Excel najpie*
zaznacza obiekt. Nie jest to konieczne i wfafciwie spowalnia dziaianie makra.
Wdnejest, aby zrozumie~czym sq zbiory. W w i t k s d c i pnypadk6w o d h j e s z
sip do obiektu w sposdb pofredni prry utyciu zbiom, w ktdrym sip on majduje.
Aby na przyklad u q t o b i e h Workbook o nazwie Mjgl i k , n a l w astosowad
nastqpujqce odwo+anie do zbiom Workbooks:

Powytsze odwdanie zwraca obiekt bqdqcy skoroszytem, kt6mgo uty+ef.


I Wlaiciwatcimogq m r d ohdanie do riusego obi*. Pnykladowo w ponhzej
inmukcji wMciwodc Font zwraca obiekt Font podlegajqcy o b i e b w i Range:
-
Range( 'Al') .Fmt .Bald True
Ismieje wiele rdi*~ychmetod ahuotyvania sic do !ego samego a b i e h . Zal6;hny,
t e dysponujesz skorosqtcm o nazwie Sprzedat, kt6y tostat otwarty jako jedyny
Pnyjrnijmy ta -3koroszyt zawjera jcden arkusz o nanxie Zestawienie.
Do arkusza motna o d d a t sie pny W c i u n a s t ~ p u j ~ y cmhe w :
Rozdziat 7. W~rowadzeniedo iezvka VBA 185

To, ktbra metoda zostanie wybrana, przewahie zalety od wiedzy- utytkownika


- na temat
o b s m robocztgo. JeSli naprzyklad otwartych jest wiecej skoroszytbw nit jeden, nie-
odpowiednia bedzie dmga lub mecia metoda. JeSli w w a s z akrywnego arkusza (do-
winego m u ) . kadda z k e c h ostamich metod bqdde ;kutecma..~b~-rnietcalkowitq
pewno5t. t e odwohjesz si$ do wldciwego arkusza ohellonego skoroszytu, najlepsza
bpdzie pierwsza metoda.

Dodatkowe informacje na temat obiekt6w i w!akiwoici


JeJli po raz pienvszy masz stycmoif z jqzykiem VBA, prawdopcdobnie bedziesz tro-
che pnytlocwny obiektarni, wiafciwofciami i metodami. Nie jest to twoja wina. JeSli
spr6bujesz utyf wlaiciwofci, kt6rej obiekt nie ofemje, zostanie wygenerowany Mad
runtime i wykonywanie kodu ir6dlowego jqzyka VBA zostanie wstrzymane do czasu
usuniecia problernu.

Na szcz@cie ismieje kilka dobrych sposob6w zdobycia infonnacji na temat obiektbw,


wladciwofci i metod.

Pneczytaj reszfq ksiqiki


Nie zapornnij o tyrn, t e tytut tego rozdziah brzmi ,,Wprowadzenie do jpzyka VBA".
W pomtalej -6ci ksieki zawarto wiele dodatkowych stczeg616w oraz przydatnych
i poucmjqcych przyktadow.

Zarefestrujwykonywane aperacje
B a wqtpicnia najlepsq metodq zaznajomienia sip z jmkiern V B A jest po prostu uak-
tywnienie rejestratom makr i zapisanie kilku operacji wykonywanych w Excelu. Jest to
szybki spos6b zdobycia wicdzy na temat obiektbw, wtafciwoici i rnetod stosowanych
w okreilonym zadaniu. Jeszcze lepsze jest obserwowanie rnodutu VBA, w ktbrym ge-
nerowany jest kod, podczas rejestrowania makra.

Podstawowvm M i e m szzeg6lowych informacjiina ternat obiektbw. metod i procedur


stosowanych w ~ x c e l ujest jeio s s e m pomocy~Na rysunku 7.15 pokazano temat po-
mocy dotycacy whSciwo4ci Value. Akurat ta wlafciwo$t iest wwiazana z kilkoma
r6tn:mi ibic&mi. Temat pornacy zawiera hipertqcza o takich n-ach, jak See Aiso,
Applies To i ErmnpIe. Po klikniqciu hiperlqcza See Also zostanie wydwietlona lista powiq-
zanych temat6w ljdli istniejri). Kliknigie hiperbcza Applies To spowoduje otwarcie okna
zawierajawgo liae wszystkich obiektbw korrystajqcych z tej wlaiciwodci. Po klikniqciu
hipedqcza Exmple uzyskasz rnotliwofC zapomania siq z jednym lub kilkoma przykta-
dami. Kod Mdtowy pnykhdu mote zostat skopiowany i wklejony do moduh! VBA.
186 Cze4C Ill + Jezvk Visual Basic for Ap~kations

Rysunek 7.15.
T ~ p o w eokno pomocy
doiyczqcej VBA

&$** Okno pornocy pokazane na tysunku 7.15 nle prerentuJewszystklch tematbw. Dopiero
po kliknislu hipertqcza Show A l l zostanle wy5wietlona petna zawartogd tematbw.

PrzegIqdmRa obiektbw (ang. Object Browser)jest pmydamym naqdziem wy3wietlajqcym


wszysdrie w&iwoki i metody dla Wqo dostq~ncgoobiektu. Po uaktywnieniu edytora
Visual Basic narzedzie Objecr Browser motna uruchomit na jeden ztrrech sposobow:
wciskajqc klawisz F2,
wybierajqc z menu Yiew pozycjp Objecr Browser,
klikajy pnycisk Object Browser na pasku narqclzi Stundard.
Narzedzie Objecr Browser pokamno na rysunku 7.16.

Rysunek 7.16.
Nanedzie
Object Browser
jest znakomitym
fr6dfern
infomacji
1. Rozdziat 7. + Wprowadzenie do jezyka VBA 187

Lista wrwijana w g6mym lewym narotniku narqdzia Object Browser zawiera wszystkie
udosttpnione biblioteki obiektdw:
sam program Excel
MSForms (utywana do tworrenia niestandardowych okien dialogowych),
W c e (obiekty wspdlne dla wszystkich aplikacji pakiehl Micrasofr Ofice),
Stdole (obiekty automatyzacji OLE),

aktualny projekt {wybrany w oknie Project Explorer) i wszystkie skorosyty,


do kt6ryc.h sic w nim odwdano.

Od ego,co zostanie wybrane na IiScie rozwijanej, zalety zawutoft okna Classes. Z kolei
zawartog okna Members of zalety od tego, co zostanie zamaczone w oknie Classa.

Po wybraniu biblioteki, w celu uzyskania list' wlafciwobci i metod zawierajqcych okre-


Slony tekst, mokna go wprowadzit w polu szukania Seurch T a t drugiej listy rozwijanej,
a nastqpnie klihqt ikonp Search (lornctka). Dla pnykktdu z&;hny, t e mlizujesz projekt,
w kt6rym sq przetwarzane komentarze zawarte w kom6rce. Wykonaj nastqpujqce kroki:
1. Zamacz intemujqcqciq bibliotekq. Jefli nie jest& pewien, ktdra bibiioteka
obiekt6wjcst wtarlciwa, wybierz pozycjp All Libruries.
2. W polu listy ronvijanej majdujqccj siq ponitej listy bibliotek wprowadt slowo
Cment.
3. Aby rozpo& wyszukiwanie, kliknij ikon? lornetki.

Dopasowane wyniki wyszukiwania msWq wyiwietlone w oknie Seurch Results. Aby


w oknie Clcuses q4wietlit klasy obiektu, nalety go zaznaczyt. Aby uzyskaf liste
skMnik6w klasy {wlafciwoSci. metody i stale), nalety jq lamaczyt. Zwr6t uwagq na
dolny panel wy6wietlajqcy dodatkowe infomacje o obiekcie. Aby bezpoSrednio przej9f
do whiciwego tematu pomocy, nalety wcisnqe klawisz F I .

Poczqtkowo m q d z i e Object Browser mote wydawad sir dotone, ale z czasem jego
pnydamoSt wnasta.

Eksperymenfuj z oknern Immediate


Jak jut wspornnialem w mmce ,PnyHady koddw Mdbwych", okno Immediate e d y t m
Visual Basic jest bardzo pnydame w pnypadku testowania instrukcji i r6tnych wyra-
ke6 jezyka VBA. Zazwyczaj c a b czas mam je uaktywnicme i czqsto poshgujq sic nim
przy testowaniu r h y c h m d o m w trakcie identyfikowania i wykrywania Mqddw
w kodrie hddbwym.
Rozdziat 8.
Podstawy programowania
w jqzyku VBA
W poprzednim rozdriale zawarIem wprowadzenie do jpzyka VBA. Teraz pora na poglq
bienie wiedzy i omdwienie kilku kluczowych elernent6w jpzyka VBA oraz zagadnien
n v i v n y c h z programowaniem przy jego utyciu. JeSli pracowaiei j u t z imym jezy-
kiem programowania, wiele informacji bpdzie ci manych. Jednak jezyk VBA posiada
kilka unikatowych cech, dlatego tet nawet doiwiadczeni programifci mogq :skorzystaC
z czdci zawartych tu informacji.

Przeglqd element6w jqzyka VBA


W rozdziale 7. dokonalern pnegl@du obiekt6w, wlidciwoSci i m4od. Jednak niewiele
podalem informacji o tym, w jaki spos6b manipulowaf obiektami, tak aby wykonywaly
wartoSciowc operacje. W tym rozdziale poprzez om6wienie elemenrow j&u VBA.
b d a g c h slowami kluczowymi i strukturami sterujqcymi procedur, w pewnym stopniu
przyblie tp kwestic.

Na dobry pocqtck zaprezentujp prostq procedurq Sub jqzyka VBA. Ponitsq kod ir6-
dlowy urnieszcmny w module VBA oblicza sump pierwszych 100 liczb calkowitych.
Po zakoliczeniu obliczeh procedura wygwietli komunikat zawierajqcy wynik.
Sub VBA-Dem(
' Przyklad prostej procedury jezyka VBA
O i m Total k Integer. 1 As Integer
Total = 0

Next i
-
For i = 1 To l D D
Total Total + 1

MsgBox Total
End Sub

Procedura zawiera kilka czpsto stosowanych element6w jpzyka VBA, w tym komentarz

-
pnypisania ( T o t a l 0 i Total-
(wiersz rozpoczynajrlcy sip apostrofan), dwie mienne (Total o r q i), dwic instrukcje
smktuq p@li (For . . . Next) i wbudo-
T c t a l + i),
wan&funkcjq (MsgBox). Wszystkie te elemmty zostanq ombwione w kolejnych punktach
rozdziahl.
190 CzeJt Ill + Jezyk Visual Basic lor Applications

Wprowadzanie kodu fr6dbwbgo jpzyka VBA


Kod ir6dlowy jqzyka VBA znajdujqcy slq w module VBA sklada sie z Instrukcji. PraMykowane jest
umieszczanle w wierszu jednej Instrukcjl, ale nie Jest to konieczne. W celu oddzielenla wlelu in-
strukcji zawartych w jednyrn wierszu nalety utyC dwukropka. W ponltszym przyktadzie w jednym
wierszu urnieszczono cztery instrukcje.

x
End Sub
- -
Sub OneLi ~ e )!
1: y 2: z - 3 : MsgBox x + y + z

Jednak kod fr6d)owy jest czyteinlejszy po urnieszczenlu w kaMym wierszu tylko jedne] instmkcjl:
Sub OneLine( )
x - l
Y-2
2 -
nsgeox x
3
- y + z
End Sub
Katdy wiersz moie mi& dowolnq bugoSC. W trakcle zmlenania do prawego k o k a wiersza zb
wartost okne modutu VBA jest pnewljana w lewo. W przypadku dluglch lnstrukcji motna utyC
sekwencji zloionej ze spacji i znaku podkreflenla, oznaczajqcej kontynuacje instrukcji w nastepnyrn
wierszu. Oto pnykfad:
SU& LongLl ne( )
5mwdValue -
~orkshee~s('Artusz1') .Range("Al') .Value + -
krorksheets( 'Arkusz2"). Ranse! "Al') .Value
End Sub
Prry rejestrowaniu makr Excel w s t o ufywa mak6w ~ l e n i wacdu podzlelenla dtugch instrukqi
na wlele wierszy.
Po wpmwadzenlu lnstrukcji Interpreter jezyka VBA w celu zwipkszenla czytelnolcl wykonuje na-
stepujqce operacje:
I Pomiedzyoperatorarnl wstawla spacje. Pnykladowo pa wprowadzeniu InstrukcJlAns-1.2
(bez spacfl), Interpreterjezyka VBA zamleni jq do postaci:
Ans -
1+ 2
. zmienia odpowiednfo wklkofC makdw zawerlych w sbwadr
Interpreterjpzyka K34
kluczowych orsz w namach w(a8ciwo~cIImetod. Po wprowadzenlu nastepujqcego lakucha:
Result-activesheet.range:"al").value-12
- Interpreter jqqka VBA zamienl go do postaci:
-
Result ActiveSheet.Rz~get"a1").Value-12
Tekst zawarty w znakach cudzystowu (w tym przypadku "al") nie jest rnodyfikowany.
Poniewat w mzwach mfennych j w k a VBA nie lest rvzr6hiana wielk-036 znakbw, interpreter
domySlnie u j w s w nlch llter takiej samej wielkoScl, jak w mzwie, ktdrq wprowadmnojako
ostatnig. Jefll na przykhd na poczqtku wpmwadzikS zmiennq nyvalue (tylko male literyl.
a nastqpnle zmiennq &Value (potqczenie dutych I matych liter), intefpreter j m a VBA
w przypadku wsrystkich kolelnych vrystppid tej zmiennej wQe n a y MyValue. Wyjqtkiem
jest sytuacja, gdy mienna zostanie zdeklarowana pny utyciu s h a kluczowego D i m
lub podobnej instrukcji. W tym pnypadku nama zrniennej bqdzle miata takq postad.
jak w wierszu dekiaracji.
Interpreterjezyka VBA spra- i n m k c j e pod k e r n W d 6 w sklahi. J e l l majdzie blpd,
zmienl kolor wiersza I mote wySwletllb komunikat oplsujqcy problem. Okno dlalogowe
Oprions (uruchamiane w edytone Visual Basic przez wybranie opcji Options w menu Tools)
urnolllwla okreSlenie koloru wdnego wiersza (zaktadka Editor Format) i tego, czy zostanie
wySwietlony kornunlkat b@du (uiy] opcji Auto Syntax Check w zaWadce Editof).
Rozdzid 8. + Podstawv ~roaamowaniaw iemku VBA 191

P r d u r y jezyka VBA nle muszg przetwarraC iadnych oblekt6w. Rzyktadavo powytsza


procedura nie wykonuJe tsdnych operacjl na obiektach. Pnetwarza jedynie liczby.

Komentarze
Komentarz jest tekstem spelniajqcym funkcjq opisu zawartego w kodzie 2rodiowym.
Interpreter jpzyka VBA cdkowicie ignmje zawartoff komentarza. Warto cqsto stosowaf
komkntarz=bb opisu przeznaczeni&nstikcji, poniewat nie zawsze jest to oczywiste.

Komentarz mote zostaf umieszczony w oddzielnym wienzu lub za instrukcjq w tym


samyrn wienzu. Komentarz jest rozpaczynany znakiem apostrof'u. Interpreter jezyka
VBA ignomje tekst majdujqcy sic za makiem apostrofu do kodca wiersza, z wyjqtkiern
apostrofu umieszcmnego pomiedzy makami cudzys+ow. Przykhdowo ponitsza in-
strukcja nie zawiera komentarza, mimo t e w wierszu majdujq sic apostrofy.
Msq - "Nie jest mtliwe tontynuowanie'"

Kolejny pnyklad demonstruje proceduq jezyka VBA zawierajqq trzy komentarze:


Sub Cannents{)
-
Procdura nle wykonuje iadnej operacji na wartosci x
a

x D ' wartoit x ntczego nle reprezentuje


Wyhtietlente y n l k u
nsgBax x
End Sub

Co prawda,, apostrof jest preferowanym makiem identyfikujqcym komentarz ale motna


teZ u g C siowa kluczowego Rem. Oto przykiad:
Ran - Nastqa Instrukcja pros1 utytkrrwnika o podanie namy p l l k u
%wo klucnowe Rm jest pomstaWciq re starszych wenji j w k a BASIC. W celu u q -
mania kompatybilndci dowo zostato uwzgl~dnionew jqzyku VBA. W przeciwiehstwie
do apwtrofu sbwo klucmwe Rein musi byd umieszczone na pocqtku instrukcji. Aby
umieScif go ra innqkstukcjq w jednym wiersm nalety poprzeddf go makiem dwukmpka.

Stosowanie kornentany to zdecydowanie dobry +myst, ale nie wszystkie komentarze


sq h i e pnydame. Aby by@ przydatne, powinny zawieraf informacje, kt6rych uzy-
skanie po zapomaniu sip z kodem trbdbwyrn nie jest oczywiste. W przeciwnym razie
zostanq jedynie stracone cenne bajty. Ponitsza procedura zawiera wiele kornentany,
z kt6rych aden tak naprawdq nie prrynosi konyfci:
Sub &rdCampnts( 1
Deklaracja miennych
Dim x As Integer
Dim y A5 Integer
Dim z As Integer
-
x --
Rozpcczecle pr,mdury
100 ' Przyplsanie wartoici 100 do zmiennej x
y 2CP ' Przyplsanie wartoici 200 do zmiennej y
i s m a n i e x l y oraz raplsanle wyniku w z
L - x + y
192 CzeJe nl + Jervk Visual Basic for A~olicatlons

Wyiwietlmle nyniku
hgBox z
End Sub

Aby jak najlepiej wykorzystad komentane, stosuj je do:


kr6tkiego opisu pneznacztnia W e j napisanej procedury,
opisu mian dokonanych w proctdurzc,
t a m a m i a , te funkcje lub bnstrukcje sq u y w a n t w niety-powy
lub niestandardowy sposbb.
opisania p m a w t n i a miennych, dziqki czemu ty i inne osoby bqdq w stanie
rozsrjfrowat nazwy. ktdre w pmciwnym razie bytyby niejasne,
opisania obejSC, ktbre zastosowahL w celu p d m i a sobie z bkdarni Excela.
Pamiwj, aby d & d kornentam jut w Sakcie pisania kodu M b w e g o , a nie pdiniej.
lstnleje motllwo% pnstestowanla (jmcedury bez uwzglgdniania okreSlonej imtrukcji
C IUD ich gtupy. Lamiast WYW* Instruk~.wystarezy w S M RB p z ~ t k u *~BM
awstrof i zarnienlf Jqw tan sposdb ne komentan. W efekde podczas wykonywanla
procedury interpreterkryka VBA zignoruje jq. Aby z powrotem ZamieniC komentarz
ria instrukcje. nalezy usun* mak apostrofu.

Pasek narydzi Edif edytora Visuaf Busic posiada dwa bardw przydame przyciski. Po
wybraniu p p y inmkcji, w celu mmienienia ich na komemara nalety kliknqt pqcisk I

Comment Block. Przycisk Uncomment Bfock zamienia grupp komentatzy z powrotern


na inmukcje. Oba pnyciski q bardim pwdatne, dlatego radq skopiowat je na pasek
n m & i Standmd. I

Zrnienne, typy danych i state


Podstawowyrn mdanim j w k a VEA jest manipulowanie danymi. Nickth dane majdujq
sip w obieMach takich, jak zakrcsy arkusza. Inne sq pnechowywane w zdeklarowanych
zmiennych.
I

h i e m jcst pa pmstu nazwmym obsarern przechowywmia danych ntwartym w pami~ci


komputem Dla zmiennych mo* bfi definiowanych wiele ryp6w danych, pocqwszy
od prostego typu Boolean {wamSci True lub Fa1se), a skoficywszy na dutych wart*
Bciach o podw6jnej typu Ocuble (Eapomaj sk z n a s ~ m y mpodpunktern). WartoSC
jest pmypisywana zmienmj przy ukyciu operatom m i s a n i a majqcego postad maku
t6wnoJci (wivej na ten temat w kolejnyrn punkcie ,,Instmkcje pnypisania").

Twomnie kbdu Mdlowego stanie s i p~m t m ,jedli w p b i s z w sobie nawyk rmdawania


zmiennym jak najbardziej wzumiafych nazw. Jednak jezyk VBA narmca w stosunku
do nazw &iemych kilka zasad:
i
W namie stos- maki dfanumerycmc, Iiczby i niektbre maki
interpunkcji, ale pienvszy'mak musi by-5
Rozdzlala. Podstmy progarnowanla w jezyku VBA 193

W j w k u VBA nie jest mroPd2niana wielkoSC mak6w. Aby nazwy by@ bardziej
czytelne, progamifci c q s t o stosujq maki r 6 h e j wielkoSci (na przykfad
InterestRate zamiast Interestrate).
w W nazwach nie motna stosowak spacji lub kropek. Aby nazwy byly bardziej
czytelne, pmgramiki c q s t o utywajq maku podkreflenia (Interest-Rate).
W specjalnego typu utywanych
W nazwach nie motna umieszczad ~ a k 6 w
w deklaracjach (#, S, & lub !).
Nazwy mogqzawierat maksymalnie 254 maki. Jednak nikt rozqdny nie tworzy
z m i e ~ y c ho tak dhgich nazwach!
Poniiej mwarto kilka przykiadbw i n m k c j i pnypisania stosujqcych r6tnego typu
zmimne. Nazwy miennych majdujqsie po lewej stronie znaku r6wnofci. W ka2dej in-
strukcji miennej jest pnypisywana wartosd widoczna po prawej stronie.
x- 1
InterestRate 0.075- -
-
LoanPayoffAnount 243C89
DataEntered Fals?
x - X + l
nyt(urn --YourHun 1.25
-
UserNm 'Jan N w k "
Datestarted #2/14/90#
Jtzyk VBA posiada zastmetone sIowa Wucrowe, kt6rych nie motna utywaf w roli nazw
m i e m y c h lub proccdur. JeSli Uyjesz jednego z tych slow, zostanie wygenerowany
kornunikat Wu. ChoC na prryktad mbzetone slowo Next mote byf bardzo nozumia+q
nazwq z m i e ~ c j to
, jednak po zastosowaniu ponitszcj instrukcji zosranie wygenerowany
a d sktadni:
Next - 132

Niestety komunikaty Mtdu s k h i nie zawsze sq zbyt ocqwiste. Powytsza instrukcja


genemje kornunikat M d u treki: Cmil e error: Expected variable (Blqd kompilacji:
oczekiwana z m i e ~ a ) Byloby
. rnito, gdyby komunikat bledu mid takq oto treSf: Rese-
rved word used as a v a r i aSle (Jako nanvy miennej utyto mazetonego slowa). Jefli
zatpm insrmkcja genemje dziwny komvnikat R d u , w celu sprawdzenia, c y atyta nazwa
zmiemej nie spetnia w j m k u VBA specjalnej funkcji, nale2y zajrzeC do jego systemu
pomocy.

Definiowanie typ6w dclnyc h


Jl;zyk VBA urnila e c i e programistom. poniewat automatycmie zajmuje sic wszystkimi
szczeg6kni zwiqzanymi z pme-ern danych. Nit wszystkie jqzyki programowania
s q tak wygodne w W i u . Niekt6re j~zykiprograrnowania q iciSle deklmmuane, co
oznacza, te programista musi jannie zdetiniowat typ danych dla kakdej zastosowanej
rmiennej .

Typ &ych o M a , w jakiej postaci dane cq zapisywane w pami~ci(np. liczby calkowite.


liczby ~e'czywiste,Mcuchy itd.]. Co prawda, interpreter jqzyka VBA automatycznie
wstawia typy danych, ale odbywa sic to kosztem szybkolci i powoduje mniej efektywne
194 CzeSC Ill Jqzyk Visual Basic for Applications

wykonystanie pamivi. Nie ma nic za darmo. Zenvolenie interpreterowi jezyka VBA


na obshgiwanie typ6w danych moze wywohk pmblcmy po wchomieniu dutej Iub
zlotonej apiikacji. JeSli taldy ci na oszczgdzeniu W e g o bajta pamivi, koniecme kdzie
zamajomienie siq z tcrminarni powiqzanymi z typarni danych. Ponadto w przypadku
jawnego deklarowania miennych jako utywaj@cychokreSlonego typu danych, interpreter
jczyka VBA ju2 na etapie kompilacji mote wykonaf dodatkowq walidacje M~ddw,kt6re
s a w przeciwnyrn przypadku trudne do zlokalizowania.

W tabeli 8.1 zawarto typy danych wbudowane w jqzyk VBA. M o h a tet zdefiniowat
niestandardowe typy d ~ y c h ktdre
, ornbwiono w dalszej czqtci rozdziah w punkcie
zatytulowanym ,,Typy danych definiowane przez utytkownika".

Tabela 8.1. Tjpy danych wbudowane wJpzyk VBA


Linba
Typ danych Zakrcs wartoid
uewanych bajtbw
Byte I bajt Od 0 do 255
Boolean 2 bajty True lub Fzlse
Inteper 2 bajty Od -32 766 do 32 767
Long 4 bajty Od -2 147 483 648 do 2 147 483 647
Single 4 bajty Od -3,402823E38 do-1.401298E-45 (dla wartdci ujemnych)
Od 1,401298E-45 do 3,402323838 (dla warto9ci dodamich)
Double 8 bajtbw Od -1.79769313486232E308 do -4,94065645841247E-324
(dla wartoki ujemnych)
Od 4,94065645841247L-324 do l,79769313486232E308
(dla wartotci dodatnich)
Currency 8 bajt6w Od -922 337 203 685 477,5808 do 922 337 203 685 477.5807
Geclmal 14 bajt6w +I-7922816251 4264337593543950335 (bcz EqSci d2iesi$lnej)
+/-7.4228162514264337593543950335 (z 28 rniejscarni
po pnecinku)
Date 8 bajt6w Od I stycmiaO1OO mku do 3 1 gmdnia 9999 roku
OSject 4 bajty Dowolne adwolanic do obicktu
String 10 bajtow + dlugoSE Od 0 do w p~irfbliteniu2 miliarddw
(mirnna dhgoSC) Id~cucha
String DlugolC lahcucha Od 1 do w pnybliteniu 65 400
(stata dlugoe)
Y a r l ant 16 bajtbw Dowolna warto96 aumeryczna mnicjsza od maksymalnej
(Zliczbami) warrdci zakresu lypu danych Onuble
Variant 22 bajty + dlugoSC Od 0 do w przybli2cniu 2 rniliardb
(ZC znakami) lahcucha
Zdcfiniowany Zmimna Zrnienia siq zalcmie od e l e d
pncz ctytkownika
Rozdzial8. + Podstawy programowania w jezyku VBA 195

Typ danych Declml wprowadzono w Excelu 2000, dlatego nie mote by5 stosowany
r popnednich wersjach apllkacjl. Jest to nle+pmy typ danych. poniewat w+aStiwle
nle jest motliwe jego zdeklarowanle. Tak naprawde jest to pocflyp typu Variant. Aby
zamieniC typ danych Variant na typ Decimal, konlecmejest u*ie funkcji CDecjezyka VBA.

Zamyczaj najlepiej posluZyC sig typem danych, ktdry zajmuje najmniejsq liczbp baj-
t6w i jtdnoczdnie obshguje wszystkie dane, kt6re zostanqz nim powiwne. W trakcie
pnetwamnia danych przez interpreter jpzyka VBA szybkoSC dziatania zalety od liczby
bajtow b~dpcychdo dyspozycji. fnnymi stowy, im mniej bajt6w utyjq dane, tym sqb-
ciej interpreter jqzyka VBA uzyska do nich dostpp i j e przetwony.

Poniewa Excel przy oblicmiach wykonywanych w arkuszach poshguje sip typem


danych Double, w celu uniknigcia utraty dokhdnosci warto przy prretwarzaniu wartoSci
liczbowych za pomocqjpzyka VBA utywat tego typu danych. W przypadku prretwa-
nania liczb calkowitych motna utye typu Integer,jeSli masz pewnode, t e wartdci nie
p r z e k z q liczby 32 767. W przcciwnym razie nale2y zastosowat typ danych Long. Pny
uzywaniu numerbw wierszy arkusza Exccla naleq zastosowaC typ danych Long, poniewat
ich liczba przekracza maksymalnp wartog zakresu p o w m e g o z typern danych Integer.

O M l a n k w y d a j d typu danych V d a n t
Aby pnekonaC sie, czy typ danych o d g p a wetnq roe, stworrykm ponltszq procedure wykonujqcq
w rarnach petll kllka warto5ciowych obllczefi i wyswietlajqcq catkowity czas pnetwarzania:
Sub TimTest (
Dim x As Integer. y As Integer
Dim A As Integer. B As Integer, C As Integer
O i m 1 As Integer, j As I n t e r
Dim StartTine As D a t e . EndTim k Date

a
-
Zapisuje czas pazittkouy
S t a r t T i m Timer
Wykonuje k i l k a o b l i u e r l
x-0
Y - 0
- -
For 1 1 To 5000
For j 1To 5000
A - x + y + t
e - y - x - 1
C - x - y - i
Next j
Next i

a
-
iobiera koricouy c z a s
EndTim T i w r
W y k l e t l a calkouity u a s wyratony w sekundach
MsgBox Format(EndTirre - StartTim?. "0.0')
Erd Sub
W molm systemie wykonanle p m d u f y zaJ+ 5.2 sekundy (czas mote byC lnny w zaleinofci od
srybwci promora). Nastepnle wylqqlern inrtrukcje D i m deklaruJqcetypy danych. Omacza to,
te zamienlkm Je na komentane popnez urnleszczenie apostrofu na pocz$ku katdego wiersza.
W efekcle Interpreterjezyka VBA uiyl domy5lnego typu danych Variant.
Pmame W a n l e pmcedury zaJ6-o14,7 sekundy, cEj(l bwdu prawie bzy razy dkttej nit wmfniej.
Wnlosek lest prosty. JeSli z a l e j cl, ahy aplikacje napisane w Jezyku V6A dzlataty szybko, naleiy
zdeklarowaC mienne!.
Skorosryt zawierajqcy kod frddlawy msjduje sie na d&qczonym dysku CDROM.
196 CzeSt Ill Jezyk Visual Basic for Appflccltions I

Deklarowanie zrnlennych
lefli nie zdddarujaz typu danych dla zmiennej, interpreter poshky siq domySlnym ty-
pem V a r i a n t . Dane przechowywane przy W c i u typu danych Variant sq jak kameleon:
zrnieniajq sw6j typ w zalehoSci od tego, w jaki sposbb sq przetwarzane. Ponitsza pro-
I
cedura demonstruje, w jaki spos6b mienna mote ppnjmowat r 6 h e typy danych:

---
Sub VariantDwno(
HyVar '123"
UyVar MyVar / 2
RyVar "Wynlk: ' & MyVar
nsghx MyVar
End Sub

W proccdune VariantCero zmimnej MyVar poczqkowo pqpisano tr6jmakowy laticuch


Nast~pnielhcuch podzielono przez dwq co spowodowalo, t e zostal uSty liczbowy
typ danych. P6biej miennq Mylar pohlaono z Mcuchem, w wyniku czego typ danych
ponownic staf siq taricuchoyrm, lnmukcja MsgBox wySwietla ostatacrnq postaf Mcucha
Wynik: 61.5.

Dodatkowe pmblemy m i m e z typem danych Variant demonsbuje nastqpuj~capro-


cedura:

--
Sub VartantDemo2()
MyVar "123'

-
HyVar MyVar + MyVar
MyVar 'Wynik: " d HyVar
Msghx MyVar
End Sub

W oknie komunikatu wstanie wyiwietiony Mcuch Mynit: 123123. Prawdopodobnie


nie tego siq spodziewalel. W przypadku typu danych Variant pmechowujqcego laficuchy
tekstowe opentor + dokonuje ich pohczenia.
(

OkreSlanie typu danych


Aby okr&lid typ danych zmiennej, naleky uiyt fimkcji TypeName j e y k a VBA. Ponitej
zawarto zmodyfikowanq wersje poprzedniej pmcedury:

-
Sub VariantDwnoZO
HyYar "123'
Wsghx
HyVar - TypeNametHyVar)
Pjvar / 2
Wsghx
HyVar
Hsgbx
- TypeName(bVar
"Nynik: ' & HyVar
TypeNarn?(~FyYar) . ~ . .
I

Hsgbx MyVar
End Sub
-.
.
W tej e j j i pa kazdej iashukcji przypisaniajest wySwietlany typ danych miennej HyYar.
I
Najpienv mienna przeehowuje Mcuch, nastqpnie jej typ danych m i d sic na Double,
wreszcie na koncu ponownie anienna jest typu kiticuchowego. ' . i1
. .
. - - . . +-... . .. ~ .. .. . ... ~ *
I
Rozdziat 8. Podstawy programowania w jezyku V M 197

Dzicki j~zykowiVBA konwenja typdw danych niezdeklamwanych miennych odbywa


sip autamatycmie. Races ten rno* sic wydat prostym mnviapniern problemu, ale nale-
GpamiCt&, te odbywa sip to kosztem s&bkoki i ~&iekszaiej zajptolci pamicci.

Szcqblnie wartokiowym nawykiem jest deklarowanie katdej mimnej pned jej uiyciem.
Deklaraja zmimnej pnekazuje intetpiWfowi jezyka VBA jej nazwp i tn, danych. Dziqki
deklarowaniu miennych uzyskuje sip dwie podstawowe korzysci:
Programy dzialujq srybciej i d e h n i e j korystajq r pamieci. DomySlny typ
danych Variam powoduje, t e interpreter jpzyka VBA wielokrotnie wykonuje
czasochtome sprawdzenia i -a wipcej pamipci, nit jest to konieczne. Jesli
interpreter m a typ danych, nie musi go okreSlaC i mote wykorzystat pamipf
w iloSci wystarczaj~cejjedynie do zapisania danych.
Unika si~probfemdw miqzanych r Mcdnie wprowad-onyrni na-?.vamimiennych.
W tym prsypadku zakhda s i ~t,e jest uiywana opcja Dpt;on E x ~IiC Ir e
wymuszajqca deklarowanie wszystkich zmiemych (zapomaj s i z~zawartoiciq
nasypnego podpunh). Zal6my. t e utywasz nierdeklarowanej zmiennej

-
o nazwie CurrentRats. W okreilonvm mieiscru o r o c e d w wstawiasz instrukcie
pnypisania CurentRate .075. ~'bardzd trudna do Gkrycia niepoprawnil '
wprowadzona nazwa zmiennej prawdopodobnie spowoduje wygenerowanie
p m z procedw nieprawidtowych wynikbw.

Wymuszanle deklarowania wszystkich zmiennych


Aby wymwid deklarowanie wszystkich W a n y c h miennych. w module VBA w pierw-
szym w i e m nale2-y zastosowat nastepujqcq instrukcjq:
Option Expllctt

Instrukcja spowoduje zamymanie pmgramu za ka2dyrn razem, gdy interpreter jpzyka


-
VBA naootka zmienna kt6rei nie zdeklarowano. Intemreter wvrreneruie komunikat Medu
iprzed &owieniern iperacji koniecme b e i e jej zdekla&&ie.

@> Aby rnld pewnoa, te Instrukcja Optim E x p l i c i t zostanie autornatycmie wstawiona


u katdym n o w module VBA. nalety wtqc* op4. Require Vanable Declaration
w zakladcs Edltufokna dialogowego Options edytora Visual Basic. Usilnie namawlam
do wykonanla tej operacji.

Zasiqg zmiennych
Zusiw'en zmimnj o)rrcfla sip moduly i procedury, w kt6rych rnotna jq zastosowat.
W tabeli 8.2 wymieniono typy zasitgu miennych, z M6rych motna korzystak.

Uwaga dotyuqca przykWAw zawartych w tym mdzlale


W tym rozdlale ramieszmno wide mykbddw kodu dr&dwego kzyka VBA, zazwyczaj ma&
cych postaE nleskompllkowanych procedur. mt
ady w Jak najpmstszy sposdb dem0nStrUjq
r 6 h e zagadnienia. WlekszoSC z nlch nle wykonuje zadnych szczegdlnie wartoSciowych zadan.
Tak naprawdq zadania te c m o mom mstaf wykonane w inny spos6b. lnnyrni stowy, prrykiaddw
nie nalety stosowaC podmas programowanla. W kolejnych rozdziatach zawarto znacznie wiqcej
pqdtnyjch pnyklad6w koddw irbdlawych.
-
198 CzqfC Ill + Jezyk Visual Basic for Applications

Tabelo 8.2. T ~ p zaslegu


y zmiennych
- ---

Zasifg Spos6b dcklsrowsnia zmiaanej w m i e u


Pojedyncza procedura - zmienne lokalne Zawarcie w procedurrc inmukcji Dim lub Static
Pojedynczy rnodul -zrniennc obowipujqce Umieuczenie instmkcji D i m lub Private pned picnvm\
na obszarze calego rnadulu proceduw modutu
Wszystkie moduty -zmienne publicme Urnieszczenie instrukcji Pub1 i c przcd pic-proceduq
modulu

W kolejnych podpunktach doldadniej zostanie omdwiony katdy typ tasipgu.

Zmienne lokalne
Zmienna lokalna jest m i e m q deklarowanq wewnllpz procedury. Zmienne lokalne mogq
by6 w a n e wylqcmie w procedurn, w ktdrej zostaw zdcklarowane. Po zakonczeniu
procedury mienna lokalna przestaje istnied i Excel zwalnia zajrnowanq przez niq pami&.
JeSli zalety ci na utrzymaniu pnez zmlennq pnechowywanej wartoScl, nalety
zdeklarowaC jq przy u ~ l stowa
u kluuowego Static. Zapoznaj sle z zawartosciq
podpunktu "Zrnienne statyczne" zamieszczonego w delszej czeSci rozdziatu.
Najczgtsy sposdb deklarowania miennej lokalnej polega na umieszczeniu instrukcji
D i m pomipdzy instrukcjami Sub i End Sub. Instrukcje D i m za~wyczajsq umieszcmne bez-
pofrednio po instrukcji Sub i pned kodem trddtowym pmedury.

Instmkcja D i m jest sh6tem od angielskiego slowa Dimemion (mmiar). W starszych


wersjach jpzyka BASIC byla stosowana wytqcznie do deklarowania ronniardw tablicy.
W jqzyku VBA stowo kluczowe Din shiky do deklarowania dowolnej z-iennej, a nie
tylko tablic.

Ponibza procedura utywa szelciu lokalnych zmiennych zdeklmwanych prry utyciu


instrukcji Dim:
Sub HySubO
D i m x As Integer
D i m First AS Long
Cil [nterestRate As Single
Cin 7odaysDate As Date
Gin UserName As String * 2C
G i m HyValue
[W tyn miejsc; znajduje sic kod irodlwy procedury.]
End Sub

Ostatnia instrukcja D i m nie deklaruje typu danych, a jedynie name miennej. W efekcie
zmienna staje sip zmiemq typu Variant. Nawiasern mdwiqc, przy uiyciu instrukcji D i m
rnolna t c t zdeklarowai: kilka miemych. Oto p n y h d :
D i m x As Integer, y As [nteger, 2 As Integer
Dim First As Long. Last As Double
Rozdzid 8. + Podstowy programowania w jeryku VBA 199

Ima metoda okre4lania typu anlennych


Podobnie jak w przypadku wlgkszoki odmian jezyka BASIC, t a w jqzyk VBA umoFliwia dodanie
do nazwy zmiennej znaku IdentytTkujqcego typ danych. Przyktadowo poprzez ddqczenie do n a
zwy zmiennej MyVar znaku % motna zdeklarowaCJqjako zmiennq typu I n t e g e r :
Dim UyVarX
Znaki deklarujqce typ danych dostepne sq dla wiekszoSci typdw danych jezyka VBA. Typy danych
nieznajdujwe sie na liscle nie posiadajq takiego znaku.

Typ danych Znak deklnrujqcy typ danych


Integer X
Long L
Slngle !

buble #
Currency @
String S
Taka metoda deklamwania typ6w danych wtaSehvie jest pozostafoSci~jezyka BASIC. Lepie]
deklarowd zmlenne ptzy utyciu metod omdwionych w tym rozdziale. Znaki deklarulqce typ da-
nych zostaty wyrnienione tylko na wypadek spotkania sie z nimi w starszych programach.
-
W pneciwierSshvie do kilku kzyk6w, jezyk VBA nle umotliwla deklarowania g m ~
-< zrnlennych utyvaj!qcych okrellonego typu danych popfzez oddzielenie ich prz'ecinkami.
Przyktadowo ponitsza instrukcja, pornimo te jest poprawna, nie dekiaruje wszystkich
zmiennych przy utyciu typu danych Integer:
O t m 1 , j. k As Integer
W przypadku jezyka VBA tylko zmlenna k bqdzie typr Integer. Pozostate zmienne
zostanq zdeklarowane przy utyciu typu Variant. Aby zdekla- zrnienne i,j i k
jako zmienne typu Integer, nalea uw
nastepujqcej instmkcji:
D i m i As Integer. j As Integer. k As Integer

JeSli a i e n n a zostanie zdeklarowana jako lokaia, inne pmedury zawarte w tym sa-
mym module bedqmogly utyC zmiennej o identycmej nazwie, ale ka2dy jej egzemplarz
bdzie unikatowy w rarnach pmcedury. w ktdrej go zdefiiiowano. Zazwyczaj zmienne
lokalne sq najefektywniejsze, poniewai po zakodczeniu wykonywania procedury inter-
preter jpzyka VBA zwalnia pamieC przez nie -%

Zmienne obowlqzujqce na obnane cdego rnodulu


Jeili chccsz, aby m i e m a byla dostqpna dla wszystkich procedur moduh, wystarcry
deklaracjp aniennej umieSciCprzedpierwszq procedurqmoduh (na zewnqtrz wszelkich
procedur lub frmkcji). W poni2szym pnykladzie instrukcja D i m jest pienvsq instmkcjq
m o d u h Dostcpem do zmiemej Currentvalue dysponuje m b w n o procedura MySuS, jak
i YcurSub.
200 CzedC Ill Jazyk Vlnrol Basic for Applications

Dlm Currentvalue as Integer

Sub HySubO
[ W t y m m l e j s c u m a ~ d u ~ e s i e k otr6dlowy.l
d
End Sub

Sub Yoursub( )
[W tym miejscu znajduje s i t t o d 2rklct)wy.I
End Sub

Wartoid ztnienmj dost~pncjw calym module nie nnienia sie pa Fakohczeniu wykonywa-
nia procedury. Wyjatkiern jest sytuacja, gdy procedufa jest zatnymywana przy utyciu
instrukcji End. Gdy interpreter jezyka VBA napotka instrukcje End, wszystkie mienne
dostqpne w module utracq swoje wnndci.

Zmlenne globalne
Aby udosypnib anisma wszystkim procedurom zawanym we wszystkich modulach
VBA projektu, nalety na poziomie moddu zdeklarowaC a i e n n a przy utyciu stowa
kluczowego Public zarniast instrukcji Dim. Oto przykM:
a Public CurrentRate as Long
-

Konwencje dotyqco nanv anfmnych


Nlektdrzy prograrnlScl nadajq zrnlennym takle nazwy. aby wystarczyt rzut oka do zldentynkowania
typu danych. Osobikie niezbyt cz-yto posluguje s& takq ponlewaf uwetem, te pogarsra to
czytelnoSt kodu Wdlowego. Jednak moiesz do]& do wnicsku, ie w twoirn przypadku jest p'rydatna.
Konwencja nazywanla zmiennych uwzglgdnla zastosowanie w nich standardowego pnedrostka
doionego z malych Ilter. Je911 na prrykiad mas2 do czynienla re miennq typu Boolean okreflajqcq.
czy skoroszyt zosta) zagsany, mofeu nadaC jej nazw? bJestZapisany. Tym spombern oczywiste
bqdzie, t e zrnlenna jest typu Boolean. W ponitszej tabeli ymienlono kllka standardowych przecC
rostk6w typdw dan)ch.

Typ danych Pdrostek


Boolean b
Integer i
Long 1
Single s
Double d
Currency e
Oate/Tim dt
String str
objea *j
Yar?ant v
Zdefiniowany p m z utytkownika u
Rozdziat 8. + Podstawy programowonia w jqzyku VBA 201

Sjowo kluczowe Publlc udostqpnia m i m q CurrentRate katdej pmcedurze projekru,


nawet tawartej w jego innych moduhch. Insbukcja ta musi zostat wstawiona przed
p i e m - proceduq modulu. Tego typu deklaracja musi pojawit sip w standardowym
module VBA, a nie w kodzie Zr6dtoym moduh arkusza lub formularza UserForm.

Zrnienne statyczne
Z r n i e ~ estatyczne to szcng6lny pnypadek zmiennych. Sq deklarowane przy utyciu
slowa kluczowego Static na poziomie procedury i utnyrnujq swoje wartofci po zakon-
cteniu jej wykonywania (chyba t e procedura zostanic zakohczona instrukcja, End). Oto
przyktad:
Sub Mysub(
Static Counter as Integer
[W tyn mlejscu znajduje s t e kod tr6dlwy.l
End Sub

Zastosowanie statych
WartoJt zmiennej czesto sip zmimia w trakcie wykonywania procedury. Z tego wta6nie
powodu element ten nosi nazwp zmiennej, Czasami koniecme jest odwolanie sip do
niemiennej wiutoici lub hicucha, ktbrym nadano nazwt. W tym przypadku mamy do
czynienia ze sraiq.

Deklarowanle stalych
State sq deklarowane pw utyciu instrukcji Const. Oto kilka przykladbw:

-
Const NuiQuarters as Integer 4
- -
Const Rate

Pub1i c
.0725. Period 12

Const AppName
-
Const ModNam as Strlng "Hakra budletu"
as String - 'Ppl ikacja budtetu"

W dmgim prrykladzie nie zostai zdeklarowany typ danych. W konsekwencji interpreter


jqzyka V3A o l d l a go na podstawie wartdci. Typem danych zmiennej Rate jest Double,
natomiast zmimnej Perlod -
Integer. Poniewat wartoit stakj nigdy sip nie mienia,
zwykle zdtklarujeaz jg pnypisujqc o M l o n y typ danych.

Stale, podobnie jak mienne, posiadajq zasiqg. JefIi s t a h ma byt dostqpna na obszarze
pojedynczcj procedury, w celu pnypisania jej mli stakj lokalnej nalety zdeklarowat jq
po instrukcji Sub lub Function. Aby udostcpnit rrta1q wszystkim procedurom modutu.
naleky zdeklarowat jq przed pienvsq proceduq modulu. Aby udostqjnik stalq wszyst-
kim modulom skomzytu, naleZy utyC shwa kluczowego Pub1 i c i zdeklarowat jq przed
p i e m q proceduq rnoduh. Oto pnykhd:
Publlc Const InterestRate As b b l e - 0.0725
202 CzeJC Ill + Jezyk Visual Basic for Applications

Stosowanic w kodzie k6dlowym stalych zamiast m a l e wpmwadronych wartoki lub


taf~cuchdwjest znakomitq praktykq programistycmq. JeSli na pnyklad procedura musi
kilka razy odwolaC sip do okreilonej wartofci takiej, jak stopa procentowa. lepiej zde-
klarowaC wart036 jako stalq i zamiast jej wartoSci w wyrateniach u w namy. Dzieki
temu nie tylko kod krMtowy kdzie czytelniejszy, ale t& powinna sip nvipkszyd +atwoSf
jego rnodyfikacji. Zamiast kilku instrukcji koniecme w i e modyfikowanie tylko jednej.

Zastosowanie predefinfowanych stalyc h


Excel i jpzyk VBA oferujq wiele predefiniowanych stalych, ktbrych rnotna utywad bez
upmdniego deklamwania. Aby z tych stabch skorzystad, nie jest koniecme pomanie
ich wartosci. Rejestrator makr zanvyczaj zamiast wartofci poshguje sic stalymi. W celu
ustawienia poziomej orientacji strony dla aktywnego arkusza poniisza procedura konysta
z wbudowanych stalych (xl Lavdscape):
Sub SetToLandscape(
Activesheet .PageSeruo.Orlentation
End Sub
- xllandscape

Stah xlLandscape odkrykm w tmkcie njestrowania rnakra. Poza tym informacje na jej
temat malaztem w systernie pornocy. Po uaktywnieniu opcji Auto List Members, p n y
wprowadzaniu kodu fr6dkwego czpno motna uzyskaf pomoc. W wielu przypadkach
jezyk VBA wyiwietla listq wszystkich stalych, ktdre mogq byC pnypisane do wlakiwofci.

Rzeczywiq wartoSciq statej xlLandscape jest 2. I N I ~wbudowanq sta$ mieniajqcq


orientacjp strony jest stata xlportrai t majqca wartoit 1. OczywiScie jesli zastosujesz
wbudowane state, nie bedzie konicczna znajornoif ich wartolci.
Narzgdde Object Browserw skr6cle omdwlane w mzdziale 7. wyswietla Ilstq wszystkich
cw stalych Exala I jqzyka VBA. Aby otwomf okm nar2edzia. w e6ytor-z~Wsvsl Basic
nalety wcisnqt klawisz F2.

Zastosowanie lahcuch6w
J e y k VBA, podcbnie jak Excel, urno2liwia manipulowanie zarbwno liczbarni,jak i tekstem
Oaricucharni). W przypadku jpzyka VBA m o a a wyr6tniC dwa typy ldcuch6w:
W faricuchy o stalej dugdci deklarowane pny utyciu SciSle okrellonej liczby makbw
(maksyrnalna dhgosf lancucha wynosi 65 526 znakdw),
fahcuchy o niennej dhcgdci, M6m teoretycmie mogq zawiemd do 2 miliard6w
mak6w.
Katdy znak Mcucha wymaga 2 bajt6w. Dodatkowa niewielka przest1ze6 potnebna jest
do p~echowywanianaglbwka katdego Iahcucha Podczas deklarowaniu miennej WICU-
chowej przy utyciu instrukcji Dim, znajqc diugdt Wcucha, m o h a jq ok~eSliC(ldcuch
o stakj dtugdci) lub urnotliwit interpretmowi jezyka VBA wykonanie zadania w spodb
dynamicmy (laficuch o zmiennej dhgoki).
1 Rozdziat 8. + Podstowy programowanio w jezyku VBA 203

W kolejnym plyktadzie zmiennej MyString prypisam typ String i maksymalnq d h g o e


wynostaa 50 mak6w. TYPdanych String- -jest te2 definiowany dla zmiennei YwrString,
a i dhg&i Mcucha nie jkst stah:
D i m MyStdng As String 50
Dim Yourstring As String

Zustosowonie dot
Oczywi.4cie do przechowywania dat mote zostaC utyta zmienna Mcuchowa, ale w tym
przypadku nie jest rnotliwe wykonywanie obliczeh. Do przetwarzania dat lepiej zasto-
sowat typ danych Date.
Zrnienna, dla kt6rej zdefiniowano typ Date, zajmuje 8 bajt6w pmipci ijest w stanie prze-
chowywaC daty z pmdztah od 1 stycznia 100 roku do 3 1 grudnia 9999 roku. Jest to prawie
10 000 lat, c y l i o h w zupehoSci wystarczajqcy nawet w pm/padku najbardziej agresyw-
nych prognoz fbnsowych! Typ danych Date nadaje sie te2 do pmchowyvania danych zw$-
m y c h z czasern. W jmku VBA daty iczas q umieszaanepomiedzy dwoma makami #.

s??.
CW,'.'
-
Przedzlat dat o b s l o ~ n przez
y lea& VBA lest maunle wlekszv nlt w pmadku Excela,
'
gdzle rozpoczyna s k od1stycGia 1900roku. A zatem dla p & n o f & nie naleiy
w arkuszu stosowa6 dat wykraczajqqch poza przedziat dat obstugiwany przez Excel.

Oto k i k a prrykted6w deklarowania zmiennych istaiych typu Date:


D i m Today As Oate
D i m StartTlme As Date

-
Const FlrstDay As Date
Const Noon #12:00:00#
- #1/1/2001#

Stale typu Date zawsze sq definlourlrne przy utyclu krmatu mleslqc/dziet5/mk.


n-t jesl w systende daty sq @Metlane w innym fonnacle (np. dzlet5/mlesip/rokl.
I - -

JeSli do wy4wietlmia daty utyjesz okna kornunikatu, data zostanie pokazana zgodnie
z systemowym formatem M t k i e j daty. Podobnie czas jest wyhvietlany z uwzgl&ieniern
systemowego foml~tuczasu (12- lub Z C g o d z i ) . W celu miany ustawieri systemowych
nalety w oknie Punel sterowanin wybrat pozycjp Opcfe regionalne ijpykowe, a na-
stqpnie uaktywnit d l a d l q Opcje regionnlne (system Windows XP).

Blqd Excola zwiqzany z datq


Powszechnie wiadomo, k Excel rawiera Wqd nvlqzany z datq. ApllkacJa rvlepopawnle zaklada.
te mk 1900jest pn-my. M i m k w mku 1903 nie byto daty 29 lutego, Ewcel akceptuje poniFsza
formutq I jako wynik Mwietla date 29 lutego 1900 mku:
-DATTn[1900:2:29)
Jfayk VBA nle zawiera taklego b@du. OdpowledniMern excelowskieJ funkcjl DATA Jest w jezyku
VBA funkcja Dateserial. Ponlisze wyratenle poprawnle m c a date 1 marca 1900 roku:
OateSerial(1900. 2. 29)
A ratern system numer6w setyjnph mlqzany z dataml nle Jest takl sam w Excelu 1 Jezyku VEM.
Oba sptemy zwracajq r6tne wartofcl dla dat z pnedrlahi ad Istyemla do 28 lutego 1900 ruku.
204 CzefC 11+ Jqzyk Visual Basic for Applications

Na dotwzonym dysku CDROM majduje slp stwoizony przeze mnie dodatek Excela
0 MI. Me?ded Date Fu"C~~ON Navis%nyw jeqku "81. dodaje do Excela now.
funkcje arkusza. M6re urnotliwiajil hvorzenie l o n u t prz3twarzajqcych daty spczed
1 stycmia 1900 roku.

Instrukcje pnypisania
Imwukcja przypisania jest insmkcjq jezyka VBA wykonujqcq matematycme obliaenia
i ptzypisujqq wynik zmiennej lub obidaowi. System pomocy Exccla definiuje wyrn-ie-
nie jako kornbinacjp s t w kluczowych, operatorbw, micnnych i stalych zwracajqcych
laticuch. liczbq lub obiekt, Wyratenie takie mote wykonad obliczenie, manipulowac
makami lub tcstowat danc.
Nie moglemtcgo lcpiej zdefiniou&. Wiqksz& p pro~ramistycznychopartych na j p k u
VBA jest zwi-ch z twomiem wym&i o m wykqwaniem i ufllwaniern w nich W d w .
Jefli umiesz OvonyC h u l y w Excelu, bez h p a t u Edefiniujesz wyratenia w j ~ k VBA.
u
W prypadku formub arkuswwej Excel wygwietla wynik w kombrce. Z kolei wyratenie
jqzyka VBA mote zostat pnypisane zmiennej lub u v e jako wartog wMciwofci.
W jqgku VBA funkcjp operators przypisania spehia mak r6wndci. P o n h j podano
kilka pnykfadowych instrukcji przypisania (wy-nia majdujq sit po prawej smnie
maku rbwnohi):
x - 1

% - *-
x-x+l
Filmen
(y 2 ) 1 (Z * 2)
FlleOpen -
True
Not
Range('Rok') .Value -
FlleCpen
2004

Wyratenia moga by2 bardm &tone. Aby MekszyE u y t d n o X duglch wyratefi,


molna zastosowaC sekwencje pnenoszpq je do nastepnego wiersza. zbtonq
ze spacjl i maku podkre3lenla.
Czpto W e n i a q funkcjarni. Mogq to byd wbudowane funkcje j ~ k VBA,
a funkcje
m VBA. Wbudowane funkcje j w k a VBA
arkusza Excela lub niestanchdowp funkcje j
zostanq omdwione w dalszej czpSci rozdzidu w punkcie ,,Funkcjc wbudowanen.
W jezyku VBA operatory odgrywajq kluczowq rolg Dobne mane operatory opisujq
matematyczne operacje, w tym dodawanie (+), mnotenic I*), dzielenie (I), odejmowanie
(-), potqgowde
. . . ~- (-1 i icaenie i e u c h 6 w (&).Do mniej m+nych operatq6w d e b mak
\ {stosowany pnydzieleniu liczb catkowitych) i operator Mod (uQwany w arytrnetyce
modulo). Operator Nod zwraca resztc z dzielenia jednej liczby pmez drum. F'qhtyldadowo

Jmk VBA obsluguje tet takie same operalory pdwnania, jak form* Exceta. Sq to
operator hvndci (-), wiekszy n i t (>I,mnicjsg nit (c), wiqks~ylub rdwny (r)mniejszy
,
lub rbwny (<-) i nier6wnoSci (<>). Pondto jezyk VBA ofemje pehy zestaw operator6w
logicrnych pakazanych w tabeli 8.3. Aby uzyskai: szczegbtowe i n f m a c j e o tych ope-
ratorach, nalety posIu2yC siq systemm pomocy jpzyka VBA.
Rozdziat 8. + Podstawy programowania w jpzyku VBA 205

Tabda 8.3. Operstorylog a VBA

Operator Pnanaczenie
Ncgacja logicma wyatcnia
Koniunkcja lbgicma d w h h wyra2d
Suma logicma drv6ch wyratm
Nicr6wnowatn0&5logicma d\vdch wyratcfi
R6wnowatno96 logicma dw6ch wyratcn
lmplikacja logicma dw6ch \r?.ra.tch

KolejnoX stosowania opmtor6w w jezyku VBA jest d o k d n i e taka sama, jak w Excelu.
Oczywiicie w celu zmiany naturalnej kolejnofci ich utywania motna zastosowa6 na-
aiasy okragk.
Ponitsza instrukcja u w a operatora No: w celu wyiwietlania i ukrywania linii siatki
w aktywnyrn oknie. WlaSciwoSf DisplayGridlines pobiera wart056 True iub False.
A zatern zastosowanie operatora Not spowoduje. zmiane wartoici z Fa 1 se na True iub
z True na Fa1se.
ActTveWindow. DlsplayGridl ines - Not ktiveClindow. DisplayGrldl ines

Kolejne wyratenie wykonuje operacj~u2ywajqcq logicmego operatora And. Instmkcja


MsgBox wyiwietli wartodf True tylko wtedy, gdy arkusz Arkuszl jest aktywny i aktywna
kombrka majduje sie w w i m I. Jejli jeden z dw6ch wamnkbw nie zostanie spetniony,
instrukcja MsgEiox wyswietli wartoSC Fa1 se.
HsgRox Activesheet .Name - "Arkuszl' And Activetell .Row - 1

P o n b z e m n i e wykonuje opcracjp z logicmym operatorem Or. lnst~ukcjaElsgBox


wyjwietli wartofc True tylko wtedy, gdy aktywnyrn arkuszern b@zie arkusz Arkuszl
Iub Arkusz2.
Hsgbx ActiveSheet.Name - "Arkuszl' 3r PctiveSheet.Name - "Arkusz2"

Tablice
Tablica jest grupq elementhw tego samego typu posiadajqcych wsp6lnq nazwp. W celu
odwoiania sic do okr&lonego elementu tablicy nale2y uZyt jej nazwy i numeru indeksu.
prsVMowo mo2m zdefiniowat tabliq i3020n~z 12 zmiennych Mcuchowych, z kt6rych
k&da odpoyiada nanvie miesiqca. JeSli tablica zostanie nazwana MonthNames, w celu
odwo$n& sie dn jej p i m z e g o elementu n a l e utyt instrukcji MomhNa~s(O1,do drugiego
elementu MonthNams(1) i tak dalej at do mstrukcji MonthNames(l1).

Oeklarowanie tablic
Padobnic jak zwykla zmienna, tablica m a wstat zdeklmwana p r y ugrciu instmkcji
Dim lub Public. Istnjeje t e t motliwofC okreSlenia liczby element6w tablicy. W tym celu
w nawiasie o k & p nakty podaC numcr p i m z e g o indeksu, sbwo kluczowe To j numer
206 CzqfC Ill + Jtzyk Visual Basic for Applications

ostatniego indeksu. Oto p y k d dcmonstmjllcy, w jaki sposdb zdeklarowad tablicp


zlotonq dokladnie ze 100 liczb calkowitych:
D i m MyArray(l To 100) As Integer

s> Pny deklarowaniu tablicy konieczne Jest podanleledynle g6mego indeksu, Interpreter
].Ma VBA ptzyjmuje domy5lnle, h dolny indeks ma wart056 0. A zatem efekt
dzialanla dwdch ponitszych instrukcjl jest taki Sam:
D i m MyArray(0 To 100) As IntEger
D i m MyArray(100) A61 Integer
W obu przypadkach tablica sktada sig ze 101 element6w.

JeSli chcialbyl, aby w przypadku wszystkich tablic, w kt6rych deklarowany jest tylko
gbmy indeks, interpreter jpzyka VBA stosowal dolny indeks o wartohi 1, przed pierwsq
procedurq moduh naleg wstawiC nastqpujqq instrukcjp:
Option Base 1

Deklarowanfe tablic ~[elowyrniarowych


Przyktady z popmdniego podpunktu demonsaowaly tablice jednowyrniarowe. Tablice
jezyka VBA mogq mice maksymalnie 60 wymiar6w, ale rzadko stosuje sip wipcej nit 3
wymiary (tablice tr6jwymiarowe). Ponitsza instrukcja deklaruje dwuwymiarowq tablic~
zlotonq ze 100 liczb calkowitych:
D i m MyArray(1 To 10. 1 To 10) As Integer

Takq tablice moima traktowat jak m a c i m 10 x 10. Aby odwdat sip do okdlonego
elementu tablicy dwuwymiarowej, koniccme jest podanie dwdch numezfiw indeksu.
P o n h j pkazano, w jaki sposdb uqdat dostep do wartofci zawutcj w powyzvej tablicy:

Tablicp Wbjwymiarowq motna z kolei W w a t jak smhian. Jednak nie jestem w stanie
wykonat wizualizacji rozmiesmnia danych tablicy posiadajqxj +ej nj2 trzy wymiary.

Tablica dynamicrna nie posiada z g h y okrelloncj liczby elementbw. Jest deklmwana


p n y utyciv pary pustych nawias6w oloaglych:
D i m MyArrayCI As Integer

Jednak przed zastosowanicm w kodzie Wdtowym tablicy dynamicmej konieczne jest


W c i e instrukcji ReDim (Iub i n s t d c j i ReOirn Preserve, jeSli chcesz poimtawie w tablicy
jej dotychczasowe wartolci), Mra infomuje interpreter jezyka VBA o liczbir elemen-
t6w tablicy. I n s d c j a ReOlm micniajqca rozmiar tablicy make wstd utyta dowolnq
liczbp r a y .

Tablice pojawiq sip w dalszej c@ci rozclziah p r q o k a j i omawiania p G w podpunkcie


,Wykonywanie bloku instrukcji w ramach ~ t l i " .
Zmienne obiektowe
Zmienna obiektowa jest miennq reprezentujqcq cab obiekt taki, jak na przyklad zala-cs
lub arkusz. Zmienne obiektowe sq-e z dwdch powoddw:
w naczqcy sposbb mogq uprofcit kod frbdlowy,
mogq n v i ~ k s z yszybkoft
t wykonywania kodu tr6dbwego.

Z r n i e ~ obiektowe,
e podobniejak nvykie mienne, sq deklarowane przy W c i u instrukcji
D i m lub Pub1 lc. Ponijsza instmkcja deklaruje zmiennq InputArea jako obiekt Range:
Public InoutArea as Range

Aby przekonat siq, w jaki spos6b m i e r n e obiektowe upraszczajq kod ~ l o w y nalety


,
zapomad siq z poni2sqprocedurq napisanqbez utywania miennych obiektowych:
Sub WjVarO
Worksheets('Arkusz1') .Ranget'Al'l - -
.Value 124
Worksheets('Arkusz1') .Ranget'Al').Font.Bold
WOrksheets(*Arkuszl'l .Range['Al')
End Sub
- True
.Font. Italic True

Kolejna procedura wprowadza wartdf do kombrki A 1 arkusza Arkuszl aktywnego sko-


rosqtu, a nastepnie zawartdf kombrki fomatuje za pomoq pogrubienia i kunywy.
Napisanie takiej procedury wymaga wprowadzenia sporej liczby znakbw. Aby jak najmniej
m q c z y t palce, objqtoX procedury motna m i e j s z y t , stosujqc zmiennq obiektowq
Sub ObJVarO
--
Dim MyCell As Range
Set MyCell Yor!~heetst'Artuszl') .Range("kl')
HyCel1 .Value U4
--
Mycell .Fmt.Bold True
MyCel1 .Fwt.Ital fc True
End Sub

Po zdeklarowaniu miennej MyCell jako obiektu Range, instrukcja Set pnypisuje do niej
obiekt. Zamiast dhdsLcgo odwdania postaci Worksheetsl("Arkuszl" 1. Range( "Al') w ko-
lejnych insfmkcjach b@zie motna zastosowaCjej.prostsq wersjq, czyli Mycell.

Po PIZyPIsaniuobiektu do nniennej Interpreterj@yka VBA mat. m a m i e taWej z niego


skorzystat nit w ptzypadku normalnego odwolania dlutszej postaci, kt6re musi zostaC
prreanalizowane. kSll szybkoSC o d w a duiq role, nalety posbtyE sle zrniennyrni
obiektowymi. Jednym r elementdw majqcych wpkyw na szybkoSC jest pr?ehvananle
maku kropkl. Katdorazowo, g&y Interpreter napotka mak kropki, takjak w ptzypadku
cdvdanla Sheets(1) .Range( 'Al"), tracony Jestczas na przeprowadzenieJego analizy.
Zastosowanle zmlennej oblektowej pozwala aedu.kowa6 l l w kropek. Im mniej kropek.
tyrn krbtszy czas przetwarzanla. KoleJnarnetoda zr;jlqkszenla szybkoScl'wykonywanla
kodu Zr6dtowego polega na zastosowanlu konsbukcJiWith . . . End With, Mdra takle
mniejsza Ilczbt: prretwarzanych kropek. Konstrukcja'zostanie orndwlonh w dalszej
eqSci mzdn'alu: - ..
. .. :. .. . .,. . .

PnydatnoSC zmiennych obiektawychstanie sip widaema pny okxzji omawiania p ~ t l i


. .
w dalszej cqSci rozdzialu ..
-
208 Czgit Ill + J& ViHIol Basic for Applications

Typy danych definiowane przez uiyfkownika


J p q k VBA umotliwia wonenie niestandardowych typ6w danych lub inaczej -
danych defniowanych p m uryrkawnika (zagadnienie bardm podobne do rckord6w
w jqzyku Pascal lub rtrukrur jpzyka C). Typ danych definiowany przez utytkownika
mote u W i C pracp z kilkoma typarni danych. JeJli na pizyklad aplikacja przetwarza
dane na temat klient6w. m o h a stworzyd niestandardowy typ danych o nazwie Custo-
mer Info o nastppujqcej postaci:
Type CustanerInfo
Colnpany As String * 25
Cmpany As String * 15
Reglonbde As In-r
Sales As Long
End Type

Mestandardowe t y danych
~ sq deflniowane na poczmu rnodulu pned jakqkolwiek
pocedurq.

Po shvomniu niestadadowego typu danych, w celu zdckfarowania zmiemej tego typu


nalety uZyC insmkcji Dim. Zazwyczaj jest definiovwana tablica. Oto prrykiad:
Dim C u s t m r s ( 1 To 100) As CustunerInfo

Katdy a 100 element& tablicy sklada sip z cdcrceh kompomnt6w (drreSlonych w nie-
standardowym typic danych CustmrInfo). Do okreJlonego komponenm nkordu m o h a
sie odwotaC w nastqujqcy spodb:
Custanrs( 1) .-ny
-- -
"WarzMzla Pane"
C u s t m r s ( 1) .Contact 'Jan Nowak'

tustmrs(l).Sales -
Custcmrs(l).Regiontode 3
150677

M o a a tez przetwarzaC element tablicy jako do&. Pnykfadowo w celu skopiowania


informacji z Custmrs(1) do Custaners(2) naleky u2y.5 nastppujqcej instrukcji:

Powytszy pnyklad jest r6wnowhty nastqn?jqcmu blokowi instrukcji:

Funkcje wbudowahe
.~,
J@ YBA, p b b n i e j& wi&sm&j&& program~wa& oferuje wbudowane funkcje
upraszczajqcc obticzenia i opracje. C w t o funkcje umo2liwiajq wykonanie operacji,
Mdrych d i z o w a n i e w pneciwnym razic byhby trudne, a nawet nicmotliwe. Wiele
hnkcji jeyka VBA jest podobnych do funkqi arkusza Excela (czasami sq identycme).
Na przyktad funkcja UCase jpzyka VBA zmieniajqca male maki hicucha na dutc jest
odpowiednikiem excelowskiej funkcji LITERY .WIELKIE.
Rozdzid 8. + Podstawy progromowania w iezyRu VBA 209

a4 W dodatku B zamieszczono kompletnq liste funkcji jezyka VBA wraz z krdtkim opisem
katdej z nich. Wswtkie funkcje zmtaty doktadnie objaSnione w m
jezyka VBA.
.,i wmocy

Aby uzyskaC llstg funkcjl Jgzyka VBA w trakcie wprowadzanla kodu frddiowego, naleiy
wpisaC sbwo kluczowe VBA, a za nim kropkg. Edytor Visual Basic wySwietli list?
wszystklch podlegajwh mu elementbw. w tyrn funkcje (rysunek 8.1).Obok funkcji
jest widocma zielona ikona. JeSli okaze si?, te lista sig nle pojawla, nalety sprawdzid,
czy uaktywniono opcje Auto List Members. W tyrn celu z menu Tools nalety wybrae
porycje Options i wisnqC Enter.

Ryrunek 8.1.
W)&wietlenie
listy funkji
jeIyka VBA w oknie
edytora VIsual Basic

Funkcje jezyka VBA sq stosowane w wyrateniach w bardzo podotjny sposbb, jak funk-
cje formui arkuszowych. Funkcje j ~ z y k aVBA mogq bye na pnyklad zagnietdtane. Oto
prosta procedura obliczajqca p n y uiyciu funkcji Sqr dla anicmej pienviastek kwadra-
towy, zapisujqca wynik w innej miennej i wy3wietlajqca go:

--
Sub 'Shcd4oot( 1
Myvalue 25
SquareRoot Sqr(HyYa1ue)
Psgfiox SquareRoot
End Sub

Funkcja Sqr jqzyka VBA jest odpowiednikiem excelowskiej fivlkcji arkusza PIERWIASTEK.

W instrukcjach i e q k a VBA motna q w a C wielu, ale nie wszystkich funkcji arkusza


Excela. Obiekt WorksheetFunct~on zawarty w obiekcie Appl~catian przechowuje
wszystkje funkcje arkusza, Mre m o h a w y w h f .z procedur j w k a VBA. Aby w in-
strukcji j w k a VBA utyC funkcji arkusza, wystarczy przcd j e j n- urnieSciC nastp-
pujqce slowa kluczowe:

W ponitszym przykfadzie zademonstrowano, w jaki sposdb w proccdune jezyka VBA


zastosowad funkcjp arkusza Excela. Rzadko utywana M c j a RZYMSKIE (ang. ROT.4N)
Excela zamienia liczbq arabsb na rzymskq
210 CzgJC Ill + Jezyk Visual Basic for Applications

Funkcla MsgEox
Funkcja MsgBox jest jednq z najpiqdatniejszych funkcjl jezyka VBA. W M d u pnyktadach zamlesmo
nych w tym rozdzlale p o s b w a do wySwletlenla wartogci mienne]. Funkcja ta c q s t o jest dobrym
odpowlednlkiem prostego niestandardowego okna dialogowego. Poza tym lwietnie sprawdza sig
pmy wykrywaniu i usuwaniu btedbw, poniewat w celu wstrrymanla wykonywania kodu frbdtowego
i wygwietlenia wyniku obllczenia lub instmkcji przypisania moina jq wstawid w kaidej chwiii.
WigkszoSC funkcji mraca jednq wartold pnyplsywanq zmlennej. Funkcja nsgaox nie tylko m c a
wartosf, ale t e i wySwietla okno dlalogowe, dziqki ktdremu utytkownlk mote zareagowat. Wartog6
zwracana prrez funkcjg HsgBox reprezentuje dane wprowadmne pnez utytkownika w wyswietlonym
oknie dialogowym. Funkcja Msgbx M e zostaC utyta nawet wtedy, gdy nie zaleiy ci na odpwiedzi
uiytkownika, ale na moillwoSc1 wySwietlenla komunikatu.
Oficjalna skiadnia funkcji MsgBox zawiera pi# argument6w (te w nawiasach k w a d r a t o y h sg
opcjonaine):
PsgBox(kanunikat[, przyc~skiIC,tytull[. plikganocyl[, kontekst])
k m n i k a t (wymagany): kornunikat e w i e t l a n y w oknle dialogowym,
przyciski (opcjonalny): wartofc?okre9lajqca. jakle przyclskl I lkony Ue911 sq potrzebne)
pojawiq sie w oknie komunikatu (nalety u+ wbudowanych stalych. np. vbYesNo),
tytul (opcjonalny): tekst pojawiajqcy sig na pasku tytutu okna komunikatu; domyflnym
tytutem jest taricuch Micmsoft Excel.
p i i k p m y (opcjonalny): nama pliku pomocy pawiqzanego z oknem komunlkatu,
kontekst (opcjonalny): identylikator kontekstu tematu pomocy, ktdry zostanle wylwletlony.
Zwrdconq wartog motna przypisaC zmlennej, a samq funkcJe zastosowac?w insbukcji pnyplsanla.
W kolejnyrn przyktadzie wynik przyplsano zmlennej Ans:
Ans - -
HsgBox('Czy kontynuowat?", vbYesNa
IfAns vbNo Then Ex!t Sub
+ vbQuestlon. 'Powledz mi')

W przypadku argurnentu przyciski postutytem slg sumq hv6ch wbudowanych statych IvbYesNo
vwuestion). Zastosowanie statej vbYesNo spowoduje wygwietlenie dw6ch przycisk6w o namach
-
Tak i Nie. Dodanie stale] vbQuestion spowoduje Wwietlenle lkony pytajnika. Uzyskane okno
komunikatu pokazano na rysunku. Po wykonaniu piewszej instmkcji mienna Ans bedzle zawie-
rat jednq z dw6ch wartoki repezentowanych przez state vSYes i vbNo. W tym prrypadku, gdy

m
uiytkownik kliknle p q c l s k Nie, procedura zakokzy dzlatanle.

cv-

Aby uzyskaC wigcej Informacji na temat statych. naleiy zajrrd do systemu pomocy jgzyka VBA
zawlerajqcego listg wswtkich statych. ktdrych motna u w .

Sub Shokaomn( 1
Decvalue --
2001
RoMnValue Applicatiov .WorksheetFunction.Roman(DeCYalue)
Hsgbx RoranValue
End Sub

Po wykonaniu pwytszej procedury funkcja %gBox wygwietli hdcuch MMI. MitoSnicy


starych filmbw czpsto z przemtmiem stwierdzajzl, 2e Excel nie oferuje funkcji zamie-
niajqcej liczby nyrnskie na ich odpowiedniki arabskie.
Rozdziat 8. Podstawy progamowania w j&u VBA 21 1

Nie motna u2ywac?funkcji arkusza, ktbre majq swoje odpowiedniki w jpzyku VBA.
Pnykladowo interpreter jezyka VBA nie rnoze vlstosowaC funkcji arkusza PIERWIASTEK
(ang. SORT) Exccla, poniewat j ~ VBA
k posiada jej wlasna wersjp o namie Sqr. A zatem
ponihza insaukcja wygenemje Mqd:
MsgBox Appl ication .WorksheetFunction.Sqrt(l23) ' blqd
J& VBA umomwla twonenie nlestandardowych funkcjl arkusza dzlatajqcych
/ podobnie Jak wbudowane funkcJe arkusza Excela. Plsze o tym w rozddale 10.

Manipulowanie obiektami i zbiorami


Jako programista utywajqcy Excela mndstwo czasu spqdzisz na przenvarzaniu obiek-
tbw i zbiorbw. A zatern warto pomaC najwydajniejsze metody pisania kodu h6dtowego
rnanipulujwgo obiektami i zbiorami. Jptyk VBA oferuje dwie watne konstrukcje uprasz-
czajqce prace z obiektami i zbiorami:
m konstrukcjawith ... End With,
r konstrukcja Far Each . . . Next.

Konstrukcja Wlth ... End With


Konstrukcja oparta na insb-ukcjach With i End With umofliwia wykonywanie wielu ope-
racji na pojedynczym
. . . obiekcie. Aby wzurniec? zasady dziaiania konstrukcji With . . .
~ n Wlth,
d na P~cz$ekprzyjrzyjrny sip proced- rnodyfiujslcej wart046 pieciu wlaki-
woSci zwiqzanych z fonnatowaniem zamaczenia ( d i a d a sic, t e jest nirn obieM Range):
Sub ChangeFontl(
- -
Selection .Font.Mame "Times New Rman"
Selectlon.Font.Size 12-
Selectlon.Font.FontStyle "Bold Ital lc"
--
Selection .Font .Under11w xlllnderl IneStyleSIngle
Selection.Font .ColorIndex 5
End Sub

Procedura, kt* d z i h i e w e dokhdnie takie samo, mote mtaf napisana prry utyciu
konstrukcji With . . . End With:
Sub ChangeFontPO
- -
With Selectton.Font
.Flame "Tlmes Hew Rman'

- -
.Fontstyle "Bold Italic'
.Size 12
-
.Under1tne xlVoderlfneStyleStngle
.ColorIndex 5
End With
End sub
Niela6ny uwa?ajq, ts drugs wenja procedury jest mniej czytelna Nalety jednak pa- l
miptat. te celem b y b mipkszenic szybkoki. Rocedura z konstrukcjq With . . . End
W l t h macznie sybciej modyfikuje wartoSci kilku wt&ciwo6ci obiektu w por6wnaniu
zprocedurq, kt6ra w M e j instrukcji jawnie odwoluje sip do obiektu.
@$$' W prrlpadku mjssttmwie makra VBA, Excel u&wa konstwkcji Mi t h ... End Mi th
zawsze, gdy Jest to moiYlwe. Aby uryska?dobry pnyktad taklej konstrukcjl, w trakcie
o,sIan,a u s a dm n y ,tam stmnyz m n u ,ale, rejestrow,
wykonywane operaele.

Konsfrukcja For Each ...Next


Wiesz jut, t,zbi& to gnrpa po-nych zs ohobiekt6w. Przykladowo Workbooks j u t
zbiorcrn wszystkich otwartych obickt6w Workbook. Mozna utyC wielu innych zbiorow.
Aby konstrukcji For Each . . . Ned. nie musisz wiedzicf, ile elernmtbw majduje
sic w zbione.
Konstrukcja For Each .. . Next doskonale sprawdri sip, gdy t m b a wykonat okreflonq
operacjp na wszystkich obiektach zbioru lub tet dokonaC ich sprawdzenia, a nast~pnie
mnlitawaC zadanic w w i u o wybram byteria. Skladnia konsbukcji For Each . . . Next
jest nastppujqca:
For Each e l m t I n q w a
C instrukcjel
[ E x i t For]
[ instrukcjel
Next [elanentl
Ponitsm procedura ugwa konsrmkcji For Each . .. Next w c e h od*i siq do kaZdego
z szekiu element6w tablicy o stalej d l u m c i (po jednym na raz):
sub nacm10

-
Din HyArray(5) As Oouble
For 1 0 TO 5
EyArray(t) Rnd -
next i
For Each n I n MyArray
0ebug.Print n
Next n
End Sub

Nastqna pracedura prry Wciu konshukcji For Each . . . Next pnchvana zbi6r Sheets
z aktywoego s k o m :
Sub CountSheetsO
Otm Item as NorkSheet
For Each Item In ActivdJortboak.UorkSheets
n s g f ~ xIten.name
Next Item
End Sub

W wkcie wykonywania procedury funkcja &gBox wySwietla wartoX wMciwo6ci Name


katdego arlclrsza Jedli w aktywnym skoroszycie naajduje sip pi& arkuszy, funkcja MsgBox \
zostaoie wywdana p i e razy. /
Rozdzid 8. Podstowy programowania w Rzyku VBA 213

'sJPii
-
W popnednim przyktadzie Itemjest zmlennq oblektowq, a dokladniej m6wiqc
obiektem Worksheet. Me ma n L nadzwycrajnego w n m l e Item. Zamiast nlej
moina uzyf d m l n e j innej poprawnej nazwy zrniennej.
W nastppnym pnykladzie konstrukcja For Each . . . Next s h y do przehvorzcnia
wszystkich obiektbw zbioru Windows:
Sub HiddenWlndows( )
Dim! A11Visibls As Boolean

-
Dim Item As Windm
A l l V l s i b l e True

--
For Each Item I n Yindars
If t t m . V i s i b l e False Then
AllVIstble False
E x i t For
End If
Next Item
MsgBox A1 1Vlsible
End Sub

Po ukryciu olcna wart046 wMciwogci A1 1Visible zmienia sie na Fa1 se i petla For Each
. . . Next kodczy dzialanie. Okno komunikatu wykwietli wartog6 True, jekli wszystkie
okna b& widocme, lub False, gdy pnynajmniej jedno z nich zostanie ukryte. Instmk-
cj.1 E x i t For jest opcjonalna. Ofemje rnetodp wczelniejszego mkohczenia petli For
Each .. . Next. Zazwyczaj konysta sip z niej w pok.czeniu z konsmkcjq If . . . Then
om6wio1q w dalszej cqkci rozdziah.
Ponitej zawarto przyklad procedury zamykajqcej wszystkie skoroszyty z wyjqtkiem
aktywnego. Ptoccdura przy ugciu konstrukcji If . . . Then sprawdza katdy skoroszyt
zbioru Workbooks:
Sub CloseInActiwO
Dim Book as Workbook
For Each Book I n Workbooks
If Book. Name 0 ActiveWorkbook.Name Then Book.Close
k x t Book
End Sub

W ostatnim pnykladzie konstrukcja Far Each .. . Next jest wykonywma, gdy uQ+
kownik 2amaczy zakres kombrek:
Sub MakeUpperCase()
Dim Cell as Range

Cell.Valw
Rxt Cell
-
For Each Cell I n Selection
UCdse(Cell.'lalue)

End Sub

W tyrn przypadku obick Selection spehia funkcjp zbiom obiek6w Range, poniewai:
ka2da zamaczona korn6rka iest takm obiektem. Procedura S~rawdZakatda korn6rkp
w
i w celu zamiany z a q c h nicj mak6w na duiz ukywa &cji UCase j&ka VBA,
Korn6rki zawierajqce liczby nie sq uwzglcdniane.
I
21 4 CzeSC Ill + Jezyk Visual Basic for Applications

Sterowanie wykonywaniem procedur


W niekt6rych procedurach instrukcje pnetwarzane sq po kolei - od pienvszej do
ostatniej. Na przykhd rejestrowane m h zawsze dzialajq w ten spos6b. Jednak czesto
koniecme jest sterowanie wykonywaniem pmcedur popnez pominitcie kilku instrukcji,
wielokrotne priztworzenie niektdrych z nich i przetestowanie w w k 6 w okreflajqcych,
jakq czynndC procedura nealizuje jako nastqpng
W poprzednim podpunktie omdwiono k o n s m k c j ~For Each . . . Next, bqdqcq odrnianq
~ t l iW
. tyrn punkcie zostanq omdwione dodatkowe metody sterowania wykonywaniem
procedur jqzyka VBA. Oto one:
instrukcja GOTO,
m konstrukcja I f . . . Then,
konstrukcja Select Case.
a . ..
w ~ t l For Next.
petla Do While,
petla Do U n t i 1.

lnstrukcja GoTo
Najprostsza metoda sterowania programem polcga na tastosowaniu instrukcji GoTo. In-
strukcja po prostu przenosi wykonywanie pmgramu do nowej instrukcji, plzed kt6rq
musi znalett siq etykieta (ia13cuch tekstowy z dwduopkiem lub liczba bez dwuhpka).
Procedury j m k a VBA mogq zawierat dowolnq liczbp etykiet. Insbukcja GoTo nie mote
przenosit wykonywania programu poza obszar procedury.

W celu pobrania imienia utytkownika ponitsza pmccdura -a funkcji InputBox j w k a


VBA. Jegli imieniem nie jest Jan, procedura przejdzie do aykiety WrongNaw i zakoricq
,
dzialanie. W przeciwnym razie procedura wykona dodatkowe instrukcje. Insukcja E x i t
Sub koriczy p m e d u q .
Sub GoToOemo()
UserName -
Inputbx("%daj imie: " )
I f UserName 0 ';an" b e g Go70 ilrongNalre
Msgbx ('Witaj Jan.. . "1
[W tym miejscu znajdujq sie dodatkave instrukcje.1
E x i t Sub
WrongName:
Msgbx "Przykro m i , a l e t y l k o Jan mte t o uruchomit.'
End 5 ~ 3
I

Ta prosta procedura dziah, ale instrukcja GoTo powinna byE stosowana tylko wtedy, gdy
nie istnieje inna metoda wykonania operacji. Tak naprawdq jedynq syhlacjb w ktdrej
faktycmic koniecme jest utycie w kodzie Wdtowyrn jqzyka VBA instrukcji GOTO,jest
przechwyywanie Mqdow (rozdziai 9).
Rozdziot 8. + Podstawy programowonia w jezyku VBA 215

Nawiasem m6wiqc. w poprzednim prrykMzie wcale nie demonstrowalem pnydalnej


metody autoryzacji!

Konstrukcja If ... Then


Prawdopodobnie najczpkiej stosowanq konstrukcjq grupujqcq jpzyka VBA jest kon-
swukcja zloiona z instrukcji If i Then. Jest to jeden ze sposob6w wyposa2ania aplikacji
w motliwoSci podejmowania decyzji. Dobry rnechanim podejmowania decyzji to
klucz do twornnia udanych aplikacji. Podstawowa skiadnia konstrukcji I f . . . Then
jest nastppujqca:
If wdrunek Then instrukcJeJeil i-warunek prawdriwy -
[Else instrukcje-jefl f-warunek nfeprawdziwyl

Konstrukcja If . . . Then sfuty do warunkowego wykonania jednej lub wipkstej liczby


inmukcji, lnstrukcja Else jest opcjonalna. Po jej uwzglqdnieniu -jeSli dla sprawdza-
nego wanrnku uzyskana zostanie wartoSC False -
rnotliwe b d z i e wykonanie jednej
lub kilku instmkcji.

Ponitsza procedura demonstruje mtosowanie konstnrkcji If . . . Then bez instrukcji


Else:
Sub Greettiel( )
If Time c 0.5 Then Msgbx 'Witam przed poludnlm"
End Sub

W tym przykladtiejest pmovar;?any aas.Jpzyk VBA utywa systcmu numer6w seryjnych


powiqzanych z datq. Port dnia w y a h wartost ulamkowa. Przykladowo pdudnie jest
rcprezentowane pnez 0.5. Funkcja Time jezyka VBA m c a wartost reprezentujqcq
porq dnia odpowiadajgq czasowi wskazywanernu przez zegar systemowy. W pnykh-
dzie komunikat jest wygwietlany, gdy godzina mie pmkroczy pohdnia. JeSli aktualny
czas systemowy ma wart046 wipksq lub r6wnq .5,procedura zakonczy dzialanie i nie
zostanie wykonana h d n a operacja

Aby wySwietliC t a b popdudniowe powitanie, nalety dodaC kolejnq konstrukcjq [ f


. . . Then o postaci:
Sub GreetMe20
I f Time < 0 . 5 Then Msgbx "Witan przed poludniem"
;f Time r 0 . 5 Then Msgbx "Witm po poludnau"
End Sub

W drugiej konstrukcji I f ... Then zastosowakm operator >- (wiqkszy lub r6wny).
Konstrukcja uwzglpdnia pnypadek, te akurat b&ie dokladnie samo poludnie, na co sq
bardzo male szanse.

Kolejny pnyklad demonstruje zastosowanie konstrukcji If ... Then wraz z instrukcjq


Else:
Sub GreetMd( 1
If Tim c 0.5 Then Msgbx Y l t a m przed poludniem' Else -
nsgBox 'uitam po poludniu'
End Sub
216 Czee Ill + Jemk Visuol Basic for A~~lications

Wprowaddem lutaj ssakwcncj~pmniesienia instmkcji do drugiego wiersza. Tak na-


prawdq konstmkcja 1f . . . Then . . . El se jest jednq instmkcjq

Aby rozbudowad p m e c d u ~o obshgp m t c h warunk6w (np. poranek, popdudnie i wie-


.
a6r1, M a zastosowt m y konswukcje If .. Then lub zagnie&I2onq strukture If .. .
Then . . . Else. Pienvsza metoda jest prostsza:
Sub GreetM(
I f T i m c 0.5 Then HsgBox "Witam przed poludnim'
I f Time r 0.5 h d TIme c 3.75 Then Nsg&x 'Witam po crcludniu"
I f T i m * 0.75 Then HsgBox "Hi tam nleczorm"
End sub

WanoSf 0.75 reprctcntuje godzinq 18. czyli 3/4 doby. Takq p ~ dnia
e motna jut naqwad
wieczorem.

W pop&dnich pnykMach wykonywane q wszystkie instrukcje procedury, nawet gdy


zegnr wskazuje ranw poq. Wydajniejsta profedura W t i e zawierat smktuq kohcr;tcq
wykonywanie procedury, gdy w a m k hdzic mial wartoff True. P n y M o w o procedura
moZe p r a d pohrdniem wySwittlaC komunikat "Witan pczed poludnim', a nastepnie
konczyt dziahnie bez sprawdzanis I M ~ zbphych
c ~ wa~unk6w.W pnypadku procedury
tak matej, jak powy&a romice szybkoSci q bez maczmin. Jednak w bardziej zloko-
nych aplikacjach koniecme jest zastosowanie kolejnej skladni konstmkcji I f . . . Then:
!f wa& Then
[instrukcje-wykmpaneje?: I i-speln fm-wrunekl
[Elself wnwk Then
Ca l t e r ~ t ~ w r e ~ i n s t r u k c j e ] ]
[Else
[~l~fmtrvkcJeIl
End I f

Ponitej pokazano, w jaki spos6b nalety u2yC powytszej skladni w celu przebudowy
procedury Greet*:
Sub GreetHeSC )
I f Time < 0 . 5 Then
flsgBox W t m przed poludniem'
ElseIf T i m * 0.5 Pnd Time 0.75 Then
Msgs0x 'Hltm po poludnlu'
El 5e
MsgBox 'Hi tan wieczorem'
End If
End Sub

Gdy w pnypadku tej sldadni warunek bqdzie mial wart& True, zostanq wykonane in-
sfmkcje wantnkowe i konsbukcja If .. . Then zakdczy W a n i e . lnnymi h w y , pozostak
wanmki nie q sprawdzane. Co prawda, skMnia ta umotliwia zwiekmmie wydajnoki,
ale niewrry mogq m e , 2-coparty na niej kod kr6dbwy jest trudniejszy do mzurnienia.

Potktsza procedura dernomtruje kolejtq metodq kodowania powytszego pnykbdu. Za-


..
stosowano w niej konstrukcje If . Then .. . Else (bez i n m k c j i E l 5eIf). Procedura
jest wydajna i latwa do wrumienia. Nale2y zauwa2yC, 2e kakdej instrukcji I f odpo- i
wiada instrukcja End If.
Rozdziat 8. + Podstawy programowania w jezyku VBA 21 7

Sub GreetIIe6t)
If Time x 0.5 Then
MsgBax "Wltam przed poludnim'
Else
!f Time r 0.5 And Nme <
(1. i 5 Then
HsgBox "Witam po pofudniu"
Else
I f Time >- 0.75 Then
Ms@x "Witam wieczorem'
End If
End i f
End I f
End Sub

Ponikej zamieszczono kolejny p m t y przyktad z konstrukcjq I f . . . Then. Procedvra


prosi uiytkownika o wprowadanie wartoici dla z m i e ~ eQuantity,
j a nastqpnie w za-
leaosci od niej wygwietla odpowiedni upust. Zrniema Quantity zostata zdeklarowana
jako micnna typu Variant. Wynika to s&d, te jdli funkcji InputBox nie zostanie prze-
kazany argument, mienna Ouanti t y b~dziezawierala pusty Mcuch. a nie wartoft licz-
b o w h o c e d u a nie wykonuje tadnej i m e j kontmli Mqd6w. Nie sptawdza na przykjad,
czy wprowadmna wartoSC liczbowa zrniennej Quantity jest dodatnia.
Sub D~scountl(
D i m (hranrlty As Variant

--
D l m Diwount Cis Double

---
Quantity InputBox("Wpmdt wartoit: "I
If Ouantlty "'Then Exlt Sub
I f Quamity 0 Then Oiscount 0.1 --
I f Cucntrty
If Cuamtr ty
If Ouan:?:y -
25 Then Dlscount 0.15
50 Then Dlscount 0.2
75 Then Dlscounr D.25
Hsghx 'Upst : ' b Dl scount
End Sub
-
Funkcla Ilf jqzyka VBA
Jqzyk VBA oferule funkcj~I l f , akematymq w d ~ e ckonstrukcjl If .. . Then. Funkcja pobiera trzy
argurnenty I dziaia w sposdb bardro podobny do excelowskiej funkcja arkusza JEZELI. Skladnia
funkcjl Jest nastepljqca
I If (yy~a.?enie,c - ~ t - ~ ~ a z m a - z - w ~ o ~ c i ~d c- T~ .t ~ 1 ~ 1 ' ~ z a n a ~ ~ ~ wIse)
artofci~~Fa
wyratenfe (wymagany): wyratenie, Mdre zostanie sprawdzone,
CZ&! mld~ana-z-wrto~cFla-True[wymagany): wart& lub wyratenie zwracane, gdy wartogciq
wyra&ia m e True.
clr?Jf-&~ana-z-mrtoJcIaaFdIse (magany): warto&? tub wyrbnie mracane.
gdy wartcfclq yra.?enia hdzle False.
Ponilsza indNkcja demonstruJe zastwowanie funkcji IIf. Okno komunikatu wySWetia laficuch
Zwo, gdy komdrka A 1 jest plsta lub gdy znajduje sle w nlej zero, albo laficuch Rbzne od zera, jeSli
w kombrm A1 majdzie sle dowolna inna warta&?.
HsgBox !tf[RangeI'Alm) - 0. "Zero", 'Rbtne od zera")
i q ~zawsze
Trreci argument ( c z ~ ~ ~ - m i ~ ~ ~ z ~ w a r t o f cjest F d I swyllczany,
e) nawet je5ii wartoSclq
piemszego argumentu (wyralmle] bqdzie True. A zatern ponizua instrukcja wygeneruje bed, gUy
wartokiq n b w e zero:
HsgBox I I f [ n - 0. 0 . 1 # n l
I
21 8 Czee Ill + Jezyk Visual Basic for Applications i

.
Katda konstrukcja I f . . Then z a m w procedune jest zawszc wykonywana, dlatego I
I
wartoft zmiemej Discount mote sic mieniaf kilkakromie. Jednak kohcowa wartoSC jest
zgodna z oczekiwaniami.
Ponitsza procedura, ktbra jest modyfikacjq pop~edniej,utywa alternatywnej skladni.
W tym przypadku koficy dzialanie po wykonaniu bloku insnukcji realizowanych po
spehieniu warunku.
Sub D l scountZ( 1
D l m Quantity As Variant

--
D i m Oiscount As Double
Ouanti t y InputBox( "Wprcmvadi wartoit: "1
I f Quantity '"' Then Exit Sub

-
I f Quantity >- 0 And Ouantity < 25 Then
D l scount 0.1

-
ElseIf Ouantity c 50 h e n
Discount 0.15

Discount 0.2
ElseIf Ouantity
--
ElseIf Ouantity 75 Then
75 Then
End If
Oiscount 0.25-
MsgBox 'Upust: " d Discount
End Sub

Zagnietdtone sfn~kturyI f . . . Then uwatam raczej za niepowme. Z tego powodu


w?ywarn ich tylko w pnypadku plejmowania PTostYfh decyj i o charakmze dwuwarian-
towym. Gdy bzeba wybrat jednq z trzech lub wiekszej liczby altematywnych struktur,
c g s t o l e p s q propozycjq bpdzie konstrukcja Sel ec: Case. I
i

Konstrukcja Select Case


Konsmkcja Select Case przydaje sip, gdy a e b a dokonad wyboru spogrbd trtech lub !I
wiekszej liczby opcji. Sprawdza sic at w p w a d k u dwirch opcji i stanowi alternatywrq i!
propozycjq dla konstrukcji I f . . . Then . . . Else. Skhdnia konstrukcji Select Case
jest nastqpujqca: I
Select Case sprahdzane-wyrazenie
[Case 1ista-wrareti
Clnstrukcjel I
[Case Else
[dar(yJlne-instrukcjell
End Select

Oto wariant proccdury Greet* z poprzedniego podpunktu, w kt6ryrn zastosowano kon-


strukcjp Sel ect Case:
Sub GreetHeO
D i m tisg As String
Select Case Tim
Case Is
Msg -
< 0.5
"Witam przed poludnien"

-
Case 0.5 To 0.75
Hsg 'Witam po poludniu'
Case Else
-
Msg "Witam wieczorem"
Rozdziot 8. + Podstowy progromowania w j w k u VBA 2 19

End Select
nsgaox nsg
End Sub

Ponizj ramicszcmno modyfikowanq wersjp procedury Dl scacnt, w kt6rej utyto konstruk-


cji Select Case. Przyjpto, t e wartost zmiennej Quantl ty zawsze hdzie liczbq calkowit+
Dla uproszczenia procedury nic jest prreprowadzana kontrola btqdbw.
Sub Dl scoont3(
Dim Cuantity As Variant

-
Dim Discount As Double
Quantity InputBox('Wprowadf wartoft:
Select Case Quantity
")

Case " "


E x i t Sub
Case 0 To 24
-
Discount 0.1
Case 25 To 49
-
Discount 0.15

Case I s-
Case 50 To 74
-
Dl scount 0.2

-
75
Discount 0.25
End Select
,

Msgeox 'Upust: " & Dl scount


End Sub

Do odddelenia wielu warto9ci instrukcji Case mo&a u2yC maku przccinka W ponitsaj
procedurze zastowwano funkcjp WeekDay j~zykaVBA okreslajqcg czy aktualny dziefi
jest soboQ tub niedzielq (finkcja WeekDay m6ci wart036 1 lub 7). Na kodcu procedura
wyswietli odpowiedni komunikat.
Sub Greetuser(
Select Case W O a y (Nw)
Case 1. 7
MsgBox "Uarny j u t weekend. '
Case Else
MsgBox "To jeszcze n l e weekend. '
End Select
End Sub

Oto kolejny wariant tej sarnej procedmy:


Sub Greetuser0
Select Case WeekDay(Now)
Case 2. 3. 4. 5. 6
UsgEox 'To jeszcze n i e weekend.'
Case Else
UsgBox 'Mamy jut weekend.'
End Select
End Sub

Pod btmkcjqCase m&na umie9FiC dowolnqlhbq hhkcji, k t h rnwzosta6 wy-


konane,jeSli dlapnypadku uzysb sip warto& True. JcSli dla przypadku utyjesz tylko jednej
w q i , jak pop& pnybdzie, motm jq umi&iC w tym samym wiersm, co
dowo kluckwe Case (nie d & y jednak zapomnied o wstawicniu sepamtm instrukcji jpy-
ka VBA, c z y l i d m k a ) . Dziqki ternu kod Zrbdbwy jest bardzicj nvarty. Oto prcykhd:
I
CZQJCIll + Jg~ykViud Basic for A p p l i c a t i o n s
I
220
I
Sub Oi scnmt3(
Dim W a n t l t y As Variant

-
0im Discount As Dwble
b a n t i t y Inputbx('kprmadi
Select Case Guantity
wartoit: " I

Case "": E x i t Sub


Case 0 To 24: Discount -- 0.1

Case I s
End Select
-
Case 25 To 49: Olscount
Case 50 To 74: Oiscount
75: Discount

MsgBox "Upust: " K Discount


-- 0 15
0.2
0.25

End Sub

Interpreter m a VBA korlczy przetwarzanie konstrukcji Select Case naty-chrniast


m , po vzyskaniv dls pt-qpdku unoW Trve Aby rtqc q k a 6 maksynaba M a j n o e .
jako plerwszy nalety sprawdz~fnajbarddej prawdopadobny pnypadek.

S t n ~ h r Select
y Case tet mogq by6 zagniedtane. Ponitsza procedura sprawdza status
o h a Excela (maksymalizowane, minimalizowane tub nonnalne), a nastcpnie wyiwietla I
odpowiedni komunikat. JeSli status okna Excela jest normalny, p&edura spraw&i status
aktywnego okna, nastepnie wyiwietli kolejny komunikat. i
Sub AppWlndowO
Select Case Pppl icatlon.WindovState
Case x l ~ x l m i z e d :HsgBOx '&no apl l k a c j i j c s t zmaksymal lzcwane. "
II
I
Case xlMinimized: Hsg&x 'Ckno apl l k a c j i j e s t minimalizmane."
Case x l ~ o n a a:l Hspsox "Qna apl iltacjl m standardowq uielko5.t .'
Select Case k t 1 veWi ndow .Wt ndawStste
Case xlMaxlmlred: nsgbx "Okno skoroszytu j e s t m t s y m a l izonane. "
Case xltllnimlzed: Ms~Sox"Ckm skoroszytu j e s t minimallzcwane."
Case x l Normal : HsgBox "Okno skoroszytu ma standardowa wiel to5.t. "
End Select
End Select
End Sub

Stopied zagniddtrnia komukcji Select Case m e by5 dowolny, ale nalezy u p i C sic,
i
I
I

tc katdej instrukcji Select Case odpowiada instrukcja End Select. Powytsta procedura
dernonstruje re2 prrydatndC wci& Mdre zwiekszajq przejnysto4f struktury kodu tr6-
dlowego. Sp6jrz na tq s a q procedur~pazbawionq wcieE:
Sub PppUlndm()
Select Case Appl teatton .HindowState
Case xlMaximized: MsgHox 'Uno apl i k a c j l jest m a k s p l izmane. "
Case xlMinimized: MsgBox 'Otm apl i k a c j l j e s t minimal tzrmane."
Case x l N o m l : HsgBox "Okno apllkacjl ma standardma wielkoft.'
Select Case PctiveUlndm.WindowState
Case xlHaxlmlzed: t4sgBox %no skoroszytu j e s t malsymalizmne.'
Case xltiinimized: bgBox 'Olno skorosrytu j e s t minimalizmane."
Case xlNormal : MsgBox 'Otna skoroszytu ma s t a n d a r b 4 KielkoSt.'
End Select
End Select
End Sub

Czy nic jest to doh! n i e m m i a i e ?


I
Rozdzial8. + P o d s t w promamowania w iewku VBA 22 1

Wykonywanie bloku instnrkcji w ramuch petti


Petla jest pmcesem wielokmhlego wykonywania bloku instrukcji. Liczba wykonari ~ t l i
mote byf z g6ry mana lub olaeJlana p m z wartoX miennych pmgrarnu. Ponitsza proce-
dura wstawiajqca do zakresu kolejne wartoSci liczbowe demonstruje to, co okreslarn
mianem zlej pqtfi:
Sub BadLoop()
O i m StartVal As Integer
Dim NumToFi 11 As Integer
O i m Cnt As Integer
StartVal --
1
NumToF111 100

- -
ActIveCell .Val w StartVal
Cnt 1
Dohother :

- -
AEtlveCell .Offset(Cnt. 0) .Value StartVal * Cnt
Cnt Cnt + 1
I f Cnt c NunToFt 11 Then GoTo DcAnother Else Exit Sub
End Sub

Procedura do przechowania wartofci pocqtkowej i calkowitcj liczby wypehianych


komdrek u2ywa dw6ch niennych (sq to odpowiednio StartVal i NumToFi11). Petla do
sterowania wykonywaniem pmgramu m a instrukcji GoTo. JeSli wartoJf n i e n n e j Cnt
przechowujqcej liczbp wypehianych kom6rek jest mniejsza od wartosci wprowadzonej
przez u2ytkownika. program ponowvnie przejdzie do etykiety DoAnother. Skoro wirc
procedura dziala zgodnie z oczekiwaniami, dlaczego jest przykladem zlej pptli?
ProgramiSci zazwyczaj knywiq s i na ~ widok instrukcji GOTO,gdy jej utycie nie jest ab-
solumie koniecme. Zastosowanie instrukcji GoTo w roli wtli jest zaprzeczcniem pro-
gramowania strukturalnego (zapomaj s i z~ &warto~ciqramki ,,&ym j&t programowhie
~ k t u r a l n e ? " ) .Insmkcia GoTo nacmie mmza czytelndt kodu tr6dkwcg0, ponicwat
zapisanie takiij pgli pr+ wyciu wciH 4&zy jest pkwie niemoiliwe. ona ad to tego typu
niestrukturalna lytla sprawia, t e pmcedura jest podama na Mdy. Co wipcej, zastoso-
wanie wielu etykiet generuje kodfrbdlony .,spaghetti", kt&-y posiada mikomq s t r u m
lub tadnq i jest wykonywany w do4t przypadkowy spos6b.

Zc wzglpdu na to, te j@yk VBA ofemje kilka instrukcji spehiajqcych hnkcjq struktu-
ralnych pqtli, przy tworzeniu mechanimu podejmowania decyzji prawie w og6le nie
bqdde koniecmie konystanie z insmkcji GoTo.

Ppfla For ... Next


Najprostszym typem dobrcj petli jest petla For . . . Next. Oto jej sktadnia:
-
For Jicznik w r t d f p o u d t k ~To rmrt3it-kokowa [Step warto$k-krokul
[instmkcjel
[Exit For]
[~nstmtcje]
Next [ l i c m ~ k l
222 CzefC Ill + Jqyk Visual Basic for Applications

hym jsst proyanawanls struhturalne?


Majqc kontaht z m s t a m i , wczeinie] czy pdfniej p m a s z pojecle ppgTamowania s t ~ M v d n e g o .
Dowiesz sig tei, t e pmgramy strukturalne sq lepsze od prograrndw pozbawlonych struktury.
A zatem czym jest programowanle strukturalne I czy jezyk VBA je oferuje?
Zgodnie z podstawowym zabteniern tego progiamowania, procedura lub segment kodu &Mowego
powinien posiadac?tylko jeden punkt wejSclowy i jeden wyjyfdclowy. lnnymi sbwy, zawartoSC kodu
frddlowego powinna byt? niezaletnq jednostkq I sterowanie programem nle powinno pnechodziC
do jej Srodka lub z niego wychodzie. W efekcie programowanie strukturalne wyklucze stosowanle
i n s t ~ k c jGOTO.
l Strukuralny kod frbdlowy jest wykonywany w sposdb uponqdkoweny I tatwy do
pneanalizowania, w pneciwlefistwie do chaotycmie przehvarzanego kodu Lrddlowego "spaghetti".
Program strukturalny jest tet latwiejszy do przejrzenia i zrazurnienia oraz prostszy do zrnodyfikowania.
Jezyk VBA Jest jezykiern stnrkturalnym. Oferuje standardow konstrukcfe s t ~ k t ~ r a l ntakie, e jak
If. . . Theo . . . Else i Select Case orst petle For . . . Next. Eo U n t i l i Do While. Ponadto w pelni
obstuguje twonenle kodu Mdtowego dzielonego na rnoduly.
JeSli jesteS poczqtkujqcyrn programistq, od ram wyr6b w soble nawyk hvonenia p~pi-a~nych
prograrndw strukturalnych.
.
..
Ponitej zawarto pnyklad pqtli For . Next n i e u t y w a j ~ c opcjonalnego
j slowa klu-
czowcgo Step lub instrukcji Ex1 t For. Proccdura sto razy wykonuje instrukcjp Sum
Sum + Sqr(Count) i wySwietla wynik, czyli m e pienviastk6w kwadratowych p i e r w q c h
-
stu liczb catkowitych.
Sub SumSquareRoots(
Dim Sum As Double
O i m Count As Integer
Sum-0
Far Count -
1 To 100
Sm Sun + Sqr(Count1
Next Count
MsgMx Sum
End Sub

W tym pnyktadzie pocqtkowq wartogciq anicnnej Count (licmik pvli) jest 1, kt6ra po
ka2dcj iteracji jest zwickszana o jeden. Zmiema Sum jedynie przechowuje sump pier-
wiastkdw kwadratowych oblicwnych dla k&dej wartoki z m i m e j Count.

Ucmlk mtll For . . . Next jest zwyktq mlennq. Z tego powadu rnofna zmienlC jego
warto, wewnqtrz ,ken,,kodu f&hwego, zwartego pom ,l instrukcjami
For i Next. Jednak nie jest to zalecana praktylca, gdyi moie wywotaf nieprzewidywalne
efekty. Tak napraw* powiflienel: sig upewnie, fe kod fr6dlowy nie rnomkuje wartosci
licmika wtli.

Aby pornin@ niekt6re wartoSci pqli, motna zastosowat slowo klucmwe Step. Ponizej
procedure z poprzedniego przykladu zmodyfikowano w taki sposdb, te oblicza sum$
pienviastk6w kwadratowych dla nieparrystych l i m b z przedziah od 1do 100:
Sub SmXdSquareRwts:
Dim Sum As Double

- -
Dim Count As Integer
Sun i]
For tamt 1 To 1DD Step 2
Sum Sum + Ssr<Cwnt)
Rozdzial8. Podstowy programowanla w jezyku VBA 223

Next Count
nsgBox Sum
End Sub

WartoSciq poczqdcow~zmiennej Count jest 1, a nastppnie liczby nieparzyste 3, 5, 7 itd.


Ostatniq wartoSciq zmiennej Count jest 99. Po zakohczeniu wykonywania pqtli zmienna
Count pryjmie wartoit l O l .
Ponitsza prucedura wykonuie to samo zadanie. co procedura BadLoop zamieszczona na
pocqtku bodpunkhl ,wykoiywanie bloku instrukcji w ramach petli';. Jednak usunqtern
z niej instrukcjq GoTo, zamieniajqc zlq pqlp na d o b q o p a na strukturze For . . . Next:
Sub GoodLoop( )
Dim StartVal As Integer
Dim NunToFill As Integer

--
D i m Cnt As Integer
StartVal 1

-
NunToF111 100
For Cnt 0 To NumF111 1 -
ActlveCell .Offset(Cnt. O).Value - StartVal + Cnt
Next Cnt
End sub

Pqtle For . .. Next mom tet zawierae jednq lub kilka instrukcji Exit For. Po naptkaniu
takiej instrukcji p ~ t l anatychmiast konczy dziabmie i przekazuje sterowanie instrukcji
majdujqcej sie za instrukcjq Next aktualnej pqtli For . . . Next. Ponitsy przykhd de-
monstruje zastosowanie instrukcji Exit For. Procedura okreila, ktdra komdrka kolumny
A aktywnego arkusza mwiera najwipksq wartoft.
Sub Ex1tForDemo()
Dim NaxVal As Double
Oim R o n As Long

--
O i m Thetell As Range
MaxVal Applicatlm.hrksneetFunttfon.Max(Range['A:A"))

- -
For Row 1 To 65536
Set TheCell Range("Al").Qffset(Raw
I f TheCell .Value MaxVal Then
-
1. 0)

MsgBox "Maksymalna wartoft znajduje s l e w wlerszu " d Row


TheCell .Activate
Exit For
End If
Next Row
End Sub

Maksymalna wart066 kolumny jest okreSlana p n y W c i u M c j i MAX Excela. Wartogt


jest nasbpnie przypisywana mienmj MaxVal. Pgla For . .. Next sprawdza komdrkq
kolumny. JeJli wartog sprawdzanej kom6rki jest r6wna wartoSci zmiennej MaxVal, in-
strukcja E x l t For koficzy wykonywanie procedury. Jednak pned zakoficzenim pptli
procedura informuje utytkownika o pdoteniu wiersza, a nastqpnie uaktywnia komdrke.

Procedura Ex1tForOemo zostah zamiesactona w celu prczcntacji metody k o h c m i a p r l i


For . . . Next. Jcdnak nie stanowi najefektywnicjszego sposobu uaktywniania mjwiqk-
szej wartoSci b s u . T o samo realizuje nastepujqca instru&cja:
224 CzgfC Ill + Jgryk Visual Basic for Applications

W popradnich przykhdach zastosowano stosunkowo pmste pqtle. Jednak motna w nich


zawmt dowoh~+li&qinstukcji, a nawet zngiieZdta6
- c . . . Next jedne w drugich.
~. t l For
-

c . . . Next inicjalizujqce tablice 10 x I0


Oto pnyklad zawierajw zagnietdtonc ~ t l 'For

Sub NestedLoops(
D i m MyArray(1 to 10. 1 to 10. 1 t o 10)

For t --
Otm 1 As Integer. j 4s Integer. k bs I n t e r
1 To 10

-
For j 1 To 10
For k 1 To 10
MyArray(1. j. k) - -1
N e d 1:
Next J
Next 1
End Sub

PqtIa Do Whi 1e. w przeciwiehwie do pqtli For ... Next, jest wykonywana po spelnieniu
okrrJlonego warunku MoZe mieC dwie n w p u j a c e skMnie:
Da m i l e wrunek]
[ instrukcjel
[Ex1 t001
[fnstrukcjel
Lacp
lub
Do
C ins tmkcjel
[Exlt Do1
C instrukcjel
Loop [While wmnek?

Jak motna zauwatyd, jezyk VBA umotliwia umieszcanie instrukcji warunkowej While
na poczqtku lub na koticco petli. Rdtnica pomiqdzy obiema skiadniami polega na mo-
mencie sprawdzania warunku. W pizypadku pienxszej skladni zawartogt pqtli m o t e
nigdy nit zostad wykonana. Z kolei w prypadku drugiej skhdni zawartoSf p ~ t l zosta-
i
nie zawsze wykonana pnynajmniej raz

Poniszy p n y M u r n mi Do While opartej na pimvszej skladni:


Sub MileDernoO
Activecell .Value 0 -
Do M i l e Not IsEmpty[ActiveCell)

ActiveCell.Offset(1. 0l.Select
LcoD
End Sub
Rozdziat 8. Podstawy programowania w jezyku VBA 225

Rocedum jako punktem pocqtkowym posiuguje siq aktywnq kombrka, a nastqpnie przc-
mieszcza sip w d6l kolumny, wstawiajqc zero do aktywncj komdrki. Po W d e j iteracji
~ t l aktywnq
i kombrkq staje siq nastppna komdrka kolumny. Pptla jest wykonywana do
rnomentu stwierdzenia przez funkcjq IsEmpty j~zykaVBA, te aktywna komdrka jest pusta.

Kolejna procedua konysta z p@liDo While opartej na drugiej skhdni. Pqtla zostanie zawsze
wykonana co najmniej raz, nawet jdii poczqtkowa aktywna komdrka b ~ d z i epusta.
Sub DoWhileDmZO
Do
-
ActiveCell .Value 0
ActiveCell .Offset(l. O).Select
Loop While Not isEmptytActiveCel1)
End Sub

Ponitej zamieszczono nastqpny przyktad utycia petli Do While. Procedura otwiera plik
tekstowy, wczytuje k&dy wiersz. zamienia znaki na dute i zapisuje je w aktywnym ar-
kusnr, pocqwszy od kombrki A1 w d61 kolumny. Procedura u w a funkcji EOF jpzyka
VBA zwracajqcej po osiqgnicciu kohca pliku wartoit True. Ostatnia instrukcja zamyka
plik tekstowy.
Sub OoWhileDernlO
Dim LtneCt As Long

-
Open 'c:\dane\plIk-tekstcwy .txtm For Input AS #I
CineCt 0
Do Wh7le Not EOF(1)
Line Input #LineOText
-
l.
-
Range("Al").Offset(LineCt. 0) UCase(Line0ffext)
LineCt LineCt + 1
LOOP
Close bl
End Sub
Aby ui?jsW dodatkowe informacje na temat odczytywania i zapisywania plik6w
tekstowych ply vtyciv je*a VB*, nalety zajrM do rozdziahl 27.
Bmm
Pvlc Do Wl le tek mogq z a w i e d jednq lub kilka instrukcji E x i t Do. Po napotkaniu in-
shukcji Extt 00 petla natychmiast kohczy dziaianie i pnekazuje sterowanie instrukcji
znajdujqccj sig za instrukcjq Loop.

Pplia Do Uniii
S h u k t m petli 00 Until bardzo przypomina stmktby ~ t lDoi Whi 1e. R 6 i c a jest w i d o c h
jedynie przy sprawdzaniu warunku. Pqla Do Whi 1e jest wykonywana, gdy wanmek m a
WartoSC True. Z kolei petla Do Unti 1 jest wykonywana, gdy warunek nie ma wartohi
True. P@la Do Unti 1 rbwniet posiada dwie sktadnie:
226 CzeSC Ill + Jezyk Viwal Basic for Applications

lub
Do
[instrukcje]
[Exit Do1
[instrukcjel
Loop [Unti 1 warunekl

Ponitszy pnyklad prezentowalem jut przy okazji omawiania pqtli Do While, ale po mo-
dyfikowaniu wykorzystano w nim pqtle Do Until. Jcdyna r62nica wystqpuje w wicrszu
zawierajqcym instrukcjp Do. Kod krddtowy jest ponadto trochq przejrzystszy, poniewa2
uniknieto w nim negacji obccnej w procedurze DoWhi leDem1.
Sub DoUnti lDemol(
Dim LineCt As Long

LineCt 0-
Open "c :\dane\pl;i-tekstowy . tx:" For Input As #1

00 U n t i l EOF(1)
Line Input #I. LlneOffext

- -
Range("Al"1 .Offset(LineCt. 0) Vtase(Llne9ffextl
L?neCt i i n e C t + i
Lcap
Close B1
End Sub
Rozdziat 9.
Zastosowanie procedur Sub
jezyka VBA
Procedura pnechowuje g r u ~instrukcji jezylca VBA realizujqcych zatotone zadanie.
WiekszoSt kodu tr6dlowego napisanego w jpzyku VBA jest zawarta w procedurach.
W tym rozdziale mwke uwage na proccdury Sub, k b r e wykonujq operacje. a nie zwra-
cajq wartoSci. J ~ z y kVBA obsi-uguje tet procedury Function orn6wione w rozdziale 10.

W rozdziale llmaJduJqs l przyktady


. ~ procedur, ktdre motna wykorzystaf

Deklarowanie i tworzenie procedur Sub jezyka VBA


P m e h r m jest grupq instrukcjijqzyka VBA majdujqcych sip w module VBA dostcpnyrn
z poziornu cdytora Visuui Basic. Modul m o t t przechowywac dowolnq liczbe procedur.
Istnieje kilka metod wywoiyunia lub wykonywania procedur. Procedura jest przetwa-
m a od poczqtku do kohca, ale mote t& mstaf zakohczona wczefniej.

Procedura moie r n l d dowolnq dlugoX, ale programlfci wolq unika6 twonenia bardzo
hlglch pmedur wykonujqcych wiele operacji. P m N n@sf snorzenle Xllkv rmla~sqch
procedur, z Mdrych kaFda reallmje ledno zadanle. a nastgpnie nadsanie gl6wnej
pmcedury wywduJr)wj pazostate. Dzigki takiemu rozwigzaniu zarzqdzanie kodem
ir6dlawym jest tatwie]sze.

Niektbre procedury wykwrystujq przekazywane im argumenty. Argument ro po prostu


i n f m c j a wykorzystywana pnez proceduq i pmkazywana jej po u~chomimiu.Ar-
gumenty procedury odgrywajqpodobnqrole, jak argumenty stosowane w funkcjach arkusza
Excela. Insmkcje procedury zazwyczaj wykonujq na argumentach operacje logicme.
Wyniki generowme przez procedw zwykle m l e q o d przekazanych argumentbw.

DeWarawanie procedury Sub


Fhxdura deklarowana pny ldyciu shwa kluczowego Sub musi bye zgodna z nastqpujqcq
skfadni~
228 CzgL6 Ill 4 jgryk Visual Basic for Applications

[Private I Public][Static] Sub nawa ([ lista-argomenthl)


[ instrukcjel
[ E x i t Sub]
[instrukcjel
End Sub

Prl vate (opcjonalne): stowo kluczowe powodujqce. t e procedura bedzje dosrqpna


tylko dla innych proccdur z tego wmego rnodulu.
w Publ i c (opcjionalne): sbwo kiuczowc identyfikujve proceduq dostcpna.
dla wsmtkich ~rocedurwe wszystkich modulach skoroszytu. Procedura
zastosokana w module zawierajicyn instnrkcje Option p r i v a t e Hodule. pomimo
zastosowania sbwa kluczowego Fubl ic, nie b e i e dodepna na zewnqtrz pmjektu.
S t a t i c (opcj~onalne):slowo kluczowe powodujtyq tc wszystkie zrnieme.
zadeklarowane w tej procedurze. nie zostanq usuniqte po zakonczenju procedury,
ale sq przechowywane w pamipci do kolejnego wywolania.
Sub (wymagane): slowo kluczowe identyfikujqce pocqtek procedury.
m narwa (wyrnagana): dowolna poprawna n m a procedury.
m i ista argument& (opcjonalna): reprezentuje list? zmiennych zawartych
w nawiasach okqgtych pobierajqcych argurnenty przekatywane procedune.
W celu oddzielenia argument6w nale2y zastosowat przecinek. JeSli procedura
nie posiada argumentdw, koniecme jest W c i e pustej pary n a w i d w okrqg!ych.
r nstrukcje (opcjonalne): tahcuchy, kt6re reprezentujq poprawne i n s ~ c j e
jczyka VBA.
E x i t Sub (opcjonalna): instrukcja wymuszajqca natychmiastowe zakoficzenie
procedury jeszc- przed osiagnipciem jej farmalnego konca.
End Sub (opcjonalna): instmkcja identyfikujqca koniec proceduy.

igFCPoza niellcznyml wyjqtkami, wszystkie instrukcje j m a VBA majdujqce siq w module


rnuszq by6 zawarte w procedurach. Wylqtkarni deklaracje miennych na poztomle
SQ
rnoduhr, definlcle nl&andardowych typdw danych i kilka lnnych instrukcjl akreflajiiqch
opcje obowiqzujqce dla calego modutu (np. opcJa Option Expl i c i t ) .

Zasieg procedury
W popmdnim rozdziale wqomnialem, t e zmi~gm i e m e j identyfikuje mod* i pro-
cedury, w kt6rych m o m jq zastosowat. Podobnie zasiqg procedury okreSla, jakie inne
pmedury mogajil w ~ w o w .

Procedury publiczne
DomyJlnie proccdury sqpubliane, co azaacza, te mogq by6 wywolywane przez inne
procedury zawantc w dowolnym module skoroszytu. Nie jest koniecme stosowanie slowa
kluczowego Publ ic, ale programiSci dla unihiqcia niejasnoSci c ~ t jeo uwzglqdniajq
Obie ponitsre pmcedury q publicme:
Rozdu'al?. + Zostosowanie procedur Sub iezyka VBA 229

Nanvy procedur
W d a procedura musi mi& .-n Zasady narywania pracedur sq takie same, jak tasady na-
zywania zmiennych. W idealne] sytuacjl nanva procedury powlnna opis)waE to, co jest przez nlq
realizowane. Zalecane jest stosowanle namy zawierajqce] czasownlk i rreczownlk {np. Przetwarraj-
Dane, DrukujRaport, SprawdfNazwePliku lub Sortuj-Tablice). Nalej unikaC nic nlemaczqcych nazw
takich, jak ZrbbTo, Uaktualnia C I Naprawia.
~ Niekt6rry p7ogramiSci poslugujq sig w nazwach zdaniami
~ t p l ~ ~ j q c ypocedup
mi (np. Pobierr-Opcje-Drukcmania1-i-Orukuj-Rap3rt i iapiszRaportWlikuTetstauyn).
Co prawda. diugle nazwy sq jednoznaczne, ale tet o wiele trudniej je wprwadzit.
i

Sub F i r s t 0
[n tym rniejscu znajduje s i e kod tr6diouyl
End Sub

Pub1 i'c Sub Second: 1


'
[W tym rniejscu znajduje s i k kod frodlorcy;
ifid Sub

Procedury prywatne
Proceduryprywatne m o m byt wywdywane przez inne pmcedwy zawarte w tym sarnlm
module, ale nie przez procedury z innych moduldw.

Po wybranlu w Excelu z menu NanedLia pozycji Makro. a nastgpnie Makra, w oknie


c* dlalogowym Makm bedq wldoczne tylko procedury pubilczne. A zatem je5li l i o r r y ) e f
procedury, M6re majq by5 wywolywane t$ko przez inne Qrocedury z tego samego mocturu,
powinieneS pamletd, aby przy ich deklarowaniu u2yf slowa kluczowego Private. Czieki
temu unlernoFliwisz u~chomienieprocedury przez utytkownika z poziomu okna
dialogowego Makro.

W ponihzym pnyldadzie zdeklarowano prywamq pmcedurp o nazwie MySub:


Private Sub MySubO
a [ntymrniejscuznajdujesigtodfr6dlowy~
End Sub

Umieszczenie p o n l k e j lnstrukcjl pned Penvszq pracedura Sub wymusi, aby wszysdtie


procedury rnoduhr bfi pywatne
wuczowego Public:
- n a w t te. M6re zdedeliarowano la wmocq slowa

& t i o n P r i v a t e Module
JeSll ta Instrukcja zostanle urnieszmma w module, w deklaracjach prccedur Sub
motna pomln$ sfnwo kluczcme Private.

Rejestrator mah
Excela standardowo tworzy nowe procedury Sub o nazwach Mag rcl ,
MakroZ itd. Wszystkie one sq publicme i nigdy nie pobicrajq argumcnt6w.

Wykonywanie pracedur Sub


W tym punkcie orn6wiq:
wykonywanie procedury przy utyciu golecenia Run SuWUserFovm zawartego
w edytonc Visual Bmic,
230 Cze5C 111 + Jazyk Visual Basic for Applkations

uruchamianie procedury z poziomu excelowskiego o h a dialogowego M a b o ,


wykonywanie procedury przy utyciu skr6tu opartego na klawiszu Clrl,
przypisanego do procedury (przy zajoteniu, 2e taki skr6t zdefiniowano),
wykonywanie procedury p r y utyciu stwononego niestandardowego menu,
wywolywanie procedury z innej procedury,
wykonywanie procedury przy utyciu pnycisku paska nanpdzi.
wykonywanie procedury popnez kliknipcie obiektu, do kt6rego wczefniej
przypisano proceduq,
wykonywanie rnakra po wystagieniu zdiuzenia (do z d a ~ tych
~ ~ dhi c z a siq otwarcie.
zapisanie i zamkniecie skoroszytu,
- . modytikowanie komdrki, uaktywnienie
-
arkusza i wiele innich),
wykonywanie pmcedury z poziomu okna Immediate edytora Visual Basic..
xs??v*w
is*
-~
W wlelu ~rzvoadkach
. -. ~ r 0 ~ e d u nie
r a bedzie drialata mmwnie do momentu
zastosowania jej w dpowiednim kokek~cie.Jest1 na przykhd procedura zostata
stwonona z rn#lq 0 pnetwazaniu aktywnego zwykiego arkusza, nie zadziala.
gdy aktywny bqdzie arkusz wykresu. Dobne napisana procedura zawlera kod fr6diowy
sprawdzajqcy, czyjest u w a n a w odpowiednlm kontekscie. JeSll stwierdzi,
ie nie mote kontynuowaC przetwarzania, zakoficzy dzlatanie w poprawny spos6b.

Wykonywanie procedury przy ukyciu polecenia Run Sub/UserForm


Polecenie Run Sub/LserForm d w p n e w menu edytora VLnaf Basic sh2y przedc wszyst-
kirn do testotowania procedury w trakcie jej tworzenia Nie motna wyrnagat od Idyrkown~ka,
aby uruchomii edytor Visual Basic w celu wykonania procedury. Aby wywdaC biet;\cq
procedurq (innymi slowy - procedw, kt6ra &era kursor), z menu Run edytora Yisuaf
Basic nalety wybrat polecenie Run Sub/UserForm (lub wcisnqi klawisz F5).
J d l i w rnornencie wykonywania polecenia Run SuWUserForm kursor nie majduje siq
na obszane kodu ik6dfowego procedury, edytor Visual Basic wyfwietli okno dialogowe
Macros urno~liwiajqcewybranie procedury, M a zostanie uruchomiona. Metoda nie
zadziata, gdy procedura wymaga przekazania jednego lub kilku argument6w.

Urucharnianie procedury z poziomu okna dialogowego Makro


Wybmie z menu Nangalzia Excela pozycji Mako, a e n i e MaRra spawoduje otwarcie
okna dialogowego M a b o pokazanego na rysunku 9.1. Moma t e t w tym celu wcisnqe
kombinacjq klawiszy Alt+F8. W oknie dialogowym M a b o majduje sic lista wsystkich
dostqpnych procedur Sub. Aby ograninyt d u e s wySwietlanych rnakr, nalety posh2yf
sic listq mzwijanq Maha w (np, motna pokazat jedynie r n h majdujace sip w aktywnym
skoroszycie). Okno dialogowe M a b o nie wyiwietla procedur Function. Ponadto nie
pokazuje procedur Sub zawartych w dodatkach lub zdeklarowanych pny utyciu slowa
kluczowego Private, albo wyrnagajqcych przekazania co najrnniej jednego argumentu.
I

Rozdzial9. + Zastosowanie procedur Sub jezyka VBA 231


i

Rysunek 9.1.
Okno dialogowe
Makm wySwietla
wszystkle dostepne
procedury

Procedury zapisane w dodatkach nie s4 wy4wietlane w oknie dlalogowym Makro.


ale jcYl mnasz ich nu*y, w dalszyn ciggu rnoillwe jest ich wykonanie. W tym celu
wystarcry w polu Nazwa makra okna dialogowego Makro wprowaddC n a w procedury,
a nastgpnie kliknqC pnyclsk Urvchom.

Wykonywanie procedury
przy uiyciu skr6tu opartego na Wawiszu Ctrl
Skr6t oparty na klawiszu Ctrl mote mstat pnypisany do dowolnej proccdury n i e w -
jqcej nrgurnmtbw. Jefli na przyklad do procedury o nazwie Update zostanie przypisana
kombinacja klawiszy CtrI+U,jej wciinivie spowoduje wykonanie procedury.

W pocqtkowej fazie rejestmwania makm okno dialogowe Rejesrrowanie makm umob


liwia przypisanie mu shbtu klawiaturowego. Jednak s M t mo2e zostaC przypisany
w dowolnej chwili. Aby do procedury przypisah skrcrdt oparty na klawiszu Ctrl lub go
modyfikowaC, nalety:
1. UaktywniC okno Excela i z menu Nmzedzia wybrad pmycjp M a b o , a naqpnie
Maba.
2. W y b d odpowicdniq procedurq z listy widocmej w oknie dialogowym Makro.
3. Kliknqe przycisk Opcje (rysunek 9.2) w eelu wwietlenia okna dialogowego
Opcje mokra.

Rysunek 92.
Okno dialogowe
Opcje rnakra
I umotlhvia pnyplsanie
procedune skr6tu
klawlaturowego
opartego na klawfszu
! Ctri I podanie jej
I opisu (opcjonalne,l
i
4. Wprowadzit mak w polu Ctrl+. WiclkoSC znaku jest tond2uiana JeSli zostanie
wpmwabna litera s, s M t klawiaturowy b@ie miat postat Czri+S. Z kolei jeSli
zostanie wprowadmna litera 5, da6t klawiahnowy kdzie mkd pos& Ctri+ShrfiS.
232 CzeJC Ill+ Jqzyk Visual Bc~sicfor Applications

5. Wpm- opir (opcjonalnie), ktdry zostanie wyhietlony w dolnej c e c i okna


dialogowego Mabo pa wybraniu procedury z listy.
6. Klikn46 OK, aby zamknqC okno dialogowe Opcje m&s. W celu amknitcia
okna dialogowego Mabo nalety kliknqd przycisk Zamknij.

Po pnyplsanlu do paceduty Jednejz pmdeflnidwanych kombinacjl klawlsry


stosowanych v Ucdu, pletwueh.r*o bqdhl mlMs komblnqa zdefinionna
* ~ n e clebie.
z Pnvktadowo kombinacja CMtSjest predefinlowanym skrdtem
klawlaturowym Lceia zapisuJecym a ~ y w gkoroszyt.
n~ JeSli jednak taka sama
kombinacla zostanle pnypisana do procedury, jej wcibnivcie nie S ~ ~ W O jut
~ U J ~
zapisanla-aktywnego skoroszytu.

TaWs klewlsze, Jak E, J, D, M, Q I T nle sq utywane pmr Excel w potqczeniu


@ z Llawlszem CM Excel nie u t p a zbyt Melu komblnacjl h l a i a w r ~ opart)~h
h
na klawlszach Ctrl i Shift. Tak naprawdq berpiecznle moha korzystd t dowolnego
klmlsza z wyj$tkiem f, 0 I P, kt6re odpowlednio sq tastrzetone dla poleceli
Czcionka. Zamacz KomdrM ZaMerajqce Komentarzl WleikoSf Czcionkl.

Wykonywunie procedury przy uiyclu niestandardowego menu


W rozdziale 23. mpomnialan o dw6ch metodach d i w i a j r l c y c h dostoso-ie menu
Excela. P i m z a pole@ na utyciu polecenia Dostanrj znajdujqctgo sig w pdmenu Par&
ncrrzedri menu Widok, natomiast druga na napisaniu kodu Wdlowego w jpzyku VBA.
Co prawda. dmga metoda jest preferowan& gdy qtworzone aplikacje, ale w celu pfzy-
pisania makra do nowej pozycji menu m o m posiu2yt sie obiema metodami.

Ponitej opisalem czynnoki, kt& naleb wykonaQ aby wySwietli6 nowq pozycjp menu
i p r z y p i d mu m h @nyjqkm, b nowa pozycja o namie Ohvdrzplik klienta majduje
sip w menu Dane, natomiast procedunr nosi n m p OpenCustmrFi 1e):
1. Z menu Widokwybierz potyejq Pmkimn&i, a nastppnie Dostafllj. Excel wy4wictli
okno dialogowe Dostosowywanie, po czym zastanie pftxlqczony wspecjalny tryb
dostosowywania W trybie tyrn menu i paski n a q d z i nie qaktywne, ale m o m
by6 dostosowywane.
2. Kliknij zakladkq Polecenia okna dialogowego Dmtmowywmr'e.
3. P&d listp Kategorie i wybien pozycjp Makra.
4. W l i h i e Polecenia przecimij p i m q p o z y c j p (Niestmdardowy element menu)
d a d o h menu Dane (ponitej poazycji O&iet dane). Po klikniwiu, menu Dane
zostanie rozwiniqte.
5. W celu wy4wietlenia menu podrqcmego prawym przyciskiem myszy kliknij
nowq poyejp menu (Niestandmdowy element menu).
6. W polu Nanve (rysunek 9.3) wprowadt dla pozycji menu nowq nazwq &Mwbrz
pllk kllenta.
7. W oknie dialogowym P a z listy malu wybierz p r o c e d u ~
~ i mubo
OpenCustmrFI le.
Rozdzial9. Zastosowanie procedur Sub jezyko VBA 233

Rysunek 9.3. MdyfIkwa namypczycjl menu Z menu podwcmego wybien pozjtje Przypisz makro.

8. Kliknij OK, aby zamkn~tokno dialogowe Przypist mokro, a nast~pnieprzycisk


Zamknq w celu zamkniqcia okna dialogowego Dostosmyvanie.

NO- p q t j a b-e -
z m s z e widaczna w menu nawet gcty nie zostanie ohvatty
skomsqt zawterajtlcy rnakro. Innyml shy, miany dokonane przy utyciu polecenia
Dostosujtawartego w podrnenu Paski n a n w menu Widok sq trwate. Wybranle
nowej pozycji menu spawoduje ratadowanie skorosqtu. JeSI1nie jest jeszcze otwarty.
Aby dowledzld sic, w Jakl sposdb u w jqzyka VBA do stworzenia p o w j i menu
Emm
. , " , , , od

Wywdywanie procedury z innej procedury


Jedna z najcqhiej stosowanych metod wykonywiia proccdury p o l q a na wywolaniu
jej z innej procedwy. Motna w y r 6 h i t trzy nastqpujqce jej warianty:
wprowdzenie nazwy procedury, a za niqjej argumentbw udli s q wymagane)
oddzielonychprzecinkami,
q c i e sbwa kluczowego Call maz. z n a m q procedury ijej argumentami CjcJli
.qwymagane), zawartymi w nawiasach oimgtych i oddzielonymi przecinkami,
234 CzqfC 1+ Jezyk Visual Basic lor Applications

zastosowanie metody Run obiektu Appl ication. Metody tej m o h utyC w celu
wykonania innych procedur jpzyka VBA lub makr XLM. Metoda Run jest
p&ydatna, gdiko&ecme jest uhchomienie procedury, ktbrej nazwq przypisano
zmiemej. Aby zastosowaC rnetodp Run, nale2.y zmiemq przekazak jako argument.

Ponitszy prrykIad demonstruje pierwsq metodp. Procedm YySub pn*warta kilka insauk-
cji (nie zostaly pokazane), wyvduje procedure UpdateSheet, a nastppnie rcszte instrukcji:
Sub Mysub( 1
[w tym miejscu znajduje siq kad fr6dlowyl
UpdateSheet
[w tym miejscu zrajduje s i e kod trddlowyl
End Sub

Sub Updatesheet( 1
[w tym miejscu ztajduje s i e kod Fr6dlowyl
End Sub

Kolejny przyklad demonstruje drugq metodp. Slowo klucwwe Call wykonuje proceduq
Update wyrnagajqcq jednego argurnentu. Procedura wywohjya pitekazuje argument
procedurze wywdywanej. Argumenty procedury zostanq omdwione w dalszej cyBci
rozdziaiu (zajrzyj do punktu .,Pnekazywanie argument6w pmcedurom").
Sub MySubO
-
MnthNun lnput8ox("Wpmad2 nuner mlesiqca: "I
Call UcdateSheet(MonthName1
'
[ w tym miejscu znajduje s i t tod trbdlhryl
End Sub

Sub UpdateSheetolanthSeq)
[w tym miejscu znajduje s l e kod tr6dlowy3
End Sub

Mirno te stow0 kluczowe C a l l Jest~ J o n a l n eniekthy


, pmgrarnl4ci zawsze
go u w j q , aby jednoznsmie mdkre#it5. ie jest wpmtpdana inne procedurr.

W kolejnym prrykladzie zastosowano metodp Run wykonujqq prucedw UodateSheet,


a nastppnie pnekazujqcq argument MonthNum:
Sub Mysub(
-
MonthHun InwtBox('Wprwadt nmer miesiqca:
8ppl icatlm.Run "UpdateSheet'. MonthHun
")

'
[ W tym mlejscu znajduje sie kod i r 6 d l m y l
End Sub

Sub UpdateSheet(MonthSeq1
[w tym miejscu znajduje sie kod frddlowyl
End Sub

Metoda Run majduje zastosowanie, gdy nazwa pmcedltry jest ~ozypisywanado zmiennej.
Zostalo to pokazane w kolejnym pnyktadzic. Rocedura mi n uZyHa W c j i WeekOay jpzyka
VBA okdlajqcej dzied tygodnia (ponumemwanych od I do 7, m w s z y od niedzieli).
Zmiennej SubToCall jest pnypisywany kaf~cuchreprnentujqcy nanvp p m d u r y . Metoda
Run wywotuje nastppnie odpowiedniq proc* (hleekenC lub D a i 7 ~ ) .
ROzdziat 9. + Zastosowonie procedur Sub jqzyka VBA 235

Sub M a i n 0
D i m SubToCall As Strtng
Select Case WeekOay(Nw)
Ca'se 1: SubToCall --'WeekEnd"
Case 7 : SubToCall
Case Else: SubToCall
End Select
-
VeetEnd'
"Daily"

Appl icatfon.Run SubToCal1


End Sub

Sub Weekend[ 1
'
UsgBox "Marny j u t weekend."
[w tym rnlejscu znajduje sle kod fr6dlowy wytonywany w czasie weekendul
End Sub

Sub D a i l y 0
Msgbx "Jeszcze n i e ma w k e n d u . '
'
[ w tym miejscu znajduje s i e kod frddlowy wykonywany u dnl m ~ z e l
End Sub

Wywdyvvanle procedury zawartej w innym module


Jdli intqrctcr jpyka VBA nie m o h zlokalizowad proceduy wywolywanej w aktualnyrn
module, poszuka procedur publicmych w innych modulach e g o samego p m j e h . Jeili
zalety ci na w y w o h i u prywamej procedury z innej procedury, obie m u s q majdowad
sic w tym samym module.

W tym samym module nie mom majdowad sic dwie procedury o jednakowej nazwie.
ale takic ograniczenie nie wystqpuje w przypadku, gdy sq umieszcwne w rdtnych rno-
duhch. Istnicje m o t l i W f r m m n i a interpretera j~zykaVBA do wykonania procedury
posiadajqcej niejednoznacznq nawq, czyli kolcjnej pmedury o takicj samej nazwie
zawartej w innym module. W tym celu ptzed n a m q procedury nalety wstawid nazwc
modulu i kropk~.Dla przykhdu zaldhy, te w modulach Modul e l i Modul e2 zdefiniowano
procedmy o nanvie MySub. JeSli proccdm z modutu Module2 ma wywdywad proceduv
MySub znajdujqcqsiq w module Moduiel, n a i e e utyd jednej zponifszych instrukcji:
ModuIei .~ysub
Call Hodul e l . MySub

Jegli nie odr6tnisz dw6ch proccdur a takich samych nazwach, zostanie wygenerowany
komunikat bf@u Ambiguous nam detwted (wy!uyto niejednomacmqnazw~).

Wywolywanie procedury zowatiej w innym skoroszycie


W ni&rycll prrypadkach mo2e byd konhme w p d m i e z proccdury dmgiej pmedury
zdefhowanej w imym skoroszycie. W tym cclu motna wykonad odwolanie do tego
skorosrytu lub utyC metody Run i jawnie okreSlid jcgo nanvp.

Aby shmzyd odwdanie do innego skoroszytu, z menu Tools edytora VisYd Busic nakty
wybrak poleccnie Rdwences. Excel otwony okno dialogowe Refereices (rysunek 9.41,
w Mdrym b d q widocme wsystkie dostpne odwotania powipmc z wszystkimi
otwartymi skoroszytami. Aby stmnyf o d w h i e do okrdionego skorouytu, wys-zy
236 czefe 1s Jew visual Basic for ~ppncations I
Rysunek 9.4.
Okno dialogowe
References umotlhvla
stworzenie odndania
do Innego skorosrytu

go m a e z y t , a nastqpnie kliknqd OK. Po stwoneniu odwolania mozna wywdywad


prbcedury zawarte w skoroszycie tak, jakby rnajdowaly sip w tym samym skotuszycie, I
co procedura wywolujqca.

Skomszyt, do ktbngo jest wykonywane odwdanie, nie musi by5 otwarty. Skomszyt jest
W o w a n y jak oddzielna biblioteka obiekt6w. W celu stwomnia odwdania do skomqtu,
i
kt6ry nie jest otwarty, nalety u2yt prycisku Browse z okna dialogowego References.
Nazwy skoroszyr6w w i d a n e na likie odwoM q u p o ~ o w a n wedluge nanv projekb5w
onvartych w edytorze Visual Busic. Domyflnie katdy projekt p c q t k o w o otrzyrnuje
nazwq VBAProject. A zatem lista mote zawierat kilka identycznie nazwanych pozycji. . - -
Aby wyrdtnit projekt, nalety w oknie Properiies edytora V&I Busic zmieniejego nazwq.
Lism odwdafiwyiwidlona w oknie dialogowyrn
- . References zawicra tet biblioteki obiek-tdw I

i kontrolki ~ c t i ; ezarejestrowane
~ w systemic. ~ k o r o s z Excela
raja odwdania do nasgpujqcych bibliotek obiekt6w:
~ t ~ 2003 zawsze zawie-
ii
Visual Basic for Applications,
Microsoft Excel 11.0 Object Library,
a OLE Automation,
i
Micnnoft Office 1 1.0 Object Library, :
Miaosotl Fwms 2.0 Object Library (opcjonalna, dokpzana tylko, gdy w projekcie 1
zastasowano formulane UserForm). 1
I

W strukturze prolektu widocmym w oknie Project Exploreredytora Msval Basic sq tet i!


wySwletlane wsmlkle dodane odwotanta do lnnych skorosrjt6w. S$ one urnieszczone
ponltej elernentu o nazwie References.

Jcfli na prcykEad s ~ a r i y l e odwolanie


b do skoroszytu zawierajqcego proccdurq YourSub. !
w celu jej wywolania m o a a I@I~ jednej z poni2szych instmkcji: i
YwrSub
Call YourSub
;
Aby precyzyjnie zidentyiikowa6 proem z a m w innyrn skoroszycie, poprtez za- i
stosowanie nastppujqcej sldadni MI* olueSliC n a m e projektu, rnoduh i proccdury:
Rozdziai 9. Zostosowanie procedur Sub jezyka VBA
. 237

Dkcmgo wywolvje slp lnne pmcedury?


Je§ll JesteS ~ u J q q programistq,
m motesz ZastanawlaE sig, dlaczego Ma9 w ogdle v y d u j e
jednq procedurg z druglej. Motesz zapyta6: .Dlaczego po prostu nie urnieScid kodu frddiowego
wywotywanej procedury w procedurze wywotujqcej?"
Jednym z powod6w jest przejrrystofb k'odu Zr6dtowego. Im prostszy spos6b pmgramowania. tym
latwlejsze zanqdzanie kodem. Mniejsze procedury s$ prostsze do rozszyfrowania, a nastgpnie
sprawdzenla. Przeanallzuj ponltszq procedure. Mdra jedynie wywotuje inne procedury:
Sub MatnO
Call GetUserOptions
Call PraessData
Call Cleanup
Call ClaseItDown
End Sub
Popnez wywolywanle lnnych pmcedur elirninuje slg tet nadmiamwold. Zaldbny, i e zalej ci na
wykonanlu opeacji w ddesi@u r6hych mlejxach procedury. Zamlast dzid~iokmtniewprowaW
kod frddtowy, rnotna naplsaC pcocedurc! wykonujqcq operaclg. a nastepnle po prostu wywdaC ja
10 razy.
Motesz tet dysponowaC kllkoma crest0 stosowanyml procedurami ogdlnego zastosowania. Po
umieszczenlu ich w odddelnym module motesz go zalmportowab do aktualnle realizowanego
projektu, a nastqpnle wywolpmf wymagane procedury, co Jest macznie prostsze'nii kopiowanie
i wkleja* kodu frbdtowego do nowych procedur.
Za dobrq pram? pmgramlstyxnq cesto jest uznawane hwaenie kilku niewielkich procedur
ramlast jednej dute]. ModubwoX nle tyiko upraszcza pracg, ale tet utaWa tycie osobom, ktdre
zajmujq s l t stworzonyrn przez clebie kodem tr60towym.

M o h a tet utyC siowa klucwwego Call. Oto prryklad:


C a l l @Project .MyModule.MySub

Kolejna metoda wywolywania praccdury nwamj w innym otwartym skoroszycie polega


na zastosowaniu metody Run obiektu Application. Metoda ta nie wymaga twonenia
odwo4ania. Poni- instrukcja wykonuje procedure; Consolidate zawartq w skoroszycie
-
o nazwie h h e t m a b ~ x ~ s :
Appl ication.Run " 'budtet-makra.xlsV !Consol idate"

Wykonywanie procedury pny uiyciu pnycisku paska narzedzf

klikniqcie spowoduje wyw&e procedur. Proccdma pn$iywania && do pnycisku


paska nm$dzi jest niemal ideniycmajak procedura pqpisywania makra do pozycji menu.
Aby pnypisad p r w m do pnycisku paska mzqdzi, wykonaj nas$pujqce kroki:
1. Z menu Widok wybim pozycjp Parki nna&i. a nasgpnie Dostmj. Excel
wySwietli okno dialagowe Dostmowyvmie, p~ czym wstanie p&czony
w specjalny tryb dostosowywania. W trybie menu i paski nanqdzi nie sq
m e , ale mom byf dostosowywane.
2. Kliknij Pofecenia okua dialogowego Dartosowyvanie.
238 CzgSt Ill + Jgzyk Visual Basic for Applications

3. Przewih liste Kategorie i w y b i m pozycjp Makra.


4. Z listy Polecenia do adanego paska narzflzi pnecitgnij drum pozycje (Prrycisk
niestandardowy).
5. W celu wytwietlenia menu podqcmego prawym przyciskiem myszy kliknij
nowy pnycisk.
6. W polu Nnnva wprowadt dla pnycisku nowq nazwq. Nama spdnia funkcje
podpowiedzi pojawiajqcej sit po umieszcaniu kursora m y s q nad pnyciskiem.
Krok ten jest opcjofialny. JeSli go pominiesz, jako podpowiedi pojawi sip tahcuch
Prrycisk niestandardowy.
7. Prawym pnyciskiem myszy kliknij nowy przycisk i z menu pod~cznegowybien
pozycjq Pnypisz makro. Otworzy siq okno dialogowe Przypisr rnakro.
8. Z listy makr wybierz procedu~.
9. Kliknij OK, aby zamknqt okno dialogowe PnypiFr makro.
10. KLiknij przycisk Zamknij, aby zarnknqk okno dialogowe Dostosoywanie.

Nowy pnyclsk paska narqdzl b@de rawsze widoczny - nawat


<SF*
nie*
wtedy, gdy
zostanie otwarty skoroszyt zawietajqcy makro. lnnyrni slowy, mlany dakonane
pny uiyciu palecenia Dostosuj zawartego w podmenu Paski namdzi menu Wldok sq
male. Wybranie nowego przyclsku paska narzqdzi spowoduje otwarcie skoroszytu,
nawet jeili nie jest jeszcze otwarty.
Nlestandardowe paskl narzedzl omdwiono w rozddale 22.

Wykonywanie procedury popnez klikniecie obiektu


Wielc obiekt6w Excela jest urnieszczanych na mryklym arkuszu lub arkuszu wykresu.
~ mech
Dowolnemu obiektowi motna pnypisak makro. Tego typu obiekty znajdujq s i na
paskach n a n d z i : Rysowanie, Formulme i Prrybornik formantdw. Dodatkowo makro
m o a a pnypisad do obrazbw umieszcmnych w arkuszu. W tym celu z menu Wsfw
nalety wybraC polecenie Obrm albo prawym przyciskiem myszy kliknqt obraz i wy-
brat pozycjp.Pnypisz makro.
Pasek n a w r i Prqtwrnik fonnantdw zawlem kontrolkl ActiveX podobne do kontmlek
umieszczanych na forrnularrach Userform. Pasek nawdzl Fomwlam zawiera podobne
kontrolki niebedqce jednak kontrolkami AcWeX. Zoddy one W o m n e z mySlg
o Excelu 5 i 95, jednak nadal mogq by5 stosowane w nowszych wersjach. a nawet
w niektdrych sytuacjach sq preferowane. Poniisze omdwienie dotyczy kontrolkl
Pnycisk paska narzedzi Fornulane. Aby uzyskd informacje na temat zastosowania
kontrolek ActlveX w arkuszach, nalety zajrzeE do rozdziatu 13.

Aby pnypisat procedurq obiektowi Przycisk ( z a w na pasku n-dzi Formulane),


wykonaj nastepujqce boki:
1. Sprawdi, cty pasck n-zi Formulane jest widoczny.
2. Kliknij konmlke Prryeisk z paska nartpdzi F m u l a r r e .
Rozddot 9. + Zastosowanie procedur Sub jezyka VBA 239

3. Praciqgajqc kursorem myszy o M I wielkoft kontroki Przycisk na arkuszu.


4. Excel od razu wySwietli okno dialogowe Przypirr mukro. Wybierz makro, ktbre
ma zostaC pnypisane do przycisku, a nastqpnie kliknij OK.
Jef ll w trakcle prreclqganla kontrolki Ptz)clsk zostanle wclfnlgty klawlsz Alt, jej
mzrniary zostang dopaswane do siatki arkuua. Wcl5nlecle kiawisza ShIR podczar
przeclqgania spowoduje, le kontrolka bedzle idealnym kwadratern.

Aby pnypisat makm do ksnaltu, nalcty go stwonyf przy ugciu paska n-dzi Rysowa-
nie. Prawym pnyciskiem myszy kliknij ksztalt, a nastqpnie z menu p o d ~ c m e g owybierz
poycjq Pr,~ypiszmakro.

Wykonywanie makra po wystqpieniu zdanenia


Procedura mote zostat wykonana po wyst;(pieniu okreSlonego zdarzenia. Przykhdami
zdarzeli sq otwarcie i zapisanie skoroszyhl. wprowadzenic do niego danych, klikniccie
kontrolki Przycl sk pol eceni a (ang. C m n d B u t t o n ) i wiele imych. Procedura wykony-
wana po wystqpieniu zdanenia jest nazywana p m c d u q obshgi zdarzenio. Tego typu
procedwy:
m posiadajq specjalne nazwy dotone z nazwy obiekty maku podkedlenia i nazwy
zdarzenia (np. procedura wykonywana po otwarciu skoroszytu nosi nazwe
Work boot-Open),
sqprzechowywane w module Code powiqimyrn z okretlonyrn obiektern.

Wykonywanie procedury z poziomu okna Immediate


Procedura mote tet msta6 wykonana poprzez wprowadmnie jej nazwy w oknie Imme-
diate edytoq Visual Basic. Jdli okno Immediate nie jest widocme, nalety wcisnqk
kombinacji klawiszy CtrI+G. Instrukcje j q k a VBA zawarte w oknie Immediate sq
wykonywane w mommcie z h k z e n i a wprowadzenia linii kodu. Aby wykond procedw,
wystarny w oknie Immediate wprowadziC jej n a n q z uwzglgdnimiern wymaganych
argumentdw i wcisnqk Enter.

Maoda ta m e bye do4t przydatna w pnypadku tworzenia procedury, poniewa2


w celu rayskania wynik6w jej dziatania istnieje motliwd[E wprowadania pol& w oknie
Immediate. Ponihza przykladowa procedura demomtnrje tg metodp:
Sub ChangeCaseO

--
D i m MyStrlng As String
HyString 'To j e s t test ."
HyString UCase(UyString)
Debug. Print MyString
End Sub
240 CtgX 111 J w V i o l Basic for Appkuiions

Na rysunlcu 9.5 polanano, co sip stanie, gdy w oknie Immediate msmnie wprowadzony
Mcuch Changecase. W cfekcie natychmiast mstanie wy4wictlony wynik wygenerowany
przez instrukcjr; Debug.Pri nt.

Rysunek 9.5.
Wonanle
pmcedury popner
wprowadzenle
jej nazwy
w oknie Immediate arscrm0
aetrrw
--
D I I WLrUII I x Sirllq
.h 1°C cur .-
ce.wIIRlcrrlq)
D.DW.JCM a)11111lq

Przekazywanie argument6w procedurom


Agumemfy pfzekazujq dane, kt6rych proadura utywa w M e pmtwamnia instmkcji.
C z t q katgorie danych utywanych w mli argumentbw to: m i m e , stale, tablice i obiekty.
Jesli chodzi o argumenty, procedury sq bardzo podobne do funkcji arkusza, poniewat:
mogq nie wymagat Cadncgo argumentu.
mom wymagat s t liczby argument6w,

mogq wymagad kilku argument6w. traktujqc inne jako opcjonalne,


m wszystkie argumenty proced y mom byC opcjonalne.
Kilka excelowskich funkcji arkusza (np. LOS) nie wymaga tadnych argumentbw, inne
(np. L~CZ.JE~ELI)wymagajq dw6ch argument6w, a jeszcze inne (np. SMA) mom u2y-
waC nicoludlonej liczby argument4w (maksymalnie 30). Istniejq te2 funkcje arkusza.
kt6rych argumenty sq opcjonalne. Pnykhdowo funkcja PW rno* korzystad z piviu ar-
gumentdw (tny sq wymagane, natomiast dwa opcjonalne).

WiqksmX pmcdur, z kt6rymi miakd do tej pory do czynienja w tej ksiqtcc. byla dekla-
rowma bez argumentbw. Ich deklaracja zawierala jedynie slowo kluczowc Sub, nazwp
pmcehy i jmq pustych nawiastw Nawiasy wskazzjo te procedura nie przyj-
muje argument6w.
Rozdziol9. + Zastosowonie procedur Sub jqzyko VBA 241

W poniazym przyktadtie pmcedura Main tnykrotnie wywotuje procedurq ProcessFi le


(instrukcja Cal l jest zawarta w pctli For .. . Next). Jednak przed wywolaniem procedury
ProcessFi l e twomna jest trzyelementowa tablica. Wewnqm pqtli katdy element tablicy
staje sip argumentem wywolywanej pmcedury. Procedura ProcessFi le pobiera jeden
argument o nanvie TheFlle, kt61-ymajduje sip w nawiasach okrztglych instrukcji Sub.
Po zakofictcniu d z i a h i a procedury PrccessFile, jako nastppna jest wykonywana in-
srmkcja majdujqca sip za instrukcjq Call.
Sub Main0
Oim
--
Flle(1 To 3) As Strir.9
Filetl) "Ceptl.xls"

--
Flle(2) "deptZ.xls"
FIle(3) "dept3.xlsW
For 1 1 To 2
Call PmcessFiie(File(i ) I
Next 1
End Sub

Sub Pmcessf 1le(TheFl le)


WorkWs.Open FileName :- TheFile
'
[w tp miejscu znajduje sie wtwej instrukcji]
End Sub

Oczywifcie procedurze m o h a tet prztkazywat literoty, kt6rt nie sq zmiennymi. Oto


przyklad:
Sub Main0
Call1 P-ss~ilet"budtet.xlr')
End Sub

Argument mote zostat pnrkazany procedurze ria dwa sposoby - przez odwdanie
i wartoit. Przekazanie argum,entu p n e z odwotanie (domyflna metoda) polega po prostu
na przeshniu procedurze adresu zmiennej w pamiwi. Z kolei przekazanie argumentu
przez waitof6 polega na pneslaniu kopii oryginalnej zmiennej. W konsekwencji w drugirn
przypadku modyfikacje argurnentu procedtny nie wpbwajq na oryginalnq zmiennq.

Ponitszy przykhd demonstmje to zagadnienie. Argument procedury Process jest jej


pmkatywainy p n e z odwolanie (domyilna rnetoda). Po pnypisaniu aniennej MyVa:ue
wartoici 10 proceduraMain wywohje procedure Process i pmkazuje jej jako argument
zmiennqMyYalue. Roccdura Process mnoty w a r d 6 swojego argumentu o nazwie Yc-
urvalue p n e z 10. Po zakohcmiu dziatania pmcedury Process sterowanie powraca do
procedwy Main i hnkcja MsgBox wyjwietla wartoSC zmiennej MyYalue wynoszqcq 100.
Sub M a i n 0

MyValue 10 -
Dim @Value bs Integer

3 1 1 ProcesstMyValut)
Msgbx HyYal ue
End Sub

Yourvalue
End Sub
- YourValue
Sub Processt YourValuel
10
242 CzefC Ill Jezyk Visual Basic for Applications

JeSli nie chcesz, aby wywdywana procedln-a rnodyfkowata jalqkolwiek zmiemq przeka-
zywanqjako argument, rno~esztak pnetworzyt listg j e j argumentbw, aby byly przeka-
v a n e przez wartoib, a nie przez odwolanie. W tym celu przed argumentem nalety
wstawid stowo kluczawe ByVal. Dzipki temu procedura bpdzie przetwarzala kopip prze-
kazanej zmiennej, a niej j e j oryginat. Prrykiadowo w poniBzej procedurze modydkacja
zmiennej YourValue procedury Process nie ma wplywu na zmiennq MyValue procedury
Main. W efekcie funkcja MsgBox wyiwietla wartoSC 10, anie 100.
Sub Process(ByVa1 Yourvalue)
Yourvalue
End Sub
- YourValue * !O
W wiqkszofci przypadkow wystarczy zastosowanie domyilnej metody przekazywania
argumentciw przez odwohnie. Jelli jednak pmedura rnusi utyd danych przekazywanych
j e j przy utyciu argumentu i absolutnie zalety ci na zachowaniu oryginalnych danych
w niezmienionej postaci, nalety zastosowac pnekazywanie przez wartoid.

Argurnenty procedury mogq bye jednoczdnie przekazywane przez wartoif i odwotanic.


Argurnenty, pned kt6ryrni urnieszczono stowo kluczowe ByVal. sq przekazywane przez
wartoic, natomiast wszystkie pozostale p m z odwotanic.

JeSli do pocedury zostanie m a z a n a zmienna typu zdefiniowanego pnez utytkownika.


;%&- konieczne Jest przekazanie przez odwolanie. Prdba pnekazania jej pnez wartosf
spowoduje wygenerowanie bedu.

Pordwnanle wykonystania mlennych publiunych


z argurnentaml pnekazywanymi do procedury
W rozdziale 8. pokazatem, w jaki spos6b wszystkim procedurom rnodulu udostepniC zrniennq
deklarowanq pny u w u sbwa kiuczowego Public (umleszczonego na poczqtku rnodulul: W niekt&
rych pzypadkach uiywa siq zrniennej publlcmej zamiast przekazywania zmiennej jako argumentu
w momencie wywotywanla procedury.
Przykladowo ponitsza procedura pnekazuje wartosf zmlennej MonthVal proceduRe PrcxesrFtcnth:
Sub MySubC)
D i m Monthllal as Integer
'
LW tym miejscu zna jdufe s l e kcd trddlowy]
HonthVa1 = 4
Call PrxessKonth(MonthV31!
[W tw miejscu znajdule s l e rod 2rddicwyI
a

End Sub
Oto inna metoda niewykorrystujqca przekazywania argumentu:
Publ:c MMItqVal as Integer

SLAS Mysub()

-
'
[W tym mfejscu znajduje sic kod ir6dIowyl
MnthVal 4
t a l l ProtessHcnth
'
Cw tym miejscu zna jdujc sie kod ir6dlowyl
End Sub
Poniewai w druam wariancie prooedury mienna MonthVal jest publlcma, pocedura PmessMonth
mote jej uzyC. ddeki czernu wyellminawana zostale koniecznoSC pnekazywania argumentu.
Rozdzlai 9. + Zastosowonie procedur Sub jezyka VBA 243

W popmdnich przykhiach nie zdeklarowalem typu danych dla tadnego argumentu,


tote2 wszystkie utywaiy typu Variant. Jednak procedura pozwala zdefiniowak typy danych
bezpofrednio w IiScie argumentbw. Ponitej zawano instrukcjq Sub powiqzanq z proce-
durq utywajqcq dw6ch argumentdw rdtnego typu. Pierwszy z nich zdeklarowano jako
argument typu Integer. natomiast drugi p n y uiyciu typu String:
Sub Prccess(1terations As Integer. TheFile As String)

Przekazujqc argument procedurze, nalety parniqtak, aby jego wartolt byia zgodna z typern
danych dla niego zdefiniowanym. JeSli na pnyklad w poprzednim przykladzie wywo-
lasz procedure Process i jako pienvszy argument pnekatesz jej miennq typu Siring,
zostanie wygenerowany btqd ByRef argument type mismatch (niezgodnoff ty@w dla
argumentu przekazywanego przez odwolanie).

cg$‘F%h
Argurnenty moga byd stosowane zardwno w pzypadku pracedur Jak
W praktyce argurnenty cqJciej sq stosowane w przypadku procedur Function.
Sub, i Function.

W rozdziale 10.pSwigconyrn procedurom Functlon znajdujq sle dodatkowe przyktady


wyjaSn~ajwe,w jaki spos6b w procedurach wykorzystywat argurnenty opcjonalne.

I Metody obslugi bled6w


W tmkcie wykonywania procedury jpzyka VBA mogq wystqpit blqdy. Nalety do nich
zaliczyk bi& skfudni (muszq zostat usuni~teprzed wywotaniem pracedury) i bledy
uruchomiehio (wysqpujq w trakcie przetwanania procedury). W tym punkcie zajmq siq
om6wieniem Mqddw uruchomienia.
Aby procedury zawleraj@e obslug* W 6 w mogty &at&, konkcme Jest wiqczenie
opcji Break on All Errors. W tym celu z menu Tools edytora Wsual Basic naleiy wybrad
pozycjt Opt,ons i w oknie dlalogowym OpUons kllkryf zaktadkg Genwal. Po uaMywnieniu
opcji Break on All Errors interpreter jezyka VBA ignoruje kod LrMiol~yobstugujqcy btedy.
Zazwyczaj utyjeu opcji Break on Unhandled Errors.

Przewatnie Mqd umchomienia powoduje przemanie prretwanania kodu kbdtowego


napisanego w jczyku VBA. Pojawia sip okno dialogawe wwictlajqce numer Medu i jego
opis. UZytkownik dobrze napisanej aplikacji nie bqdzie mial do czynienia z takirni ko-
munikatami. Takie aplikacje zawierajq kod k6dlowy obshgjqcy M@y, kt61-y je prze-
chwyci i podejmie odpowiednie dzialania. W najgonzym rake kod wygwietli bardziej
uozumiaty komunikat od tego, kt6ry jest generowany pnez interpreter jezyka VBA.

< s
4
miam0
W dodatku C zawarto wszystkie kody Mgd6w jbzyka VBA wraz z ich opisem.

Pnechwytywanie .Mqd6w
Aby okreSlit, co sie stanie po wystapieniu bipdu, n a l e v u v t instrukcji On Error. Za-
sadniczo dostqpne sq dwie mofliwoSci:
244 Cz#t 111 Jqzyk V i a l Basic for Applications

Ugnorawrmie M&u i zenvolenie interpterowi jesyka YBA na kontynuowanie. i


Pdhiej motna sprawdzit obiekt Err, aby stwierdzit, jaki wystilpit b+@i w razie
koniecznoki wykond operacjp.
P~scskoaeniedo specjalnej &ci kodu 5MIowego obsIugujqcego bled), i wyhnanie
odpowiedniej operacji. Ten segment kodu majduje sip na koncu procedury

Aby po wystqpieniu blpdu kod ir6dtowy jqzyka VBA by+ dalej przetwarzany, nalety ,
umieSciC w nim nastppujqcq insrmkcjp:
On Ermr Resume Next

Niekt61-c blqdy sq m a b istome i po p r o m mom zostac zipomwane. Aby jednak zi-


d e n t y t i k o d blqd, nalety uty6 obiektu Err. Funkcja Error jqzyka VBA mote poslutyt
do wySwietIenia tehtu odpowiadajqcego ~ ~ I a f c i w dE-rc i .!lurrtxr.Wtaiciwoic N ~ ~jest
e r
d o m y t h whkiwoSciq obiekm Err. Pnykiadowo poniaza h m d c j a wySwialn identycmq
informacjp, jak standardowy komunikat bledu jpzyka VBA (numer b l d u i jego opis):
Msgeax 'Error ' L Err 6 ": " 6 Error(Err)

Na rysunku 9.6 pokazano komunikat b$du j ~ y k aVBA, a na rysunku 9.7 ten sam b+qd
i
wyfwietlony w &ie. Bardziej zrozumiav opis mote onywikie sprawit. t e komunikat
blpdu w e dla koncowych utytkownik6w przedstawial wipkstq wart&. .
Rysunek 9.6.
Komunikaty blpddw
jevka VBA
nie zawsze
s4 pnyiazne
dl8 uiytkownlka

Rysunek 9.7.
Motna s*vor;ryC
okno komunikatu
zawierajqce Rod
bedu i jega opis

&
-\*,0, Odwolanle do obiektu Err jest rbwnomscme w l u jego wtaSciwSci o nazwie
Nmkr. A zatern ponitsze dwie instrukcje dajq taki sarn efekt:
Ms&x Err
Rozdzial9. + Zostosowonie procedur Sub jezyka VBA 245

Instrukcja On Error mote tet poshdyC do rlokalizowania w pmedune miejsca, do ktbrego


ma tostat przekazane sterowanie po wystslpieniu &du. W celu oznaczenia tego miejsca
utywa siq etykiety. Oto przykbd:
On Error GoTo ErrorHandler

Przyklady kodu h6dlowego obslugujqcego bledy


W pienvszym przykladzie zademonmowano Mqd, ktdry m o h zostat bez obaw zigno-
rowany. Metoda SpecialCell s zamacza kom6rki speiniajqce okdlone kryteriurn. Utycie
metody odpowiada wybraniu z menu Edycjo pol,ecenia Przejh; do, a nastcpnie kliknieciu
pnycisku Specjolnie, na przyklad w celu zaznaczenia wszystkich kornorek zawierajq-
cych formub.
W ponitszym pnykladzie memda Special Cell s zaznacza wszystkie kom6rki aktualnego
zakrcsu, w kt6rych majduje sic formula nvracajqca wartoft liczbowq. Standardowo, gdy
Zadna z zamaczonych komdrek nie speinia kryterium. interpreter jpzyka VBA generuje
komunikat blqdu. Jedynie pny utyciu instrukcji On Error Resume Next motna zapobiec
pojawieniu sic komunikatu blq-du.
Sub SelectFomlas( )
On Error R e s w Next
Selection.SpecialCells~xlFomlas. xlNumbers).Select
On Error GoTo 0
Cw tym miejscu znajduje ste kod irbdkwyl
End Sub

N a l e y zauwaZyt, Ze instrukcja On Error GoTo 0 pnywraca standardowy tryb obslugi


M@6w dla pozostabch instrukcji proceduy.

Ponitsza procedura poshguje sie dodatkowq instrukcjq oknSlajqcg czy ystzlpit blqd:
Sub SelectFomlasZ(
On Error Resume Next
Sel~1m.Specia1tells(xlFonrulas,xlNvnbers).Select
IfErr 0 0 Then MsgBox "Nle maleziono km5rek zawierajccych fonnuie."
On Error GoTo 0
[w tp miejscu znajduje s.ie kod frddiowy]
End Sub

Jegli wanoSt Err jest &a od zera, omacza to, te wystrlpil Mqd i m t a n i e wyiwietlony
odpowiedni komunikat.

Kolejny pnyktad demomtuje abduge W 6 w wykonywanqpopm p n s k o k do etykiety:


Sub E r r o r D m [ )

Sele:tion.Value
E x i t Sub
-
On Error GoTo Hand!er
123

Hand:e'r:
MsgBox 'Przypisanie w a r t o k i do saznaczenid n i e j e s t mtliwe."
End Sub
246 Czegt Ill + Jezyk Visual Basic for Applications I
Procedura ptbbuje przypisak wartoit aktualnemu zaznaczeniu. JeSli w y s w i M;ld (np. nie
zostanie zamaczony zakres lub arkusz jest chroniony), instrukcja pnypisujqca wygene-
ruje btqd. Po wystqpieniu blqdu instrukcja On Error dokonuje przeskoku do etykiety
Handler. Utycie przed etykietq instrukcji Exit Sub zapobiega wykonaniu kodu tr6dto-
wego obshgujqcego btpdy, w sytuacji gdy one nie wystslpiq. Jeili ta instrukcja zostanie
pominiqta, komunikat bjqdu bpdzie wyswietlany nawet wtedy, gdy bl@dnie wystslpi.

Czasami w celu uzyskania inforrnacji mo2na wykorzystaC fakt wyswienia bkdu. W pa-
nitszym przykhdzie jest fylko wykonywane sprawdzenie, ny otwarto okreilony skoroszyt.
W procedurze nie zastosowano obstugi blqd6w.
Sub CheckCorFil e 0
D i m FileName As S t n n g
D i m FileExists As Boolean

--
D i m book AS Workbook
Fi 1eName "N!!iET.XLS"
FileExists False
Spraudzeme wszystkich storoszytQ

- -
For Each book In Workbooks
I f UCase(boot .Name) FileName Then
FiieExists True
End I f
Next book
a Wybwietlenie odpowtedniegu kaunttatu
If FileExists Then Msgbx flleName L " jest Otwarty." -
Else Usg0ox FlleName d " nie jest otwarty."
End Sub

W procedurze zastosowano petle For Each . . . Next, kt6ra sprawdza wsystkie obiekty
ze zbioru Workbooks. Znalezienie ah~artegoskomzytu spowoduje ustawienie dla miennej
FiTeExists wartoSci True. Na koricu jest wySwietlany komunikat informujqcy utytkow-
nika o tym, czy skoroszyt jest otwarty.

Poprzednia pmcedura mote zostat modyfikowana tak, aby wykorrystywala obshgq


btcdbw do stwierdzenia, czy glik zosta otwarty. W ponifszym przykhdzie instrukcja On
Error Resume Next spowoduje, t e interpreter j m k a VBA zignomje wszystkie Medy.
Kolejna instrukcja pr6buje odwokd siq do skomszytu popnez pnypisanie go do miennej
obiektowej @rzy ujlciu slowa kluczowego Set). JeSli skoroszyt jest zamkniety, zostanie
wygenerowany blad. Struktura :f . . . Then . . . Else sprawdza wart066 wldciwosci
obiektu Err i wyiwietla odpowiedni komunikat.
Sub CheckForFileO
D i m FlleName As String

i i leNm -
Din x As Workbook
"BUDi€T.XLSW
--
C)n Error Resune Next
Set x Workbooks: Fi 1 eNam1
I f Err 0 Then
Ms-x F i ieNave & " jest otwarty."
E'se
#sgBox FileNarne 8 ' nie jest otwar-ty .'
End I f
On Error GoTo 3
End Sub
Rozdzial 9. Zastosowunie procedur Sub jezyka VBA 247

W rozdzlale 11.zaprezentowano kilka dodatkowych przyWad6w zastosowania obstugi

Rzeczywisty przyktad
wykorzystujqcy procedury Sub
Muszq przyznaf, tt witkszo9C przykladbw. jakie zaprezentowdem do tej pory. byta ra-
czej rnalo odwa2na. Teraz pokatp neczywisty przyklad dernonstrujgy zagadnienia
orndwione w tyrn i w poprzednich dwdch rozdzialach. Ornbwic krok po kroku proces
projektowania pnydatnego narzcdzia. ktbre zgodnie z definicjq zawartq w rozdziale 5.
rnotna uznat za aplikacjp. Zademonstmjq rdwniet proces analiy problemu, a nastqpnie
ronviqzywania go przy u2yciu jqzyka VBA. Na poczqek chce przestrzec bardziej do-
fwiadcmnych utytkownikdw zamierzaj~cychzapoznat sic z tyrn przyktadern. Napisalem
go z rnySIq o poczqtkujqcych programistach utywajqcych jpzyka VBA. Z tego powodu
opr6cz kodu Mdtowego majdujq sic tu rbwniet wyjaSnienia. jak zdobyt wiedzp wy-
rnaganq do jego stworzenia.
Pdna aplikacja znalduje sle na dotqczonyrn dysku CD-ROM.

Cel
Celem przyktadu jest zaprojektowanie narzpdzia modyfikujqcego skoroszyt poprzez
sortowanie jego arkuszy w kolejnolci alfabetycznej (Excel czegoi takiego nie oferuje).
Jeili masz tmdencjp do twornnia wieloarkuszowych skoroszytdw, wiesz, t e zlokalizowanie
jednego z nich mote byc! trudnyrn zadaniem. leili arkusze sqwrtowane w kolejnoJci al-
fabetycznej, o wiele Iatwiej maletc! Rdany arkusz.

Wymagania projektowe
Od czego r a c e ? Od listy wymagati dotycqcych aplikacji. W trakcie projektowania
motesz sprawdzat tq list?, aby miet pewnoit, t e uwzglpdnile4 wszystkie podstawowe
wymagania. Projcktowana aplikacja powinna:
sortowat arkusze (zwykte i wykresu) aktywnego skoroszytu w kolejnosci
alfabetycznej,
byC prosta do uruchomienia,
by6 zawsze dost~pna(innymi s k y , utytkownik nie powinien bye zmuszony
do ohvicrania skomzytu, aby m6c skorzystad z nmcdzia),
dzialat poprawnie w prypadku kazdego otwartego skoroszytu.

Nie powinna natomiast WwietlaC adnych komunikatdw btedbw jezyka VBA.


248 Cz@& Ill + Jezyk Vlnral Basic for Applications !

Dostqpne informacje
Czpsto najtrudniejsq fazq projektu jest stwierdzenie, od c a g o rozpocqd jego realizacjp.
W tym przypadku na poczqrku zebratern informacje o Excelu, ktdre mogq by6 zwiqzane
z wyrnaganiami projektowymi.
I Excel nie oferujs polecenia sortujqcego arkusze. A zatem zarejestrowanie makra
sortujqcego arkusze w kolejnogci a l f a b ~ t y c ~nie
e j wchodzi w gq.
Arkusze mogq byd z tatwoiciq przenoszone poprnz przeciqgniqcie ich kart.
Pamiptaj, aby uaktywnid rejestrator makr i pneciqgnqf arkusz w nowe miejsce.
a nastepnie sprawdzi6, jaki kod M k w y zostal wygenerowany po wykonaniu
opencji.
Excel dysponuje poleceniem Prrcniei lub Ropiuj arkusr zawartyn~w menu
Edycja. Czy zarejestrowanie makra w trakcie utywania tego polecenia spowoduje
wygenerowanie innego kodu n i t w przypadku rpmego prnnoszcnia arkusza?
B@p musial mad l i e arkuszy aktywnego skoroszyh~lnformacjq t a b uzyskarn
przy utyciu instrukcji jpqka VBA.
Bedp musial m a t n a m y wszystkich arkuszy. I tym razem informacje uzyskarn
przy utyciu instmkcji jpzyka VBA.
Excel posiada po1eceni.c sortujqoe dane zawarte w komdrkach arkusza.
Parniqtaj, aby przmidC nazwy arkuszy do zakresu i utyC tego polecenia
lub spnwdzid, cry j e y k VBA nie dysponuje metodq sormjqcq, z ktorej rnotna
skonystad.
Dziqki oknu dialogowemu 0 ~ 4r%
n a h z latwolciq m o h a do makra przypisad
skr6t klawiaturowy.
Jcfli makm majduje sip w skoroszycie makr osobistych. zawsrr bqdzie dostqpne.
B Bpdp potrzebowal metody umotliwiajqmj tcstowanic aplikacji w trakcie jej
twonenia. Na pewno nie b@p chcial jej testowd pny W c i u tego samego
skoroszytu. w ktdrym w p r o w a d m kod trddtowy.
Pamiptaj o stwarzeniu tymczasowego s k o r a s z p pnunaczonego do celdw
testowych.
JeSli s t w q poprawny kod irddlowy, interpreter jczyka VBA nie wygmctuje
tadnych b d d w .
Pamiptaj, aby rny6leb pmyszbiciowo ...

Spos6b realizacji
Co prawda, nadal nie mam dokklnego planu dzidania, ale mogq opracowaC jego w s t q ~ ~ ~ ~
zarys opisujqcy og6lne zadani4 ktdrych wykonanie jest koniecme. Oto one:
I identyfikacja aktywnego skoroszytu,
I pobranie listy nazw eskuszy skomnytu,
Rozddal9. Zastasowanie procedur Sub jezyka VBA 249

policzenie arkuszy,
posortowanie nazw arkuszy (w jaki9 sposdb),
B uporqdkowanie arkuszy w kolejnoici alfabetycmej.

Zauwazylern kilka ,.dziurl' w planie. Wiedzialem, t e btdp musial wyjalnic nastqpujqce


kwestie:
B spos6b identyfikacji akrywnego skoroszytu,
spos6b policzenia arkuszy aktywneg skoroszytu,
s p d b pobrania listy nazw arkuszy,
s p o d b sortowania listy,
B s p s d b upopdkowania arkuszy w oparciu o posortowanq listq.

Gdy nie dysgnujesz wszystkirni infonnacjarni na ternat okreSlonych m t o d


Pub wtaSciwo&3, rnotesz ich poszukaC w tej ksiqte lub w systernie pornacy jezyka
WA. Ostatecmie rno, majdziesz to, czego szukasz. Jednak najlepszym rozwiqzsniem
jest uaMywnienie rejestratora rnakr i przeanalizawanie kodu frbdtowego, ktbry zostanie
wygenemwany w trakcie wykonywania k~lkupowigzanych z sob9 operacji.

Wstgpne rejestrowanie makra


Zastosowanie rejestratora makr ma na celu zdobycie wiedzy na ternat jpzyka VBA. Na
pacz$ku utylem skoroszytu zawierajqcego t r q arkusze. Pdiniej uaktywnilern rejestrator
makr i jako miejsce pnechowywania makn olcreSlilem skoroszyt makr osobistych. Po
uruchomieniu rejestratora m a h pneehgnqlem trzeci arkuu pned dotychczasowy pienvszy.
Oto kod irddlowy wygenaowany p m z rejestrator rnakr:
Sub Hakml{)
Sheets{"Artusz3') .Select
Sheets("hrtusz3').n6vee Before :- Sheetscl)
End Sub

Poszukalem w systemie pomocy jqzyka -VBA inforrnacji o metodzie Hove, ktbra sk2y
do przenoszenia arkusza w nowe miejxe skoroszytu i w dutym stopniu jest n v i e n a
z wykonywanyrn zadaniem. Metoda pobiera t e t argument identyfikujqcy pobtenie ar-
kusta. P6hiej uaktywnifern rejestrator makr, aby qrawdzit, czy polecenie ~ r z e n i e i l u b
kopiuj a r k zawarte w menu Edycjo wygeneruje inny kod M l o w y . Jednak o k d sic
identycmy.

Nasepnie chciakm sic dowiedzief, ile arkuszy m j d u j e sie w aktywnym skoroszycie.


W systernie pomocy jezyka VBA malazkm informacje, 2e slowo Count jest wiahiwo-
Sciq zbioru. Po uaktywnieniu w edytorze Yiruol Basic okna Immediate wprowadzilem
nastppujqcq instrukcjq:
250 CzgSC Ill + Jezyk Visual Basic for Applications

Nie tak! Po chwili namystu uiwiadomilem sobie, Ze rnuszq policzyC arkusze zawarte
w skoroszycie. Uzytem takiej instrukcji:
7 ActiveWorkbook .Sheets .Count

Sukces. Na rysunku 9.8 pokazano wynik. Bardzo przydama informacja.

Rysunek 9.8.
Aby przetestowat
instrukcje.
u@ okna
Immediate edytora
Visual Basic

A co z nazwami arkuszy? Pora wykonat inny test. W oknie Immediate wprowadzilern


nastqpujacq instrukcjq:

Okaza1o sic, 2e pienvszy arkusz to Arkusz3. Wiqcej dobrych informacji do zapamietania.

Konstrukcja For Each . . . Next jest pnydatna w przypadku przetwarzania katdego ele-
mentu zbioru. W celu przetescowania konstrukcji utworzylcm krdtkq procedurq:
Sub Test( I
For Each Sht In ActlveNorklmk.Sheets
MsgBax Sht .Name
Next Item
End Sub

Kolejny sukces. Makro wyfwietla m y okna komunikatdw, z ktbryeh keMc zawiera innq
nazwp arkusza.

Wreszcie przyszja porn na opcje sortowania. Z systemu pornocy dowiedziakrn siq, t e


metoda Sort jest powiqzana z obiektem Range. A zatem jednym z romiqzah m e byc
pmniesienie nazw arkuszy do zakresu, a nastqmie posortowanie ich. Jednak takie rozwiq-
zanie wydaje sic; zbyt ztotone, jak na tg aplikacjp. Lepiej b~dzieumieSciC nazwy arkuszy
w tablicy taricuchdw, a nastqpnie posortowac je prry utyciu instrukcji jgzyka VBA.

Wstepne przygotowania
Teraz rnam jut wystarczajqcq wiedzt, aby rozpoczqt t i v o m i t kodu bodtowego
1
z prawdziwego zdarrenia. Jednak zanim to nastqi, musq przepmwadziC wstepne p r y -
gotowania Aby od~vorzyfto, co jutmbilem, wykonaj n a s t v u j ~ operacje:
e
1
I
1. Utwdrz pusty skoroszyt zawierajqcy pic6 arkuszy o nanvach Arkuszl. Arkusz2, i
Arkusz3, Arkusz4 i Arkusz5. 1
2. Pnenie4 losowo arkusze, tak aby nie byly ufo2one w taden uporzaldkowany spos6b.
3.. Zapisz skoroszyt pod n a n q Tesr.xls.
f Rozddal9. + Zastosowanie procedur Sub jezyka VBA 25 1

4. Uaktywnij edytor Visual Basic i w oknie Projecr Erplorer wybicrz projekt


Persona1.xls.
JeSli pmjek-t PersonaLxIs nie jest widoczny w oknie Project Explorer edytora
Visual Basic, oznacza to, t e nigdy nie u t y k S skoroszytu makr osobistych jako
miejsca, w ktcirym zostanie zapisane makro.
5. Wstaw nowy modut VBA (z menu lnserr nalety wybrat pozycje Module).
6. Utwbrz pustgprocedue o nanvie Sortsheets (rysunek 9.9).

Rysunek 9.9.
Pusta pracedura
zawarta w module
majdujqcym sip
I w skoroszycie makr
I osobistkch

WlaJciwie makro mote zostat zapisane w dowolnym module skomszytu makr


osobistych Jednak zalecane jest p~echowywaniekaMego makra w oddtielnym
module. Dzi~kitemu pdhiej z fatwofciq motna taki modui eksportowat
i importowat.
7. Uaktywnij okno Excela. Aby pnypisat do makra skrdt klawiahlrowy, z menu
Narzetia nalety wybrae pozycjp Makro, a nastppnie Makra (przycisk Opcje).
Zdefiniowanie kombinacji klawiszy Ctrl+Skifr+S wydaje sip dobrym pomyslem.

Plsanie kodu f rbdtowego


Pnyszta para na stwomie kodu ir6dlowego. Wiem, te muszp umiefcit nazwy arkuszy
w tablicy Idcuch6w. Poniew& nie marn jeszcze liczby arkusy aklpnegcr skoroszytu,
deklarujy tabliq przy W i u instrukcji Dim, posw sip paq pustych nawias6w okrfg!ycb.
Wiem, *u2ywajqc i n m k c j i ReDim, mogq p h i e j nieniC romiar tablicy. talc aby
przechowywala wlafciwq Iiaba elementciw.
252 czee 111 + JsWk ~ I S W ~ for Applications
Basic i
I
I

Wpmwadmn ponitszy kod tr6dlowy, kt6ry umieszcza nazwy arkuszy w tablicy Sheet-
Names. W Mli zastosowa4em funkcjjg MsgBax tylko dla uzyskania pewnoSci, t e nazwy
arkuszy rzeczywikie zostaty urnieszcwne w tablicy.
Sub %Sheets()
Dim SheetNamesO as String
Dim t as Integer

-
Dim YleetCount as Integer
Sheettaunt AttiveWork~ok.Sheers.Count

-
ReDm SheetNams(1 To SheetCount)

-
For 1 1 To Sheetcount
heetNames(i Activel(orkbook.Sheets(i .Name
MsgBox Sheetbin?$(i
Next 1
End Sub

Aby prrctestowaC procedure, otworzylem skoroszyt Tmt,xls i wcisnajern kombinacje


klawiszy Ctrl+Shifi+S. Zostanie wyiwietlonych pipt okien komunikatbw, z kt6rych

Jestem gorqcym rwolennikiem testowania kodu fnSdIowego jut w trakcie jego tworze-
nia. Po uzyshniu pewnoici, 2e kod frddlowy d t i a h poprawnie, rnoZna usunqt funkcje
MsgBox. Po jakimt czasie takie okna komunikatdw staj@sitirytujqce.
I
s2 Zarniast funkcji Msg8ox rm!na w trakcie testowenla hvorzonej apllkacjl rastosowa6
m t o e P r f n t oblsku Debug, M6ra w u j e wy5wlet8nie lnfomacJ u oknle
Immediate. Przyktadowo zarnlast funkc], FsgBox u?j instrukcjl:
Debug.Prlnt SheetHames(i )
Mstoda Print Jesto wlele rnnlej irytujqca od funkcji h & x .
Na tym etapic procedura Sortsheets tworzy jedynie tablice nazw odpowiadajqcych ar-
kuszom aktyrmego skoroszytu. Pouwtajq dwa kroki do wykonania. Pierwszym jest po-
sortowanit wartoici tablicy SheetNames, natomiast dmgim ponowne uponqdkowanie I

arkuszy zgodnie z kolejno3ciqelement6w tablicy.

Tworzenie procedury sortuJqcej


Nadeszla pora posortowania elementdw tablicy SheetNames. Jedno z r o t w i w polega
na umieszczeniu kodu Wdiowego odpowicdzialnego za sortowanie w procedurze S o r t -
Sheets, ale pomy3latem, & lepicj bqdzie s t w o q t procedure sortujqq og6lnego =to-
sowania. kt6rej u2yje rbrmiet w innych projektach (sortowanie tablic jest qstqoperacja).
Pmysi q k a n i m proca3uy sortuja-cejnie powinien ciq miechpdib, gdyi? daSk latwo motna
m a l a powszechnie utywane pmcedury, a nastcpnie pizystosowad je do w k n y c h
wymagak OczywiOcie internet to znakomite Wdlo tego typu danych.

Tablica moZe by5 sor&owanana wielc spomMw. Zdecydowakm sip zastosowaC metode
sortowania bqbelhego. Nie jest szczeg6lnie szybka, ale tam do kodowania. W pmy-
padku tej aplikacji duta szybkogf nie jest wymagana.
Rozdzial9. Zastosowanie procedur Sub jezyka VBA 253

W celu sprawdzenia ka2dego elernentu tablicy metoda sortowania bqklkowego wyko-


rzystuje ragnietdtonq p@le For .. . Next. J d l i okreSlony clement tablicy jest wiekszy
od nastepnego, oba elernenty nvnieniajq sie miejscami. Operacja jest powtarzana dla
katdej pary elementbw, czyli n I my. -
W mzdtlale 11.zaprezentowabm kilka innych procedur sortujqcych i pordwnatem Je

Oto kod W i o w y stworzonej przeze mnie procedury sortujqcej (wczeiniej zajrzatem na


kilka stron intcmeto'nych, z ktbrych zaczerpnqlem niektdre pomysjy):
Sub h b b l e S o r t ( L t s t 0 As Strjng)
' Sortuje elenenty t a b l i c y L i s t a porzadku r3snqcym
Dim f i r s t As Integer. Last As Integer
D i m i As Integer. j As Integer

---
Dim T m As String
F i r s t LBound(List)
Last UEound(Lisc)
For i f i r s t To Last : -
-
Far j i + 1 To Last

--
If L i s t ( i ) > L i s t [ J ) Then
Tmp L i S t [ j )

End tf
-
List(j) Llst(i)
L i s t ( i 1 Terrp

Next j
Next i
End Sub

Pracedura akceptuje jtden argument,ktorym jest jednowymiarowa tablica List. Tablica


przekazywana proccdurze moke mieC dowolnq dhgoft. W celu okre.3lenia dolnej i gdrnej
granicy tablicy zastosowalem odpowiednio funkcjt LBound i UBound. Funkcje pnypisano
odpowiednio m i e m e j First i Cast.

Proccdura dziahia niezawodnie. Nastqpnie zmodyfikowalem proceduep SartSheets,


dodajqc wywolania procedury Bubblesort, ktclrej jako argument jest przekazywana ta-
blica SheetNams. W tym mornencie zawartoSC moduh jest nastepujqca:
Sub SortSheetsl )
Oim SheetHaesO As StrTng
Oim Sheetcount AS Integer
Dim i As Integer
-
Sheetbunt ActiveUorkbodx .Sheets .taunt

For i -
&Dim SheetNms(1 i o SheetCount)
I To SheetCaMt
-
SheetHams(1) PrtiveUarkbaak .Sheets[i I . Name
Next 1
Call BuUleSort<Sheett&mes 1
End Sub

Sub BubbleSort(ListE) As String)


Dim F i r s t As Integer. Last As Integer
Dim i As Integer. j As Integer
D i m reno 4%String
-
F i r s t LBaund(List1
254 CzgSC Ill 4 Jqzyk Visual Basic f o r A p p l i c a t i o n s I

--
Last UBound(List)

For j -
For ! F i r s t To Last - 1
1 A 1 To Last
I f L l s t ( 4 ) z L i s t ( j ) Then
-
Temp L i s t ( j )
List(j) List(i:
List!i)
End I f
-
Tenp

Next j
Next 1
End Sub

Procedura Sheetsort zawiera term tablicq zlotonq z posortowanych nanv arkuszy ak-
tywnego skoroszytu. Aby siq o tyrn przekonak, rnotna wySwietliC zawartosc tablicy
w oknie Immediate edytora Visual Basic. W tym celu na kohcu procedury SortSheets
nalety umieSciC nastepujqcy kod frbdtowy fjesli okno Immediate nie jest widocme.
nalety wcisnaf kombinacjq klawiszy Ctrl+G):
For i -
1 To SheetCount
DeSug.Print SheetNams(1)
Vext i

Na razie wszystko idzie dobrze. Teraz muszq napisat kod Wdlowy porzqdkujqcy arkusze
zgodnie z kolejno8ciq elernentdw tablicy SheetNames. Przydatny okate sip wczeiniej za-
rejestrowany kod. Czy parnietasz instrukcjq, k t d q zarejestrowalern, gdy pnenositern
arkusz skoroszytu, tak aby stat siq jtgo pierwszym arkuszem? Oto ona:
Sheetst'Arkusz3") .rove Before :- Sheets( 1: 1
I

Po chwili narnysfu bylem w stanie napisat mllq For . . . Next przetwarzajqcq katdy arkusz
i przenoszqcq go w odpowiednie rniejsce okreflone przez polotenie elernentv tablicy
SheetNarres:
Fjr i - 1 To SheetCount
Sheets(SheetNaves! 1 .rove Befare :- Sheets( i:
Next i

Licznik wtli (i)prry jej pienvszym wykonaniu ma wartoit 1. Pierwszyrn elernentem


tablicy SheetNames w tym pmykladzie jest Arkuszl. A zatem wyratenie zawierajqce
rnetode Move majdujace sie w petli przyjrnie nastcpujqcq postac:
Sheets( " ~ r k u s z l ") .Mve Before :- Sheets(1)

Przy drugirn wykonaniu petli wyraenie bqdzie mialo nastqpujqca postaf: I


Sheets('ArkuszZ").Move Before :- Sheets(Z1
I
Po dodaniu nowego kodu frd+owegoprocedura SortSheets wyglqda nastcpujqco: I
Sub SortSheets()
Din SheetNamest; k String
Di-! Sheetbunt As Integer

-
Dia i AS I n t q e r
SheetCount k t i v e m r k b k .Sheets. Count

-
ReDiin SheetNams(: To Sheetcount)
For i 1 To Sheetcount
-
SheetNames( i1 A c t i v e l i o r l h ~.Sheets{i). Name
Rozdziat 9. Zastosowanie procedur Sub jezyko VBA 255

Next 1

-
Call BubbleSort(SheetNames)
For i 1 To Sheetbunt
ACtiveWorkbwk .Sheets(SheetNames(i ) .Move -
Before :- ActiveWorkbaok .Sheets(i I
Next 1
Ena Sub

Po wykonaniu kilku testow okazato sip, tt w przypadku skoroszytu Tesr.xls procedura


dziatata znakomicie. Pora na ostamie poprawki. Upewnibm sip, czy wszystkie zmienne
zastosowane w procedurach mstaty zdcklamwane, a nastqpnie dodakm kilka komentany
i pustych wierszy, aby zwitkszyt jego czytelnoSC. Procedura SortSheets wyglada teraz
nastqpujqco:
Sub Sortsheets0
'
Sortuje afiusze a k t m e g o sxoroszytu w porzadku rosn4cym
Dim SheetNamesO As Str3ng
D i m Sheetbunt As Integer
Dim i As Integer
*

-
OkreSla l i c z k arkuszy i z n e n l a r o n i a r t a b l i c y przy u t y c i u i n s t r u k c j i ReDim
Sheetcount ActiveUorkbwk.Sheets.Count
ReDls SheetNames(1 To S h e e t h n t )

-
Wypetniente t a b l i c y namami arkuszy
For i 1 To Sheetbunt
-
SheetNames(1) hctiveUorkbodk.Sheets(i) .Name
Next i

brtowanle t a b l l c y w porzqdku rosnacym


Call BubbleSort(SheetNaces)

'
-
Przenoszenie drkuszy
For i 1 To S h e e t h n t
kt1veWsrtbock .Sheets(SheetNames( i) ) .Move
Fefore :- ActlveNorkbook .Sheets(t
Next 1
End Sub

Wszystko wydaje siq dzidat poprawnje. W celu dodatkowego sprawdmia kodu W d h -


w e w do s k o r o s m Tesr.xls dodaalem k i h arkuszv i mienitem kilka ich nazw.Procedura
spGwdzita siq nad wyraz dobne!

Dodatkowe festy
Miakm ochoQ na tym popnesta6, ale przeciet na razie pracadura sprawdzih sip tylko
w przypadku skoroszytu Test.rls. Zaladowalem wipc kilka innych skoroszytdw i po-
nownie uruchomikm pmcedtq. Wkr6tce stwierdzilem, 2e pproccdura nie jest dmkonata.
Tak naprawde daleka byla od doskonaloSci. Zidentyfikowakm nastepujqce problemy:
a Sortowanie skoroszytbw zawierajqcych wielt arkuszy zajmuje du2o m u ,
poniMlt w Qakcie wykonywania operacji przenoszenia zawartoX ekranu jest
cab czas uaktualniana
256 Czge Ill + J ~ r y kVlsual Basic for Applications

Sortowanie nie zawszc zadzialalo. Rykladowo w jednym z test6w arkusz o nazwie


SUNWRY (zawiera same dutc litery) malazl siq przed arkuszem Sheet 1. Problem
ten zostat wywolany przez p m c e d u ~Bubbl eke,dla ktbrej litera Ujest ,,wifksm"
od litery h.
Jefli w Exeelu nie bdzie widoczne Zadne okno skoroszytu. w c i f n i ~ i e
kombinacji klawisry Clrl+Sh$+S spowoduje. t e makro nie zadziala.
B JeSli struktura skomszytu jest chronionq metoda Move nie zadziata
POwykonaniu sortowania ostatni arkusz skomzytu stat sip arkuszem aktywnym.
Zmiana aktywnego arkusla wybranego przez u2ytkownika nie jest zalecma.
Po przerwaniu pracy makra poprzez wciinivie kombinacji klawisv C~rl+Break.
interpreter jpzyka VBA wyiwietlil komunikat h d u .

Usuwanie problem6w
Usunivie problemu zwiiganego z uaktualnianiem zawartoSci ekranu bylo bardzo pro-
ste. W celu wylqctenia funkcji odSwietania zawartoSci ekranu na pac~gtkuprocedury
Sortsheets umieScilem nastppujqcq instrukcjq:
Ppplication.kreenUpdating - False
Instntkcja powoduje ,,zarnrofmie" okien Excela na czas dziaiania makra. Dodatkowq
korrykiq takiej operacji jest tet maczqce zwiqkszenie szybkofci d z i a h i a makra.

Proste bylo tet u s u n i ~ i eproblemu z proceduq Bubbl eSort. Aby w nazwach arkuszy
wyst~powalysame dute litery, uqlern funkcji UQse jqzyka VBA. Poprawiony wienz
kodu Mdlowego ma nastcpujqcq postak
I f UCase(Llst(t)) > VCasetLlst(j)) Then

lnna metoda mmJiqzania problemu z dutyml znakami polega na umieszczeniu


na poczqtku modutu nastppujqcej 1nstrukcjI:
Option Cmpare Ted
Instrubcja powoduje, te Intemeter kzyka VBA wykonuje operack por6wnania
taf1cuch6ww oparciu o sortowanie tekstu, ktbre nie rozrdinia wielkoaci znak6w.
lnnyml slowy. litera A jest traktowana talk. jak litera a.
Aby wycliiinowaC komunikat &du pojawiajvy siq, gdy nie jest w i d m e okno iadnego
skoroszytu, dodakrn mechanizrn kontroli blcdbw. Blqd wysQpi. gdy taden skoroszyt
nie b ~ d z i eaktywny. Aby zignorowat Mqd, Utylem inStrUkcj'i On Error Resume Next,
a nastgpnie sprawdzilem wartog o b i e h Err. Jedli wart066 jest r 6 h a od zera. omacza
to, t e wystzpil btqd. A zatem procedura zakoficzy dzialanie. Kod tr6dlowy spdniajqcy
funkcjp mechanizmu sprawdzajqcego btpdy ma nastepujqq postat:

-
On Ermr Resume Next
Sheetbunt ActtwWorkbook.Sheets.Cwnt
I* Err o 0 Then Extt Sub ' Brak attyrmego skoroszytu
Rozdziat 9. + Zastosowanie procedur Sub iezvka VBA 257

Stwierdzitern, 2e mogp nie stosowad insbukcji On Error R e s m Next. P o n h instrukcja


jest batdziej bezpoSredni~metoda okreilani~czy skoroszyt jest widocmy, a ponadto
nie wymaga stosowania kadnego mechanizmu obshgi bfqd6w:
If ActlveWorkbook Is Nothing Then E x i t Sub

Zwykle zaleca sip ochronp struktury skoroszytu. Zadecydowafem, te proba usuni~cia


ochrony skoroszyhl nie bpdzie najlepszym ronviqzaniem. Zamiast tego kod irbdtowy
powinien wySwietlit okno komunikatu ostnegajqce wkytkownika oraz umotliwiajqce
mu usunivie ochrony skoroszytu i ponowne uruchornienie makra. Sprawdzenie skora-
szytu, ktdrego smktura jest chroniona, bylo prostym zadaniem. WfaiciwoSf Protect -
Structure obiektu Workbwk zwraca wart056 True. jefli skoroszyt jest chroniony. Do
procedury dodalem nastqpujqcy kod ir6dlowy:
Sprwdzenle, cry jest chroniona struttura skoroszytr.
If activeW6rkbaok. ProtectStructure Then
f l s g b x ActiveWcrkbcak.Name 6. " j e s t chronlony.". -
v b t r i t i c a l . "Nie j e s t m F l i w e p o s o r t w n i e arkuszy."
E x i t Sub
End If

Aby po zakohczeniu sortowania ponownie uaktywnif arkusz, ktbry poczqtkowo rnial


taki stams, napisalem odpowiedni kod frbdlowy. W efekcic poczqtkowo aktywny ar-
kusz zostal przypisany miennej obiektowej (OldActlve) i by1 ponownie uaktywniany
po zakonczeniu dziafania maba.

Wcignipcie kornbinacji klawisg Cfri+Break zwykle powoduje wstrqmanie dzialania


makra i wyfwictlenie przez interpreter jpzyka VBA komunikatu bfqdu. Jednak jednym
z moich cel6w jest unikniqcie wyfwietlania komunikat6w bl@bw jpzyka VBA. tote2
musiakrn wykorrystaf wfakiwoJk EnableCancelKey obiektu Application, ktora w y k z a
kombinacjp Ctrl+Break. A zatcm na pocqtku p m c e d q umiekilem nasrqpujqcq in-
strukcjq:
Pppl icatlon. EnableCancelKey - xlOisabled

Po wytqczeniu kornbinacjl CM+Break nalety zachowaC duta ostrotnoX. JeSll kod


< fr0dlowy zacznle wyk0nyl.C nieskotkzong p t l e . nie bqdzle rnotllvs paerwanie jego
dzlatania. Aby uniknqC problem6w. powyisq insvukcje nalety rastosowad tylko
po upewnieniu sie, 2e wsrystko dziata poprawnie.

Po wykonaniu wsystkich poprawck procedwa Sortsheets wyglqda jak w listingu 9.1.


Listing 9.1. Ostatecma postat? promduty Sortsheets
,,
Option ' ~ x p l i c i t
Sub So~%Sheets[1
a
Sortuje arkusze a k t m e g o skoroszytu w porzadku rosnqcyn
. .

Dim SheetNamesO As String


Dim i As Integer
Dim: Sheetcount As Integer
Dim iten AS ~ b j e c t
Cim Oldactive As Object

IfPctivdJorkbool: I s &thing Then E x i t Sub ' Brak attywnego skorcszytu


258 C z g f C Ill + Jezyk Visual Basic for Applications

SheetCount - ActiveWotkbook .Sheets .Count


a
Sprzwdzenie, czy j e s t chroniona struktura skoroszytu
If ActiveW~rkbook.ProtectStructure Then
Msgbx ActiveWorkbook .Name 8 " j e s t chroniony .'. -
v b c r l t i c a l . "Nie j e s t mZliwe posortowanie arkuszy. "
E x i t Sub
End If

Appi ication.EnableCancelKey xlDisabled -


Wy?qczenie kmbtnacji k l awiszy C t r l 9 r e a k

Uzyskanie 1tczby arkuszy


SheetCount = AttiveWorkbook. Sheets .Count

Zniana rozmiatu t a b l i c y
ReOim SieetNames(1 To SheetCount)

-
'
Zapisanie odwolania do aktywnego arkusza
Set OldActive Activesheet

-
Wypelnielie t a b l i c y nazwarni arkuszy
Fcr i 1 To SheetCwnt
-
SheetNamesC 1 I Ac:iveWorkbook.SheetsIi 1 .Name
Next 1
'
Sortmanie t a b l i c y u porzadku rosnqcym
C a l l BubbleSort(SheetNames)

Wy lqczen-e odswieiania ekranu


Aopl ication.ScreenUpdating False -
'
-
Przenoszenie ahuszy
For i 1 To SheetCount
P c t i v W r k b w k . S h e e t s ( S k t N a m e s ( i ) ) .Move -
Before:-ktiveuorkbook .Sheets(i
Next 1
'
P o n m e wtpczenie p o c z q t k w aktpmego arkusza
0ldktive.ktivate
End Sub

Poniewa2 makro Sortsheets z o s k b zapisane w skoroszycie m a b osobistych. doqpne


jcst z a w s a po uruchomieniu E x c e l a M o t n a j e uruchomit, wybierajqc jego n a z y w oknie
d i a l o g o w y r n Mob0 (w c e l u j e g o otwarcia nalety wcisn@ k o m b i n a c j ~klawisEy AIt+F8)
lub wciskajqc kombinacje k l a w i s z y Ctrl+Shz@+FB.

M a h o m o t e t e t zostaC przypisane do nowego przycisku paska narqdzi lub pozycji


menu. Procedllry ponvalajqce wykonad to zadanie om6dono w u e h i e j w tym mzddale.
Rozddd 9. + Zastosowanie procedur Sub jezyka VBA 259

Ocenianie projektu
A zatern dotarlc6 do tego etapu. N q d z i e spehia wszystkie wstppne wymagania pro-
jektowe. Somje arkusze aktywnego skoroszytu. Mote by6 z lahvoSciq wykonane. Jest
zawsze dostppne i wydaje sic dzialaf w przypadku dowolnego skoroszytu. Ijeszcze nie
widzialern, teby to rnakro wyfwietlalo kornunikat blcdu jczyka VBA.

%
<!, Z procedurq w d a l s m ciqgu jest mlqzany Jedenpoblem. Polega on na tym.
i e sortowanie jest proste i rnoie nie zawsze .loglcme". Pnykladowo po wykonaniu
sortowania arkusz Arkusrll Jest umleszczany pzed arkuszern Arkusz2. WleksmlC
osdb chcialaby, aby to arkusz ArkuszZ znalazt siq przed arkuszern A r t u s z l l .

Naplsany przeze mnle dodatek Power Utility Pak zawiera macznie bardziej
zaawansowane narz-le sottujqce arkuaze. ktbre allmlnuje *yD( omdwiony yrobkm.
Rozdziat 10.
Tworzenie procedur Function
Funkcja jest procedurq jpzyka VBA m c a j q c q wartosir. ~unkcjernogq by6 stosowane
w kodzie ir6dlowym napisanym w jqryku VBA lub w formutach. Jqzyk VBA umotliwia
tworzenie procedur Sub i Function. Procedury Sub orndwitern w poptzednim mzdziale.
natomiast procedumm Function p o f w i ~ ten
e rozdziat.

a4 W rozdzlale 11.znajdujq si? pnydatne i praktyczne pnyktady zastosowania procedur


iunctim. Wlele r nich mobeu worrystat we wtasnej pracy.

Por6wnanie procedur Sub i Function


Pmcedurq Sub motna traktowaf jak polecenie, ktdrc wykonuje utytkownik lub inna
procerium. Z kolei procedury Functicn zamymj m c a j q pojedyncq wartoif tub tablice,
podobnie jak funkcje arkusza Excela i wbudowane Funkcje jpzyka VBA. Procedury
Function, podobnie jak hnkcje wbudowane, mom utywaC a3umentdw.

Procedury Function q doSf uniwenalnc. Motna je zastosowat w dwdch nastepujqcych


sytuacjach:
jako czqff wyraZenia zawartego w procedurze j ~ z y k aVBA,
w formufach twononych w arkuszu.
Tak naprawde pmccduq Function rnotna zastosowaf wsqdzie tam, gdzie stosuje sic
funkcje arkusza Excela lub wbudowanq funkcje jpzyka VBA.

Dlaczega tworzy sie funkcje niestandardowe?


Z pcwn09ciqjeste9 zaznajorniony z fimkcjami arkuszowymi Excela. Nawet poc?q!liujacy
wicdzq, jak podugiwat sic najcekiej stosowanymi knkcjami takimi, jak SUMA, SRECh IP
i JE'LELI. Wedhg moich szacmkbw Excel zawiera ponad 300 predefiniowanych finkcji
arkusza oraz dodatkowe hnkcje ofemwane przez nancdzie Anabsis TooWak. l e i lijed-
nak taka Biczba fimkcji ci nie wystarcm, utywajqc jjezyka VBA, motes2 stworzyf funk-
cje niestandardowe.

M a j v do dyspozycji wstystkie fmkcje Excela i jpzylca VBA, motna sip zastanawiak, po


co w og6le tworzyt n o w Funkcje. Ot6t po to, aby uprokit sobic pracc Dobrze pnrmyila-
ne funkcje niestandardowe sq bardzo przydatne w formdach arkusy i procedurach jqzyka
262 CzefC Ill + Jezyk Visual Basic for Applications

VBA. Czqsto na pnyklad w m a c q c y spos6b skracajq definiowane fonnu)y. Kr6tsze


formuly sq czytelniejsze i tatwiej z nich korzystat. Jednak nalev tet wspomniet, t e
bnkcje niestandardowe stosowane w formutach zazwyczaj sq macznie wolniejsze od
hnkcji wbudowanych.

Bywa tet, t e procedury powtamjq nicktbre obliczcnia. W takim przypadku naleFy f


ronvaZyf stworzenie niestandardowej firnkcji odpowicdzialnej za obliczenia. ktbq mo2na
po prostu wywdaC z procedury. Niestandardowa funkcja eliminuje koniecmo4d powieiania
tego samego kodu tr6dloweg0, a tym samym redukuje liczk blqd6w. Poza tyrn ze spe-
cjalizowanych funkcji, kt6re napiszesz, mogel korzystat inni uZytkownicy. Niektbny
chqtnie aplacqci za stworzenie funkcji, kt6ra pozwoli im zaoszezqdziC czas i mniejszyC
naktad pracy.

Co prawda, wiele osdb na my51 o koniecmoSci tworzenia niestandardowych funkcji ar-


kusza jest przeratonych, ale zadanie to nie jest takie tmdnc. Tak napmwdq tworzenie
niestandardowych funkcji sprawia mi prryjemnoif. Szczeg6lnie jestem zadowolony,
gdy stwonone przeze rnnie funkcje niestandardowe pojawiajq siq w oknie dialogowyrn
Wstawiuniefiflkcji obok wbudowanych funkcji Excela, p0niewa.t czuje sic, jakbyrn pod
jakimJ wzgledem dokonal p r z e b u d o ~tej aplikacji.

W tym rozdziale wyjdniq, jak tworzyf niestandardowe funkcje. Zamieszcz~w nim let
wiele prryktadow.

Pierwszy przyktod procedury Function


Bcz zbpdnych rozwatati zaprezentujp teraz przyktad proccdury Function jezyka VBA.

Funkcja niestandardowcl I

PoniZej zamiesrczono jednoargumentowq W c j p niestandardow Reverse. zdefiniowanq ,


w module VBA. Funkcja odwraca znaki zawarte w argumencie (czyli czyta od tytu)
i zwraca wynik w postaci 4ancucha.

JeSII ui)iwasz Excela 2000 lub nowszego, nle ma powodu, dla Mdrego warto w
to
m
1.0 tv funkcje. m a r c z y zsrtasowat funkcje StrReverre jezyka VBA.

Function Reverset instring) As Strlng


' Zhraca a r g m t (odwbcony tekst)
- -
Dim StringLength As Integer. 1 As Integer
Reverse ""

-
StringLength LentInString)

-
For ! StrlngLength To 1 Step - 1
.
Reverse Reverse 6 n i d : I ~ S t r i n g . i 1;
Next i
End Function

Dzialanie funkcji wyjdnip p6hiej w podpunkcic ,,Analiza funkcji niestandardowej".


Rozdzial10. + Twarzenie procedur Function 263

Twonqc niestandardowe funkcje, kt6re bedq stosowane w formule arkusza, nalea


SShR
upemif sic czy ich kod Z26dIowy zostal umieszczony v zwyklym module VBA. JeLli
kod frbdlowy zostanle umieszczony w module Sheet lub 7%isWorkbook,Iworzone
funkcje nie zadziatajq po wstawieniu do forrnut.

Zcrstosowanie funkcji w arkuszu


Po zdefiniowaniu fonnu!y utywajqcej finkcji Reverse Excel w celu uzyskania wartoSci
wykona kod trddlowy funkcji. Oto przyklad zastosowania funkcji w formule:

Na rysunku 10.1 pokazano przykhd dzialania funkcji. Formuly zawarte w kolumnie 0


jako argumentdw utywajq laftcuchdw tekstowych umieszczonych w kolumnie A. Jak
widat, funkcja twtecaswoj argument ale awarte w nim maki sq w o d w m e j kolejnosci.

Ryrunek 10.1.
Zastosowanie
w formule arkusza
niestandardowe]
funkcji

WfaSciwie funkcja dziala batdzo podobnie do dawolnej wbudowanej funkcji arkusza.


Mote zostat urniesmna w fnmule popna wybranie z menu Wstm pozycji Funlrcja lub
prrez klikniccie pnycisku Wstuwfunkcjq majdujqcego sic z lewej strony paska form*.
POwykonaniu jednej z tych operacji mtanie otwarte o h o dialogowe Wsfmvianiej'knkji.
W o h i e tym niestandardowe M c j e domySlnie squrnieszczanc w katcgorii u @ f b n i h .

W kilku pnypadkach W i e funkcji Reverse doprowadzi do zaskakujqcych wynikbw.


Jdli argumentem funkcji bqdzie wartoSd, jako jej wynik uyska sip niesformatowanq
Warroik. Gdy argumentem b ~ d z i ewartoe logicma (PRAWDA lub FACSZ), funkcja nie za-
chowa w wyniku wielko3ci liter, a co ddwniejsze o w e sip, p. funkcja pnctmrra an-
gielskie odpowiedniki nazw tych wartoSci (True lub False).
Niestandardowe funkcje m o m by6 tet zagnieMtane i @czorte z innymi elementami
formuf. Przykladowo p o n k formula (km2ytecz.a) d w u h m i e utywa funkcji Reverse.
Wynikiem jest pocqtkowy ldcuch.
264 Cz$& Ill Jgzyk Wsual Basic for Appllcatlons

Zastosowanle funkcjl w procedurzejgzyka VBA


Nicstandardowc h k c j c . s q stomwane nie tylko w f m u k h arkuszm, ale takte w innych
proccdurach jpzyka VBA. Ponitsza procedura sdefiniowana w tym samym module, co
niestandardowa funkcja Reverse, najpierw wySwietla okno urnotliwiajqce uZytkownikowi
wprowadzmie lslicucha tckstowcgo. a nast~pnieutycva wbudowanej funkcji HsgBox jqzyka
VBA, !&I-a wyswietla tekst wprowadzony przez uQtkownika j u t po przetwoneniu go
przez funkcjp Reverse (rysunek 10.2). Poczqtkowo wprowadzony tekst pojawia siq
w pasku tytutu okna komunikatu.

Ryrunek 10.2.
Zastosowanie
niestandardowej
funkcji w procedune
j e m a VBA

Sub ReverscIt()

-
Dim UserInput AS Strlng
UserInput InputEox('Wpmdf tekst:')
.
Msgbx Reverse(User1nput). UserInput
End Sub

W przykladzie pokazanym na rysunku 10.2 ~ c u c wprowadmy


h po wywolaniu funk-
cji InputBox ma postaf &cd 2003. Programowunie w VBA. Funkcja HsgBox wydwietla
tekst po odmdceniu.

Analfza funkcji nlestandurdowej


Procedury Function mogq byC dowolnie zlotone. W wi~kszofcipnypadk6w q bardzicj
dotone i o wiele pnydamiejszc od przytoczonej tu pmcedury. Nimniej jednak analiza
ponitszej prostej proccdury Function mote by6 pomocna w notumieniu procedur bar-
dziej zlotonych. Oto powtdmie zamieszczony kod h6dlowy funkcji Reverse:
Functton ReversetInString) As String
Zwraca argunent (adwrkony tekst)

-
Dim StringLength As Integer. I As Integer

- --
Reverse "

StrlngLength Len(lnString1
For I StrtngLength To 1 Step -1
Reverse Reverse L Mld[InString, i. 11
Next t
End Function

Procedura rozpocyna sic siowem klucmwym Function zamiast Sub. a po nim majduje
sip nanva funkcji - Reverse. Ta funkcja utywa tylko jcdnego argumenhl (Instring)
zawartego w nawimch akqglych. As String defmiuje typ danych wartoici nvracanej
p m z fwkcjt. Jelli nie zwtanie podany taden typ danych, Excel we typu Variant.

Drugi wienz jest zwyklym komentarzern (opcjonalnym) opisujqcym przcznaczenie


funkcji. W nastqpnym wierszu majduje sip instrukcja Dim, a za niqdwie zmienne Strin-
gCength i I. Pocqtkowq wartolcia procedury jest pusty tdcuch. N a l w zauwatyd, kc
w tym w i e m nazwa funkcji jest zmienng Po zakohzeniu dzialania funkcja zawszc
zwraca aktualnq wartd6 zrniennej, ktbrej nazwa odpowiada nazwie hnkcji.
Rozdziot 10. e T w o ~ e n i eprocedur Function 265

Czego nicutandardowa hmkcje arkusza nie potrdq7


JeSli twonysz nlestandatdow~funkcje, rnusisz rozumiec! klucmwq rbtnlw pomledzy funkcjami
wywotywanyml z innych procedur jezyka VBA i funkcjaml stosowanyml w ionnutach arkusza. Pro-
cedury Function w formutach muszq by5 pasywne, nie mogq manipulowat zakresami lub zawar-
to5ciq arkusza. JeSIi, dajmy na to, chcesz stwomy6 niestandardowq funkck arkusza zmieniajqcq
formatowanle kombrkl, przydadna mogtaby sle okazat formula uzywajqca niestandardowej funkcji
mieniajqcej w oparciu o wartoX z komdrkl kolor zawartego w niej tekstu. Moiesz pr6bowad
rdznych sposob6w. ale Jednak napisanie takiej funkcji nie jest motliwe. Niezaletnie od tego, jak
postapisz. funkcja zawsze zwrki Mqd. Nale;iy pamietaC o tym, te funkcja zwraca jedynie wart055
i nie potrafi wykon)w& operacji na obiektach.

W nasttpnym wierszu funkcja Lenjpzyka VBA okrtSla dlugoSC wpmwadzonego hicucha


i przypisuje j q zmiemej StrlngLength.
Kolejne my instrukcje t w o p ~ t l Fore . . . Next. Procedura wykonuje petle dla kazdego
znaku wprowadwnego tekstu (idqc od tylu) i tworzy Iahcuch. WartoiC Step zawarta
w pctli Far . . . Next jest liczbq ujemng k6ra powoduje wykanywanie ~ t lwi odwromyrn
kierunku. Insmkcja w petli W w a funkcji Mid jczyka VBA zwracajqcej pojedynczy
znak wprowadzonego hhcucha Po zakonczeniu wykonywania pptli wartofcia zrniennej
Reverse jest wprowadzony lancuch, kt6rego maki sq uszeregowane w odwrotnej kolej-
noSci. Laricuchjest wartofciq nvracanq przez funkcjq.

Pmedura konczy sic instrukcjq End Function.

Procedury Function
Niestandardowa procedura Function ma wiele wspblnego z proceduq Sub. Aby uzyskat
wiwej informacji na ternat procedur Sub, nalety zajrzeC do rozdziahr 9.

Deklarowanie funkcji
Skladnia deklaracji funkcji ma pstaC:
:Pub1 i t Privatel[Stmicl Funcion n a m ([ lista-argunent&ll [k typl

-
[Instrukcjel
[narwa wyratenfe]
[Exlr F ~ m c t i a n l

-
[instrukcjel
C n a m wateniel
End Function

Znaczenie element6w skladni jest nastqujqce:


Pub1ic (opcjonalne): sbwo kluaowe identyfikuj4ce p m c e d u ~Function dostcpnq
dla wszystkich imych p m d u r zawartych we w s ~ t k i c powstatvch
h modulzch

P r l vate (opcjonalne): stow0 kluczowe powodujqce, te procedura Function bedzie


dost~pnatylko dla innych procedur tcgo samego modulu.
266 CzeJt Ill + Jezvk Visual Basic for A ~ ~ l i c a t i o n s

IStat1c (opcjonalne): slowo kluczowe powodujqcc, t e wartohi zmiennych


zdeklarowanych w procedurze Function sqzachowywane pomipdzy kolcjnym
wywdaniami.
Function (wymagane): siowo kluczowe identyfikujqce pocqtek procedury
zwracajqcej warroSt Lub dane innego typu.
nazwa (wymagana): reprezentuje dowolnq poprawnq nazwp procedury Function.
Nazwa musi zostat nadana zgodnie z zasadarni stosowanymi w nazywaniu
zmiennych.
argument& (opcjonalna): reprezentuje listp jednej lub kilku miennych
I 1i s t a
bsdqcich argumentarni przekazywanymi procedurze. Argumenty sq umieszczane
w nawiasach obaglych. W celu oddzielenia par argumentdw stosuje sic przecinek.
&yo(opcjonalny): identyfikuje typ danych wartofci m c a n e j przez procedurp
Function.
i n s t r u k c j e (opcjonalne): iancuch reprezentuje dowolnq liczbq poprawnych
instrukcji jpzyka VBA.
Exit Function (opcjonalna): instrukcja wymuszajqca natychmiastowe zakohczenie
procedury Function jeszcze przed osiqgnipciem jej formalnego kofica.
End Function (wymagana): instrukcja identyfikujqca koniec procedury Functlon.

Nalety pamietak, Ze wartoid musi zosaat przypisana p y a j m n i e j raz do zmiennej ma-


jqcej nazwe funkcji. Zwykle ma to miejsce, gdy hnkcja kohczy dziahnie.

Aby stworzyt niestandardowq funkcjp, najpitnv nalety wstawit modut VBA. Motna
tet posh2yC sip jut istniejqcym modulem. Wprowadf s b w o kluczowe Function, a za
nim nazwq funkcji i list? argumentdw (jeili sq koniecme) w nawiasach okmglych. Za
pomocq slowa klucmwego As (opcjonalne, ale zalecane) motna zdeklarowat typ da-
nych zwracanej wartosci. Wprowadt kod trtklfowy jezyka VBA realizujqcy zadanie.
upewniajqc sic, t e wewnqtrz procedury Function przynajmnicj raz odpowiednia wartoit
zostata przypisana m i e ~ emajqcej
j n w funkcji. Zakoncz funkcjp, u w a j q c insbukcji
End Function.

Nanv funkcji dotycq takie same zasady, jak nanv zmiennych. JeSli planujesz utycie
w formule arkusza niestandardowej funkcji, upewnij sip, 2 jej m a nie ma postaci adresu
komdrki. Pnykhdowo funkcja o nazwie 521 nie zadtiah po urnieszczeniu w formule.
Poza tym unikaj utywana nazw wbudowanych funkcji Excela. JeSli wystapi konflikt
nanv, Excel zawsze utyje funkcji wbudowanej. -
Zasiqg funkcji
Zasiqg funkcji - w podobny spmdb, jak zasig procedur orndwiony w rozdziale 9. -
okreila, czy funkcja mote rnstat wywoha p r z ~ procedury z innych moduh5w lub arkuszy.
Oto kilka infonnacji o zasipgu funkcji, o k t w c h nale2y pamiqtaC.
w JeSli nie wstanie zdeklarowany zasitg hnkcji, domfllnie b-e zastosowany
zasiqg identyfikowany przez slowo kluczowe Pub1 ic.
I
Rozdziol 10. + Tworzenie procedur Function 267

Funkcje zdeklamwanc p n y ukyciu slowa kluczowego Private nie pojawiq sic


w oknie dialogowym Wstawianiefinkcji Excela. A zatem w deklaracji funkcji.
kt6ra powinna byt W a n a tylko w procedune jqzyka VBA, nalezy zastosowat
dowo kluczowe Private, tak aby utytkownicy nie mogli umieSciC jej w formule.
Jelli kod Mdlowy j m k a VBA wymaga wywolania funkcji zdefiniowanej
w innyrn skoroszycie, nalety stworzyd do niego odwdanie za pornocq polecenia
References zawartego w menu Tools edytora Visual Basic.

Wykonywanie procedur Function


Wiemy jut, t e procedura Sub mote zostaC wykonana na wiele sposob6w. jednak
w pnypadku procedury FuFctian dostcpne sq tylko dwie metody:
wywdanie z innej procedury,
a wywotanie poprzez umiazczenie funkcji w fonnule arkusza.

Wywotanie funkcji z procedury


Niestandardowe funkcje mogq by6 wywdywane z procedury w taki sam spos6b. jak
funkcje wbudowane. Przykladowo po zdefiniowaniu funkcji o nazwie Sum4rtay motna
zastosowad nast~pujwqinstrukcjp:
Total - Smrray(HyArray1

Instrukcja wykonujc funkcje SumArray, pobierajqcq argument HyArray, nvraca jej wynik
i pnypisuje go zmiennej Total. M o h a t e t utyC metody Run obiektu Appl Ica t~on. Oto
pnykhd:
Total - Appl tcation.Run('Sm4rray". "WArray')

Pienvsq argument metdy Run jest nazwq funkcji. Kolejne argumenty reprezenhjq argu-
mendy) hnkcji. Argumenty rnetody Run mom byf literaiami (jak powy2szym pnykladzie),
liczbami lub zmiennymi.
1 Wywolanie funkcji poprzez umleszczeniejej w formule arkusza
I
Stosowanie niestandardowych funkcji w formule arkusza jest podobne, jak w przypadku
wbudowanych funkcji, z tqr6hicq. 2c musiu. sic upewni6, c y Excel potrafi zlokalizowad
procedure Function. JeSli procedura Function majduje sig w tym samym skorosqcie,
nie trzeba podejmowa6 Zadnych dodatkowych krok6w. JeSli jest umieszczona w innyrni
skoroszycie, hzeba poinformowat Excel o jej lokalizacji. Mokna to mbiC na trzy sposoby:
Popnez umimczenie pned nazw(6.nkqji odwdania do pliku. Aby na przyklad
utv6 funkcii o nanvie CountNames zdtfiniowanei w otwarhrm skomzvcie

Po wybraniu funkcji w oknie dilogowym Wstawianlefinkji odwdanie


do skoroszytu zostanie wstawiune automatycznie.
268' C Z Q111~+ J ~ z y kViuol Basic for Applkaticns

Poprra zddniowanie ohvdania do rkorauytu. W tym celu z menu Tools


edytora Visual Baric nalety wybrat pozycjp Refkrences. JeJli funkcja znajduje sip
w skoroszycie, do kt6rego zdefiniowano odwofanie, nie bqdzie konieczne w c i e
nazwy arkusa Nawet jdli znl-y skorosyt majduje siq w odwdaniu. po wybraniu
funkcji w oknie dialogowym Wsrcnumniefunkcji nadal odwdanie jest definiowane
(chot nic jest to koniecme).
Popcez s t w o m i e dodatku. J d l i w tmkcie twonenia dodatku na bazie skorouytu,
rawierajqcego procedury Func+.!on. w formule mstanie utyta jedna z tych funkcji,
nie jest konieczne definiowanie odwolania do pliku skoroszytu. Jednak dodatek
rnusi zostat zainstelowany. Dodatki om6wip w rozdziale 21.

W prteciwiehstwie do procedur Sub procedury Functl on nie pojawiajq siq w oknie dia-
logowym Makro pa wybraniu z menu Narzqdrirr pozycji Makro. a nastpnie Makra.
Rdwniet jdli kursor zosral umieszcmny w obuarre procedury Function, po wykonaniu
polkenia Run SuWUserForm zawartega w menu Run edytora Visual Bait lub wci5niviu
klawisza F5 nie bqj& motliwc wybranie funkcji Zostanie wtedy otwam okno dialogowe
hfacro umotliwiajqce wybranic makra, kt6re zostanie uruchomione. W efekcie w celu
przetestowania tworzonych funkcji koniecme k d z i e wykonanie dodatkowych operacji.
Jedna z metod polega na stworzcniu prostej procedury wywdujqcej funkcjq. IeSli funkcja
zostaia shvomna z my4lq o utyciu jej w formutach arkusm, w celu jej sprawdzenia
motna zdefiniowat formu+$.

Argurnenty procedury Function


Nale2y pamiqtad o nastppujyych kwestiach nviqzanych z argumentarni proudury
Function:
argumenty mogq by4 niennymi (w tym tablicami), stalymi, literahmi
lub wyrateniarni.
niekt6n funkcje nie posiadajq argumentdw,
niekt6rt funkcje posiadaj4staI.q liczbq wyrnaganych argumentdw (od 1 do 60),
nicktbrr funkcje posiadajqzardwno wymagane, jak i opcjonalne argumenty.

Sfi* Jefll lomwta utywa nbstandardowe] bnkcji i z k c a wartog b@du#AffG!, omacza to,
te w snkc]l wystrpll b+qd. Mogq go powodcnvaf b w loaczne kodu tr6dkwego
na skutek przekazania funkcjl niepoprawnych argurnent6w lub wykonania nledonvplone]
operecjl taklej, jak pr6ba miany fonnatowanla korndrki. Zapomaj sie z ZawartoScig
punktu .FunkcJe wykrywajqce I usuwajqce wdy"w dalsze] cefci rozdziatu.

Przyklady funkcji
W tym punkcie zaprezmtujp kilka pnykladbw efektymego stosowania argumentdw
funkcji. Nawiasem m6wiqc, zawart06t punktu dotyczy t e t procedur Sub.
Wszystkle W d y w r n l e m e w tym punkcle majdujq sie na ddqczonym dysku
Rozdziof 10. + Twonenie wocedur Function 269

-
Ponowne wynaklenis kola
Wy+qcmiedla zabawy naplsatem wtasnq wersk funkcjl 1ITERY.WIELKIE Excela (zarnienia wszystkie
maki taficucha na d u k ) i nazwakm jq UpCase. Oto ona:
Function UpCase(1nString As String) As String
'
Zamienia w argumencie makl na dute (z wyjatkiem polskich l i t e r )
Dim StnngLength As Integer
0-rn i PS Integer
D:m ASCIIVal As Integer
O l m Cr~arvalAs Integer

-- -
StringLength Len(1nString)
UpCase Instring

--
For i 1 To Stringlength
ASCIIYal Asc(Mld[InStrlng. i.111
CharVal 0

-
I f ASCIIVal >- 97 And A S C I I V a l <- 122 Then
CharVal -32
-
MidCUpCase. 1. 1) Chr(ASCIIVa1 CharVal 1
End I f
Next I
End Function
Naleiy z a u w w , t e oparkm sie pokusle p6jjfcia na latwlmq i nie utykrn funkcjl UCase jezyka
VBA. Clekaw bytern, czym niestandardowa funkcja rdtni sig od funkcji wbudowanej, dlatego
stwonytem arkusz wywolujqcy 20 000 razy funkcje. ktdrej argumentem byl takuch ztoiony z 26
makdw. Obliczenia w arkuszu zajety okoto 9 sekund. Nastepnie wstawitem do arkusza funkcjp
1ITERY.WIE:KIE i ponownie wykonatem test. Tym razern obliczenia zostaty vqkonane prawie na-
tychmiast.
Moja funkcja UpCase nle jest optynalna w W p a d k u tego zadania, ale bez obaw rnogg powiedzid, ie
nlestandardowa funkcja pod wgl@ernsrybkoSci nlgdy nie dordwna wbudowanyn funkcjom Excela.

Funkcja pazbawiona argument6w


Nie wszystkic procedury Function wymagajq stosowania argumentbw, W Excelu s q to
na pnyklad wbudowane funkcje LOSO. O Z I ~ ( i TERN( ). lsmieje rnoZliwoSC twoczenia
podobnych funkcji. Ponitej zamieszczono prosty przyklad:
Functim User0

. .
-
. Zwraca name aktualnego utytkmnika
User nppl icatlon.UserNarne
End Function
.. .- .
Funkcja k c a wMciwoSC Useflame-obiektuApplricat ion. Wart056 wlafciwoici majduje
sip w oknie dialogowym Opcje (zaktadka Ogdlne) i jest pnechowywana w rejeseze
systernu Windows. Po wpmwadzeniu ponbzej formuly w kom6rce pojawi siq nazwa
aktualnego u2ytkownika (przy zahtmiu. fe jest ona popramie pncchowywana w rejestize
systemu Windows):

W prrypadku utycla w formule arkusza funkcjl pozbawionej argumentbw koniecrne


@p* , -a,
jest dolqczenle p r y pustych nslriudw o k ~ ( y c h Co nie jest to konieczne.
gdy funkcja jest wywdywana z wocedury jezyka VBA. ale uwzg!tdnienle naw~asdw
w pimi podkreSla to, i e jest to wyvofpvana funkcja
270 CzqfC Ill Jezyk Visual Basic for Applications

Aby zastosowat funkcje w innej procedurze, konieczne jest przypisanie jej zmiennej,
u2ycie w wymeniu lub u e c i e jako argumentu innej funkcji. W poni2szym pnykhdzie
wywowana jest funkcja user; woat& r! jest m a c a n a jako argument funkcji MsgBox.
Operator 8 tqczy literal laficuchowy z wynikiem funkcji User:
S L ShowUser(
~
MsgBox 'Nazywasz 51C " 8 User0
Erd Sub

Kolejna funkcja pozbawlona argument6w


Aby szybko wypehit wartofciami zakres komdrek, @{em funkcji LOSt IExcela. Jed-
nak katdorazowo po ponowieniu obliczen arkusza wstawiane wartoSci by+y losowo
zmieniane. Z tego powodu nvykle rnusialem wybierat z menu Edycja polecenie Wklej
specjalnie (opcja Wartoici) i z jego pornocq zamieniat formuty na wartoici. P6hiej
u9wiadomilem sobie, t e mogG stworzyt niestandardowq funkcjp macajqcq losowe
wartoSci, ale nie modyfikujqcq ich. Zastosowakm wbudowanq funkcje Rnd jqzyka VBA,
ktbra nvraca losowe wartoici z pmdtiatu od 0 do 1. Niestandardowa funkcja ma na-
stqpujqcq postat:
Function
'
StaticRandO
-
Zwraca loswa wartoit. Ltdra nie jest mlenlana po ponwieniu obl lczel
StatlcRand R n d O
End Functi~n

Aby wygenerowaf serie losowych liczb calkowitych z przedziaiu od 0 do 1000. m o a a


zastosowac nastqpujqca. formule:

W pneciwienstwie do wbudowanej funkcji LOSO wartofci uzyskane po wykonaniu


f o r n u b nigdy sip nie zrnieniq.

Funkcja z jednym argumentem


W tym podpunkcie om6wiono funkcjp utywanq pmez kierownikbw sprzcdtiQ, k t 6 v
m u s q obliczat prowizjp uzyskiwanq przez podlegajqcych im przedsfawicieli. Obliczenia
opieraja sip na nastqpujqcej tabeli:

Miesipma spnedai Stawka prowlzji


0 - 9999 zlotych 8.0%

WysokoSC prowizji zwipksza siq w sposdb nieliniowy i zalety te2 od CaHrowitej*ps


rniesiecmej. Pracownicy osiagajqcy wiqksqspnedat otnymujqwy2sze prowije. . ,
Rozdziat 10. Twonenie procedur Function 27 1

Kontrolowanie panownego wykanywsnla funkcjl


W jaklm momencle ponownle jest wykonywana nlestandardowa funkcja zastosowana w formule
arkusza? Niestandardowe funkcje zachowujq si$ podobnie, jak wbudowane funkcje arkusza
Excela. Zwykle niestandardowa funkcja panownle wykonuje obllczenia, gdy jest to koniecme, czyli
gdy zostanle zmodyfikowany dowolny jej argument. Moina jednak wymuslC czgstsze ponowne
wykonywanie funkcji. Urnleszczenie w procedurze Function panitszej tnstrukcji spowoduje. i e funk-
cja zostanie panownie uruchomiona katdorazowo pny wykonyaniu obliczeh w arkuszu. Je51i uak-
tywniono tryb automatycznego obllczania. opracja zostanle wykonana po kaidej modytlkacji
dowolnej kombrki:
Application.Volatile True
Metoda V o l a t i l e oblektu Application posiada jeden argument (True lub False). R2yplsanle procedurze
Function roli tunkcji nietrwafej spawoduje, te zostanie wykonana katdorazowo pny ponownym
obliczaniu dowolnej korn6rki arkusza. PnyWadowo niestandardowa funkcja StatlcRand moie zo-
staC przy utyciu rnetody V o l a r i le tak zmleniona. aby ernulowala funkcjv LOS( IExcela:
Function NonStatlcRand()
Zwraca loswq wartodt. ktdra zmlenla sle po kaFdyn przellczeniu arkusza

-
Applicaticm.Volatile True
NonStaticRand RndO
End Function
Je511 argumentem metody Volatile W z i e False, funkcja zostanle pcnownle wykonana tylko wtedy.
gdy jeden lub wiwej jej argument6w zmleni sig w wyniku tej operacji. JeOli funkcja nie poslada
argurnenMw, to funkcja nle W z i e powt6mle wykonana.
Aby wymusiC ponowne wykonanie wrystklch obllneh uwzglednlajqcych niestandardowe funkcje
trwale, nalety wclsnqC komblnecje klawisry Ctrl+Alt+FS. Taka kombinacja. je91i zostanie u w a
w pnyk+adzlezaprezentowanyrn w rozdzlaie, wygeneruje nowe liczby losawe dla funkcji StaticRand.

lstnieje kilka memd obliczmia prowizji dla r h y c h wartoici sprzedaty wpmwadzanych


do arkusza. Jefli dobrre siq nie zastanowisz, mote straciC wielc czasu i stwonyk dhgq
forrnulp podobnq do ponitszej:

Z kilku powod6w nie jest to wlafciwa metoda. Po pierwsze, formuta jest zbyt dotona,
p m z co nudno j q m z u m i e f . Po drugie. wartohi sq na & wprowadzone do fornub,
na skutek czego trudno jq modytikowat.

L e p s q metodq (niewykorzystujwq jezyka VBA) jest zastosowanic do obliczenia pro-


w i z j i funkcji przeszukujqcej tabele. Przykladowo p o n h z a formula w celu ~obrania
wartoSci prowizji z zakresu o nazwie Tab1 e utywa funkcji WYSZUKAI . PIONGWO, a nastepnie
mnoty japrzez wart086 kom6rki A l :
-WYSZUKGI. PIMM[AI:Table:2l*Al

Kolejna met& eliminujqca konieemoX stasawania funkcji prztsPlkujwj tabelp polega


na stwomniu niestandardowej funkcji takiej, jak ponitsza:

--
Function Cumnlsslon(Sa1es)
Const Tier1 0.08

-
Cons: Tier2 0.105
Cons: Per3 0.12
272 CzefC Ill + Jewk Visual Basic for Appllcationr

Canst T1er4 0.14 -


Obl lcZa p n m i z j t od sprzedaty
Select Case Sales
- -
Case 0 To 9999.99: Conmission Sales * Tier1
Case 10000 To 19999.99: Comnlssion Sales * Tter2

- -
Case 20000 To 39999.99: Canniasion Sales * Tier3
Case Is >- 40000: C m l s s i o n Sales * Tier4
End Select
End Function

Po umiesrcaniu funkcji w module VBA motna jej utyt w formule arkusza lub wywolat
z innych procedur jqzyka VBA. Gdy wprowadzisz do kombrki p o n h q fomul$:

Nawet j d l i nie zamienasz stosowat w arkusm funkcji niestandardoych, stwornnie


procedury Function mote znacmie uprokie kod Wdlowy napisany w jpzyku VBA. Jeili
na pnyklad procedura jqzyka VBA oblicza prowizje od spmdaty, rnotna u w dokhdnie
takiej samej funkcji i wywolat jq z procedury VBA. Ponitej zamieszctono p r o c e d u ~
Sub prosqcq utytkownika o wprowadzenie wartoSci sprzeda2y. a nastqnie utywajqcq
funkcji Crmnlssion do obliczenia prowizji:
Sub CalcCan!~O

-
Dtm Sales As Long
Sales I m t B a x ( "Wpraradt wartost sprzedaiy: ')
MsgBax ' P m t r j a wynosl ' 1 tomnissiontSales)
End Sub

Na poczqtku pmcedura o nazwie CalcCm W w i e t l a okno, pmszqc o wprowadzenie


wanolci spneda2y. Nastppnie e w i e t l a okno komunikatu zawierajqce oblliczonzl wy-
sokoJ6 prowizj i dla podanej kwoty.

Procedura Sub dziala, ale raczej jest niestarannie napisana. Ponitej majduje sip jej mz-
szenona wenja wySwietlajqca sformatowane wartoici i wykonujqca p ~ t l edo momentu
klikni-ia p n e z utytkownika prrycisku Nje (rysunek 10.3).

Rysunek 10.3.
Zastosowanie ttfnkcjl
do @wiet/enb
wynlku obliczenla.

Sub CalcComn( 1
Dlm Sales As Long
. .Dlm.&g As String. Ans AS Strlng . , .: , ,
. . .

-
*
Probba o padante w a r t o ~ c isprzeda&
Sales Val (Input&x( "Wpmadi wartoit sprzedaLy :'. "Kalkulator prwizji od
sprzedaty' ))

' Twrzenle k m n i k a t u
Rozdzial 10. + Tworzenie procedur Function 273

Msg -- YartoiCvbCrLfsprzedaly:' a vbTab vbTab


& Format(Sa1es.
'b.XXO.00 z1")
Msg
Msg
Msg
--k g & & 'Pmizja:" &
lrsg & Formt(Comnisslon(Sa1es). "#.#O.OO 21')
Fsg B vbCrLf & vbCrLf L "Kolejne obliczenle?"

--
Wyhletla wynlk i pros? o podante kolejnej wartofct sprzeaaty
.4ns l4sgbx(Msg. vbYesNo. "Kal kulator prwizji od sprze?latyU)
If Ans vbYes Then CaIcComn
End Sub

Funkcja utymr dw6ch wbudowanych s*ch jezyka VBA. Stah vbTab reprezentuje tabula-
tor (odstpp praed wynikiem). natomiast stafa vbCrLf wprowadza znaki powrotu karetki
i wysuwu wiersza (powoduje przejgcic do nastepnego wiersza). Funkcja Formt jqzyka
VBA wyxyfwietla wartoft w okreilonym formacie (w tym prtypadku ztotonym z prze-
cinka, dw6ch miejsc dziesipmych i lahcucha 2').

W obu przykladach procedury CalcCm funkcja Cmnissiorl musi bye dostepna w aktyw-
nym skoroszycie. W pmciwnym razie Excel wyfwietli komunikat btcdu informujqcy.
t e h k c j a nie zostala zdefirriowana.

Funkcja z dwoma argumentami


Wyobrai sabie, tc hipotetycmi kierownicy s p r z c d a ~z popnedniego pnykladu wpro-
wadzili no- zasade pozwalajqcq zmniejszyt obr6t. Polega ona na tym, t e catkowita
prowizja jest zwiehzana o jeden procent po katdym kolejnym roku przepracowanym
przez pradstawiciela w firmie.

Zmodytikowalcm niestandardowq funkcje C m i s s i o n zdefiniowan;4 w poprzednim pod-


punkcie., tak aby pabierah dwa argumenty. Nawy argument reprezentuje liczbq lat pracy.
Wywotaj nowqknkcjq Comnl ssion2, ktdra wyglqda nastqpujqco:
Fvnctron Cnaissian2(Sales.. Years)

---
Obllcza prwlzje od sprredaty w oparciu o l a t a p'acy
Cmst Tler? 0.09
tonst Tier2 0 .ID5
tonst Tier3 0.12
Cmst Tier4 0.14 -
Select Case Sales
- -
Case 0 Ta 9999.99: tomntssionl Sales * Tier1

- - -
Case BDOOO To 19999.99: Ccmnisston2 Sales Tier2
Case 20000 To 39999.99: ComnisslonZ Sales * Tier3
Case Is 4DDOD: Comnission2 Sa:es Tier4

End
End Se 1ea
CcmnissionZ
Function
- Carmisalon2 + (Comnlsslon2 * Years / 100)

Czyt nie jest to bardzo proste? W instrukcji rawierajqcej stowo kluczowe F~r.:t:or
urnidcilem jedynie drugi argument (Years) i dodatem instrukcje odpowiedruio modyfi-
h j q c e obliczenie prowizji. Ponitej mmieicikm prryklad formuty utywajqcej funkcji
C m i s s i o n 2 (alotylem, t c wartodf sprredaty majduje sig w komorce A ! , natorniast
liczba lat pmpmcowanych przez przedstawiciela w korndrce 011:
274 CzqfC Ill + Jezyk Visual Basic for Applications

Funkcja pobierajqca tablice jako argument


i
Procedura Function mo& tet jako argument pobraC jednq lub kilka tablic, przetworzyt
je i nvr6cit pojedyncq wartoib. Tablica mote tet skladaC siq z zakresu kombrek. Po-
nitsza funkcja jako argument pobiera tablicq i m a c a sumq jej element6w:
Functicn SumArray(List)As Couble
Dim Item As Vartant
SumArray 0-
For Each item i n List
If WorksheetFunctlcn.IsNmber(Itm) Then SurrArray
Next item
- SumArray + Item
End Function

Dzieki funkcji IsNumber (CZY.LICZBA) Excela, ktdra przed dodaniem katdego elementu
tablicy do sumy callkowitej sprawdza, czy element jest liczbq, m o h a wyeliminowaC:
btqd pomieszania typdw, wystepujqcy podczas prbb wykonania operacji arytmetycmej I
na tancuchu. Ponitsza procedura demonstruje, w jaki spos6b wywotat tq funkcjp z pro- 1
cedury Sub. Procedura MakeList tworzy tablicp zlotonq ze 100 elementbw i katdemu I
z nich przypisuje losowq wartoSC. Pbhiej poprzez wywolanie funkcji SumArray funkcja
MsgBox wyiwietla sum? wanogci element6w tablicy.
(
Sub Makelist0
Dim Nurns(1 To 100) As OouSle
Dim
For i - -
1 as Integer
1 Tc 100
Mums( 1 ) 2nd * 1000
Next 1
Wsg80x SurrArray(Nums)
End Sub
I
Poniewat funkcja SumArray nic deklaruje typu danych swoich argumentbw (stosowany
I
jest typ Vznant), mote tet zostad utyta w tworzonych formuhch arkusza. Pnykladowo
ponitsza formula zwraca sum? wartotci kornbrek zakresu A 1 : ClO:

Funkcja Sum4rray zastosowana w fonnule arkusza dziah bardzo podobnie do funkcji SW


Excela Jedyna rbhica polega na tyrn, t e funkcja Svrdrray nie akceptuje'wielu argumentdw.
Funkcja SUMA mote pobrat maksymalnie 30 argurnentbw. Nalety miec fwiadomoid, te
powytszy pnyktad pnytmtono tylko dla celbw edukacyjnych. Zastosowanie w forrnulr
funkcji SumArray zamiast funkcji SUMA Excela nie daje absolutnie tadnych korzylci.

Funkcja uiywajqca opcjonalnych c1rgument6w


Wiele wbudowanych funkcji arkuszowych Excela utywa opcjonalnych argumentbw.
Przykladem jest funkcja LESIY, kt6ra zwraca znaki, pocqwszy od lewej strony laticucha.
Oto jej skhdnia:
I Rozdziat 10. + Tworzenie procedur Function 275

Pieiwszy argument jest wymagany, natomiast drugi opcjonalny. Jefli opcjonalny argument
zostanie porninipty. Excel utyje wartoici 1. A zatem ponitsm dwie formuly zwr6cq taki
Sam wynik:

Niestandardowe funkcje tworzone w jpzyku VBA tet mogq utywat opcjonalnych ar-
gumentdw. W celu zdefiniowania opcjonalnego argumentu przed jego nazwq nalety
urnicSciC siowo kluczowe Opt~onal.Na liicie argurnenty opcjonalne muszq znaleit sip
za wymaganymi. Ponitej zamieszczono przyktad prostej funkcji zwracaja-cej nazwp
ufytkownika (aryrnent funkcji jest opcjonalny):
Function UsertOptlonal Upperbse As Variant)
-
- -
I f Isnissing(UpperCase) Then Uppercase False
I f Uppercase True Then
User UCase(App1icatian .UserName)
Else
-
User Appl ication.UserNarne
End If
End Function

JeOli wanoiciq argumentu jest Fa1 se lub jefli argument zostanie pominiqty, nazwa utyt-
kownika bedzie nvr6cona w niezmienionej postaci. JeSli wartoSciq argumentu jest True.
p r d M c e n i e r n nazwy q k o w n i k a maki w niej tawarte zostanq zamienione na duke
(przy utyciu funkcji UCase jpzyka VBA). Pierwsza instrukcja proccdury utywa funkcji
I s M i s s i ng jczyka VBA, aby stwierdzit, czy przekazano argument. JeSli argumentu nie
podano, instrukcja pmypisze zmiennej Uppercase domySlnq wartoft Fa1 se. Wszystkie
poniBze formuly sq poprawne (dwie pimvszc dajq taki sam wynik):

Aby stwlerdzlC, czy funkcjl zostal przekarany opcjonalny argument, tneba zdeklarowat
go pr2y utyciu typu danych Varlant. Po wykonsniu tej operacji rnotna w procedurze
I
uiyc funkcji I s b s s t n g zadernonstrowanej w powytszym przykiadzie.

Ponitej zamieszczono kolejny prryklad niertandardowej funkcji stosujqcej opcjonalny


argument:
Functlon OrametRng As Variant. Optimal Recalc As Variant
L o s a ~wyblera z zakresu jedna komSrke
- Fa1 re)

1 '
Gdy Recalc ma w a r t o g True, funkcja s t a j e s i t nletnrala
A ~ p l i c a t i o n . V o l a t i l eRecalc

OkreJla l o m wybranq km~5rke

End Function
-
Draw3e Rng(Int((Rng.Count) Rnd + 1))

Z wprowadzonego zakresu funkcja losowo wybiera j e d q kom61-kc i nvraea jej zawanog.


Jeili drugi argument ma wartoSt True, wybrana wartogt zmieni siq po katdorazowym
ponowieniu obliczen wykonywanych w arkusm (ornacza to, te h k c j a jest nietwala).
JeSlj dmgi argument kdzie rniat wartoX Fa1se lub zostanie porniniqty, funkcja nie zostanie
276 CzqJC Ill Jqzyk Visual Basic for Applications

ponownie uruchomiona do momentu modyfikowania zawartofci jednej z kombrek


wpmwsdzonego z h u . Nalety zauwetyC, & dmgi argument fbnkcji Orahone zawiera
slowo kluczowe Opt i ma1 wraz z wartoiciq domytlnq.

Wszystkie ponitsze formu+y $4poprawne (dwvie pienvsze dajq taki Sam wynik):
IDraw(A1:AlOO)
=Draw(Al:A100. Fa1se)
-0raw(Al:A100. True)

Funkcja mob. by4 pnydatna w przypadku lwowania liczb, wybierania zwyciqzcy lo-
sowania z listy nanvisk itp.

f unkcja zwracajqca tablicq jqzyka VBA


Jezyk VBA oferuje przydw runkcjp Array, ktdra m a tabliq w i a n t o w q mwierajqcq
wiele wartobi. Je91i znasz formuty tablicowe Excela, htwiej mzurniesz funkcjp Array
jezyka VBA. Formula tablicowa jest wprowadzana do komdrki popmz wciiniecie kom-
binacji klawiszy Ctrl+Sh~fl+En/er.Aby dr6tniC formule tablicowq od innych, Excel
umieszcza jq w nawiasach klamrowych. W celu uryskania dodatkowych informacji na
temat fonnul tablicowych, zajrzyj do rozdzialu 3.
Watne jest, eby zrozudef, ie tablica zwr6ma przez funkcjb Array nie jest lym
semym, co *la tablica zbtona z elarnentbw typu Variant. lnnyml slowy,tabllca
wariantowa niejest tym samyrn. co tablica element6w typu Variant.

Ponitsza fbkcja HonthUams j e t prostym prrykladem zastosowania funkcji Array jpyka


VBA w funkcji niestandardowej:

-
Function MonthNamer (
.
HOnt)rNwrs Array ('Styczeh' "Luty'. 'Marzec' .-
'Kwrecled'. 'Haj'. 'Czerwlec'. 'Lipiec". 'Sierpleh". -
'Wrzesfeh'. 'Patdziernik". ' L i s t w d " . 'Grudzietl")
End Function

Funkcja WmthNames nvraca poziomq tablice zawierajm nanvy miesiecy. M o m stwonyt


wielokom6rkowq form* tablicowq wykorzystujqq funkcjp MonthNames. W celu utycia
funkcji naleZy najpienv sprawdzit, czy jej kod Mbwy znajduje sip w module VBA.
Nastqpnie w arkusm naleg zamaczyC wiele komdrek z wiersza (na pocqtek wybien
12 kombrek). Na kohcu wprowadt ponitszq formu$ i wciinij kornbinacje klawiszy
Ctrl+Shfl+Enter:

A co nakty m b i f , aby wygenemwt pionowq liitq nazw rniesiccy? Nie stanowi to p w


blernu W tym celu wystarczy zamacqf pionowy zakres, wprowadzii ponitsq formule
i wcisnqb kombinacjp klawiuy Crrl+Shfl+Enter:
-TRPNSPWW(MonthNaml))

Formula za pamocq funkcji TRAHSPONW Excela vlmienia poziomq tablice na pionow.


Poni- przyklad jest zmodyfikowanq wenjq funkcji MonthNames:
I Rozdziai 10. + Tworzenie procedur Function 277

F u n c t i m MonthNancs(Optlona1 MIndex)
Oim AllHalnes As Variant
-
A11Naws Array{"Styuefi'. "Luty'. 'Marzec'. -
"Kwlecleh". "Maj". 'Czerwiec'. "Llpfec', "Sierpieh'. -
.
"Urzesieh' , "Paidzlernl t' -Li stopad'. "Grudzieh')

-
IC Istiissing(M1ndex) Then
MonthNames A11Names
E: se

--
Select Case MIndex
Case Is 1
M y f t k u j e wart39C MIoder (np. 13-01

-
MonthVal ( ( M I ~ d e x- 1) Had 12)
MonthNames A1 lNeme~(HonthVal1

-
Case Is <- 0 ' Tablica pionowa
~onthNames Pppl ication.Transpose(AllNarnes1
End Select
End If
End F ~ n c t i o n

W celu sprawdmnia, czy porniniqto argument, uZykm funkcji isMissing jtzyka VBA.
W tej sytuacji nie jest motliwe podanie na liScie argumcntdw funkcji domyglnej wanosci
brakujqcego argumentu, poniewat zdehiowano j q w jej wnqm. Funkcja IsMi ssing mote
zostaf utyta tylko wtedy; gdy opcjonalny argument jest typu Variant.

Rozsze-rz0t-a fUnkcja ManthNzms utywajqca opcjonalnego argumentu dziala w nas&puja.cy


spos6b:
jeifi argument zostanieporniniq(v, funkcja m c a poziomqtablicp zawieraj$cq
nanvy miesiqcy;
m jdli wartat6 argumentujest mniejsza fub rdwnazeru, funkcia m c a pionowa.
$bliy zawiera6cq nam& miesi&. Funkcja utywa funkcji-~ranspose
(TRANSPONUJ) Excela, ktdra konwemaje tablicp;
j d i wart& mprnenfujest w i b fub r h n a I , funkcja zwraca nazwq rniesqca
odpawiadajqcqwartoSci argumentu.

W celu okreslenia wartoSci miesiwa procedura utywa operatora Hod. Operator Had
zwraca resag z dzlelenia pierwszego argumentu przez dnrgi. Przyktadowo dla argurnentu
o wartdd 13 Jest mracana llczba 1. Dla argumentu o wartoSci 23 jest mracana liczba
11 Itd. Nurnerowanie elernentdw tablicy A1 1Names rozpoczyna sig od zera i koficzy
na liczbie 11. W instrukcjl uwajqcej operatora Mod, od argurnentu funkcfi jest
odejmowana licma 1. A zatem dla argurnentu o wartolci 13 mstanle mr6cone O
(odpowlada nazwie StyczeA), natomiast dla argumentu o wartoScl 24 Ilczba 11
(odpowiada nazwie Grudzieh).

Funkcja Monthnames mote zostaC u2y-k na kiIka s p o b d w (rysunek 10.4).

Zakres A 1 : L1 zawiera ponitsq formule tablicowq:


-ManthNamst)

Najpierw zamacz &es Al:LI, wprowad2 forrnutp, a nastepnie wciSnij kombinacje


klawiszy Crr/+Shifi+Enter:
278 CzeSC Ill + J ~ z y kVisuol Basic for Applicotions

Rysunek 10.4. 1
Efekt
umieszczania
w arkuszu tablicy
lob pojedynczej
wartosci

Zakres A3: A14 zawiera liczby catkowitc z zakresu od 1 do 12. Komdrka 83 zawiera nadp-
pujqcqformutq. k t 6 q skopiowano do pozostalych 11 kom6rek majdujqcych sic nitej:
-MonthNames(A3)

Zakrts 03: Dl4 zawiera nastqpujqcq fomulp tablicowrl:

Nalety pami~tad,2e w celu zahvierdzenia formuty tablicowej trzeba wcisnqt kornbinacje


klawiszy Ctrl+Shi/t+Enrer.
Dolnq granlce tablicy twononej prry ulyciu funkcji Array okreSla ograniczenie
zdefiniowane w instrukcji Option Base umleszczanej na poczgtku rnodutu. JeSli
j a zostanie utyta, dolna granica domySlnie bdzie miata warto5d 6.
i n s t ~ k ~nle

Funkcja zwracajqca wart046 Medu


Czasami chcemy, aby niestandardowa funkcja zwtacah okreflm wartoSC bkdu. Przyjm'
sic ponowke funkcji Reverse, kt6q zarnieScilern na p o c z q b rozdzidu.
Function Reverse( InStrlngl As String
Zwraca argument (odurbcony tekst)

- -
O i l i As I q t s e r . StringLength As Integer
Reverse " "

- -
StringLength Ler(1nString)
For i StringLength To 1 Step -1
Reverse Reverse & Mid(lnStr1ng. i . 1)
Next 1
End Function

Funkcja Reverse mtosowana w formule arkusta dokona odwr6cenia mojego argumentu


zawartego w jednej kombrce (mote nim by6 tckst lub wartoit). Zddtmy, t e zalety ci
na tym, aby funkcja przetwarzah tytko hicuchy tekstowe. JeSLi argument nie k d z i e
zawierat bricucha, to funkcja powinna mr6ciC warto36 b l d u (#BID! 1.
Rozdzial 10.4 Tworrenie procedur Function 279

M o m sip pokusiC o pnypisanit zmiennej Reverse po prom tucucha pnyporninajqcego


wartoif bfqdu formut Excela Oto prryktad:
Reverse - "#ID! "

Co prawda, ldcuch wyglqda jak wartoft Mpdu, ale p m z inne fomuty, kt6re rnogq sic
do niego odwdaf, nie jest w taki spos6b traktowany. Aby zwr6cif neczywistq wartog6
blpdu hnkcji, nalety u2yC funkcji CVErr jqzyka VBA, kt6ra zarnienia numer blpdu na
jego rzeczywistq wartoft.

Na szcqicie jqzyk VBA posiada wbudowane stale odpowiadajqce btqdom. kt6re mote
zwracat niestandardowa funkcja. Sq to wartoici M ~ d b wformut Excela. a nie btqddw
uruchornieniowych interpretera jpzyka VBA. Dostppne sq nastqpujqce stale:
xlErrOivO (#DZIEL/O!),

U x l ErrNA (BNfO!),
x l ErrName (#NAZWA?),

x l ErrNul 1 (#ZERO!),

x l ErrNum (BLICZBA!),

x l ErrRef (ADR!),

a xlErrValue(#ARG!).

Aby niestandardowa funkcja M c i t a wartog b l d u #N/D!, nalety utyf nastqpujqcej in-


srmkcji:
Reverse - CVErr(x1ErrNA)
Ponitej zarnieszcmno aodyfikowanq funkcjp Reverse. W celu okreflenia. czy argu-
ment zawiera lancuch tekstoy, funkcja utywa funkcji I s T e x t (CZY .TEKST) Excela. JeSli
tak jest, funkcja jest wykonywana w standardowy spos6b. JeSli korndrka nie zawiera
tekstu lub jest pusta, thkcja zwr6ci wartoSt M@u M I D ! .
Functian Reverse(InString1 as Variant
' J e f l i argunent zawiera tekst. funkcja zwraca go po cdwrdceniu
'
W przeciwnym razie j e s t zwracana wartosf bledu #/D!
Dim i as Integer. StringLength as Integer
I f Ppplicati~.Worksheetfunction.IsTcxt(InString~ Then
. -
- --
Reverse "'
StrlngLength Len(lnStrlng1
=or t StrlngLength To 1 Step -1
Reverse Reverse & flid(InStrlng, i . 1)
Next i
Else
-
Reverse CVErr(x1ErrNA)
End I f
End Fcmction

Naleiy zauwaiyt, ie mienitem tet typ danych wartoki zwracane] pnez funkcjq.
Ze wzglqdu na to, re teraz funkcja mote wacd nie tylko Cficuch, typ danych
mieniiern na Variant.
280 Czpff Ill + Jszyk Visual Basic for Applications

Funkcja o nleokreSlonej liczbie argurnenthw


Niektbre fbnkcje arkuszowe Excela pobierajq nieokteSlonq liczbc argurnentdw. Przy-
kladem nkiej funkcji jest mana funkcja SLA, kt6nj skladnia jest nastepujqca:

Pierwszy argument jest wymagany, a ponadto funkcja mote mi& jeszcze maksymalnie
29 argumentbw. Oto przyklad h k j i SSUMA posiadajqcej 4 argumenty h d q c e zakresami:

Ismieje nawet rnotliwoX stosowania qumentbw r6mych typ6w. Pnykladowo ponitsza


fitnkcja zawiera trzy argumenty -
picnvszym jest zakres. dmgim wartoit, a trzecim
wyratenie:

lsmieje mo2liwoSd hvoncnia procedur Function o nieokrdlonej liczbie argument6w.


Sauczka polega na uczynieniu z tablicy, poprzcdwnej slowem kluczowyrn Paradrray.
ostamiego lub jedynego argumentu.

,,SF.$? She kluczowe Parwarray mote byC utyte tylko dla ostatnlego afgumentu llsty
aQurnent6w procedury. Argument ten zawsze ma typ Variant i m s z e jest opcjonalny
(chaC nie stosuje slq sbwa klucmwego Optional).
P o n b fbnkcja mo2e mieC dowolnq l i c e jbdnowartoSciowych argument6w. Nie obslu-
guje argumentdw k d a ~ y c hwielokomdrkowymi zakrcsarni. Zwraw jedynie sume wartdci
argument6w.
Function SinpleSun(ParamArray a q l l s t 0 As Variant1 As h b l e
For
-
Each arg In argllst
SiMleSum SimpleSun + arg
Next arg
End Function
Funkcja SlmpleSum nie jest nawet w pmybliteniu tak elasrycma, jak W c j a SLMA Excela
Wyprdbuj jq p n y utyciu r6tnych.typdw argumentdw. Pmkonasz sit, te nie zadziah,
dop6ki ka2dy jej argument nie bpkie wartdciq lub odwdaniem do pojedynczej kom6rki
zawierajqcej wartoit.

Emulowanie funkcji SUMA Excela


W tym punkcie zaprezcntujq niestandardowq funkcjq MySum. W pneciwieristwie do funkcji
v. .
SlmpleSum zamieszczonej w voprzednim podpunkcie,
. . funkcja
- MySum doskonale ernuluje
~

hnkcjp SW Excela.

Zanim pnyjnysz sip kodowi W b w e m u funkcji MySum, przn: chwilp zastandw s i nad
~
funkcjq YM4 Exceh. Jest bardm miwmalna Mote psiadaC maksyutalnie 30 argument6w
(nawet puste argummty), kt6rymi mom byd wartoki liczbowe. komdrki, zakmy, tekstowe
reprezentacje liczb, wartoici logime, a nawet funkcje. Oto pnyktadowa, poprawna
formula:
I
i Rozdziot 10. + Twotzenie procedur Function 28 1

Zawiera ona wszystkie typy argummtbw, ktdre ponitej wymieniono zgodnie z kolejno8ciq
i c h utycia:
r odwotanie do pojedynczcj kornbrki,
m litera),
lahcuch dajqcy sip przeksaalcit na w a r t o i t liczbowa.
brakujqcy [pusty) argument,
warroSC logicma PRAWDA,
w wyratenie u q w a j q c e inriej funkcji.
m odwolanie do zakresu.

Funkcja MySum (listing 10.1) obshguje wszystkie wyrnienione cypy argument6w.

Lkfing 10.1. Funkcja MySum


Function MySum(Param4rray args0 As Variant) As Variant
' h u l u j e funkcje SUM Excela

' Deklaracje zmiennych


Dim i As Variant
Dim TemoRange As Range. c e l l As Range

-
Dim Ebce As String
Mysun 3

-
' Przetwormie katdega argumntu
For i CBound(args) To UBound(aqs)
' Pominiecie brakujacych argunentb
I f Not IsMlssing(aqs(i)) Then
&reglenle typu argwnentu
Select Case TypeNametargs(1))
Case 'Range" .
Utworzenle tyxzasaego zakresu obstugujqcego

-
zakresy zlotone z calych wiersry lub tolurrn
Set TempRange Intersecttargs(i). Parent .UsedRange, argsci 1 )
For Each c e l l I n TempRange
Select Case TypeNm(cel1 .Value)
Case 'Double'
-
MySm HySm + cell .Value
Case "String'
-
Mysun: UySm + EvaTuate[ce?l.Value)
Case "Error'
Select Case cell .Text

-
Case '#ZIELIO! "
RySum (NErr(xlErrDiu01

-
Case 'tNID"
NySum CVErr[xlErrNA)

-
Case 'IAPrlh?"
MySum CYErr(x1ErrNam)

-
Case '+ZERO!'
@Sum CVErr(x1 Errtiull)
282 CzeSC Ill t Jezyk Visual Basic for Applications

-
Case "XCICZBA!"
MySum CVErrlxlErrNum)

-
Case "AAOR!'
MySum CVErr(x1ErrRef)

-
Case "#ARG! "
MySum CVErr(xlErrVa1ue)
End Select
E x i t Function

-
Csse "Date"
MySun MySum c e l l .Value
Case "Empty"
+

Case "Boolean"
-
MySm MySum + 0
End Select
Next c e l l
Case "Null" Zignorhranie

-
Case "Error* ' Zwrbcenie bledu
MySum a r g s ( i )
E x i t Function
Case "Boolean'

- -
Sprawdzenie. cry wystqpil lakuch TRUE i wy&nante
I f argscl) "True" Then MySum MySun + 1

-
Case "Date"
MySum MySum args(i
Case Else
-
MySum MySum + args(i)
End Select
End i f
Next i
End Function

Skoroszyt zawlerajqcy funkcJ? MySum majduje sl? na dott-pczonym dysku CDROM.

Analizujac kod Zrbdtowy hnkcji MySum, nalety parniqtad o nast~pujqcychkwestiach:


) po prostu
Brakujace argumenty (identyfikowane przez hnkcjq 1sU:ssl ~ gsq
ignorowane.
W celu oknilenia typu argumentu (Range. E r r o r itp.) procedura slosuje funkcjq
TypeNarre jpzyka VBA. KaMy typ argummtu jest obshgiwany w inny sposob.
W pnypadku argumentu typu Range fimkcja p n y utyciu pqli pmtwarza katdq
komdrkq zakresu, okreila typ danych w nich zawartych i w razie koniecmoSci
dodaje je do cdkowitej obliczanej sumy.
Typem danych hnkcji jest Variant, gdyt funkcja musi mi& rnotliwoiC
zwracania Mqdu, jeSli dowolny jej argument tqdzie wartohiq bl~du.
m JeSli argument zawiera M q i (na pnyklad #DZIEL/O!), funkcja HySuq podobnie jak
funkcja SUMA Excela, po prostu zwr6ci blqd.
JeSli argument funkcji SUM4 nie jest literakm (fakcycmawart& zamiast rmiemej),
laficuch tekstowy jest m o w a n y pnez niqjak zero. A zatem funkcja MySum
dodaje wartoSC komdrki tylko wtedy, gdy zidentyfikuje jajako lic*. W tym celu
utywanajest funkcja I s N m r l c j~zykaVBA.
Rozdziat 10. + Tworzenie ~~'ocedur
Function 283

W przypadku argumentdw typu Range funkcja ukywa metody Intersect, ktbra


tworzy tymczasowy zakres bqdqcy czcfciq wsp6lnq dwdch zakredw arkusza.
Metoda obshguje pnypadki, kiedy argument typu Range zawiera pehy wiersz
lub kolurnnp, kt6rych pnetworzenie tnvaloby wyjqtkowo dtugo.

OczywiScie funkcja MySumjest macmie wolniejsza od funkcji SUMA, ale p ~ d k o 4 dzialania


t
zalety od systemu i samych fornut. W pnypadku mojego systemu arkusz z I000 formul
m a j q c y c h hnkcji SUMP. zostat ponownie obliczony natyehmiastowo. Po zastqpieniu funk-
cji S U M funkcjq MySufi obliczenia zajely osiem sekund. Funkcja MySum mote zostat jeszcze
trochp udoskonalona, ale pod wzglqdem szybkoki nigdy nie zblity sip do funkcji SUMA.

Parnimj, t e celem tego pnykladu nie jest tworzenie nowej wersji funkcji S U M . Przyklad
demonstmje s p o d b tworzenia niestandardowej funkcji arkusza, ktdra wyglqda i dziala
jak wbudowane funkcje Excela.

Funkcje wykrywajqce i usuwajqce bledy


Gdy w celu sprawdzenia procbdury Function umieszczasz w arkuszu formutq, btedy
uruchomieniowe nie pojawiq s i w ~ d o b r n ci manych wyskakujqcych oknach komuni-
kat6w. Po wystrlpimiu b w u formula PO p m t u zwr&ci wartoSC Mpdu #ARG!. Na szczescie
dla funkcji ykrywajqcych i usuwajqcych &dy nie stanowi to problmu, poniewat w ich
przypadku dostepnych jest kilka rozwiqzah.
Umiaszaenie- w cefu monitorowania wartoici okres'ionych zmiennych funkcji-
MsgBox w s r r a t e g i a ~ c hlokaluacjach. Funkcje MsgBox zawark w procedurze
Function wyiwietlajq okna komunikatdw po jej uruchomieniu. Nalety sip upewnit,
2e w arkuszu majduje siq tylko jedna formuta ukywajqca stwotzonej funkcji.
W pmciwnym razie okna kornunikatdw w q s i p pojawialy dla kaddej przetwamnej
formubj, co wywola cyklicmoQ, ktdra szybko mote zirytowat.
wywdanie jej z procedury Sub, a nie zfornub
~~eTesIowaniepmcedurypap~~
arkus~a.Bkdy u~chomieniowesq wyiwietlane w standardowy sposdb. Motesz
wunqt ljeSli wiesz, jak to'zrobit) lub uaktywnit debugei.
Ustawienie wfunkcjipunktu wstqmania i wykonaniej e j w nybie hokowym.
Po wykonaniu tej operacji dostepne hd4wszystkie standardowe m q d z i a
wykrywajqcc i usuwajqce btcdy. Aby ustawit punkt wstrrymania, nalety umieSci6
kunor w wienzu inshukcji, pny ktdrej ma wstztC mtrzyrnane wykonywanie
funkcji, a nast~pniez menu Debug wybraC Toggle Breakpoint lub wcisn&t
klawisz F9.
Utycie w W i e I r d d I m p jebnej lub k i f hfymcz(~sowyeh
inrtrukcji Debug. Print
uytwietlajqcych wartdci w oknie Immediate edyrwa Virunl Basic.
Aby na przyklad monitorowat wart056 wewnqtrz petli, m o h a utyC funkcji
podobnej do ponitszej:

Count 0
For t
--
Function VwelCornt(r)

1 To Lentr)
-
Ch UCase<Mldtr, d . 1))
-
If Ch Like "[AEIWII" Then
C a n t count +I
284 CZ@e Ill + Jezyk Vinral Basic for Awlications

Debug.Prlnt Ch. 1
End I f
Lxt i
-
VclelCount Count
End Function
W tym pnypadku w oknie Immediate q wydwietlane wartoSci zmiennej
Ch i 1 katdorazowo po napotkaniu instrukcii Debug.Prlnt. Na rysunku 10.5
polcazano wynik d z i a h i a hnkcji, gdy jej argumentern by1 ldcuch Mississippi.

Rysunek 10.5.
Okno Immediate
umo2llwfa I 2
wy5wietlanle I 5
I I
wynikdw w Vakcie I 14
wykonpvania hmkqji

Okno dialogowe Wstawianie funkcji


Okno dialogowe Wstmianicfinkc/i Excela jcst bardzo pnydame. W trakcie tworzenia
fonnuiy arkusza umotliwia wvbranie z lisw okreflonei funkcii arkusza (rvsunek 10.6).
W celu-uhtwienia lokalizacji o k l o n e j fink$ p ~ j;wedtug ~G y c h katcpri'i.
~ o
-
Okno dialogowe Wstmianiefunkcji wySwietla tet nies~indardowefunkcie arkusm i urosi
utytkownika o podanie argukent6w f;nkcj i.

Rysunek 10.6.
Wstawianie
do formuty
niestandardowej
funkcji

Nlestandardowelunkcje Function deflnicwane pny utyElu slowa klucmwego Private


@ ! nle pojawlajq sig w oknie dialogowym Wstawlanle Lnkqfl, ale m h a je rqcmie
urnlerzczat w formule. M l l twomna funkcJa ma by5 dostqpna wytqcznie dla innwh
twoich procedur j$zyka VBA, powinieneg przy Jej.deklarowaniu utyC slowa kluczowego
Private.

Domyflnie funkcje niestandadowc sq umicszaane w kategorii Utytkavniku, ale w razie


konieuno4ci motna umidcit je w innej kategorii. Istnieje takk motliwogt wprowa-
dzenia tehhl opisujqcego funkcjq. G o q w do tego namawiam. W pnypadku funkcji
zdefiniowanych w innyrn skomzycie nit aktywny w oknie dialogowym Wstavianie
funkcji jcst tet wyswietlanajego nanva.
Rozddat 10. + Twmenie procedur Function 285

W wersjach Ewcela starszych od 2002 okno dialogowe Wstawlanie fvnkcji nosifu


* n a n q Wklej fink*. W WceMu 2002 okno zostalo rozbudowane i obecnie oferuje
motliwok5 szukania funkcji za pornocq stowa klucrowego. Nlertety opcja ta nie moie
zostaC utyta do wyszuklwania niestandardowych funkcjl shrvorzonych w jezyku VBA.

Definiowanie kategorii funkcji


Excel nie pozwala bezpoirednio przypisywat kategorii funkcji niestandardowej. Je91I
chciatbyi, aby stworzona funkcja niestandardowa pojawita sip w innej kategorii n i t
U.tkowniku, konieczne bpdzie mapisanie i wykonanie odpowiedniego kodu 2rbdlowego
jpzyka VBA. Ponitsza instrukcje przypisuje funkcji C c n i s s i o n kategorip Finansowe
omaczonq liczbq 1:
Appl ication.Hacro@tions Macro:-"cml ssion'. Catgcry :=l

PDwytsza instrukcja musi zosta6 wykonana tylko raz, a nle kaidoramwo p f q otwieraniu
ti&* skoroszytu. Po wykonaniu tej operacji, kazdorazowo po otwarciu skoroszytu funkcja
pojawi sig w zdeflniowanej kategoril.

W tabeli 10.1 zawarto list$ dostqpnych wartoici liczbowych identyfikujqcych kategorie.


Kilka z nich (ponumerowanych od 10 do 13) standardowo nic jest wySwietlanvch w oknie
dialogowym -~stcrwianiefunkcji. ~ a t e ~ o re
~ ipojawiq
e s i i w oknie dialdgowym po
pnypisaniu do nich stworzonej hnkcji.

Tabela 10.1. Kategode funkcji


Nurntr kategorii Nazwa kategorii

Finansowe
Dory i ciam
286 Cz@C Ill t Jezyk Visual Basic for Applications

Dodanie opisu funkcji


Po zmaczeniu fvnkcji w oknie dialogowym Wstawianiejirnkcji mstanie wySwietlony
jej krdtki opis (rysunek 10.7). Opis niestandardowej funkcji mote zostat wprowadzony ,
na dwa sposoby - przy utyciu okna dialogowego Makro lub poprzez napisanie kodu !
ir6dlowego jezyka VB A.

Rysunek 10.7.
I
Okno dialogowe
Wstawianie funkcji
wyswietla krdtkie
opisy funkcji

;a** JeSli dla niestandardowej funkcji nie zostanie zdeflnlowany opis, w oknle dlalogowym
Wstawianie funkcji pojawi sie kornunikat P m c niedostepna.

Wprowadzanie opisu funkcji w oknie dialogowym Makro I


I
Aby zdefiniowat opis niestandardowej funkcji, wykonaj nastqpujqce kroki:
I
I . Utw6rz funkcjc w edytorze Visual Basic.
I
2. Uaktywnij Excel i sprawdt, czy skoroszyt zawierajqcy funkcjp jest aktywny.
I
3. Z menu Narrgdzia wybierz pozycj~Makro, a nastepnie M a k r a lub wcilnij
kombinacje klawiszy Alf+F8. Co prawda, okno dialogowe Makro wylwietla list$
dostepnych procedur, ale funkcji, kt6re stworzylei, na niej nie b~dzie.
4. W polu N m a makro wprowadfi nazwq funkcji.
5. Aby ohvorzyt okno dialogowe Opcje makra, kliknij przycisk Opcje.
I
6. W polu Opis wprowadi opis funkcji (rysunek 10.8). Pole Klawisr skrdtu
nie ma zastosowania w przypadku hnkcji.

Rysunek 10.8.
W oknie dialogowym
Opcje maksa
wprowadf opls funky1
I.-
Ym nu.:
Rozdziol10.e Twmenie procedur Function 287

7. Kliknij OK, a nasgpnie Anuluj. W oknie dialogowym Wstowianiefunkcji pojawi


sip opis wprowadzony w kroku 6. po wybraniu funkcji.
Aby ulyskaO i n f k a c j e na temat twmanla nlestandardowego ternatu pomocy
dostqpnego z okna dlalogowego Wstawianie fvnkcji, nalety za]rzeC do rmdziatu 24.

Gdy w celu utycia funkcji otworzysz okno dialogowe Wstmianiafirnkcji, po kliknipciu


OK pojawi sip okno dialogowe Argurnen&funkcji. W przypadku funkcji wbudowanych
w oknie tym jest wyiwietlany opis katdego argumentu. Nicstety w przypadku funkcji
niestandardowych udostcpnienie takich opisdw argument6w nie jest motliwe.

Definiowanie opisu funkcjl w kodzie fr6dlowym jezyka VBA


Kolejna metoda definiowania opisu funkcji niestandardowej polega na stworzeniu kodu
Wdlowego j q k a VBA.Ponitsta instrukcja przypisuje opis fimkcji o nanvie C m i s s i on:
Application.MacroOpt1ons flacro :- "Comnission". -
Description :- "Obllcza prcwizje od sprzedaty"

Instrukcja m u i m d wykonana tyko raz, a nie W o r a m w o przy otwiemiu skoroszytu.

Dodatki przechowujqce fun kcje niestandardowe


C q s t o utywane funkcje niestandardowc motna przechowywat w pliku dodatku. Pod-
stawowq zaletq takiego rozwiqzania jest mokliwoit stosowania funkcji w formufach bez
koniecmodci stosowania identyfikatora nazwy pliku.

Z a M h y , te dysponujesz niestandardowq funkcjq o nazwie Zapspaces majdujqq sic


w pliku ~ f u n c s . x l s .W celu utycia tej funkcji w f m u l e skorosyn! innego n i t 1Myfuncs.
XIS koniecme bedzie zastosowanie nastcpujqcej formuly:
-Myfu~s.xl
s!ZapSpaces(Al :C12)
JeSli w oparciu o plik b@fiuncs.x/s utworzysz dodatek i go zafadujesz, motesz pominqt
odwobnie do pliku i wprowadtid nastepujqcq formulq:

Dodatki zostaly ornbvione w mzdziale 21.

lnterfejs API systemu Windows


h z y k VBA pohafi utywat metod zdefiniowanych w innych plikach, niemajqcych
z nim lub z Excelcm nic wsp6lnego. Rrykladem sq biblioteki DLL (ang. Dynamic Link
. Library) m a n e przez system Windows i inne aplikacje. Dziqki temu p n y utyciu jq-
q k a VBA m o h a wykonywat operacje, kt6re w pneciwnym razie bytyby niemotliwe.
288 CzqSC Ill Jeqk Visual Basic for Applications

lnterfejs API (ang. Application Progrumming Inferfuce) systernu Windows jest zbionrn
funkcji dostqpnych dla programistbw aplikacji Windows. Pnez wywoi-anie w kodzie
M l o w y m jqzyka VBA bnkcji systernu Windows uzyshqje sic dostep do jego interfejsu
API. Wiele m o b 6 w systemu Windows utywanych przez pro,mist&w jest dost~pnych
z poziomu bibliotek DLL przechowujqcych procedury i funkcje oraz konsolidowanych
na etapie urucharniania aplikacji, a nie w czasie kompilacji.

Pnykladowo sam Excel konysta z kilku bibliotek DLL. Co prawda, kod Wdlowy za-
warty w wielu bibliotekach DLL rnbglby m t a f skompilowany bezpoSrednio w pliku
wykonywalnym excel.me. ale pmjektanci zdecydowali sic na takie rozwiqzmie, ponie-
wat pliki DLL q hdowane tylko wtedy, gdy sq potrzebne. Dziqki temu glowny plik
wykonywalny Excela jest rnniejszy. Ponadto w pizypadku bibliotek DLL wykorzystanie
pamipci jest efektywniejsze. poniewat s4 one Mowane tylko w razie koniecmofci.
Biblioteki DLL sh@ te2 do wspdMzielenia kodu fr6d)owego. Prykladowo wiqkszo3t
aplikacji Windows przy owieraniu i zapisywaniu plikdw poshguje sip oknarni dialo-
gowyrni. System Windows oferuje bibliotekp DLL, ktorej kod ir6dIowy generuje kilka
standardowych okien dialogowych. Dziqki temu programisci zarniast twonyf wlasne
proceduly, mogq wywolaf tc bibliotekp DLL.

Przyklady zastosowanla funkcji interfejsu API systemu Windows


Rzed utyciem funkcji interfejsu API systemu Windows konieczne jest jej zdeklarowanie
na pocqtku rnoduhr kodu M b w e g o . Jdli modul kodu Wdlowego nieiest standardowym
rnodulern VBA (rnoduty pwiqz&e z takimi elementami e d h r a ~ i s l r o lBmic, lak
UserForm, Arkuul i Thisworkbook),koniecme kdzie zdeklarowanie knkcji interfejsu
API p n y utyciu s l o w kluczowego P r i v a t e .

Deklarowanie funkcji interfejsu APl jest d o g specyficme. Deklaracja funkcji interfejsu


AP1 rnusi byt precyzyjna i informowaC interpreter jezyka VBA o:
funkcji interfejsu API, ktdra zostanie ukyta,
bibliotm, w ktbrej znajduje sip funkcja interfejsu API.
argummtach funkcji interfejsu API.

Po zdeklarowaniu funkcji interfejsu API moma jq zastosowat w kodzje Zr6dIowym j w k a


VBA.

ldentyfikacja katalogu systemu Windows


Ponitej zarniemmno przyklad deklaracji hnkcji interfejw API:
Declare Funetlon GetWIndowsDtrectoryA Lib 'keml3Z'
(ByV!il l p h f f e r As String. ByVal nSize As Long) A; Long

Funkcja posiadajqca dwa argumenty zwraca Bci* katalogu, w kt6rym zainstalowano


system Windows (normalnie nie rnotna tego wykonaf p n y utyciu jqzyka VBA). Po
wywdaniu funkcji Sciezka katalogu systemu Windows jest przypisywana miennej
1pBuffer, natorniast dhgoSCjej Mcucha miennej nSize.
Rozdzial10. Twortenie procedur Function 289

Po umieszczeniu na pocqtku m d u h instrukcji Declare, w celu *cia funkcji GetWin-


dowsDirectoryA nalety jq wywolat. Ponirej zawartb pnyklad wywdania funkcji przez
procedurp wySwietlajqcq wynik w oknie komunikatu:
Sub ShowWindmDt r (
Dim WlnPath As String * 255

--
D i m Win01 r As S t r i n g
WinPath Space(255)
Win01 r LeftfWlnPath. GetWi~dcwsOirectoryA -
(WinPath. Len(W1nPath)))
MsgBox WinOlr , vbInformation. "Scietka katalogu systemu Windows'
End Sub

Wykonanie pmcedury Shod4indawsDi r spowoduje wyiwietlenie okna komunikaru za-


wierajqcego fcietke katalogu systernu Windows.
Czqsw tworty siq funkcje opukowujqcq (ang. wrapper) funkcj~interfejsu API. Innymi
slowy, moha s t w o e funkcjq, utywajqc hnkcji interfejsu API. Dzieki temu zastoso-
wanie funkcji interfejsu API jest m a c n i e prostsze. Oto przyklad funkcji opakowujqcej
napisanej w jpzyku VBA:
Function WlndowsDir() As S t r i n g
Zwraca dcietke katalogu s y s t m kindows

--
Dim WnPath As Strim 255
WinPath Space(255)
Ylndu+~sOlr Left(WlnPath. GetWlndowsDirectoryA -
(Wi nPath. Len(WinPath1))
End Function

Po zdeklarowaniu funkcji motna jqwywolat z innej procedury. 00przyklad:


MsgBox Hi-sOir( )

Motna nawa umidcit funkcjp w formule arkusza:


-WindMirO

Funkcjc intcrfejsu API sq wywatywane. poniewa2 w przeciwnyn razie nealiwwanie


opeacji pnez nie wykonywanych bytoby niemotliwe lub prrynajmniej bardzo trudne.
JeSli aplikacja musi odnaletC icietkp katalogu systemu Windows, aby jej to umotliwit,
rn6glbyS p m caiy dzieri szukai. w Excelu oraz j w k u VBA odpowiedniej funkcji i takowej
by4 nie znalazl. Jednak wiedqc, w jaki spos6b utyC funkcji interfejsu API systemu
Windows, dysponujesz rozwizpzaniem pmblemu.
Podcras konystania z wywotafi funkcjl interfejsu API i Ich testmania zawieszenia
systemu nie naleiq do nadkogci, dlatego nalety cwsto zaplspva6 dane.

Wykrywanie wci5nigcla klawisza Shift


Oto kolejny prrykhd. i%!&n~y, Ze stwoizyle9 m a h jpzyka VBA umchamiane p t q
W c i u przycisku paska n a q d z i . Dodatkowo przyjmijmy, ZE maim ma zadziahf inaczejjt
gdy u2ytkownik przy klikaniu pwcisku wcidnie klawisz Shif. W normalnej sytuacji
nie jest motliwe stwierdzenie, c y wciSni@o klawiu Shifr. Jednak umotliwia to funkcja
interfejsu API o nazwie GetKeyState. Funkcja pobiera jeden argument nVirtKey repre-
zentujgy kod klawisza, !-ct&rymjete6 zainieresowany.
290 CzefC Ill 4 Jazyk Visual Basic for Applications

W rozdziale 11.zarnleszczono kilka dodatkowych prrykladdw zastosowanla funkcji


interfejsu API systemu Windows.

Ponitszy kod krbdtowy demonstruje rnetode wykrywania, czy w momencie uruchamia-


nia procedury obsfugi zdarzenia Button Click wci8niqo klawisz Shi/i. Dla klawisza
Shift zdefiniowalern stafq ( p q utyciu w&o~ci szesnastkowej), a nastepnie poslutylem
sic niqjako argumentem funkcji GetKeyState. JeSli funkcja GetKeyState m r d c i wart096
mniejsq od zera, bedzie to oznaczalo, t e wci9niqto klawisz Shifi. W przeciwnym razie
klawisz Shfl nie zostat wciiniqty.
O ~ l a r eFunction GetKeyState L i b "user32' (ByVal nVirtKey As Long) As Integer

Sub Button_ClickO
-
Const V < SHI:T As Integer &HlO
IfG ~ ~ K $ ~ s ~ ~ ~ ~ ( v K - scH0I FThen
T)
MsgSox "Klawlsz S h i f t zostal wci9nlety . "
Else
HsgBox "Klawlsz Shift n i e zostal wcfSniety.'
End I f
End Sub

Skoroszyt zamieszczony na dotqczonym dysku CDROM demonstruje spos6b


wykrywania wcignie takich klawiszy, jak Ctrl, Shifti Alt, a takte Ich dowolnych
kombinacji.

Dodatkowe informacje na temat funkcji interfejsu API


Korzystanie z k n k c j i interfejsu API mote okazaC siq trudne. Wiele ksiqtek p03wiqco-
nych programowaniu zawiera listq deklaracji powszechnie u w a n y c h funkcji interfejsu
API i czesto tet pnyklady. Zwykle wystarczy przekopiowat deklaracje i utyC funkcji
bez zagtqbiania siq w szczegbiy. W rzeczywistofci (pnynajmniej w tej, z ktbrq siq oso-
bifcie zetknqlem) wiekszoSC prograrnistbw twoqcych aplikacje w Excelu poshguje siq
funkcjami interfejsu APl jak gotowymi przepisami. W internecic dostepruych jest kilka-
set przyktaddw, ktdre motna pobrat, wklei6 do twononego kodu i bpdq one dziataty
poprawnie.

Na dotqczonym dysku CD-ROM znajduje sie pllk tekstowy wln32api.bt zawierajqcy


deklaracje i state interfejsu API systernu Wndwr. PIik ten motna otwomf w edytom
tekstu i skopiowaC pfzydatne deklaracje do modutu jezyka VBA.

Je911 projektujesz aplikacje, M6re muszq byC zgodne z wszystklrni wenjami Excela,
rnuslsz by6 Swisdom kilku potendalnych problem6w miqzanych ze rgodnokiq wrsji.
wystepujqcq w ~ p a d k stosowania
u funkcfi interfejsu API. JeSli na pnykkd shvorrysz
aplikacjt: zgodnq z Excelem 97 tub jego nowszq wersjq, M6ra uiywa funkcji interfejsu
API, nia edzje rnoiliwe uruchmienie jejw Excelu 5 nawet po zapisanilu skorosrltu
w fonacle kompatybllnym. Wynika to st@, i e Excel 5 jest aplikacjq IMitowq,
natorniast Excel 97 1 nowsze wersje sq aplikacjarni 32-bitowymi. Aby uzyskd
dodatkowe informacje o tyrn problemie i wskaz6wkl urnoiliwiajqce jego mZ'Wiqzanie.
naleiy zajned do rozdzidu 26.
Rozdziat 11.
Przyktady
i metody programowania
w jezyku VBA
Wierq, t e popnez odpowiednie prryklady nauka programowania odbywa s i macmie
~
szybciej. Czytclnicy poprzednich wydah k s i w i utwierdzaj@mnie w tyrn przekonaniu.
Szczegdlnie prograrnifci u2ywajqcy jezyka VBA zyskujq na wykonywaniu przykladdw?
Dobrze opracowany prqkfad o wide lepiej objainia zagadnienie n i t jego teoretyczny
opis. W zwiqzku z tym nezygnowakm z matcrialu referencyjnego, ktory dokladnie
charakteryzuje katdy aspekt jqzyka VBA. Zarniast ttgo pnygotowalem przyklady de-
rnonsttujqce przydatne metody programowania prty utyciu Excela.

Popnednie rozdzialy tej c&ci ksi* odpowiednio przygotowaly cqtelnik6w do dalszych


dzialah. natomiast system pomocy o f m j e wszystkie informacje, ktirre pominieto. W tyrn
rozdzjale m i q w tempo, prezmtujqc ssporo prykladbw rozwiqzujqvh problemy spoty-
kane w praktyce i dodatkowo pozwalajr\cych poglebif w i ~ e d yna temat jezyka VBA.

Prqktady t kolejnych rozdtial6w ksiqtki bedq dotyczyf m.in. taklch zagadnieti,


jak wykresy, table m t m e . mrzenla i fmularze Userhm.

Pnyklad lamiesczony w tym podrotdziale d e m m j e , w jaki spos4b za pomocqjqlyka


VBA motna manipulowaf zakresami arkusza.

Zastasawanle prrykW6w
Nle wszystkie przyWady ramieszczone w rordziale mogq pelnlE funkc19 niezaletnych p r o g r a w .
Jednak majq postaf wkonywalnph prQcedur, Mdre moha dostosowa2 do wlasnych potmb.
Narnawlarn, aby w trakcie lektury mzddakr na bieiwo wykon* zawdrte w nirn pnvkiady.
Jeszcze leplej Wzir, jeOli czytelnik zmodyfikuje przyklady i sprawdzl. co sig stanie. Gwarantuje,
i e takie paktyczne hSwiadczenie b@zle o wiele bardzlej pomocne n i i pneuytanie ksiqiki z b
wierajqcej teoretycme opisy.
292 CzqJf Ill + Jqzyk Visual Basic for Applications

i
-< pzehmmnla zakres6w sq dostepre
Rzyk)ady ddy~~p3 na dotqcmnym dysku CDRaM.

Kopiowanie zakresu
Rejestrator makr Excela nie jest jut pny generowaniu wartdciowego kodu ir6dtowego
tak pnydatny, jak w pnypadku identyfikowania natw uzywanych obiektow, metod
i wtdciwofci. Kod ir6dlowy generowany przez rejesirator makr nie zawsze jest mak-
syrnalnie efektywny, ale nvykle pozwala uzyskaf sporo pnydatnych informacji. Przykk
dowo po zarejestrowaniu prostej operacji kopiowania i wklejania generowanych jest
pied w i e n q kodu irddlowego jqzyh VBA:
Sub MakrolO
.
Range('Alm) Select
Select l on. Copy
Range('B1') .Select
Ac:lveSheet .Paste
Appl lcation .CutCopyHode
End Sub
- False

Najpierw jest zaznaczana i kopiowana kornbrka Al, a nastcpnie. po zaznaczeniu korn6rki


81, procedura wykonuje operacjp wklejania. Jednak w j p y h VBA nie jest konieczne
zamaczanie obiektu, kt6ry b d z i e pnetwanany. 0 tej istotnej informacji nigdy nie do-
wiedzialbyl sic, gdyby.4 wzorowal sip na kodzie Wdtowym zarejestrowanego makra,
w ktdryrn w dwdch imtnkcjach zostala utyta rnetoda Select. Motaa posh2yC sie macnrie
prostsq procedurq, ktbra nie zaznacza tadnych kombek i konysca z tego, te metoda
,
topy mote utyC argurnentu reprezentujqcego miejsce docelowe kopiowanego zakresu.
Sub CopyRawO
Range('A1") .@y Range("B1')
End Sub

W obu powytszych makrach przyjflo, te aktywny jest arkusz, w kt6rym jest wykonywana
operacja. Aby skopiowak zakres do innego arkusza lub skoroszytu, wystarczy okreSliC
,
odwotanie do docelowego zakresu. W ponitszym pnyktadzie zakres jest kopiowany
t arkusza Arkuszl skoroszytu P1 ~ k lxls
. do arkusza Arkusz2 skoroszytu P1 ik2.x l s . PO-
niewat odwohnia sq W p h i kwalifikowane, procedura zadziala niezal-ie od tego.
ktory skoroszyt bdzie aktywny. 4

Sub CapyRangeZ[
M r k b w k s [ ' P l l k l . x l s ' ) .Sheets('Arkuszl") .Range('Al" 1. topy -
Workbwks('P1 i k 2 . x l s " l .Sheets("ArkusrZ") .Range('Al' 1
End Sub

Kolejna met& wykonania tej operacji polega na zastosowaniu miennych obiektowych


reprezentujqcych zakresy: I

Sub CapyRanqeJt

--
D i m Rngl AS Range. RngZ As Range
Set Rngl Workbooks( "Pllk1,xls') .SheetstmArkuszl') .Ranget'Al')
Set RngZ Wor!&mks("Pl l k 2 , x l s") .Sheets('ArkuszZ') .Rangel'Al')
Rngl. Copy Rng2
End Sub
Rozddot 1 1. PwWody i metody programowonia w jezyku VBA 293

Motna s i domySliC,
~ te kopiowanie nie jest ograniczone tylko do jednej kombrlci Ponitsza
procedura kopiuje duty zakres:
Sub CopyRange4(
Ranget "A1:CBOO') .Copy Range('D1.1
End Sub

Miejsce docelowe jest tu identyfikowane tylko przez jednq komdrkp -gdmq leqkornorkq
wklejonego zakresu.

Przenoszenie zakresu
lnstrukcje jqzyka VBA slutqce do pnenoszenia zakresu sq bar& podobne do instrukcji
go kopiujqcych. Potwierdzeniem jest kolejny przyktad. gdzie 18 komtrrek (zawartych
w zakresie A1: C6) penosirny w nowy obszar. ktdrego g6ma lewa kornbrka ma adres H1.
Rbtnica polega na tym, t e m i a s t metody Cooy utyta zostala metoda Cut. Konieczne
jest podanie jedynic gdnej lewej komdrki docelowego zakresu:.
Sub tioveRangel( 1
Range("A1:i6").Cut Range( "HI')
End Sub

Kopiowanie zakresu o zmiennej wielkojci


W wielu przypadkach konieczne jest skopiowanie takresu korn6rek. z tyrn te nie jest
mana dokladna liuba wierszy i kolumn o k r e l l a j w h jego wielkog. Pnykbdowo motcsz
dysponowat skoroszytem gledqcym tygodniowq sprzedat, w ktdryrn liczba wienzy
mienia sip katdego tygodnia po wprowadzeniu nowych danych.

Na rysunku 11.1 pokazano bardzo cqsto spotykany typ arkusza Zawarty w nim zakres
skiada siq z kilku wierszy, ktdrych liczba zmienia sip katdego tygodnia. Poniewat nie
wiesz, jaki jest adres zalarsu w dancj chwili, w celu napisania makra kopiujqcego zakres
k d z i e wyrnagane umgl~dnieniedodatkowego kodu Wdlowego.

Rysunek 11.l.
Lids wlerszy
zakresu Uanjch
mienia s.ie
kaidego tugodnia
294 CzeE Ill 4 Jezyk Visual Bosic for Applications

Wskazdwki dotycqce pnetwarzania zakrss6w


W trakcie przetwarzania zakresdw nalety parnletat o kilku watnych kwestiach.
I Aby przetwarzad zakres, nie jest koniecme urnleszczanie w kodzie trddtowyn instrukcjl
uprzednio go zaznaczajqcej.
IJefli procedura zaznacza zakres, powiqzany z nirn arkusz rnusi b@ aktywny. W celu
uaktywnienia okreSlonego arkusza rnotna utyC rnetody Activate zbioru Worksheets.
I Rejestrator rnakr nie zawsze generuje najwydajniejszy kod fr6dfowy. Najlepiej u t w o ~ y 5
rnakro przy uiyciu rejestratora, a nastqpnie jego kod ir6dtowy zrnomkowaf w celu
zwiekszenia efektywnogci. I
I
m W kodzie trbdtowyrn jezyka VBA warto stosowat nazwane zakresy. Przyktadawo odwotanle
Range("Tota:") jest lepsze od odwotanla Range('D45"). W tyrn druglrn przypadku dodanie
wiersza powyiej wiersza 45 spowoduje zrniane adresu kornbrki. W konsekwencji konieczne
bgdzie zrnodyfikowanie rnakra tak, aby uiywab zakresu o poprawnym adresle (0461.
JeSli w trakcie zaznaczania zakresh pmy utyciu skr6t6w klawiaturowych (nip. kornbinacji
klawiszy Ctrf+Shift++ povmdujqcej zaznaczenie kom6rek a t do kollca wlersza) korzystasz
z rejestratora rnakr, doktadnie sprawdzaj wygenerowany kod fr6dtowy. Czasaml Excel
urnieszcza w kodzie fr6dtowyrn trwate odwotanla do zamaczonych korndrek.
m Po uruchornieniu makra przetwanajqcego kaidq korndrke aktualnie zamaczonego zakresu
uiytkownik mote wybieraf cate wiersze lub kolurnny. W wlqkszo$cl prrypadlkdw nie tneba
przetwarzad kaidej korn6rki zamaczonego zakresu. Twonone rnakro powinno definiowaf
podzbi6r zaznaczenia zawierajqcy wytqcznie niepuste kornbrki. Zapoznaj sie z zawartoSciq
punktu "Wydajne przetwarzanie korn6rek zaznaczonego zakresu prry uiyciu petli' w dalszej
cz?sci rozdziatu.
Excel pomala zdefiniowaf! wiele zamaczeli. Prryktadowo rnotna zamaczyC zakres, wcisnqd
kiawisz Ctd I zaznaczy6 kolejny zakres. Makro powinno dokond sprawdzenia zakresu i podjqd
odpowiedniq decyzjq. Zapozna] siq z zawartoklq punktu -0kreflanie typu ZaZnaCZOnegO
zakresu" w dalszej czgSci rozddatu.

Poniaze rnakro demonstruje, jak skopiowat zakres z arkusza Arkuszl do arkusza ArkuszZ
(pocuwszy od komorki Al):
Sub CopyCurrentRegronZO
t
Range("Al').Currer,tRegion.Copy Sheetst"Arkusz2").Range('Al")
End SuS

Makro wykorzystuje w M c i w d t CurrentRegion, k t h zwraca obiekt Range odpowiadajqcy


blokowi kom6rek otaczajqcych okreSlonq k o d r k e (w tym przypadku o adresie Al).

is@* Zastosowanie wtdciwoSci CurrentRegicn jest rdwnowaine wybraniu z menu Edyja


polecenia Przejdi do, kiiknisiu prrycisku Specjafnie i zaznaczenlu opcji Biezqcy
obszar (moina tet wcisn* kombinacje klawiszy Ctrf+*). Aby zapoznaf sie z kodern
irddtow$rn reallmjqcyrn t i operacjp, naleiy zarejestrowd Gkonywane czynnofci.
Zazwyczaj wartogf wtaSciwofci CurrentRegion reprezentuje prostokqtny blok korndrek I
otoczony pnez puste wiersze i kolurnny.

Z~amaczanier6inego typu zakresirw i identyfikowanie ich


WiqkszoSt operacji wykonywanych p m z instrukcje jpzyka VBA bqdzie opierab sic na
. umotliwiaia
zahsach. Instrukcie -
,. definiowanie z a M o w tub identyfikowanie zakres6w.
w.cetu wykonywania operacji na kornorkach do nich naleacych.
Rozdzial 1 1. Przyktody i metody prograrnowonia w jgzyku VBA 295

W stamych wenjach Excela powodzenie zadania rnajgcego na celu zarejestrowanle


makra zaznaczajqcego komdrkl (np. popizez wciSni~lekomblnacji klawiszy
Ctrl+ShiR++] nie byto takie pewne. Poczqwszy od Excela 2002, rejestrator makr
znacznie lepiej radzi sobie z tego typu zaznaczeniami nit w starszych wersjach
arkusza kalkulacyjnego. Jednak zawsze warto bardzo doktadnie sprawdzit
wygenerowany kod ir6dlowy. aby upewniC sie, te makro zaznaczajqce komdrki dzlata
zgodnie z oczekiwaniarni.

Metoda End obiektu Range pobiera jeden argument okreflajqcy kierunek w ktbrym zo-
stanie wykonane zamaczenie. Ponitsza instrukcja zaznacza zakres rozpoczynajqcy sic
od aktywnej komdrki ikoticqcy na ostatniej niepustej dolnej komdrce:
Range(Ac?iveCell. k t 1 v e C e l l . End(x1hm)).Select

Jak moma sip domyflif, tny pozostale state (xlUp, xlToLeft, xlToRight) syrnulujq
kombinacje klawiszy zaznaczajqce komorki w innych kierunkach.

Przy stosowaniu metody End nalety zachowd ostrohoSf. JeSll aMywna komdrka
@* znajduje sic na obwodzie zakresu lub zakresae
r, jednq Iub w l e j pu-h
komdrek. metoda End mote nie wygenerowaC oczekiwanych wynlk6w.

N a dohczonym dysku CD-ROM znajduje sip skoroszyt demonstnrjqcy kilke cqsto


spotykanych typ6w zamaczeh zakresbw. Po jego otwarciu pojawi sip nowe menu Pokuz
raznuczeri. Jego polecenia umotliwiajq utytkownikowi wykonanie rdtnych zaznaczen
(rysunek 1 1.2).

Rysunek 11.2.
Skorosryt
demonstmje
spos6b zamaczanla
zakresdw o r6tnej
wielkoJci pny
u*iu instru kcji
iezyka VBA

EL
" ,,
in:---
I
".-lp-. rP+--m--w
............. .. . . It. . . . . . . . : b
"
I

Ponitsze makra o nazwie SelectCurremtRqim majduje sit w prqlctadowym skomycie


i syrnoluje wciSnipcie kombinacji klawiszy Ct.I+Shi/i+ *:
SelectCurrentRegion(I
9 ~ b
PctlndeCel1 .CurrentReglon.Select
E-d Sub
29 6 CzeSC Ill Jezyk Vinuol Basic for Applications

Czcsto nie tyle chcesz zaznaczyC korn6rki. ik je w jaki9 spas6b pmtwonyf. na przykM
sformatowad. Makro SelectCurrentRegion zamaczajqce korn6rki rnotna lahvo do tego
celu przystosowad. Oto prtyktad:
Sub FormatCurmtRegiono
Acti veCcl1 .CurrentRqion. Font. Bold
End Sub
- Trus

Proccdura nie zaznacza korn6rek. a jedynie fonnatuje zakres zdefiniowany jako bieQcy
obszar otaczajqcy aktywnq kombrkp. [nne procedury znajdujqce sic w przykladowyrn
skoroszycie teZ rnogqzostaf w ten spos6b przystosowane.

Wprowadzanle wartoici do kom6rki


Kolena procedura demonstruje. jak poprosiC utytkownika o podanie wartoki i wstawif
jq do kom6rki A 1 aktywnego arkusza:
Sub GetValuelO
Range('A1') .Value
End Sub
- InputBox('Wrwdt wartobt.'l

Na rysunku 11.3 pokazano okno umotliwiaj~cewpmwadzmie wartdci.

Jednak z proceduq zwiqzany jest problem. Jefli utytkownik kliknie w oknie pnycisk
Cancel, procedura usunie wmlkie d a m jut najdujqce sip w komdrce. Ponitua zmody-
fikowana procedwa sprawdza, czy zostal kliknicty przycisk Cancel i w takirn pnypadku
nie dokonuje zmiany zawarto9ci kom6rki:
Sub GetValueZO

-
Dlm UserEntry As String
UserEntry InputBox('Yprawadf wartolt')
If UserEntry 0 "" h e n Range( "Al") .Value - UserEntry
End Sub

W wielu przypadkach konieczne W i e sprawdtcnie poprawndci danych wpmwadzonych


przez utytkownika. Przykladowo m o b byt wymagana liczba z z a h u od 1 do 12.
W ponikszym przykhdzie zademonstrowano jcdnq z metod sprawdzenia poprawnoSci
danych. Niepqmwna warto5C jest ignorowana, a okno wyhvietlane ponownie. Opcracja
jest powtarzana do rnornentu wprowadzenia prawidiowej wartogci tub klikniwia pnyci-
s k u Caneel.
Sub Getvalue30
Dim HinVal As Integer. MaxVal As Integer
D i m UserEntry As Strlng
D i m Hsg As S t r l q
D i m DblEntry As O l e
-
MinVal l
Rozdziat 1 1. Prryldady imetody progromowania w jezyku VBA 297

--
MaxVal 12
Msg "Uprowad2 wartot€ z przedzialu ad " I HinVal K " do " & HaxVll
Do
--
UserEntry InputBox(Msg)
I f UserEntry " Then E x i t Sub

-
I f IsNumeric(UserEfitry) Then
DblEntry V a l (UserEmry)
I f DblEntry r HinVal And DblEntry <- ?(axVal Then E x i t Cc
End I f
--
Msg "Poprzednio wprowadzona wartoit by1a nieprawidlowa . "

-
Msg Msg & vbNewL1ne
Msg Msg d "Uprwadf wartofC z przedzlalu od " & MinVa: & ' do ' & HaxVal
LOOP
-
&ti veSheet .Range( "Al") .Value UserEnt r y
Ena Sub

Jefli uzytkownik wprowadzi niepoprawnq wartost, kod ir6dtowy zmodyfikuje treSt


wyiwietlanego komunikatu (rysunek 1 I .4).

Rytunek 11.4.
Spmdzenie
przy utyclu funkdl
InputBox jpzyka Vas
poprawno.+cl danych
wpmwadzonych pmz
uwkownika

*
&
a Funkcja InputBox zwraca laricuch. Aby zamieniC go na wartog Iiczbowq, uiytem funkcji
<!!, Val jezyka VBA, kt6rq wprowadzitem jaszcze pned instrukcjq I f Hykonujqcq operacje
pordwnania liczb.

Wprowadzanie wartoici do nastepnej pustej kom6rki


C z p t o poadane jest wprowadzenie wartoSci do nastqpnej pustej komdrki kolumny lub
wiersza. Poniaza pracedura prosi utytkownika o podanie imienia i wartosci, a nastqpnie
wpmwadza danc do nastqpnego pustego wiersza (rysunek 1 1.5).
Sub GetOataO
D i m NextRw As Long
D i m E n t r y l As String. Entry2 As S t r i n g

-- -
Do
NextRcw Raw("A65536') .End[xIUp). acw + l
E n t r y l InputBox("h'prorradi imle')

--
'
IfE n t r y l " " Then E x i t Sub
Entry2 InputE'ox("l4prmadi kwote"?

--
I f Entry2 " " men E x i t Sub
Qlls(NextRar. 1) E n t r y l
@llr(NextRw. 2) Entry2
Loop
End Sub

W procedune nie zostal o M l o n y warunek zakohczenia Mli. W celu jej opuszczekia


U~$WI insbukcji E x i t Sub, k t k jest wykonywaqa po klikniwiu przycisku Cmcel w oknie
umotliwiajqcym wprowadzanie danych.
298 CzeSt Ill Jpryk Visual Basic for Applications

Ryiunek 11.5.
Makro
wstawiajqce dane L,-3-A-4
do nastepnego
pus tego wiersza
iJJ!d:'.-..
All - s
iuu

c j D I
-10

E
-.B I

I F
UlLf

I
ad*
G-?--.L.-! !.-.A

arkusza K-011
910 !
I
m Ii
411
55 1
!
I
i
!
i
:-Is'

:g&** Aby przyktad byf bardtiej zrozurniaty, procedura nie przeprowadza Ladnej walldacji
danych.

Nalety zwrbcit uwagp na instrukcje okretlajqcq wa nnej NextRw. JeSli nie rozumies~
w jaki sposdb procedura dziala, sprdbuj rccmie rtoft zmie wykonat operacj~przez niq
realizowanrb czyli uaktywnit kom6rkq A65536 (ostatnia komdrka w kolumnie A). WciJnij
klawisz End, a nastepnie klawisz strzalki w gdq. W efekcie zostanie zamaczona osfatnia

niepusta komdrka kolumny A. WtaSciwoft Row zwraca numer wiersza tej komdrki.
W celu uzyskania numeru wiersza kornbki znajdujqcej sie nitej wartost te jest nviqk-
szana o jeden (nastppny pusty wiersz).
Z takq metodq zamaczania nastepnej pustej kom6rki zwiipany jest drobny problem. Jdli
kolumna jest ~ p e h i pusta,
e jako nastqpny pusty wiersz metoda wymaczy wiersz 2.

Wstrzymywanie wykonywania rnakra w celu pobrania


za kresu zaznaczonego przez uiytkownika
lstnieje rnotliwo9C stworzenia rnakra wsbzyrnuj@cegopraq w trakcie zamaczania pnez
utytkownika zakresu kom6rek. Proctdura opisana w tym punkcie dernonstruje sposdb
wykonania zadania przy utyciu metody InputEiox Excela

a&%* Nie nalety mylie metody Inputbx Excela z funkcjq jezyka VBA o takiej same] name.
Co prawda, obie funkcje rnajq jednakowq name, ale r62niq slq mi* sobq.

Ponitsza procedura Sub dernonstruje, jak wstrzymaf prace makra i umotliwiC utytkow-
nikowi zaznaczenie komdrki:
Sub GetUserRanget )
Din UserRa~geAs Range
i Rozdzid 1 1.4 Prryktady i metody prograrnowania w jezyku VBA 299

--
Output 565

-
Prm~t "Zaznacz wyjScim8 kc.-brke."
T i t l e 'Zaznaczanie kmBr4i"
Wyswietlenie okna m i l i w i a j ~ c q oworowadzenie danych

-
On Error Resume Next
Set UserRange Agpl icaf7,n. Icwt@ox(-
Prompt :-Prompt. -
T1tie:-Title. -
Default:-ActiveCe11.Mdwr~.-
Type:-8) Zaznaczenic zz<r+su
On Error GoTo 0

Czy w oknie k l i k n i e t o pfzycisk h u l u j ?


IfUserRange Is Nothing T3en
MsgBox "Wcifnieto przycist Anuluj."
Else
UserRange.Range( 'Al")
End If
- (lu:>~t

End Sub

Okno urnotliwiajace wprowadzanie danych pokazano na rysunku 1 1.6.

Rysunek 1l.6.
W celu wstnymania
pracy makra u& okna

Podanie argurnentu Type o wartofci B ma kluczowe znaczenie dla powytszej procedury.


N a l e b te2 zwrdcif uwage na zastosowanie instrukcji On Error Resume Next. Insmkcja
ignoruje Mad. kt6ry wyswi, gdy w o w n i k kliknie w c i s k Amrluj. JeSli tak sic stanie.
nie zostanie zdefiniowana zrnienna obitktowa UserRange. W powytszym przykiadzie
jest wySwietlane okno zawierajqce komunikat o treSci Wciiniefopwcisk Anu/uj. Gdy
uzytkownik kliknie OK, wykonywanie rnakra bdzie kontynuowane. Instrukcja On Error
GoTo 0 pnywraca standardowq obslug~btcd6w.

Nawiasem mbwiqc, nie jest koniecmc sprawdzanie poprawndci zamaczonego zakresu,


poniewat zajmie sip tym Excel.

<Sl* JeSli nle jest wtqczone odswietanie mwartofci ekranu, nie Wziesz w stanie
zaznaczyd kambhi. Aby kontrolowd odfwietanle ekranu w trakcie wykonywania
makra, nalety ui$ wlakiwoki ScmUpdat~ngoblektu bppl icat~an.

Zliczunie zaznaczonych kom6rek


Mofna shvorzyt makro przetwamjace zamacwne korndrki zakresu. Aby okreslic licz-
be korndrek w zamacmnym z a h i e (lub dowolnym innym), nalety utyC wlaiciwoici
Coun: obiektu Renge. Przykfadoao ponitsza instrukcja wyiwietla w oknie komunikatu
liczbq kombek aktualnego zaznaczenia:
300 CzeSC Ill Jezyk Visual Basic for Applications

j -
JeSli aktywny arkusz zawiera zakres o nazwie dane, ponitsza instrukcja z m i e ~ e Cell
Count przypiue lit*jego korndrek:
Cell tount - Ranget 'dane') .Count

M o a a tet okreSliC liczbq wierszy h b kolumn w zakresie. Ponitsze wym?enie wymacza


liczbp kolumn znajdujwch sip w aktualnie zamaczonym zakresie:

Oczywifcie rnotnrr tet przy utyciu wlaSciwoSci Rows o k d l i f liczbp wierszy zakresu.
Ponitsza instrukcja okreila liczbq wierszy zakresu o nazwie dane i przypisuje wartosc
zmiennej RMount:
-
RawCount Range("daneS).Rws .Count

Okreilanie typu zaznaczonego zakresu


Excel obshguje kilka typ6w zamaczeh zakresirw. Oto one:
pojedyncza homdrka.
ci$g!y zakres kornbrek,
jedna lub wiccej calych kolumn.
jeden lub w i ~ c ecalych
j wierszy,
c a b nrkusz,
dowolna kombinacja wytej wymienionych typbw, czyli zaznaczenie wielokrome.
Poniewa2 istnieje kilka typ6w zaznacnfi, w trakcie p~etwarzaniazakresu procedura jp-
zyka VBA nie mote pmwidzied, jaki jest typ m a c z e n i a .
JeSli takres z o d definiowany p m z wiele zaznacmi, obiekt Range b&ie siq skiadac
z oddzielnych obszarbw. Aby stwierdzit, cry zaznaczenie jest zaznaczeniem wielohot-
nym. nalety utyt metody Areas zwracajqcej zbidr Areas. Zbibr reprezentuje wszystkie
obszary wchodwce w skiad zaknsu stwormnego poptzez wielokrome zamaczenie.
W celu stwierdmia, czy wybrany zalcres posiada wiele obszar6w. nalety zastosowat
wyratenie podobne do ponitszego:

Jefli mienna Nundreas zawiera wartoSt wiqksq od 1, taznaczenie jest zamaczenicm


wielokromyrn.
Procedura AboutRaqeSelection utywa niestandardowej funkcji AreaType, ktcjrej kod
tr6dIowy jest nastqpujqcy:
Functlon AreaType(RangeArea As Range) As String
' Zwraca typ zakresu zawartego go obszarre
Select Case True

-
Case RangeArea.Cells.CPunt
AreaType 'Kan6rira"
- 1
Rozdzial 1 1. + Plzyktady i metody programowania w j$zyku VBA 301

- - -
Case RangeArea.Count Cells .Count
AreaType 'Arkusz'

-
Case hngeArea.Rows .Count i e l i s . Row5 .Count
AreaType "Kolurma-
-
Case bngeArea.Co1umrrs .Ccunt C e l l s .Co!umns . bunt
-
AreaType "Wlersz"
Case Else
-
AreaType "Blok"
Enc Select
End Funct~on

Funkcja j a b argument pobiera obiekt ?uge i m c a jeden z pieciu hicuchdw opisujqcych


obszar - Kmrka, Arkusz. Koluma. Xiersz lub Blok. W celu okre8lenia. kt6re z pieciu
wyraten pordwnujacych ma wartoiC True, funkcja korzysta z konstrukcji Select Case.
JeSli zakres sklada sic z jednej komorki, funkcja z\vr6ci taricu'ch Kodrka. JeSli liczba
kom6rek zakresu jest r6wna liczbie komdrek arkusza, funkcja zwroci t,aricuch Arkusz.
J d l i liczba wierszy zakresu jest rowna liczbie wierszy arkusza, funkcja z w d c i lancuch
Koluma. J d l i Biczba kolumn zakresu jest rbwnr liczbie kolurnn arkusza, funkcja zwr6ci
lancuch Wiersz. Jefli tadne wyratenie instruk,cji Case nie bedzie mialo wanofci T C J ~ .
funkcja zwr6ci lancuch 8lok.

W wyrateniach porbwnujqc/ch nie sq stosowane wartofci bezwzgledne. Przykladowo


* zamiast wartobi 65536 rnajqcej na celu dtreSlenie, cry zakres jest kolurnnq. stosuje
siq instrukclq Cel1s.Rous.Count. Z tego pawodu funkcja dzlata poprawnie, nawet jsSi!
zostanie uiyta w wersjach 5 i 97 Excella [ofemjqcych 16 384 wierszy). Funkcja b d z i e
r6wniet dziatad, gdy Microsoft kiedykolwiek zwiekszy liczbe wierszy arkusza.

Skoroszyt majdujwy sie na dolqczonym dysku CDROM zawiera procedure


IbMRangeSeI~ticn.k t 6 n postugu)e siq funlkcjq area'ype w celu wylwietlenia okna
kornunikatu opisuj@cego typ zaznaczenia aktualnego zakresu. Na rysunku 11.7
pokazano przyktad jej dzlatania. Zrozumienie zasad dziatania funkcji bedzie stanowito
dobre pnygotowanie do wykonywania kolejnych operacji na obiektach Ranqe.

Rysunek 1 f .7.
Procedura
AboutRmgeSefee
tion analimje
aktualflie
zaznaczony
zakres
302 CzgfC ill 4 Jqzyk Visual Basic for Applications

Excel pozwala na wykonanie wielu identyeznych zaznaczeri. JeSli trzyrnajqc wciSniety


klawisz Ctrl, pieciokrotnie klikniesz kom6tkq A l . zaznaczenie bedzie ztoione z pieciu
identycznych obszarbw. Procedura AboutRangeSelecrion bierze to pod uwage.

Wydajne przetwarzanie kom6rek zaznacxonego zakresu


przy uiyciu pqtli
Czqsto makra sprawdzajq kardq kom6rkq zakresu i wykonujq operacjq, jeSli komdrka
spetnia okrejlone kryteriuni. Listing 11.1 zawiera odpowiedni przyklad. W tym przypadku
procedura Selecti veColorl ustawia czerwony kolor tla dla wszystkich kom6rek zazna-
czenia ktore przechowujq wartoSf ujemnq. Kolor t+apozostalych korndrek jest zerowany.

Listing 11.l.
Procedura ustawiajqca czerwony kolor tfa dla komdrek pnechowujqcych warto5C ujemnq

Sub SelectiveColorl( i
'
Jefl i wartoSt j e s t ujen~na,zmienia kolor ria kom6rki nz czerwony
D i m cell As Range

Cor.st RED!NOEX -
l f TypeNane(Selection1 <> "Range" Then E x i t Sub
3
-
Apol i c a t i o n .ScreenUpdati ng Fa1se
For Each cell In Selection
I f cell .Value c C Then
-
cel I.1nterior.ColorIndex REDItGEX
Else
-
c e l l . 1nterior.ColorIndex x l N o w
End I f
Next c e l l
End Sub

Z pewnoiciq procedura SelectlveCalorl zadziata. ale zawiera p o w m y bbd. Dla przy-


kladu, co sip stanie, gdy zaznaczenie bqdzie zawieralo cat3 kolumnq, 10 kolumn Iub
cab arkusz? Zanim wszystkie kornbrki zostanq sprawdzone, pmwdopodobnie utytkownik
nezygnuje z dalszego wykonywania makra. Kod hirdIow-y lepszego wariantu po-zej
procedury o nazwie Sel ec:iveCol or2 ZaWaRO w listingu 1 1.2.

Listing 1 1.2. Wersja procedury SelectlveColorl poszeaona o obslugp uerszych zakresdw


wielokolumnowych
Sub ~electivk.olor2(;
'
Jesli wartobt jest ujemna, zmieria kolor :la <mOrki na czerwony
D i m c e l l As Raege
Dim Fornulatells As Range
Dim Constantcells As Rmge
Const REDINDEX = 3

a Ignoruje bledy
Cn Error Resurre Nex:

--
Tnorzy pdzbiory cryginalnego zaznacmia
Set FomlaCells bl~tion.SpecialQ1ls~x~Fonulas.xlNmbers)
Set ConstentCells Selectlon.Specia12lls(xlCsrstants. xlNLmbers)
Rozdzial 1 1. t Przyklady i rnetody programowanio w jezyku VBA 303

On Error GoTo 0
Przetwarza k d r k i formul
I f Not FonnulaCells I s Nothing Then
For Each c e l l I n F o m l a C e l l s
I f c e l l .Value c 0 Then
c e l l . I n t e r i o r .ColorIndex - REDINDEX
Else
c e l l . 1ntenor.ColorIndex
End If
- xlNone

Next cell
End If

' Przetwarza k d r k i stalych


I f Not ConstantCel ls I s Nothfng Then
For Each c e l l I n Cons:antCell s
I f c e l l .Value < 0 Thw
c e l l .Interior.ColorIndex - REDINOEX
Else

End If
c e l l . lnterlor.Color1ndex - xlNone

Yext c e l l
End If
End Sub

Procedura wykonuje kilka dodatkowych operacji, M r e sprawiaj% te jest bardzo wydajna.


W celu wygmerowania dwbch podzbior6w zamaczenia W k m mctody Specialcell s.
Pienvszy podzbi6r obcjmuje jedynie komdrki zawierajqce stale numerycme, natorniast
-
dmgi kom6rki przechowujqce forrnuly nurnerycme. Komdrki obu podzbiordw sq na-
stqpnie przetwarzane za pomocq dwbch konstrukcji Fctr Each .. . Next. W efekcie
przetwanane sqtylko niepuste komdrki, dzipki czemu uzyskuje sic macacc przyspiesze-
nie makra.

s2&%*
<-?*
Zastosowanle instmkcjl On Ermr lest konlecme. poniewat rnetoda SpeclalCells
-'
generuje bhd. gdy tadna komdrka nle spdnla kryterlurn. tnstrukcja zajmuje sle tez
obshrgq wszystklch przypedkdw. w ht6rjch podczas wjkanywania procedvry
nie za&aczono zakresu.

Usuwanie wszystkich pustych wierszy


Ponitsza procedura usuwa puste wiersze aktywnego arkusza. Pmcedura jest szybka
i wydajna, poniewat nic sprawdza wszyakich wierszy, a jedynie wierszc u w n e przez
zakres, kt6ry jest identyfikowany za pamoqwl&ciwo4ci UsedRange obiektu Worksheet.
Sub DeleteEnptyRws( l
Dim LastRw As Long
Dim r As Long
-
LastRmu ActiwYreet .UsedRange.'Row
- - 1 + PcttveSheet .UsedRange.Rous. b u n t

-
Applicatim.kreenUpdating False
For r LastRow To 1 Step -1
If hpplication.WorksheetFunction.CountA(Racj(r)) - 0 Then Rows(-).Delete
Next r
End 5110
300 C z e e Ill Jewk Visual Basic for Appllcotions

JeSli aktywny arkusz zawiera z a k m o nazwie dane, poni2sza instrukcja zmiennej Cell -
Count pnypisze liczbq jego kornbnk:
CellCount - Range( "dane') . b u n t

Motna tet okreSli6 liczb~wierszy lub kolumn w zakresie. Ponitsze wyraZenie wymacm
liczbp kolurnn majdujqcych siq w aktualnie zaznaczonym zakresic:
Selectlon.Columns .Count

Oczywifcic rnotna te2 p n y utyciu wlaSciwoSci Rows okreSlif liczbp wienzy zakresu.
Ponitsza instrukcja okreSla liczh wienzy zakresu o nazwie dane i przypisuje wartosc
zmiennej Rodaunt:
R&unt - Range("dane'1 .Rars. Count

Okreilanie fypu zaznaczonego zakresu


Excel obshrguje kilka typbw zaznaczeh mkresbw. Oto one:
m pojedyncza kombka,
ci@y znkres kombrek,
m jedna lub wivej calych kolumn,
* jeden lub wivej cafych wierszy.
c a b arkusz,
dowolna kornbinacja wytej wymienionych typ6w, czyli zaznaczenie wielokrome.
Poniewat ismieje kilka typdw zaznaczed, w trakcie przetwamnia zakresu procedura jg
y k a VBA nie mote przewidziet, jaki jest typ zamaczenia.

JeSli Acres zostal definiowany p n e z wiele zaznaczeb. obiekt Range h d z i e sip skladaC
z oddzielnych obszar6w. Aby shvierdzit, czy zaznaczenie jest zaznaczeniem wiclokrot-
nyrn. nalety utyC metody Areas zwracajqcej zbior Areas. Zbidr reprezentuje wszystkie
obszary wchodzqce w skhd mkrcsu stwononego poprzez melokrome zamaczenie.
W celu stwierdzenia, c y wybrany zalcres posiada wiele obszarow, nalety zastosowaC
wyrntenie podobne do ponitszego:
FILlmnreas - klectlon.Rreas.tount

JeSli zmienna Nlndreas zawiera wartoe wipkszq od 1, zaznaczenie jest zaznaczeniem


wielokromym.
Procedura AboutRangeSelection utywa niestandardowej funkcji AreaType, ktbrej kod
Wdtowy jest nastqpujqcy:
ivnCti0fl AreaType(RangeArea As Range) As String
' Zwraca typ zatresu zawartego w obszarze
Select Case True

-
Case RangeArea .Cells .Coun-.
AreaType "Kombrka'
- 1
Rozdzial 1 1. + Pnyklady i metody programowonia w jezyku VBA 301

- - -
Case RangeArea .Count Cell s.Count
AreaType 'hrkusz'

-
Case RangeArea .Rows. Count i e l ls.Rows .Count
AreaType 'Kolunnz"
-
-
Case RangeArea .Coi mns .&UP.:
AreaType 'Wiersz'
Cell s .Columns.Count

Case Else
-
AreaType 'Blok"
End Select
End Function

Funkcja jako argument pobiera obiekt Rznge i m c a jeden z p i w i u laricuchdw opisujqcych


obszar - K m r k a , Arkusz, Koluma. il?ersz lub Blok. W celu okreflenia, ktore z piqciu
wyra2ed por6wnuj~cychma wartoiC True. funkcja korzysta z konstrukcji Select G s e .
JeSli zakres sktada sig z jedncj komorki. funkcja zwrdci Lricuch Kmdrka. Jeili liczba
kom6rek zakresu jest r6wna limbic kombrek arkusza, funkcja zwr6ci tancuch Arkusz.
JeSli liczba wierszy zakresu jest rorvna liczbie wienzy arkusza, funkcja m r o c i tancuch
Kolumna. Jesli liczba kolumn zakresu jest r6wna liczbie kolumn arkusza, funkcja zwroci
lahcuch Wiersz. JeSli tadne wyratenie instrukcji Case nie bedzie mialo wartoici T r ~ e ,
funkcja zwr6ci l h c u c h 0104.

fa** h sa stosowane wartoScl bezwzgledne. Przyktadowo


W wyraieniach p 0 r d ~ n ~ j q q Znie
zamiast wartosci 65536 majqcej na celu okreSlenle, czy zakres jest kotumnq, stosuje
sie instnrkcje Cells.Rows.Couni. Z tego powodu funkcja dzlala poprawnie, nawet je5li
zostanle uzyta w wersjach 5 i 97 Excela (oferujqcych 16 384 wierszy). Funkcja bedzie
rdwniei dziatat, gdy MlcrosoR kiedykolwiek nviekszy llczbe wierszy arkusza.

Skoroszyt znajduJacy sie na do+aczonyrndysku COROM zawiera procedure


-( AboutQangeSelert~an.M6ra plsluguje sip funkcjq ArcaType a celu wyhvietleoia okna
kornunikatu opisujqcego typ zaznaczenia aktualnego zakresu. Na rysunku 11.7
pokazano przyktad jej ddalania. Zrozurnienie zasad ddalania funkcjl bedzie stanowito
dobre przygotowanie do wykonywania kolejnych operacji na obiektach Ranpe.

Ryzunek 1 1.7.
Pmcedura
AboutRangeSeI~
tion analizuje
aktualnie
i raznaczony
I zakres
302 CzeiC Ill + Jezvk Visual Basic for A ~ ~ l i c a t i o n s

Excel pozwala na wykonanie wielu identycznych zamaczeti. JeSli trzymajqc wclSniety


:as?. klawisz Ctrl, piwiokrotnie klikniesz korndrke A l , zamaczenle bedzle doione z pieciu
identycznych obszarow. Procedura AboutRangeSelectlon biene to pod uwage.

Wydajne pnetwananie kom6rek zaznaczonego zakresu


przy uiyciu pqtli
Czesto makra sprawdzajq katdq komdrkq zakresu i wykonujq operacj~.jeSli komdrka
speinia okreSlone kryterium,. Listing 11.1 zawiera odpowiedni pnyktad. W tym przypadku
ptocedura SelectlveColorl ustawia czerwony kolor tla dla wszystkich komdrek z m a -
czenia, ktore p ~ e c h o w u j wartoY
q ujemnq, Kolor tta pozostatych komdrek jest zerowany.

Listing 11.l.
Procedura ustawlajqca czelwony kolor tla dfa komdrek pnechowujqcych wart056 ujemn$
Sub SelectiveColorl( i
+
Je9li wartoit jest ujemna. zmienia kolor t i a k m r k i na czenrony
Dim cel: As Range
IfTypeName(Se1ection) cz "Range" Then E x i t Sub
Const REDINDEX 3 -
A ~ pication.ScreenUpdating
l - False
For Each cell I n Selectton
Ifcell .Value < 0 Then
-
cell .lnterlor.ColorIndex RE3INOEX
Else
cell .lnterlor.ColarIndex
End I f
- xlNone

Next cell
End Sun

Z pewno4ciq procedura SelectiveCol or1 zadziata, ale zawiera powatny blqd. Dla p y -
ktadu, co sig stanie, gdy zamaczenie b@ie zawieralo cafq kolumnc, 10 kolumn lub
caly arkusz? Zanim wszystkie komorki zostanqsprawdzone, prawdopodobnie utytkownik
nezygnuje z dalszego wykonywania makra. Kod tr6dlowy lepszego wariantu powytszej
procedury o nazwie Sel e c t i vecol or2 zawarto w listingu 1 1.2.

Listing 1 1.2. Wersja procedury SelectlveColori poszerzona o obslugp szerszych zakresdw


wielokolumnoy~h
Sub SelectiveBlorZ( )
'
J e i l i wartoit jest ujemna. zmienia kolor ;la kcmorti na czemny
D l m cell As Range
D l m Fonnul ace11 s As Range

-
Dim Constantcell s As Range
Ccnst REDINDEX ?

' Ignoruje blpdy


On Error Resw Next

Ap~lication.ScreenUpdating - False

--
Twrzy podzbiory oryginalnego zaznaczenia
Set FomlaCells Selection.SpecialCells~xlfomulas,xlNwbers)
Set Constantcells Se!ection.SpeclalCell stxlCanstants. rlNmbers)
Rozddot 1 1. Przyktady i rnetody prograrnowania w jezyku VBA 303

On Error @To 0

' Przetwarza kambrki f o m l


I f Not F o m l a C e l l s I s Nothing Then
For Each c e l l I n FormulaCell s
I f c e l l .Value < 0 Then
c e l l .Interior.ColorIndex - REDINDEX
Else

End I:
c e l l . Interior.ColorIndex - xlNone

Next c e l l
End If

Przetwarza kambrki stalych


I f Not Constanttells I s Nothing Then
For Each c e l l I n CMlstantCells
:f c e l l .Value c 0 Then
c e l l . I n t e r i o r .ColorIndex - REOINDEX
Else
c e l l . 1nterlor.ColorIndex
End I f
- xlNone

Next c e l l
End I f
End Sub

Proccdura wykonuje kilka dodatkowych opcracji, kt6rc sprawiajg te jest bardzo wydajna.
W cclu wygcnerowania dwdch podzbiordw zamaczenia utylem metody SpecialCell s.
Pierwszy podzbidr obejmuje jedynie komdrki zawierajqce stak numeryczne. natomiast
drugi -komdrki przechowujqce formuly nurnerycmc. Komdrki obu podzbiordw sq na-
stepnie przetwarzane za pomocq dwdch konstrukcji For Each . . . Next. W efekcie
przetwarzane q tylko niepustc komdrki, dziqki czemu uzyskujc siq znaczqcc przyspiesze-
nie malaa.
Zastosowanle instrukcji On Error Jest koniecme, poniewat metoda Speci alCel 1s
generuje btqd, gdy tadna komdrka nle spetnia klyterlum. Instmkcja zajmuje sie tez
obstugq wszystklch przypedkbw, w ktchyh podczas wykanywania p r o c e d u v
nie zaznaczono zakresu.

Usuwanie wszystkich pustych wierszy


Ponibza pmcedura usuwa pustc wiersze aktywnego arkusza. Procedura jest szybka
i wydajna, poniewaf. nie sprawdza wszystkich wierszy, a jedynie wiersze utywane przez
zakres, kt6y jest identyfikowany za pompcq w w c i w d c i UsedRange obicktu Worksheet.
Sub D e l e t e E n p t y b d
Dim LastRrnv As Long
Dlm r As Long
- - .
LastRw W-ir;iveSheet.UsedRange.Rcn 1 + ActiveSheet .UsedRange.Rws .Count

-
Application. Screenupdating Fa1 se
For r LastRw 70 1 Step -1
-
I f Application .WorksheetFunction .Counth(Rews[r) ) 0 Then R w s { r l .Delete
Next r
End Sub
304 C r e e Ill + Jezvk Visual Basic for APDlicotions

Pierwszym krokiem jest okreblenie osmmio utywanego wiersza, a nastqpnie przypisanie


jego numeru miennej LastROw. Nie jest to takie proste, jak mogjoby siq wydawak, po-
niewet u2ywany zakrcs mote. ale nie musi rozpoczynat sic od wienza l. A zatem
wart066 miennej LastRaw jest obliczana pop- okrdlenie liczby wienzy ukywanego
zakrcsu, dodanie numeru pienvszego wienla zakresu i odjecie jedynki.
W celu stwierdzenia, czy wiersz jest pusty, procedura kbrzysta z funkcji arkusza COUNTA
(ILE .NIEPUSlYCH) Exccla. Jdli dln ~ ~ k d l o n e gwiersza
o funkcja zwr6ci wartost 0, oznacza
to, te jest pusty. Procedura p n e m wierszr od d o h do gbry. a ponadto w pgli For
... Next utywa ujemnej wartoSci skoku (Step). Jest to niezb&c, poniewat opentcja
usuwania wierszy powoduje. bc wszystkie kolejne wiersze sqprzesuwane w g&q arkusza.
JtSli pptla przetwarzalaby wiersze od gbry do doh, jej licnik po usuniwiu wiersza nie
miaby wMciwej wartolci.

Okreflanie, czy zakres zawicra sie w innyrn zakresie


Ponitsza funkcja InRange pobiera dwa argumenty (obydwa sq obiektarni Range) i z w m a
wartoft True. jeSli pienvszy zakm zawiera sip w drugirn:
Function InRange( rngl. mg2) As Boolean

-
b r a c a Trw, je<li rngl jest podzbloten mq2

--
InRange False
I f rngl .Parent .Parent .Name mg2.Parent .Parent .Name Then

- -
I f rngl.Parem.Name rng2.Pannt.Name Then
If Umon(rng1. mg21 .Pddress rng2.Abdress Then
InRange True
End I f
End I f
End I f
End Function

Funkcja InRange mote siq wydaC dofC ztotona, poniewat insbukcje kodu Prddtowego
m u s q spmwdzit, czy dwa zakresy majdujq sip w tyrn samym arkuszu i skorostycie.
Procedura poshguje sic w~ciwo6c:iqParent m c a j q c q kontener obiektu. Pnyktadowo
poni2sze wyratenie zwraca nazwe arkusza h d p e g o kontenerem obiektu mgl, do Md-
rego jest wykonywane odwdanie:
rngl .Parent. Name

Kolejne wyratenie zwraca nazwp skomtyh! obiektu r g l :


rngl.Pamt.Parent.Nw

Funkcja Union jpzyka VBA zwraca obiekt Range reprcizntujqcy sump dw6ch obiekt6w
Range. Zakns sumy obejmuje wspblne kom6rki dw6ch zakres6w. JeSli adres sumy dw6ch
zakrcsdw jest taki sarn, jak adres drugiego zakresu, omacza to, t e pierwszy zalazs za-
wiera sip w dmgim.

OkreSlanie typu danych zawartych w kom6rce


Excel oferuje kilka wbudowanych funkcji, kt&e pomagajq w okreSlaniu typu danych
z a m h w k o m h e . Naleky do nich zalicqd takie funkcje, jak CZY .TEKST, CZY .LOGICZNA
i C 2 Y . W . Dodatkowo jpzyk VBA zawierafimkcje IsErrpty, Isbte i IsNmric.
Rozdziat 1 1. PnyWody i metody progromowaniaw jpzyku VBA 305

Zamieszczona poni-j funkcja CellType akceptuje argument Range i zwraca laticuch


(Pusta, Tekst, Logiczny, Elad, Data, Czas lub Liczba) opisujqcy ryp danych zawartych
w g6mej lewej kom6rce zakresu. Funkcja mote zostat utyta w formule arkusza lub
wywdana z innej procedury jezyka VBA.
Functron tellType(Rng)
'
Zwraca typ g6rnrj 1-j kondrki zakresu

Set TheCell
Select Case True
-
D i m TheCell As Range
Rng.Range( "Al")

-
Case IsEttwty(TheCel1)
CellType 'Pusta"

-
Case Appl ic8ation.MrksheetFunction.IsText(TheCe11 I
Cel lType 'Tekst"

-
Case A w l ication.WortsheetFunction. I s l o g i c a l (Thecell )
Cell Type 'Loglczny '

-
Case Apgl icatlon.WorksheetFunction. IsErr(TheCel1)
CellType "Btqd"

-
Case IsDate(TheCel1 I
CellType "Data'

-
Case InStr(1. TheCell.Text. ' : " ) o O
CellType "Czas'

End Select
-
Case IsNumeric(TheCell1
CellType 'Liczba'

End Function

Nalety zwr6ciC uwagp'lla instrukcjp Set Rng. Funkcja Cel iType akceptuje argument Range
dowoinej wielkoki. ale instrukcja ta powoduje, t e przctwana ona tylko g6mq lewq
kombrkq zakresu reprezentowanego przez miennq TheCel : .
Odczytywanie i zapisywanie zakes6w
Wiele operacji wykonywanych w arkuszach kalkulacyjnych uwzglqdnia ptzenoszenie
wartoki z tablicy do zakresu lub z zakresu do tablicy. Z jakiegoS powodu Excel o wiele
sybciej odczytuje dane z zakresu, nit je w nim zapisuje. Procedura iiriteReadRange
zawarta w listingu 11.3 demonstruje wzglqdne szybkoici wykonywania operacji zapisu
i o d c w zakresu.
Procalura tvforzy tablicp, a nastqpnie n pomocqpqtli For . . . Next zapisuje jej zawartoid
w zakrcsie i ponownie wczytuje jq do tablicy. Przy W c i u funkcji Tiwr jqzyka VBA
oblicza cms wymagany do wykonania katdej operacji.
Listing 1 1.3. Miemnie cmsu wykonywnia opera@/odcrytu i rapisu akresu
Sub YriteReadRangeO
D1m MyArray( I
Dim Time1 As Dwble
Din NmElecnents As Long
Dim i As Long
Dim WriteTime As String. RwdTime As S t r l n g
Dim Msg As S i r i n g
Rozdziat 1 1. + Pnyklody i metody progromowania w jezyku VBA 307

- -
&pi lcatlon.ScreenVpdatlng
For CurrRaw 1 To CellsDarn
-Fa1se

For CurrCol 1 To C e l i z k r o s s

-
ActiqteCell.Offset(CurrRow
CurrVal CurrVal 1
-
1. CurrCol - l).Value - CurrVal

Next CurrCol
Next Cur-Row

Wytwietla czas trwanla operacji


t ~ plcatlon.
l Screenupdating True -
MsgBox Fomat(Timer - S t a r t T i m . "00.00") & ' sekund"
End Sub

Pnyklad z listingu 11.5 demonstruje szybszq metode uzyskania tego sarnego efektu. Kod
a nastppnie za pamocqjednej instrukcji przenosi
h o d l o w y wstawia do tablicy w a n o i c i ,
zawartoSE tablicy do zakresu.
Llsting 11.5. ~ o q v s t y w a n l etymczasowych tabllc w celu szybszego wypelnienia zakres6w
Sub ArrayFillRange(
'
Wypelnieme zakresu poprzez transfer e l m n t h t a b l l c y
Dim CellsDarn As Long. CellsAcross As Integer
Dim i As Long, j AS [nteqer
Dim StartTime As Double
Dim TempArrayO As Long
Dim TheRange As Range
Dim CurrVal As Long

'
--
Pobranie wyrnlarbw
CellsDown Val (dnputbx('I1e k d r e t w plonle?"))
CellsAcross V a l ( [nputBox('Ile k d r e k w pozimie?"))

'
-
Zarejestrowanle czasu rozpoczecia
S t a r t T i m Timer

Zmiana wymiatxk tynczasowej t a b l i c y


ReDim TmpArray(1 To Cel l s D m . 1 To Cel lsAcmss)

-
Zdefinlowanle zakresu w arkuszu
Set TheRange Range(klls(1. 1). Cells(Cel1sOam. CellsAcross))

CurrVal -
Wypehienie tymczasowej tab1 i c y
0
-
- -
Ppp.1icatlon.kreenUpdatlng
Far i 1 To CellsDown
False

- -
For j 1 To CellsAcross
;empArray(i. j) CurrVal + 1
CurrVal CurrVal + 1
Next j
Next i

-
Transfer t y z c r a s w j tabhicy do akusza
TheRange .Vaiue TempArrty

Wyfwietla czas t m a n i a operacji


Application .ScreenVpdating True
-
-
n s g b x Format(Timer S t a r t T i m . 'W.00'1 & " sekund"
End Sub
308 C e f C Ill + Jezyk Visual Basic for A~plicatiom

W moim systemic wypdnienie z h u o wymiarach 500 x 256 kom6rek (128 000 ko-
mdrek) pny u2yciu pptli zajqlo 24,12 sekundy. Metada oparta na transferze zawartotci
tablicy do uzyskania identycrnego efektu potrzebowah zaledwie 0.24 sekundy, czyli
dziahh okoh 100 ray szybciej! Jaki wniosek wynika z tego pt-zyktadu? JeJli chcesz
przenieJf do arkusza d m iloSf danych, wszqdzie, gdzie tylko jest to mozliwe. unikaj
stosowania ~ t l i .

Przenoszenie zawartoici tablic jednowymiarowych


W poprzednim przykladzie zastosowano tablicp dwuwymiarowg ktba d o b m sprawdza
siq w arkuszach zlotonych z wimzy i kolumn. Aby przeniedt zawartoSC jednowyrniamwej
tablicy, zakres musi mi& orientacjg poziomq, nyli psiadat jeden wiersz z wieloma
kolumnami. JeSli jednak musisz zastosowaf zakres pionowy. koniecme jest najpienv
przetransponowanie tablicy, tak aby byta pionowa. W tym celu m o h a utyf funkcji
TRANSPOSE (3tAt4SWNW) Excela. Ponitsla instrukcja przenosi tablice l i c q q 100 ele-
mentdw do pionowego zaknsu arkusza (A1:AlOO):

Pnenoszenie zawarto~clzakresu do tablicy typu Variant


W tym punkcie omdwiow kolejnq rnetodp p m m m a n i a zawamki arkusza przy utyciu
jqzyka VBA. W ponitszym przyktadzie zawartoe zakresu kom6rek jest pnenoszona do
dwuwymiarowej tablicy typu Varlant. Nastqpnie w oknach kornunikatbw sq wydwietlane
gdrne p i c e ka2dego wymiaru tablicy.
Sub RangeToVariant(
-
Dfm x As Varlant
x Rang~("Al:L600").Value
Msgbx Wand(%. 1)
n s g h UBoundCx. 2)
End Sub

W pierwszym oknie komunikatu jest wy4wietlana wart036 600 (liczba wierszy orygi-
nalnego zakresu), natomiast w drugim - 12 (liczba kolumn). Przeniesienie zawartoici
zakre.su do tablicy typu Variant odbywa sip prawie ~tychmiastowo.

P o n h procedura wczytuje z a W C zakresu do tablicy typu Varlant, dla katdego jej


elementu wykonuje prostq opmcjq mnotenia, a nastqpnie ponownie przenosi dane za-
pisane w tablicy do zakresu. W celu sprawdzcnia, c q dane sq liczbami, prbcedura utywa
funkcji IsNuneric jpzyka VBA.
Sub RangeToVarlantZ(
Dim x As Variant
Dim r k Long. c As Integer
'
-
Wcrytanie dany~hdo tablicy typu Varlant
x Range('Al:LSO") .Value
'
- -
Wykonanie p e t l i dla tablicy typu Variant
For r 1 To !J&und(x. 1)
. - For c 1 To UBaund(x. 2)
Rozddof 1 1. Prryklady i metody programowanio w jezyku VBA 309

Unotenle przez 2
I f IsNumeric(x(r, c ) ) Then x ( r , c)
Hext c
- x(r, c) * 2

Next r
'
Range('A1:LSQ")
End Sub
x-
Poncwne umleszczente w arkuszu zawarto9ci t a b l l c y typu Variant

Procedura dziah zadziwiajqco szybko.

Zaznaczanfe maksymalnej warfof ci zakresu


Procedura GoTdfax z listingu 11.6 u a k p n i a komdrkq zakrcsu zawierajqcq jego mak-
syrnalnp wartofd. Procedura majduje rnaksyrnalnq wart036 spoSr6d wartofci wszystkich
kom6rek zaznacmnego zakresu. Jefli jednak zaznaczono j e d n q komorkp, procedura
oheSli rnaksyrnalnq wartost dla cakgo arkusza. Za pomocq funkcji Find procedura lo-
kalizuje i zamacza kom6rkq, w kt6rej ta wanoS6 sic znajduje.

Lbflng 1 1.6. Pnenaszenle kursora do k6mbrki zawlerajqcej nejwlqkszq wart036


Sub
*
GoTd.bx0
Uaktywnia k d r k e zawierajqcq najwiekszq wartoil:
Dim WorkRanp As Range
D i m HaxVal As Double
a

'
I f TypeName(Se1ection) -
Kokzy dzialznie, j e i l i n l e zaznaczano zakresu
'Range' Then Exit Sub

Jet1 1 zaznaczono jednq tan5&e. przeszukiwany j e s t ca?y artusz.

--
'
W przeciwnym razle przeszuklwany j e s t zaznaczony zakres
I f Selection .Count 1 Then
Set WorkRange Cell s
Else
-
Set UorkRange Selection
End If

'
-
R r e J l a maksymalnnq wartoff
MaxVal Ppplicatton.Hax(NorkRange)

Odrzukanie i zaznaczenie mak5ymalnej warto5ci


On Error Ram Next
UorkRange.Find(What:-MaxVal. -
After:-WorkRange.Range('Al'i. -
Look1n:-x3Values. -
LookAt:-xlwhole.
Seareh~rder:-xl~y&vs.
SearchDi rection: -xl ~ext: MatcrCase :-False -
1.Se:ect
If Err o 0 Then Ms@ox 'Naksymalna wartoSC n l e zostala znalezlona: " & MxI'al
End Sub

Argumenty metody Find odpowiadajq konmlkom okna dialogowego hjdowanie i ro-


mienimie Excela.
310 CzgSe Ill + Jqzyk Visual Basic for Applications

I
Zaznaczanie wszystkich korn6rek okreilonego forrnatu
Kolejny pnyklad dernonstruje sposbb utycia rnetody FindFormat lokalizujqcej i z m a -
czaiacei wszvstkie komorki arkusza z okreSlonym formatern. Po m a c z e n i u korn6rek
d . d

moms je w iowolny sposbb zmodyfikowaf, narprzykhd zmieniC formatowanie, usunqc I


itd. N a rysunku 11.8 pokazano przyklad.

Rysunek 11.8.
Zaznaczanie
wsrystkich
komdrek
okreiionego
formatu

WlaSciwofC FindFormat pojawib siq w Excelu 2002. Z tego powodu procedura


nie zadda+aw starszych wersjach aplikacji.

Z powod6w znanych tylko firmie Microsoft nie powiedzie sip rejestracja makra u2y- I
wajqcego przycisku Format z okna dialogowego Znajdowunie izamienianie. A zatem
koniecme hdzic napisanie kodu hbdlowego tego typu makr. Pmcedura SelectByFomat
wyglqda nastqpujqco:
Sub SelectByFomat( )
a
Zaz-acza kmdrki w oparclu o i c h formatowanie
'
Sprawdrenie. cry j e s t utynany Excel 2002 lub nowszy

If Yal(Apolication.Version) < 10 Then


Vsg8ax "Wymagany j e s t program Excel 2002 l u b m s z y . "
E x i t Sub
End I f

Dim F i r s t C e l l As Range. FourdCell As Rznge


31m A11Ce7ls As Range

OkreSlenie sprawdtanego formatwania


With Ppplicati0n.FindFomt
.Clear
Rozdzial 1 1. + Pnyktady i metody programowanla w jezyku VBA 31 1

-
.Interlor.ColorIndex
F o n t .Bold True
- 6 ' kolor i b l t y

End Wlth

'
-
Szukanie pierwszej pasujacej komdrki
Set Fi rstCell Activesheet .UsedRange.Flnd(what :-"", searchformat :-True)

J e l l t n i e zostanie maleziona tadna kmbrka. przetwarzanie zostanie zakohczone


IfFirstCell Is Nothing Then
HsgBox "Nle znaleztono radnych pasujacych k o d r e k . '
E x i t Sub
End i f

--
I n i c j a l i z a c j a AllCells
Set AllCells FirstCell
Set FounUCel1 Fi rstCel 1

Uykonywanle pet11 do m e n t u ponownego malezienia F i r s t C e l l


Do
-
Set FoundCell Activesheet .UsedRange.Find
(After:-Foundcell . what :-"'. searchformat :-True)
-
Set AllCells -
I f FoundCell I s Nothing Then E x i t Do

-
Urnon(FoundCel1. A l l C e l l s )
I f Foundcell .Address FirstCell .Address Then Exit Do
LMP
'
Zamaczenie znalezionych k d r e k i w l n f o m a n t e utytkawnika
Al1Cells.Select
MsgBox " Znaleziono pasujpcych kodrek: ' b A11Cells.Count
End Sub

Procedwra najpienv definiuje w ~ c i w o f c obiektu


i F i n d F o m t . W tym przykladzie szu-
karny kombrek, w kt6rych zastosowano t M e t b i pogrubiono tekst. Ocrywifcie motna
szukaC dowolnego formatowania.

Metoda Find lokalmje p i e n v q korn6rkq, kt6ra spdnia layteria. Dla argumentu wiat
metody Find jest ustawiany pusty Mcuch, poniewa2 operacja wyszllkiwania dotyczy
tylko formatowania. a nie zawartoki kom6rki. Dodatkowo wartoSciq argurnentu Sear-
chFormat jest True, poniewa2 faktycznie jest wyszukiwane formatowanie.
JeSli szukane formatownie nie zostanie znalezione, utydtownik jest informowany i pro-
cedura ko6czy ciziaianie. W pneciwnyrn razie maleziona kombrka jest przypisywana
miennej obiektowej A1 1Cell s, ktbra przechowuje wszystkie odszukane kornbrki. Petla
przy W c i u rnetody F i n d koniynuuje wyszukiwanic, ale zawsle od komdrki nastqpnej nit
popnedno znaleziana. Operacja ysmkiwania ma do momentu ponownego znalezienia
kom6rki, ktbra mtata odszukana jako p i m z a . Na koficu wszystkie malezione kornbrki
arkusza 5$ z m c z a n e i u w o w n i k jest informowany o ich licxbie.
Procedura nie rlokalimje korndrek c h m k t e r y z u j ~ hsle specyflemym formatowaniem.
bwgcyrn wynikicrn zastosowanla funkcjl iarrnatwnnla rarunkowego Excels.
312 CZQJC 111 + Jpzyk Visual Basic for Applications

Przetwananic skorosryt6w i arkuszy


Kolejne pnyklady demonsrmj~metodyprzctwammia skoroszyt6w i arkuszy p r q utyciu
jpzyka VBA.
Prryklady om6wione w tym podrozdtiale majdujq siq na ddgczonym dysku CD-ROM.

Zapisywanie wsrysfkich skoroszytbw


Poni8za procedura pny utyciu pqtli przetwarza wszystkie skoroszyty zawane w zbiorze
workboaks i zapisuje katdy plik, ktbry wcze5niej ju2 mpisano:
hb7tc. Sub SaveAllWorkbooksO
Dtn b o k As Workbock
For Each Book I n workboors
If Book.Path 0 '"Then Book.Save
Next BOok
End Sub

Nalety nvr6ciC uwagq na wla$ciwolt Path. JeSli dta wlaSciwo3ci Path skoroszytu nie
ustawiono warto$ci, oznacza to. te jego plik nigdy nie zostal zapisany (nowy skom-
szyt). Procedura ignoruje tego typu skomszyty i zapisuje tylko te, ktdrych wlaSFiwoJc
P a t h posiada wartoft.

Zapisywanie i zamykanie wszystkich skoroszyt6w


Ponisza procedura pny utyciu ~ t l pnetwana
i zbi6r Workbooks, zapisujqc i zarnykajqc
wsqstkie skoroszyty:
Sub C;oseAl lUorkboks( )
D l m Baak As Workbook
For Each Bodk I n MtWmoks
I f Book .Nm0 lh1sWortbook.Name Then
Book . C l ose savechanges :-True
End I f
Next Book
Thi s k r k b w k .Close savechanges :-True
End Sub

Aby okreblit, czy skoroszyt zawiera aktualnie wykonywany kod trMiowy, procedura
ukywa k!mkcji If. Jest to koniecme, poni- zamkni.yie takiego s k m z y t u spowoduje
p m i e wykonywania kodq na skutek czego inne skoroszyty nie zostanq prrchvomnc.

Korrystanie z wlaiciwo5ci skoroszytu


W y h i e z menu PIik Excela polecenia WIas'ciwdci spowocluje atwarcie okna dialogowe-
go zawieajqcego informacje na temat aktywnego skoroszytu. Dostep do wIaSciwofci
skoroszytu m o w uzyskaC t a b pny u2yciu jtzyka VBA. P o n b pmcedura wyiwietla
d a q i czas wykonania ostatniej operacji zapisu skoroszycu:
. Rozdzial 1 1.4 Pnytbdy i metody programownia w jezyku VBA 313

Sub LastSaved(
Dim SaveTime As String

--
On Error Resume Next
SaveTlme ActiveWorkLwk.Bui1 t i n C o c u ~ r e n t P ~ p e r t i e s " L a sSave
I f Savel'lme "" Then
t Time") .Value

MsgBox ActiveWorkLwk.Nane 8 "me zostal zapisany."


Else
NsgBox "Zapisany: " & SaveTiw. ActiveUorkboot .Name .
End If
End Sub

Jefli skoroszyt nie zostal zapisany, pr6ba uqskania dostcpu do wlaSciwoSci Las: Save
Tire zakohczy sic wygenerowaniem blpdu. Instrukcja Dn Error powoduje, te blqd ten
zostanie zignorowany. Struktura I f . . . Ren . . . E'se sprawdza nastppnie wart056
zmiennej SaveT~mei wygwietla odpowiedni kornunikat. Jdli zmienna jest pusta, omacza
to, t e plik nie zostal zapisany. Na rysunku 1 1.9 pokazano pnykladowy wynik dziaiania
pmcedury.

Rysunek 11.9.
WySwieUenie daty
i czasu po zaplsanb
skoroszytu

Co prawda, dostbpnych jest kllka innych wbudowanych Wbciwodcl, ale niewsrystkie


@+' sq powigzane 2 Excelern. Aby uzyskaC pdnq list? wbudowanyeh wlaSciwoSci, nalezy
skorzystat z System" pornocy.

Synchronizowanie arkuszy
Excel nie urnotliwia synchronizacji arkuszy w skoroszytach wieloarkuszowych. Imymi
stowy, nie istnieje rnetoda, aby we wszystkich arkuszach auromatycznie zamaczyt ten
sam h s i ustawit gdmq l e v korndrke widocmq w oknie. Ponitszc rnakro jpzyka VBA
jako bazy utywa aktywnego arkusza, a w stosunku do pozostalych arkuszy skoroszytu
wykonuje nasbpujqce operacje:
zaznacza taki sarn zakres, jak w przypadku aktywnego arkusza,
ustawia takqsarnq g 6 r q lewq komdrkc okna, jak w aktywnyrn arkuszu.
Oto kod ir6dlowy procedury:
Sub SynchSheets( 1
'
Ustawia we wszystkich a&uszach t e s m kamdrke w g6rym !wfl rogu okna -
jak w aktywym arkuszu
ifTypeName(Act~ve5heet) 0 'Worksheet' Then E x i t Sub
Dim UserSket As Worksheet, sht As Worksheet
D i m TopRw As Long. LeftCol As Integer
D l m UserSel As String

-
P p p l i c a t i ~ . S c r e e n U ~ a t l r g False

-
Zapamietuje aktualny arkusz
Set Usersheet k t i v e S h e t
314 CzgiC Ill + Jezyk Visual Basic for Applications

TooRow -- ActiveWindow.ScrollColunvl
Zapisuje info:rmacje z aktpnego arkusza
ActiveWindw.Scrol lRow
LeftCol
UserSel - ActiveWindw.RangeSelection.Address

Wykonuje ~ t l dla
e arkuszy
Far Each sht I n ktiveWor4book.kbrksheets
I f sht.Vlsible Then ' w i j a ukryte arkusze
sht .Activate
RangeIUserSel) .Select
--
PctiveWindw.Scro1 IRow TopRow
PctiveWindow.Scro11Col umn LeftCol
End If
Next sht
'
Przpraca oryginalne ustawlenie aktymego arkuszl
Usersheet .Activate
-
Application. ScreenVpdati ng True
End Sub

Metody programowania w jezyku VBA


Nastcpne przyklady ilustrujq czcsto stosowane metody programowania w jezyku VBA,
ktdre motes2 wykonystaf we wbsnych projektach.
Wszystkle przyklady z tego podmzdzialu sq dostgpne na dolqczonym dysku CDROM.

Przetqczanie wartoici wtahiwoici typu logicmego


WlniciwoSC fypu Iogianego posiada wartoff True lub False. Najprostsza metoda pnc-
lqczania wartofci takiej wtafciwofci polega na zastosowaniu operatora Not. Zostaio to
pokazane w ponitszyrn przykbdzie, w kt6rym pndqczana jest wartoft wtaSciwoSci
WrepText obiektu Selection:
Sub ToggleWrapText( )

--
a
Wiqcza Tub ,wy?qcza zawijanie tekstu dla zaznaczorrych kombrek
[ f TypeName[Sei ection) "Range" Then
5election.dracText Not ActiveCel 1 .WrapText
E* If
Enc SUO

Prze+qczaniejest wykonywane w oparciu o aktymq kombrkp. JeSli po zaznaczeniu za-


k m u wMciwoSci kombrek majq rotne wartohi (np. zawartoff niektbrych kom6rek
jest pogrubiona, a innych nie), mamy do czynienia z pmieszaniem. W tym przypadku
Excel w celu okreflenia sposobu przetqczania wartofci posiuguje sip aktywnq komdrka.
JeSli na przyklad zawartotf aktywnej kombrki jest pogrubiona, po klikniviu przycisku
Pognrbienie na pasku narzqdzi pogrubienie mstanie usuni~tez wszystkich komdrek zazna-
czenia. Ta pmsta procedura na3laduje zachowanie Excela, co zazwyczaj jest najlepszym
rozwiqzaniern.
Rozdzial 11. + Prryklady i metody programowania w jezyku VBA 315

Procedura wykorzystuje funkcjp TypeMame, w celu sprawdzenia, czy zamaczono za-


kres,. Jefli tak nie jest. nie zostanie wykonana tadna operacja. Operator Not umotliwia
przelqczanie wartoici wielu innych wtaSciwofci. Aby na przykhd w arkuszu wySwietlid
lub ukryC nagMwki wierszy i kolumn, nale7-y u t y t nastepujqcej instrukcji:
ActiwWindow.DlsplayHeadings - Not ActiveWiRdow.Dlsp1 ayHeadings

Aby w aktywnyrn arkuszu wyfwietlif lub ukq4 linie siatki, nalety utyC nastqpujqcej
instrukcji:
ActivdJindcw.DisplayGridl~nes - Not ActlveWincow.OisplayGridlines

Okreilanie liczby drukowanych stron


W celu okreflenia liczby drukowanych snon arkusza rnoma utyf polecenia Podglqd
wydmku Excela i w dolnej czqfci ekranu sprawdzit liczbp stron. Poniaza procedura je-
zyka VBA liczy poziome i pionowe linie podzialu stron i na rej podstawie okreSla liczk
drukowanych stron aktywnego arkusza:
Sub Pagecount(1
HsgBox (Activesheet .HPageBreaks.tount + 1) * (ActlveSheet .VPageBreaks.Count + 1)
End Sub

Kolejna pmcedura jqzyka VBA przy utyciu petli przetwarza wsrystkie arkusze aktyw-
nego skomszytu i wyiwietla calkowitel liczh drukowanych swn:
Sub ShowPageCamt I)
Dim Pdgetnmt As Integer

-
Dim sht As Worksheet
pagecount 0

-
For Each sht I n Worrtsheets
PageCount PageCount + (skt.HPageBreaks.Cwnt
(sht .VPageBreaks.Count + 1 )
+ 11 '-
Next sht
-
MsgBox "Uszystk~chstmn " L PageCcunt
EM Sub

Wyiwietlanle daty i czasu


JcSli rozumiesz system numer6w seryjnych utywany przez Excel do przechowywania
dat i godzin, nie bqdziesz miat tadnych problemdw z zastosowaniem dat i czasu w pm-
cedurach jpzyka VBA. Procedura DateAndTime wygwietla okno komunikatu z aktualnq
datq i czasem (rysunek 11.10). W pasku tyhllowym okna wySwietlany jest spenonali-
zowany tancuch tekstowy.

Rysunek 1 1 .lo.
Okno komunikatu
WySwietlaJqce date
i mas
316 CzgfC Ill + Jezyk Visual Basic for Applications I

i
Procedura z listingu 11.7 jako argument funkcji Format wykorzystuje funkcjp Date. Wy-
nikiem dziaiania procedury jest hlicuch zawierajqcy ladnie sformatowanq datq. Aby
uzyskaC tak samo sformatowany czas, postilpilem w podobny spos6b.
LIstlng 11.7. WwieUenle aktualnej daty i czasu
Sub DateAndTlmet 1
#y?yMetla aktualnq date i czas
Dim TheDate As String. TheTiw As String
O i m Greeting Ps S t r ~ i l g
Sim F~llNameAs String. FirstN~msAs String
D:m SpaceInName As Integer

TheOate
TheTime -- Fonnat(0ate. "Long date')
Fonnat(Time. 'Long time'!
'
Ckreilenie powi tania u oparclu o ; Z~S
Select Case Time
Case I s < TimeValue("l2:00"',: Greeting -- 'Dzteh dobry "
Case I s >- TimeValue("17:00"):
Case Else:
Erd Select
Greeting
Greeting - 'Dobry wieczdr "
'Dzieh dobry "

Space!nNm
--
Dodanle do povitanta tmlenla ulytkownita
Fu1I Ume Appl i c a t l o n .UserName
InStt(1. FullName. ' 1)
'

-- - -
Obslusa przypzdku. gdy nama n i e zawiera spacji
I: ~ c ~ ~ ~ N E I T0 IThen
~ SpaceInName Len(Ful1Nam)
F: -5:Name Left(Fu1lName. S~aceInName)
Greeting Gre?ting h iirstName

' Wy$wietlente k w n i k a t u
Hsghx TheOate 8 vbCrLf & TheTime. vb0KOnly. Greeting
End Sub

W celu zagwarantowania, t e rnakro bpdzie poprawnie dzialalo niezaletnie ad ustawied


rrgionalnych systemu Wkownika, w powytszym przykhdzie ukykm nazwanych
fonnat6w (Long Date i Long Time). Motna jednak poshtyf sip innymi formatami. Aby
na prrykhd date wyswietlit w forrnacie mm/dd/rr,motna utyt nastppujqcej instrukcji:
TheDate - Fonnat (Date. "mnlddlyy')

Aby uzaletniC od pory dnia t d C komunikatu powitalnego wy4wietlanego na pasku ty-


tubwym okna, zastosowalem konstrukcjp Select Case. WartoSci nviqzane z czasem
stomwane w jqyku VBA funkcjonujq podobnie, jak w Excelu. Jdli wartoSf czasu jest
mniejsza ad liuby 0.5 (pohdnie), oznacza to, ke jest przedphdnie. JeSli z kolei wartoe
ta jest wicks= od liczby 0.7083 (godzina 17), oznacza to, ze jest wiecz6r. W innych
pqpadkach jest popohdnie. Wybralem proste ronviqimie polegajqce na zastosowaniu
funkcji TimeValuejecyka VBA, ktdra pobierajqc hncuch, m c a wartoSC czasu.

Kolejna grupa insttukcji identyfikuje imip uwkownika majdujqce sip w z a b d c e @&ne


o h a dialogowego Opcje. W celu zlokalimwania pienvszcj spacji zawartej w personaliach
q o w n i k a utytem funkcji IrlStr jpzyka VBA. Po napisaniu procedury stwierdzilem,
t c nie uwzglpdnilem identyfikatora utytkownika, w kt6rym nie wyst~pujespacja. Gdy

I
Rozdziot 1 1. Prryktody i metody programowanla w jqzyku VBA 3 17

wiqc uruchomilem jq w systemie utywanym przez utytkownika Noh&, nie h i a h


prawidbwo. Jest to potwierdzeniem tezy, te nie motna przewidziet wszystkiego i nawet
najprostsze procedury mogq nie zadziatak. Nawiasem m6wiqc, jelli nie zostanq podane
penonalia utytkownika, Excel zawsze utyje nazwy akhlalnie zalogowanego. W procedurze
problem ten ronviqzakm, pnypisujqc miennej SpaceInName dhrgoik pehej nazwy
umkownika, tak aby Funkcja L e f t m d c i l a n a m e .
Funkcja Mswx kpzy date i czas,a ponadto w celu wstawienia pomipky nimi maku po-
dzialu stosuje wbudowanqstaIq vKrLf. Seala vbOKOnly jest predetiniowanq st;tlq zwracajqcq
zero i powodujqcq, t e w oknic komunikatu zostanie wy5wietlony jedynie przycisk OK.
Ostatni argument funkcji o nazwie Greeting zostat wczeSniej w procedurre zdefiniowany.

Pobieranie listy czcionek


Excel nie oferuje berpoSmdniej metody uzyskania lisry wszystkich zainstalowanych
czcionek. Jedno z rozwiqzifi polega na odczytaniu nanv czcionek z pola Czcionka
(kontrolka Font) na pasku nargdzi Formotowaiie.
Ponitsza procedura w kolumnie A aktywnego arkusza wyfwietla lisg zainstalowanych
czcionek. W celu zlokalizowania kontrolki Font umieszczonej na pasku narzpdzi For-
matowonie procedura poshguje sic metodq Findcontrol. JeSli kontrolka nie zostanie
maleziona (poniewat np. utytkownik jq usun@), twonony jest tymczasowy obiekt Com-
mandBar, do ktdrego jest dotqczana kontrolka Font.

Sub Showlnstal ledFonts0


D i m FontList Rs CannandBarControl
D i m TempBar As CarmandBar
D i m 1 As Integer

-
S e t FontList Appllcation.ComnandBars("Fomattiq").
Findtontrol(1D:-1720)
-
J e i l l brak kontrolkl Font. twrzy t m z a s m y obiekt ConnandRar

--
If FontList Is Hathing Then
Set TerrpBar bppl i c a t i m .tcmMndBars .Add
Set F m t L i s t TempBar.Controls.Add(ID:-1728)
End If

Unieszcza ~ c i o n t wi kolunnie A

-
Range("A:A") .Cl earCcntents
For i 0 To Fontlist. L i s t t a a t - 1
C e l l s i t + 1. l? = FontList.Lfstit + 1)
Aby zastosowat crcionte d l a kan6rZi. nale) usunat znak
apostmfu sprzed pan!tszej i n s t M c j i
t e l l s ( i + 1. l).Font.Nm = FontList.List[l + 1)
Next 1

J e i l i i s t n l e j e tymrrasmy obiekt CcmnandBar. uswa go


On E r m r Resune k x t
TmpBar.Celete
End SIW
318 CzeJe Ill J ~ z y kVisual Basic for Applications

OpcJonalnlernotne te2 wy~wletllc? n a w czclonkl wykonystujqc te uclonke. W tym


celu wewngtn pet11 For . . . Next nalety urnieSclC nastqpulqcq Instrukcjq:

Tneba jdnak mleC Madomo&d. Le zastosowanie w skoroszycie wlelu czcionek


spowoduje zutycie znacznej llofci zasobdw systemowych, co mote nawet prowadzit
do zawieszenia komwtera.

Sortowanie tablicy
Co prawda, Excel posiada wbudowane polecenie sortujqce zakresy arkusza, ale jezyk
VBA nie dysponuje metodq sortowania tablic. Skutecne, ale niewygodne rozwiqzanie
tego problemu polega na pneniesieniu zawartoSci tablicy do zakresu arkusza, posorto-
waniu j e j przy u2yciu polecenia Excela, a nastqpnie wczytaniu wyniku do tablicy. JeSli
jednek szybkoM odgrywa d u a rolp, lepiej s t w o w w j ~ z y k uVBA proceduw sortujqcq.
W tym punkcie ombwip cztery r 6 a e metody sortowania: arkuszowe, bqbelkowe, szybkie
i zliczajqce.
Sortowanie arkmowe polega na przeniesieniu zawartoici tablicy do zakresu
arkusza, posortowaniujej, a nastepnie ponownym urnieszczeniu w tablicy.
Procedura oparta na tej metodzie, kt6rej jedynym argumentem jest tablica,
obshguje tablice zawieraj4ce nie witcej n i t 65 536 element6w odpowiadajqcych
liczbie wierszy arkusza.
Sortowanie bqbclkowe jest prostqmetodqsortowania (zastosowano j q tef
h u. i m sortowanie arkusza w rozdziale 9). Co ~rawda.
w ~rzykhdzied e m o n s - *

metoda sortowania bqbelkowegojest lama w kodowaniu, ale makczej powolny


algorytrn, zwiaszcn gdy pnetwarzaniu podlega duta liczba elementbw.
Sortowanie szybkie w por6wnaniu z bqbelkowymjest o wiele szybszq metodq
sortowania, ale tet znacznie tmdniejsq do nozumienia. Metoda mote zostat
wykorzystana tylko w pnypadku takich typ6w danych, jak Integer lub Lcng.
Sortowanie dimjqce jest bardm szybkie, ale jednoczdnie trudne do mzumienia.
Na dotgczonym dysku CD-ROM majduJesig skoroszyt aplikacji demonstrujqcej wytej
wytnisnlone metody soeaania. Skoroszyt ptzydaje rie w pnpadku pMawnywania
rnatod sortowania tabllc o r6tnych rozrniarach.

Na rysunku 1 I.1 I pokazano okno dialogowe przyk4adowego pmjektu. Pmcedury sor-


tujqce przetestowaiem p n y u b c i u tablic o siedmiu r6tnych rozrniarach liczqcych od
I00 do 100 000 element6w. W tablicach zawarte by& wartoSci losowe typu Long.

W tabeli 11.1 zawarlem wyniki testdw. WartoSt 0,00 oznacza, te sortowanie zostato
zakonczone prawie natychmiastowo w czasie kr6tsym n i f 0,0 I sekundy. Nalety za-
uwakyd, 2e sortowanie arkusza jest ograniczone do 65 536 elementdw.

Algorytm sortowania h z o w e g o jest wyjqtkowo &ki, zwlaszna te optracja uwzglcd-


nia przeniesienie zawartdci tablicy do arkusza, sortowaniejej i ponowne wczymnie danych
do tablicy. JeSli tablica jest jut prawie posortowana, sortowanie arkusmwe b d d e jeszcze
szybsne.
Rozdziot 1 1. + Przyktady i metody progrornowanio w jezyku VBA 319

Rysunek 1 1 . 1 1 .
Okno urnotliw~ajqce
pordwnanie czasu
wymaganego
do wykonania operaji
sortowania tablic
o rdinych rozmiarach

Tabela 1 1 . l . Czas Wania (wyatony w sekundach)operacji sortowania tablic tvypelnionych losowymi


wartofciami p n y uiyciu czterech algorytmdw sortu~qcych
Sortowsnie Sortowanie Sortowanie
L i a b a elementbw Sartowanie
bqbelkowe przy szybkie p n y zlinsjqce przy
tablicy arkuszowe ExcelP
uj c i u jpyka VBA utyciu jpyka VBA utyciu jpykn VBA

500 0.04 0.03 0,Ol 0.02


1 000 0.04 0.15 0.01 0.03
5O
M 0.10 0.50 0.02 0.03
10 000 0.19 (4.55 0.05 0.09
50 000 0.95 329.24 0.27 0.09
100 000 brak danych 1199,70 0.54 0.1 7

Algorytm sortowania bqbelkowego jest do96 szybki w pnypadku niewielkich tablic, ale
- - (liczqcych ponad 5000 element6w) m o m o nim zapomniet. Jefii aleo-
. - wiekszych
prry
' u mzaa najlepszy, iortowanie zliczajwe i tak dystansije
rytm s o r t o w a n i a ~ z ~ ~ k i e ~ o sip
je pod wzglqdem szybkoici.

Przetwarzanie grupy plik6w


Jednym z c-tych mtosowah makr jest oczywidcie kilkukrome powtarzanie okreilonej
operacji. Przykhd z listingu 11.8 demonstruje, jak przy utyciu makra pnetworzyt kilka
r6tnych plik6w zapisanych na dysku. Proccdlo;s M r a mote pomdc w napisaniu wknego
rnakra realizujqcego tego typu zadanie, prosi utytkownika o podanie wzorca nanv plikow,
a n-pnie pmtwarza wszystkie pliki, kt6rych nazwy q z nim zgodne. W tym przypadku
operacja pzetwarzania polega na zaimportowaniu.pliku i wprowadzeniu grupy formu(
zestawiajqcych, ktdre idencyfkujqzawarte w nim dane.

Listing 11 .a. Makm pnetwarzajqce dele pllk6w zapisanych na @sku


Sob BatchProcPss(
C i m FS As F i l e S e a ~ h
D i m FilePath As String. Fi1eS0-x As String
D i m i As Integer

-
Okreilenie Scietki p ? i t u 1 wzam jego nazwy
FilePath ThisNorkboot .Path 6 '\'
320 Czefe Ill + Jezyk Visuoi Basic for Applications

F l 1eSpec - 'text?? . r x t "

-
Tworzenie obiektu F i l eSearch
S e t FS Application.Fi1eSeanh
With FS
- -

--
.LookIn Filepath
.FileName FileSoec
.Execute

I f .FoundFiles .Coon: 0 Then -


Konczy wykonyuanie. j e l l i n i e zosranie znzlenony taden pl i k

Msgbx "Hie zna\eziono zaanego pliku'


E x i t Sub
End I f
End Y i t h

'
-
Petla przetwarza kolejne p l r k i
'or i 1 To FS.FounOF11es .Csunt
Call ProcessF~1eslFS.FoundFi~es~l~!
Next 1
End Sub

3 Ptzykiad konysta z tnech dodatkowych pllk6w, r6wniet maJduJqqchsig na dysku


@ CDROM. Sq to: TUITOI.TXT, EXTO2.TXTI TM703.TM. W celu zalrnportavania innych
plikdw tekstowfch konleczne bedzle zmodyflkowanle procedury. Plocedura korzysta
z ob~ektuFilesearch, dlatego dzlak tylko w Excelu 2000 tub jego nowszych wersjach.

Obiekt FtIeSearch pobien pliki, ktdrych nazwy sq zgodne z wzorcem. Pliki sq przetwa-
m e p n y utyciu ~ t lFori . . . Next. W trakcie przetwarzania wewnqtn ~ t jest
l i wy-
wotywana prosta procedura ProcessFi!es. W cclu zairnportowania pliku konysta ona
z rnetody OpenText, a nanepnie wsrawia pict formut. OczywiScie zamiast ponitszej rnotna
zasrosowak wlasnq procedure.
Sub ProcessFi les(Fi l e N m As Strlng)
' Importowanie p l i k u
Workkooks .OpenText F i 1eName:-Fi leName. -
Origin:-zlWindows. -
StartRon:-1.
~ata?ype:-xl~?xed~i~th, -
Field1nfo:-
~ r r a y ( ~ r r a y ( i11.
j , Array(3. 1). Array(l2. 1))
a

ilange(,'Dl') .Value --
Wprcwadzm!e f o m l padsumowujqcych
"A"
Lnge('D2') .Val ue "8"
Cnge('D3') .Value - -
"C"
Range!"Fl:F3").Fomla
End Sub
-
Lnqe('El:E3'). F o m l a "-COUNTIF(B:B.Ol)"
"-SUHIF(E:B.Ol.C:C)'

Funkcje przydatne w procedurach jezyka VBA


W tym podmzdzialt zaprezentuje kilka niestandardowych funkcji, kt6re moma albo
bezpoirednio stosowaC w aplikacjach u~ytkowych,albo modyfikowat. traktujqc je jako
tw6rcq inspiracjq. Najpnydamiejsze q wtedy, gdy y w d u j e siq j e z h e j pmedury
jczyka VBA. Zostaly one zdeklarowane ptzy uZyciu slow kluczowego Private, dziqki
czemu nie bed%widocme w oknie dialogowym Wstmimiefunkcji Excela.
Rozdziai 1 1 . Prryktody i metody progamowania w jqzyku VBA 321

Funkcja FileExisfs
Funkcja pobiera jeden argument (Scietka pliku wraz z jcgo n m i mraca wartoSC True,
plik istnieje:
jeili
Private F u n c t ~ mF l l e E x i s t s ( f n m ) PS b o l e a n

-
'
Zwraca wartolt True. j e f l i i s t n i e j e p l l k
FileExists (Dlr(fnarr~1<> " " )
End Function

Funkcja FileNameOnly
F u n k c j a pobiera jeden argument (kietka pliku wraz z jcgo nazwa) i zwraca tylko nanvq
pliku (innyrni slowy -usuwa fcietkq pliku):
Private Functian FileNametkrly(pname) As String
Zwraca n a w p l i k u pobranq z l a k u c h a ztotonego ze Scietki 1 nazwy p l l k u

---".
D l m % As Integer. length As Integer. temp As String
1ength Len(pnant9
LRnp

--
Fsr i length To 1 Steo -1
IfHidtpnam. i. 1, Application.PathSeparator Then
FileNameOnly temp
E x i t Function
End If
-
twnp bld{pname. i. 1) b temp
Next
F i l e L ~ l y pnarrP
End Function
-
Funkcja FileNameCnly przetwarza dowolntl Scictkp i nanvq pliku (nawet jesli plik nic
istnieje). Jdli plik istnieje. ponitsza Funkcja ofemjc prostsq rnetod~usuwania Scictki
i m c a n i a tyIko nazwy pliku:
Private Function FileNamdhlyZ(pname) As S t r i n g
-
FileNameOnlyZ D l rtpnane)
End Function

Funkcja PathExists
W c j a pobierajedm argument (ki& p l h } i nvrsca wartoSf True, jdli fci&a ismieje:
Private Function PathExiststpnm) As b o l e a n

I f Dir(pname, vbDlrectory)
PathExt s t $ False
-
Zwraca wartolt True. j e l l 1 i s t n i e j e Scietka

- '" Then

Else
PathExists
End If
- tEetAttr(pname) And vWirectory) - vbDirectory
End Function
322 e + Jezyk Visual Basic for Appllcatiom
C z ~ f Ill

Funkcja RangeNameExists
Funkcja pobiera jedm argument (nazwa z a h s u ) i zwraca w M f True. jeSli w aktywnym
skoroszycie istnieje n a m a zakresu:
Private Fucctlon RangeHameExists(nname) As Boolean
*
Zwraca w a r t o g True. j e S l i i s t n i e j e nazwa zakresu
D i m n As Name
RangeNaneExists Fa1se -
I f UCasetn. Name) --
For Each n I n ActiveWorkbook.Names
UCase(nnarne) Then
RangeHameExists True
Ex1t Function
End i f
Next n
En@Function

Funkcja SheetExists
Funkcja pobiera jeden argument (nanva arkusza) i m c a wart046 True, jeili w aktywnym
skoroszycie istnieje arkusz:
Private Functiw SheetExi stsIsname) As Boolean
' Zwraca wartoit True, j e s l i n aktpnym skoroszycie i s t n i e j e arkusz
D i m x As Object

--
On Error Resume Next
Set x ActiveUorkboak.Sheets(sname)
-
i f Err 0 men Shee?Exists True Else SheetExists False -
End Function

Funkcja WorkbooklsOpen
Funkcja pobiera jeden argument (nazwa skorosytu) i nvraca wartoid True, jdli skomszyt
jest otwarty:
Private Function MrkbwkIsOoen(wbname) As Boolean
Zwraca marto5c True. j e i l i skoroszyt j e s t otwarty
Dim x As Workbook

--
On Error Resume Next
Set x W a ~ ~ k s ( m b n m ~
-
I f Err 0 Then WorkbookIsOnen True Else WottbookIs0pn - False
End Function

Pobieranie warto5ci z zamkniqtego skoroszytu


J ~ z y kVBA nie umotliwia pobrania wartoSci z zamknieego skoroszytu. Jednak mo2na
skorqstaC z tego, te Excel obsiuguje Iwza do plik6w. Zamieszczona p o n k j funkcja
GetVa 1ue jqyka VBA pobiera wartoit z zamkniqego skoroszytu. Zadanie to jest reali-
zowane poprrez wywolanie st-go typu makra XLM, kt6re bylo stosowane w wersjach
Excela sprzed wersji 5.
Rozdzial 11. + Przykiady i rnetody progmrnowania w jezyku VBA 323

Sprawdzarde, czy obleM nalefy do zMoru


Ponilsza pocedura Function jest prostq funkc18 sprawdzaj;tcg, czy obiekt nalety do zbioru:
P r i v a t e Function IsInCollection(Coln As Object. Item As Strir,g) As Boolean
31m Obj As Object
- -
On E r r o r Resume Next
Set Obj Coln(1t.m)
IsInCollection Not Obj Is Yothing
End Function
Funkcja poblera dwa argumenty -
zbldr (obiekt) i element (taricuch). M6ry rnoie by6 lub nie b e
cztonkiern zbioru. Funkcja prdbuje utwoqC zmiennq obiektow~reprezentujqcq element zbioru.
JeSli pr6ba si? pwiedzie, funkcla mrdci wart046 True. W przeciwnym razie m d c i wart066 Fa1 se.
Funkcji IsIKollectlon rnotna uiyC zamiast trzech innych funkcji wymienidnych w rotdziale (?an-
gekarneExlsts, SheetExists i UorkbookIsOpen). Aby stwierdzie, czy w aktynyrn skoroszycie istnieje za-
kres o namie Data, przy utyciu ponliszej Instrukcjl naletywywoia6 funkcje islnCo'?ect>oc:
MsgBox IsInCollection(ActiveWorkbook.Names. "Data")
Aby stwierdzib, czy otwarto skoroszyt o nazwie budiet. x l s, naleiy u j C nastepuj-ej instrukcji:
MsgBox IsInbllebion(Uorkbooks. 'budtet.xlsm)
Aby stwierdzl6, czy aktywny skoroszyt zawiera arkusz o nazwle Arkuszl. nalety u j C nastepujqcej
instrukcji:
Msgeox I s I n C o l 1 e c t i o n ~ k t i v ~ r k t m o k . N o r k s k e e t s"Arkuszl")
.

Private F u ~ t i o nGetValue[path. f i l e . sheet. ref)


Pobiera rnartoJt z zmknietego skoroszytu
D i m a r g As String
brawdza. czy istnieje plik
-
- -
I f Righttpath. 1) 0 "\' Then psth path b " \ "
I f Cir(patk L f i l e ) "'Then
GetValue ' P l i k nie zosta? znaleziony ."
E x i t Function
End [ f

Zdefiniwariie argumentu
a r g - " ' " I path 8 ' [ ' A f i l e A 'I' &sheet & " ' ! " & -
Range(ref).Range('Al") .Address(. . xlRlC!)

-
Mykcnanle matra XLY
GtValue ExecuteExcel4l"zcro(arg)
End Fsnction

Funkcja Getvalue pobiera cztery arpurnenty:

path-Scietka zamkniqtego pliku (np. "a:\pl i k i "1;


If i l e - nazwa pliku skoroszytu (np. "budtet .xl s "1;

sheet -nazwa arkusza (np. "Arkuszl '1;


re'- odwdanie do komorki (np. 'C4").
324 Czeft Ill + Jezyk Visual Basic for Applications

Ponitsza procedura Sub demonstruje, w jaki sposdb utyC funkcji GetValue. Procedura
wySwietla jedynie wartoft w komorce A1 arkusza Arkuszl pliku o nazwie 99Budtet. x l s
majdujqcego sic w katalogu XLPl ik i \Budtet na dysku C.
Sub
2 --
TestGetVal ue()
'c:\XLPliki\Bud2etW

--
f '99Budtet.xl s"
s 'Arkuszl'
3 'Al'
nsgaax GetValue(3. f . s , .?>
E?c! Sub

Kolejna procedura odcqtuje z Zamkni~tegopliku 1200 wartofci (zajmujqcych obszar


100 wierszy x 12 kolumn), a nastepnie umieszczaje w aktywnym arkuszu:

--
Sub TestGetValueZ()
p "c:\XLP1ik1\Budtetw
f
- "99Budiet . x i s "
s "Arkuszl"
-
- -
Appl Icat ion .ScreenUpdatr ng Fa1 se
For r ! To 100
-
For c 1 To 12
-
a Cells(r. c).Maress
Cells(r. cl GetValue(0, f. s. 31
Next c
Next r
-
Pppl ication. k r m l l p d a t i n g Tr-e
End Sun
4-
.--$.A* Funkcja GetValue nie zadziala pa zastosowaniu jej w formule arkuua. WtaSciwie
.edi- '
nie ma takle] potrzeby. W celu pobrania wartohi z zamknigtego pliku wystarczy
stworn tqcze formuty.

Funkcje przydatne w forrnulach arkusza


W tym podrozdziale zamietcikm pnykhdy niestandardowych funkcji. kt6re motna za-
stomwad w formutach arkuaa Nalety pamitt&, tc tc procedury Function rnusq zostat
zdefiniowane w module VBA, a nie w moduhch powipnych zpozycjami edytora Viszral
Basic takimi, jak This Workbook,Arkusrl Lub LkerFwml.

Pnyktady z tego podrozdzlalu sq dostqpne na d d z o n y m dysku CDROM.

Funkcje zwracajqce informacje o Fomatowaniu kom6rki


Niestandardowe fhnkcje nmacaj;\ce informacje o formatowaniu komQki sq przydatne,
gdy t m b a posortowa6 dane w oparciu o formatowanie (np. gdy szukasz wszystkich
kombrek, wobec ktbrych u2yto pogrubjenia).

Ponitsza funkcja zwraca wanoft Twe, jeSli w jednokombrkowp zakresie bqdqcym jej
argumentem zastosowano pogrubienie:
Rozddot 1 1. Przykiady i metody programowoniow jqzyku VBA 325
ij
Funkcje te nie zawsze sq a u t o m a ~ l aktuallzowane.
e ponlewd zmlana formatowama
nle uaktywnla rnechanlmu Excela wykonujqcego p n w n e obltzenia. Aby vymusii
ponowne abliczenie wuystldch skomsqtbw wraz z aktualizacjq funkcji niestandardowych.
nalezy wcisnd kornbinacje klawiszy Ctrl+Alt+F9. lnna moiliwoSE polega na urnieszczeniu
w kodzie lrddbwyrn funkcji nastepujqcej instrukcji:

Po zastosowaniu lnstrukcji wcisnlwle klawlsza F9 spowoduje ponowne wykonanie


funkcjl.

Functlon ISBOLDtcell) As Bwlean

-
Zwraca True, j e 4 l i zawartoie kondrkt zostala pogrubiona
ISBOLD c e l l .Range("Al") .Font.Bold
End Function

Ponitrza funkcja zwraca warto4d True, jeSli w jcdnokom6rkowym zakrwie hdqcyrn j e j


argumentern zastosowano h r s y w ~ :
Function ISITALIC(cel1) As Boolean

-
Zwraca True. je51i w kon6rce utyto kursywj
ISITALIC cell .Range("Al").Font.I t a l i c
End Function

Jef li w kornorce zostanq zastosowane r62ne formatowania (nv. tvlko wbrane rnaki zo-
stanq pogrubione), obie powytsze funkcje m 6 q &d. ~olejnafunkcjazwr6ci warto4C
True tylko wtedy, gdy wszystkie znaki z kom6rki h d a pogrubione:
Function ALLSOLD(cel1) As Boolean
Zwraca wartoft True. j e S 1 i wszystkie znaki z k d r k i sa pogrublone

ALLB(XD -
I f lsNulI(cell.Font.Bold) Then
Fa1 se
Else
-
ALLBOLD cell .Font .Bold
End I f
End Functicn

Funkcja FILLCOLOR nvraca liczbp calkowitq odpowiadajqcq indeksowi koloru w n q t m


kom6rki (kolorjej wypelnienia). JeSli wnptrze kom6rki nie rostanit wypdnione, funkcja
twr6ci wartoe 4 142.
Functlon FILLMXOR(cel1) As Integer

-
Zwraca l i c z k c a ~ t c w l t acdpowiadajqcq k o l o m l wetrza kandrki
FILLCOLR c e l l . Range( "Al") .Interior .ColorIndex
End Function

1 Wyiwietlanie dufy w trakcle zapisywanla lub drukowada pliku


Skorosyt Excela ofenlje wbudowane &Sciwo$ci dokumentu udostppniane przez wta-
SciwoSC B u i l t i n D o c m n t P r o p e r t l ~obiektu Korkboak. PoniBza funkcja zwraca date
iczas wykonania ostatniej opeperaji zapisu skomszytu:
Function A
l VMEO()

-
A~plication.Volatile
LASTWD Thi sWarkbwk. &ItltinOoamntPmpertiest'tast
End Fqmction
Save Time')
326 Cz&C Ill + Jczyk Visual Basic for Appllcatlons

Ponitsza funkcja jest podobna do poprzedniej, z tym te m a c a datp i czas wykonania


ostatniej operacji drukowania lub pbdgl@u wydruku dla skoroszytu:
Function LASTPRINTED(
I
-
Appl~cation.Volatile
LASTPRINTED ThisUorkbook. Bui ltin0ocumentProperties("Last Print Date"
End Function

Jelli funkcje te zostanq utyte w formule, w celu uzyskania aktualnych wartofci wlaSci-
woSci skoroszytu mote by6 koniecme wymuszenie wykonania ponownych obliczeri
(poprzez wci8nivie klawisza F9).

:=$$* Dostgpnych jest sporo dodatkowych wbudowanych wlaklwo$ci, ale Excel nle konysta
(S! z nich wszystkich. Na pnyktad prdba u i y i a wlaSclwoSci Nunber of Bytes spowoduje
wygenerowanle M d u . !

Funkcje LASTSAVED i LASTPRINTED zostaly zaprojektowane z myflq o przechowywaniu


ich w skomszycie, w k b y m sq u t y w n e . W niektbrych przypadkach funkcja mot. m- [
stat umieszczona w innyrn skoroszycie (np. personal.xls) lub dodatku. Poniewat obie
powyaze funkcje odwolujq sip do w~aSciwoSciThi sWorkbwk, po zapisaniu ich w innym
i
skoroszycie nie k d q dzialaly poprawnie. Ponitej zawarto wenje tych funkcji o bardziej
uniwenalnyrn przeznaczeniu. Funkcje utywajq wlaiciwoici Appl icat1 on. C a l l er, kt6ra I
zwraca obiekt Range reprezentujqcy kornbrke wywo+ujqq funkcje. WiafciwoSc Pa-
rent .Parent zwraca skoroszyt, czyli obiekt nadrz~dny(obiekt Workbook) przodka
obiektu Range. Zagadnienie to dokladniej zostanie om6wione w nastppnym punkcie.
Function LastSavedZ()

-
Appllcation.Volatlle
Lastsaved2 ApOl ication.Cal1er.Parent .Parent. -
Bulltln0acumntPropert~es('Last Save Tlme')
End Function

Function LASTPRINTED2(
-
Ppplication.Volatile
LASTPRINTED2 Application.Ca1ler.Parent.
Parent.BuiltinDocunentPropertles('~ast-print Date")
End Function

Obiekty nadrzqdne
I
Model obiektowy Excela ma postat hiemchicznq Obiekty sqzawarte w innych obiektach.
Na szczycie hierarchii znajduje sip obiekt Application. Excel zawiera inne obiekty, kr6re
1
sq kontenearni dla kolejnych obiekt6w itd. Ponitsza hierarchia ilustruje miejsce, jakie j
w tym schemacie zajmuje obiekt Range: ,>
obiekt Appl i c a t i on
obiekt Workbook
I

obiekt Worksheet
obiekt Range
1 Rozdzid 1 1 . + Pmyldady i rnetody prograrnowania w jezyku VBA 327

Pnodkiem obiektu Rangejest obiekt Worksheet, W q c y jego kontenerem. Pnodkiern o b i e h


Worksheet jest obiekt Workbook przechowujzpy arkusz. Z kolei obiektem nadrzqdnym
obiektu Workbook jest obiekt Aopl Icati on.

W jaki sposbb praktycznie tp inforrnacje wykorzystaf? Przcanalizujmy ponitszq funkcje


SheetNaw jqzyka VBA. Funkcja pobiera jeden argument (zakres) i zwraca nazwq arkusza
zawierajqcego zakres. Funkcja utywa wlaSciwoSci Parent obiektu Range. WIakiwoiC
Parent zwraca obiekt przechowujgcy obiekt Range.

-
Functim SheetName(ref) As String
SheetName r e f .Parent.Name
End Function

Kolejna funkcja WorkbockName m c a nazwq skoroszytu zawierajqcego okreSlonq kornorkc.


dwukromie utywajqc Wciwo3ci Parent. Za pierwszym m e m wtajciwoff Pareit zwraca
obiekt Worksheet, a za drugirn -obiekt Workbook.

-
Function WorkbookNametref) As S t n n g
WorkbookName ref .Parent. Parent .Name
End Function

Poniaza funkcja AppNare pnenosi cis na nastppny logiczny poziom, tnykromie korrystajqc
z wtajciwolci Parent. Funkcja m c a nanvq obiektu Appl ~ c a t ~ opowiqzanego
n z okrcSlonq
korn6rkq. Oczywiicie fbnkcja zawsze zwrbci wartosc M i i t o s o f t E x c l l .
Function AppName(ref! As String
-
AppName r e f . parent .Parent. Parent.NEme
End Function

Zliczanie kombrek,
M6rych wartoici zawierajq siq pomiedzy dwomo wadoiciami
Ponitsza funkcja o nazwie COUNTBETWEEN zwraca liczbq wartoici zakresu (piems;ty argu-
ment) mieszcqcych sic pomiedzy dwoma wartoiciami reprezentowanymi przez drugi
i trzeci argument:
Function COUUTBTBNEN(1nRange. nwnl, n u d ) Ps Long
'
Zlicza wartoJci z przedzialu od numl do num2
With Awl ication.WarksheetFunction
I f nun1 <- nurn2 Then
-
CWNTXWEN .Counttf(InRange. ">-" & nun!)
.Countif (InRange. > & nbrn2)
--
Else
COUF*E3lEEN -
.CountIf (InQnge, ">-'
.CountIf(InRange, '>" 6 numl)
b num2) --
End I f
End Wi l h
End Funaion

Funkcja konysta z funkcji COUNTIF (LICZ.JEZEiI) Excela i odgrywa role lrodka uprasz-
czajqcego twomne fonuly. Ponitej zamieszczono przyktad formuty korzystajqcej
z Funkcji COUNTBEWEEN, zwracajqcej [ic.zbq komdrek zakresu Al:PlOO, ktbrych wartosci
sq wicks& lub rdwnt 10 i mniejsze lub d w n e 20:
-COUNTBEIWEM(Al:AlC~O, 10. 20)
328 Cze$c Ill + Jezyk Visual Basic for Applications

Zastosowanie tej funkcji jpzyka VBA jest p m z e n 2 yrowadzcnie nastqujqcej dtugiej


formuty:

Zliczanie widocznych kom6rek zakresu


Funkcja COUNTVISIBLE pobiera argumenr b~dqcyzakresem i m c a liczbp niepustych
widocznych korn6rek w nim zawartych. Komdrka nie jest widocma. gdy znajduje sic
w ukrytyrn wierszu lub kolurnnie. Funkcja ma nastqpujqcq postac:
Function COUNTVISIBLE( rng)
Z i icza widoczne komClrki
Din Cellcount As Lsng
CIg c e l l As Range

--
Appltcatton.Vo1at;le
Ce; 1Cwnt O
S e t r g Intersect(rng.Parent.UsedRange, mg:
For Each cell In rng
If Not IsEmpty(cel1) Then
I f Not c e l l .Ent~reRw.HiddenAnd -
-
Not c e l l .EntireCalum .Hidden Then
Gel lCount Cel lCount 1+
-
Era I f
Next cell
CGUNl'tISIBCE
End Function
- Cellcount

Przy utyciu petli funkcja przetwarza kaidq kombkt zakresu, sprawdzajqc najpierw, ezy
jest pusta. Jeili kom6rka nie jest pusta, funkcja sprawdza ukryte wlaSciwoki jej wiersza
i kolumny. Jefli ani wiersz, ani kolumna nie sq ukryte. wartoit zmiennej Cei 1Count jest
inkrernentowana. Funkcja COUNTVISIBLE przydaje sit podczas korzystania z automa-
tycznego filtrowania lub konspektbw. W obu przypadkach s q nosowane ukryte wiersze.

W pnypadku diczania wldocznych kom6rek zawamh na autornatycznic fikrowanej


.PO$REDNIE Excela (z pierwszyrn argumentem
lifcle pnydatna jest tet funkcja MY
0 wafioki 2 I U 3).
~

W Excelu 2003 do wato5ci pierwszego argumentu funkcli SLMY.PD$REDNIE rnotna


dodaC 100. Spowoduje to. i e funkcja w obliczenlach uwzglgdni Jedynlewidoczne
korndrki. Pnyktadowo, aby zlic* widoczne kom6rki zakresu, naleiy uiyC pierwsrego
argumentu o wartoSei 102. Ta nowa funkcje dziata nawet wtedy, gdy wiersze
lub kolurnny zostanq ukryte rvznle. W poprzednich wersjach Excela funkcja
SUn.PO$REDNIE dziatata poptawnie, gdy korndrki ukryto przy uiyciu automatycmych
filtr6w lub konspekt6w.

Okres'lanle astatniej niepustej kom6rki kolumny Iub wiersza


W tym punkcie zaprezentujq dwie m a m e funkcje. Picrwsza 2 nich o n-ie LASTIN-
CDLWN m a zawarto9d ostatniej niepustej kom6rki kolumny. Druga W c j a LASTINROW
zwraca zawartoit ostatniej niepustej komdrki wiersza. K&da funkcja jako pojedyncg
argument pobiera zakres. Zakresem mote by6 ata kolumna (finkcjalASTIKOLUHN) lub
Rozchiat 1 1. + Plzyktaady i metody programownia w jeryku VBA 329

c a b wienz (funkcja LASTINRW). Jcfli przekazany argument nie jest calq kolurnnq lub
wierszem. funkcja utyjc wiersza lub kolumny okreflonej pnez gbrnq lewq kom6rk~za-
kresu. Ponitsza przykladowa formula zwraca ostatniq wart046 kolumny 8:
-tPSTINCOCUnM(851

Kolejna formula zwraca wartoff ostamiej komdrki z wiersza 7:


-CASTINRW(C7:09)

Oto kod krbdlowy funkcji LAST INCOLUMN:


Functlon LASTIHCOLUnNlrng As Range)
Znraca zzwartoft ostatniej niepustej kandrki kolunny
Dlrn LastCel l As Range
Appllcatton.Vo1atile
With rg.Parent
With .Cells(.Rws.Count. rng.Colunn)

-
IfNot IsEmpty( .Value) Then
LASTINCOLVHN .Value

-
ElseIf IsEm~ty(.End(xlUpIlThen
LASTINCOLUMN "
Else
-
LASTInCOLUnN .End[xlUo).Value
End I f
End U i t h
End W l t h
End FunCtim

Funkcja jest raczcj skornplikowana, dlatego wyjdniq dokhdniej jej dzialanie. Metoda
Appl icatton.Vo1 ati le powoduje, h funkcja zostanie wykonana k d o r a z o w o przy ob-
liczaniu arkusza W ~ S ~ ~ W O~&.tount
SC r&ca liczbq w ~ m z yarkusza. ~hociat'rno-$ern
trwale wprowadZiC w kodzie kbdlowyrn wartoft 65536, utytcm tej wla4ciwofci, gdyt
kolejna wenja Execla mote obstugiwat wiqksq liczbq wierszy. Whfciwoft rng.Co; wnn
mraca numer kolumny g6mej lewej kombrki zakresu k&cego wartosciq argumentu
mg. Zastosowmie wMciwoici mg.Parent powoduje, t e funkcja wi
b a b f poprawnie
nawet wtedy, gdy argument mg odwohje sip do inncgu arkusza lub skoroszytu. Utycie
metody End z argumentem xlUp jest rbwnomaczne z waktywnieniem ostatniej kombrki
kolumny, w c i h i ~ i e r nklawisza En4 a nastqpnie klawisza f I wrcszcie Funkcja IsEmpty
sprawdza, czy komdrka jest pus@ Jefli tak jest, zwraca posty laficuch. Gdyby knkcja
IsEmpty nic urstala zastosowana, po napotkaniu pustej kombrki procedura twr6citaby
wart046 0.

Poni2ej zawmto kod Wdlawy funkcji LASTINRGCI, bardm podahej do funkcji WTKMCOCLNN:
Function LASTIM1OW(mg As Range)
Zwraca tawartnit o s t a t n i e j n l c p t u t e j k d r k i wlersza
Lppl1catian.Volatl l e
U i t h rng.Parent
With .Cells(mg.Rcu. .Coltnms.Wnt)
I f Not IsEmpty(.Value) Then
I
330 Czeft Ill + Jezvk Viual Bosic For A ~ ~ t a t i o n s

LASTINW - .Value

-
E l s e I f IsEmpty( .End(xlToCeft)) Then
LASTINROW "'
Else

End If
-
LASTINROW .End(xlTdeft) .Value

End With
End With
End Function

Czy taricuch jest zgodny z wzorcem?


Funkcja ISLIKE jest bardzo prosta i jednoczeSnie bardzo pnydatna. Zwraca wartoit
True. ieSli hhcuch tekstowy iest q o d n y ze zdefiniowanym wzorcem. Jak widac z DO-
o 2r6dlowego~funkcya wjafciwie odgrywa rolp Srodka ~rnotliwiajqcl~o
n i t s ~ e - ~kodu
wykorzystanie w twomnych forrnuhch wszechstronnego operators Like j~zykaVBA:
Functlon ISLIKE(text As String, pattern As String) As Boolean
'

-
Zwraca wartoit True. j e s l i pietwszy a r g w n t jest podobny do drugiego
ISLIKE t e x t Like pattern
End Function

Funkcja ISLIKE pobiera dwa argumenty:


text - laricuch tekstowy lub odwolanie do komdrki, ktdra go zawiera:
pattern -Ialicuch zawierajqcy imaki wielomacme, ktdn wymieniono
w ponitszej tabeli.

Zaaki rawarte we m o r c u ZpwrrtoSf laicucha text tgodna ze wzorcem


Dowolny pojcdynczy rnak
0 lub wicccj dowolnych mak6w
Dowolna pojcdpcza cyfra (0 - 9)
Dawolny pojedynay mak majdujqcy sip na IfPie-mak&
[! lista-zndkbw] Dowolny pojedynay mak niemajdujvy sic na likie-znakh

Ponitsza fonnula zwraca wartoX TRUE, poniewat z wzorcem *jest zgodna dowolna
liczba makbw. Formula zwraca wartoSC TRUE, jcSli pienvszy argument jest dowolnym
+tllicucherntekstowym rozpoczynajqcym sit od litery g:

Ponitsza formula nvraca wart& TRUE, poniewat z wzorcem ? jest zgodny dowolny
pojedynczy znak. Formuta m d c i wartoe FALSE, jeSli wartoiciq pierwszego argumentu
b d z i e hicuch JednostkalP:

Nastcpna formula m c a wartdt WE, poniewa2 jej pierwszy argument jest pojedynczym
makiem zawartym w drugim argurnencie:
-IRIKE("a". "Caeioul")
Rozdzial 1 1. Rrykhdy i metody programowania w jezyku VBA 33 1

Ponihza formula zwraca wart046 TRUE, jeSli kom6tka A 1 zawiera liteq u. e, i, o, u. A. E,


I, 0 lub fJ.Przetworzenie argumentow pny u2yciu hnkcji UPPER spowoduje, Ze forrnuta
nie bqdzie rozrotniala wielkoSci makdw:

Poniksza formula m c a wartoif TRUE. jefli komdrka A1 zawiera wartoid rozpoczynajqcq


siq cyfq 1 i skladajqcqsit dokladnie z trzech cyf? (dowolna liczba catkowita z przedziaiu
od 1 00 do 199):

Wydzielanie n-tego elementu lalicucha


Funkcja ExLractElernent jest niestandardowq funkcjq arkusza (moie bye tet wywoly-
wana z procedury jezyka VBA) wydzielajqcq element laricucha tekstowego. Jeili na
przyktad komdrka zawiera ponizszy tekst. w celu wydzielenia dowolnego podlalicucha
zawartego porniqdzy tqcznikami rnoina utyC funkcji Ext.tactElement:

Kolejna formula zwraca podlahcuch 0133 bedqcy cmartym elementem lancucha (w roli
scparatora w taficuchu jest uvwany tqcznik):

Funkcja ExtractElement pobiera trzy argumenty:


8 T x t - laricuch tekstowy, z kt6rego sq wydzielane podlalicuchy (mote to byf
literal lub odwolanie do komorki):
n - liczba calkowita reprezentujqca wydzielany element;
m Separator -pojedynczy mak spetniajqcy funkcje separators.
Jefli wartosciq argumentu bpdzie spacja, wiele spacji zostanie potraktowanych jako
jedna, co prawle zawsze bedzie zgodne z twoirni rarnieneniami. JeSli wartosf
argumentu n przekroczy liczbg element6w tahcucha, funkcla zwrki pusty laricuch.

Oto kod M f o w y funkcji EXTRACTELEMENTjpzyka VBA:


Function EXTFACTELEMENT(Txt. n . Serarstcr) ks %ring
' braca n-ty e l m t lahcucha teksTcwego. -+ Lt6rym elementy cddzie'a akfeslcnj. rest
sewratora
--
Dim AllElements As Variant
AlIElements Spl i t ( T x t . Swraror)
EXTRACTELEHENT Al!Eiements(n - 1)
End Function

Funkcja kowsta z funkcji S p l i t j~zykaVBA zwracajqcej tablic~typu b a n s n t . ktora


zawiera k d d y element hricucha tekstowego. Tablica rozpoczyna sip wartokiq 3, a nie
1, dlatego popnez utycie n - 1 wykonywane jest odwolanie do tqdanego elernenru.
Funkcja S p l i t pojawila sip w Excelu 2000. le41i utywasz starszej wersji Excela. ko-
niecme b*c tastosowanie nastepujqcej funkcji:
332 Cz$ft Ill + J$ryk Visual Basic for Applications

Function EXTRACTELMNTZ(Txt. n. Separator) As String


'
Zwraca n - t y element laftcucha tekstouego. w ktbrym elementy cddziela -
otrejlony znak separatora
Cirn 7 x t l As String. T e n a E l m t As S t r i n g
O i m ElementCount As Integer, i k Integer

-
T x t l Txt

- -
Jedl'l separatorem j e s t rDacja, zostanq usuniete zbedne soacje
i f Separator Chr:32) Then Trtl A ~ ~ l i c a t l o n . T r : m i T x t l )
'
Oodanie separatorz nz koitcu laicucha

-
I' Riqht(Txt1. Len(:xt?)) 0 Separator Then
T x t l T x t l S Separator
-

--
Inicjalizacja
ElementCount 0
TmoElmnt "'

'
-
kydzlelenle katdepo el em en:^

- --
Far I 1 To Lenf'xt!)
C f Mld(Txt1. I. 1) Separator Then
ElementCount E l m t C o u n t * 1
I f ElmntCount n Then

-
Po znalerieniu elwnentu zakokzenie przetwarzanla
EKTRACTELEHENTZ TmElenent
Ex1t Function
Else
TempElmnt
End I f
- ."
E! se
-
T R n p E l m t Tm~Elffnent6 MidtTxtl. 1 . l!
End I f
Next 1
EX7WCTELWENTZ "'
Esd Function
-
Funkcja wielofunkcyjna
Nastcpny przyklad prezentuje metodp, k6ra m o b o w sip przydabia w niekt6rjch
sytuacjach. Sprawia on& t e pojedyncza funkcja a r b zachowuje sit jak wiele fitnkcji. I
1
Ponitej zawarto kod M t o w y niestandardowej funkcji o nazwie StatFunction pobie-
rajqcej dwa argumenty - zakm (rng) i operacjp lap). W zaletnoSci ad wartoki argu-
menm op funkcja nvraca wartog6 obliczonq przy utyciu dowolnej z nastcpujacych
funkcji arkuza: AVERAGE (SREDNIA). COUNT (ILE.LICZB), MAX, MEDIAN (MEDIANA), MIN. #ODE
CPIYST NPJCZESCIEJ), STDEV (ODCH.STANDAROOWE), SUM (SMA) lub irAR OJARIANCJA).
I

Przykbdowo funkcjp StatFunction moms w arkuszu zzstosowad przy W c i u ponihzej 1


forrnuly: i
!

I
Wynik formuly zaleky od zawartofci kombrkj ,424, kt6ra powima byd takim Earicuchern,
jak Average, Count, Max itd Metoda motc zostaC zastoscrwana w pcqpdku innych funkcji.
Functlon STArrUMTIW4(rra, w) .
Select Case VCasetop)
Case 'YJM"
Rozdriol 1 1.4 Przyktady i metody programowania w jqzyku VBA 333

STATNKTION - WorksheetFunction.Sun( rng)


Case "AVERAGE"
STATFUNCTION - WortsheetFunctfon.Average(rng)
Case 'HEDIAN'
VATFCNCTION - WorksheetFunction.Median(m~~)
Case ').XX)E'
STATFUNCTION - WorksheetFunction .Node( rng)
Case "COUNT"
STATFUNCTION - WorksheetFunctlon.Count(rng1
Case "MAX'
STATFUNCTIOM - Workshee?Functlon .Max( rng)
Case "HlN"
STATFUNCIlON - WorksheetFunction .Min( rng)
Case 'VAR"
STATFUNCTION - Wortshe'.Flmction.Var( mg)
Case 'STDN"
STATWION - '&rksheetFunctlon.StDev[mg)
Case El se
STATFWYCTION
End Select
- CVErr(xlErrN4)

End Function

Funkcja SHEETOFFSET
Excel ofemje ograniaonq obshrgc tr6jwymiarowych skorosqtbw. JeBli na prqklad
konieczne jest odwatanie do innego arkusza skoroszytu, w formule trzeba uwzglpjnit
nanvq arkusza. Nie stanowi to du2ego problemu do rnornentu prbby skopiowania for-
mu@ do innych arkuszy. Skopiowane formuly w dalsqm ciqgu odwdujq sic do n a m y
oryginalnego arkusza. O d w o h i a do arkusq nie sq rnodyfikowane tak jak mialoby to
miejsce w prawdziwym tr6jwymiarowym arkuszu.

- punkcie
W tym . mtak om6wiony- przyklad
. - - -i - ~- k VBA
funkcii a o nazwie SHEETOFFSET
umoZliwiajqcej stosowanie mglgdnych odwotah do arkuszy. Na pnyklad w celu od-
wolania sip do kombrki A1 poprzedniego arkusza nalety u e t formuly:

Pierwszy argument funkcji, ktbt-y mote byf wartoSciq dodatni& ujemna lub zerem,
identyfikuje wzglqdne o d w o h i e d o arkusza. Dtugi argument rnusi by6 odwdaniem do
pojedynczej kom6rki. Po skopiowaniu formuly do innych arkuszy odwolanie wzglpdne
w z i e o b o w i w a t o we wszystkich jej kopiach.
Oto kod 2rddlowy funkcji SHEETOFFSETj~zykaVBA:
Function SHE€WFS€f(Offset As Long. Optima1 tell As Variant)
Zwaca zawartoSt kar6rkl wzglednle adreswanego arkusza, do k t 6 r e j -
zdefiniwano ocbm~anle
Dlm WtsIndex As L o q , WksNun As Long
Dim wks As W o r t s h t
Applicaticn.Volatile

- -
I f IsMissing(Cell1 Then Set Cell Applicatlon.Caller
mshm 1

If Ppplicatlon.Ca1ler.Pam.Hame -
For Each rks In Ppplication.Caller. Parent-Parent .Worksheets
wks.Name Then
334 Czeft5 Ill + Jqzyk Visual Basic for Applications

-
SHEETOFFSET Worksheets(WksNun + Offset) .Range(Cell(l) .Address)
E x i t Functim
Else
-
WksNum WksNun + 1
End I f
Next wks
End Function

Zwracanie maksymalnej wartoici ze wszystkich arkuszy


Aby ohJliC maksymalnq wartoff komdrki B1 spofr6d kilku arkuszy. motna zastosowac
fonnulp podobnq do ponitszej:
-HaX(Arkuszl :Arkusz4! 01)

Formula m c a maksymalnq warn46 kom6rki B1 z arkuszy Arkuszl, Arkusz4 i wszystkich,


ktore majdujq sip pomiedzy nimi. Co sig jednak stanie, gdy za arkuszem Arkusz4 zostanie
wstawiony nowy arkusz Arkusz5? Formula nie uwzglcdni tego automatycznie, dlatego
konieczne tydzie jej modyfikowanie w celu dodania nowego odwolania do arkusza:
-HaX<Arkuszl:Arkusz5!Bl)

Funkcja MAXALLSHEETS pobiera jeden argument i zwraca maksymalnq wanoff okreSIonej


komdrki z wszystkich arkuszy skoroszytu. Przykladowo poniLsza formu$ nvraca mak-
symalnq wartoit kom6rki B1 z uwzglpdnieniem wszystkich rrkuszy skoroszytu:
+WXALLSHEETS(Bl)

Po dodaniu nowego arkusza nie bqdzie koniecme edytowanie fomuly.


Function MXALLSHEETS(cel1)
D i n MaxVal As Double
D i m Addr As String
Dim Wksht As Object

--
npplication.Volatile
Addr c e l l .Range("Al") .Address
HaxVal -9.9E+307

- -
For Each Wksht I n c e l l .Parent.Parent.Worksheets
I f Mtsht.Nme c e l l .Parent.Hame And -
Pddr Appltcation.Cal1er.Address Then
Unikniecle odwolania cykllcznego
Else
If WorksheetFunction. lsNunber(Msht.Range(Mdr I ) Then

End If
-
If Wksht .Range(Addr) > MaxVal Then
MaxVal Uksht .Range(Addr) .value

End I f
Next Y s h t
--
I f MaxYal -9.9€+307Then MaxVal 0
MAXPLLSHEETS MaxVal
-
End Fwlctlon

W celu uzyskania dostppu do skoroszytu inshukcja F c r Each ukywa nastppujqcego wy-


ra2enia:
c e l l .Parent.Parent .Hortsheets
Rozddot 1 1 . Prryklody i rnetody progromowonia w jqzyku VBA 335

Pnodkjem korn6rki jesr arkusz, natomiast jego pmdkiern jest skoroszyt. Wynika z tego,
2e pttta For Each . . . Next przetwarza wszystkie arkusze skomszytu. Pienvsza instrukcja
I f z pqtli sprawdza, czy przetwarzana kom6rka zawiera funkcjq. JeSli tak jest. w celu
unikniqcia btqdu odwotania cyklicmego kom6rka zostanie zipnorowana.

<=>-
mi:< Funkcja 2 tatwoScia moze zostaC aodyfikowana, tak aby wykonywata inne obliczenia
mi@zyarkuszowe oparte na takich funkcjach, jak HIN. SREDNIA. SLMA itd.

Zwracanie tablicy
zawierajqcej unikatowe, losowo uporzqdkowane liczby calkowite
Funkcja RANDOMINTEGERS zamieszczona w tym punkcie zwraca tablice unikatowych liczb
calkowitych. Stosowana jest w wielokom6rkowych formutach tablicowych.
{-RAHrnIMTEG€RS( ))

Zaznacz zakres, a nastqpnie poprzez wciSniecie kornbinacji klawiszy Ctrl+Shifr+En~cr


wprowad2 formule. Formula nvraca tabliq zawierajiqcq unikatowe, losowo upoqdkowane
liczby calkowite. JeSli na przykhd formula zostanie wpmwadzona do zakresu zjotonego
z 50 korndrek, jej kopie zwrbcq unikatowe Liczby calkowite z przedzialu od 1 do 50.

Oto kod Wdtowy funkcji RANDOMINTEGERS:


Function RANDMINTEGERS()
Dim FuncRange As Range
Dim VO As Vanant. ValArrayO As Variant
Dim Cellcount As Dauble
Dim i As [nteger. j As Integer
Dim r As Integer. c As Integer
Dim Tmpl As Variant. Tmp2 As Varlant
Dim RCounC As Integer. CCount As Integer
Randal ze

-
Tvorzy obiekt Ra~ge
Set FuncRange Appltcation.Caller

-
Zwraca blqd, jeSli wartoit o b i l t u FuncRarge j e s t zbyt duta
Cell Count FuncRange .Count

-
If C e l I C m t > 1000 Then
IWMXMINTEGERS CVErr(xlErrNA1
Ex:t Function
End I f

--
Przypisanie aniennych
RCounr. FuncRa~e.Rows.Count
CCounc FuncRanqe .Colunns .Count
ReDim Y(1 To R h n t . 1 To CCcuntl
ReDim YalArray(1 To 2. 1 To CellCountl

-
Uypelnienie t a b l i c y l o m i w a r t o s c i m r liczbam? ca?towitymi zakresu rng
For i 1 To Cel lCount
--
ValArray(1. i ) Rnd
ValArray(2. i ) i
Next i
336 Czeft Ill + Jezyk Visual Basic for A p p l i c a t i o n s

-
Sortowanie t a b l l c y ValArray wediug u p l a r u o losowej warto5ci

-
For 1 1 To CellCount
For j i + 1 To CellCounr

--
I f ValArray(1. 1) > ValArray!l, j) Then
Temp1 ValArray(1. ;I
Twnpi ValArray(2, j)
--
ValArray(1. j) Val4rray(l. i )

ValArray(1. I ) Temp1
ValArray(2, i ! Ten72
--
ValArray(2. j) ValArray(2. i )

End If
Next j
Next i

wienie do t a ~ l l c yV loscwo uporza6kwnych narcobc~


0
- -
t o r r 1 To RCount
For c 1 To CCount
i - 1 + 1
V(r. :)
Next c
-
ValArray(2. 1)

~ e x rt
kANrnlNTEGER5 V
End Function
-
Porzqdkowanie zakresu w losowy spos6b
Funkcja WERPINMmIZE pobictajeden argument Wqcy drcsem i zwraca tablice zlotonq
z losowo uporzqdkowanego zakresu.
'untriion RANGERANWHIZ€( mg)
Dim V O As Variant. ValArrayO As Variant
D l m CellCount As DouSle
D i m i As Integer. j As Integer
D i m r As Integer. c As Integer
D i m Twnpl As Variant. Temp2 As Variant
D i m RCount As Integer. CCount As Integer
Randanlze
'

-
Zwraca blad. j e t 1 t wart056 obiektu r g jest zbyt Curs
CellBunt rng .Count
if Celltount > 1000 Then
RAffiERWWMIZE CVErr(xlErHA1
Ex?: Funclon
-
End :f

'
--
Przypi sanie miennych
RCount rng .Raws. tount
CCount mg.tolums.Count
ReOim V(1 To HCount. 1 To CCount)
ReDtm ValArray[i To 2. 1 To CellCount)

-
Mypelnlenie t a b l l c y ValArray 10s-i
For i 1 To EellCount
ValArray(1. i Rnd --
w a r t d c i m i i wartofciami obiektu m g

ValArrayt2, il rg(i)
+ Prryldody imetody progromowania w jezykv VBA
Rozdzial 1 i. 337

I Next i

- -
Sortswanie tablicy ValArray wedlug wymiaru o l o s m e j wartodci
For i 1 To Cellcount
For j i + 1 To Cellcount

--
IfValArray(1, i ) > ValArray(1, j) Then
T m p l VaIArray(1. j)
Temp2 ValArray(2. j)
--
ValArray(1. j) ValArray(1. 1 )
ValArray(2. j l
ValRrraytl. 11 T m ~ 1
ValArray(2. 1 ) Temp2
--
ValArray(2. 1 )

End I f
Next J
Next 1
'
Wstawiente d o tablicy V losowo uporzadkcwanych rrartoici
t - 0
- -
For r 1 To RCount
For c 1 To CCount

Next c
1 - 1 + 1
V(r. C ) - ValArray(2. i )

Next r
RANGERMOnlZE
End Function
- V

Kod fr6dtow-y tej Funkcji jest bardzo podobny do kodu funkcji RANOOMINTEGERS.
Na rysunku 11.12 pokazano wynik dzialania funkcji. Formuta tablicowa zawata w zakresie
82:811 ma nastppujqcq postat:

Rysunek 11.12.
Funkcja
RANGERANDOMIZE
zwraca zawartoSf
komdrek zekresu
w p~zypadkowej
kolejnogci
338 C z q l t Ill + J e y k Visual Basic for Appncatlons

Formuta zwraca zawartoSC korn6rek zakresu AZ:All, ale uporzqdkowanego w losowy


sposdb.

Funkcje interfejsu API systemu Windows


Jednq z najw-iejszych cech jpzyka VBA jest motliwoSC stosowania funkcji przecho-
wywanych w bibliotekach DLL.W przykladach zaprezentowanych w tym podrozdziale
korzystam z czqsto utywanych funkcji interfejsu API systemu windows.

Deklaracje ufywanych funkcjl API sq uzaletnlone od wersjl Excela. Jelli korrystajqc


<--$Y?I* z Ibaitowego Excela 5, sprdbujesz u2y6 32-biiowej funkcjl API, zostanie wygenerowany
Mqd. Podobnle s i stanle,
~ jeSII korzystajqc z 32-bltawego Excela 95 lub nowslej wersji,
sprdbujesz utyC l6bltowej funkcji API. Prqktady z tego podrozdziatu dotyczq 32-bitowej
wersjl Excela.

Ta I lnne kwestle zwlqzane ze zgodnoSclq wersjl szczeg6lawo zostanq omdwione


c s fl w rozdziale 25,

Okrejlanie skojarzeh plik6w


W systemic Windows wiele typbw plikbw jest kojanonych z o k d l o n q aplikacjq. Po.
wykonaniu takiego skojarzenia, poprzez dwukrotne klikniccie pliku motna go otwonyd
w powiqzanej z nirn aplikacji. !

Funkcja GetExecutable w cclu uzyskania pehej kittki a p l ~ h c jskojarzonej


i zo~lonyrn
plikiern konysta z hnkcji interfejsu API systernu Windows. Pnyjrnijmy, te w twoim
svstemie maiduie sie wiele ~ l i k b wo rozszerzeniu .at. Jeden z nich o nanvie Reaahe.
& prawdop~d&nie'znajduje sie w katalogu systemu Windows. Aby okrcSliC pehq 1
dcietkq aplikacji otwierajqcej plik, pajego dwukrotnym kliknicciu, m o h a utyC funkcji I
Deklaracje funkcjl lnterfejsu API systernu Windows muszq mstad umleszczone
na pocrgtku rnodutu VBA.

Private Declare Function FindExecutableA Lib "she1132.dll" -


(ByVal I p F i l e As Strlng. ByVal 1pDirectory As String. -
ByVal IpResult As String1 As Long

unction GetExecutable(strFi1e As String) k String


Dim strPath As String

-- -
Dim IntLen As Integer
strPath Space(255)
intlen FindEmutableAtstrFile. , strPa2h)
GetExecutable Trim(strPath1
End Function

Na rysunku 1 1.13 pokazano wynik wywotania funkcji GetExecutable, ktbra jako argu-
ment pobrak name pliku dokumentu Wordu. Funkcja zwraca pehq Scietkp aplikacji
powiqzanej z plikiem.
Rozdziat 1 1. + Pnyklady i metody programowania w jezyku VBA 339

Ryrunek 11.13.
OkreSIanle Scletkl
aplikacji powiqzanej
z akreBlonp plikiem

I
1
Okreilenie inforrnacjl dotyczqcych dornyilnej drukarki
W kolejnym pnykladzie k o n y s t a m z funkcji interfejsu API zwracajqcej informacje na
temat domyflnej drukarki. Dane te znajdujq sic w pojedynczym taricuchu tekstowym.
Ponitsza procedura analimje laricuch i wyiwietla inforrnacje przy u t y c i u czytelniejszego
formatu:
Private Declare Function GetProfileStringA Lib "kernel32 -
(ByVal IphppName As String. -
ByVal lpKeyName As String. -
ByVal 1pOefault As String.
ByVal IpRetumedString As ~ t rng.
: -
ByVal nSize As Lorg) As Long

Sub DefaultPrinterInfcO
Dim s t r t P T As String 255
Dim Result As Strlng
C a l l GetProft l e S t r i q A -
("Windows'. "Devtce" . '". strLPT. 254)

- -
Result A~plicatian.Trim(strLPT)
ResultLength LentResult )

Canal
Canna2
-- InStr(1. Result. ".". 1)
I n S t r ( h m 1 + 1. Result. ". ". 1)

-
Pobiera name drukarki
Printer Left(Resu1t . Cam1 - 1)

-
M i e r a informacje na t e m t stermmika
Driver Uid(Resu1t. C m l + 1. Canna2 - tanma1 - 1)
'
-
Poblera ostatnip czeiC i n f o n a c j ~na temat urzcdzenia
Port Right(Result. ResultLength - b 2 )

--
Tworzy k m n i k a t
Msg 'O~karka:" & Chr(9) & Printer & Chr(13)

-
Msg Msg b ' S t e m i k : " & Olr(9) & Driver & tEr1131
Usg Msg d "Port:" & Chr(9) 8 Port

Hyiwietla kanunikat
HsgBox k g . vSInfomtion. " I n f o m c j e dotyczpce domy5inej drukark:"
End Sub

Co prawda, daSciwoSC Act%vePrinterobiektu Appltcation Nlraca n a w dornySlnej


drukarki i urnazliwla jeJmian?, ale nie istnieje bezposrednia metoda okre9lenia. jaki
sterawnlk I pat urzqdzeniajest ulyvany. Z tega ladnie powodu funkcla Ge'.Prof~leS:r~m$
jest prrydatna.
340 Czgtk Ill + Jgzyk Visuol Basic for Applications

Na rysunku 11.14 pokazano przykhdowe okno komunikatu wyfwietlone przezprocedurc. 1


I

Rysunek 11.14.
lnfonnacja o aktpnej
drvkarce wySwlet~ona
pny uzyclu funkcji
interfejsu APi
systernu Windows

Okrejlenie aktualnej rcizdzielcro~cikarty graficznej


Zamieszczony w tym punkcic kod korrysta z funkcji intcrfejsu API w celu okreflenia
aktualnej rozdzielczo~cikarcy graficznej u m n c j w systernie. JeSli utywana aplikacja
musi wySwietliC okreSlonq ilosC informacji na jednym ekranie, majomoiC jego roz-
dzielczofci mote pomoc we wlafciwyrn zeskalowaniu tekstu.
' Deklaracja 32-bitowgo API
Declare Function GetSystemMetrics L i b "user32" -
(ByVal nlndex As Long) As Long

Public Const 94-CXSUIEEN


3uallc Const W-CYSCREEN
-- 0
1

--
Sub DisplayVideolnCaO
vidWidth GetSyst~ir:cs(jM-CXSCREEN)
,vidHe~gnt G ~ ~ S ~ ~ I E ~ M ~ ~ ~ ~ C ~ ( S M - C Y S C R E E N )

Hsg
Msg
Ms&x
-- 'Aktualna rozazielczoli. karty graficznej:
Msg & viblidth & " X ' 8 vldHeight
Msg
"

- 0 Sub

Na rysunku 1 1 .I5 pokazano okno komunikatu zwrbcone przez p o w y a q pmedur$


uruchomion~wsystemie utywajwm rozdzielczoki 800 x 600.

Rysunek 1 1.15.
Zastosowanie fvnkcji
interfejsu API
systemu Windows
w celu okreSlenia
rozdzielczoici karty
grancznej

Dodanie diwlqku do aplikacji


Sam Excel w 2akresie obshgi dirvitku nie ma zbyt wiele do zaoferowania. Funkcja Beep
jqzyka VBA tet niczym szczegolnym sic nie wyr62nia. Jednak po zastosowaniu kilku
prostych funkcji interfejsu API aplikacja mo2e odtwartaf piiki fonnatu WA V tub 8MIDf.
Funkcja konwersJi tekstu na q, M6ra pojawlta slq w Excelu 2002, w niewielkim
;&%%* stopniu mzszerza jego moillwo6ci mlqzane z obstugq dfwiqku. Tak naparawdq Excel
2002 i nowsze wersje odcrytujq tekst pny uiyciu rnetody Swak obieMu S w h .
Przyklady z tego punktu dotycq dtwarzanla plikdw dhiqkowych, a nie maw.
Rozdziat 1 1. + Pnyklady i rnetody proqamowania w jgzyku VBA 34 1

Nie wszystkie systemy obslugujq dhvipk. Aby stwierdzie, czy system dysponuje takq
motliwoSci~nalety utyd rnetody Canplaysounds. Oto przykhd jej mtosowania:
ff Not Application.CanP1aySounds Then
Hsq90x "Niestety system nie obsluguje dhleku."
Exit Sub
Epd If

Odtwananie pliku formafu WAV


Ponitszy pnyktad mwiera deklaracje funkcji interfejsu API wraz z prostq pmedurq
odtwanajqcq plik dhvipkowy o nazwie szczekaniegsa .wav, kt6ry znajduje siq w tym
samym katalogu, co plik skoroszytu:
Private Declare Functlon PlaySound Lib 'winmn.dl1" -
A;las "PlaySoundA' (ByVal lpszNsme As String. -
ByVal hModule As Long. ByVal dwFlags As Long) As Long

Const SND-SYNC SHO --


Const SND-ASYNC AH1
Ccnst SND-FtLENPME &HMO00-
Sub PlayWAVt
--
WAVFi l e "szczekaniegsa .wav"
WAVFile ThisWorkbook.Path & '\" d WVFile
Call PlaySnmd(WAVFi1e. 01. SND-ASYNC Or SND-FILENAME)
Era Sub
W pqkladzie plik formatu WAVjest odtwanany asynchronicmie. Oznacza to, t e w nakcie
odtwarzania kontynuowane jest wykonywanie procedury. Aby zatrzymad wykonywanie
kodu Wdlowego podczas odtwarzania dtwipku, nalety @t nastppujqcej insrmkcji:
Call PlaySound(WAVFi1e. O&. SND-SYNC Or SEn_FILENME)

Odtworzanle pliku formatu MlDl


W przypadku pliku formatu MIDI konieczne jest zastosowanie innej funkcji interfejsu
API. Procedura PlayMIDI rozpoczyna odtwamnie pliku formatu MIDI. Wykonanie pro-
cedury StopMIOI spowoduje zakoticzenie odtwamnia pliku. W pnykladzie utyto pliku
z-8rchimun-x.rn1d.
Private Cetlare Function KtExecute Lib M m . d l 1 "
(8yVal 1pstrtcmMnd As String1 As Long
-

--
sua PI~~WIOIO
WIDIFile " z-archiwm-x. mid'
WIDIFile ThisWorkbook.Path & "\' C MIDIFile
ttiExecute ('play " d HIDIFile)
End Sub

Sub StopHlDI( 1
HID!Flle --
"2-archirnrm-x.mid'
WIDiFIle ThisUorkbook.Path 8 '\' 8 MIOIFile
Hct Execute ('stov " d WlDIFi l e )
End sue
342 CzefC Ill + Jezyk Visual B a s i c for A p p l i c a t i o n s

Odfwarzanie dfwfqku pny uiycfu funkcjf arkusza


Funkcja A l a n msta4 stwormna z myS4 o zasosowaniu w formule arkusza. JeSli komdrka
spelnia o M l o n e kryterium, funkcja, u2ywajqc interfejsu API systemu Windows, o d m m
plik dhiqkowy.
Declare Functlon PlaySound Lib "wlnmn.dl I'
Alias "PlaySoundA' (ByVal lpszName As s i r i n g .
ByVal hModule As Long. ByVal &Flags As Lcngl I\s L o w

Function Alarm(Cel1. Condition)


Gtm WAVFlle As String
Canst SNO ASYNC M1
Const SNDIFILENPME
--
&HZ0000
On Error GoTo Errliandler
-
I f Evaluate(Cel1 .Value 6 Condition) Then
WAVFi l e Thisworkbook .Path & "\sound.wav"

-
Call PlaySound(WAVFi l e . OL. SNO-ASYNC O
Alann True
E x i t Functlon
r ShQ-FILENPME)

End [ f
ErrHandler:
-
Alarm False
End Function

-
Funkcja Alarm pobiera dwa argumcnty o d w h i e do komdrki i warunek (majqcy postat
hticucha). Ponitsza formula utywa funkcji A l a t m do odtwonenia pliku formatu WAY.
gdy warto5C kombrki 013 btdzie wieksza lub dwna 1000:
-AlARM(B13: "-1000')

W celu stwierdzenia, czy warto.$t korn6rki spdnia okreJlone krytcrium. funkcja korzy-
sta z funkcji Evaluate jqzyka VBA. Po speinieniu luyterium i wygenerowaniu dzwiqku
funkcja nvrbci wartoSC True. W przeciwnym razie zwr6ci wartoit Fa1se.

Odczytywanie zawartoici rejestru systemu Windows


i zapisywanie w nim danych
WiqkszoSC aplikacji Windows potrzebne informacje przechowuje w rejestrze systemu
tqdqcym b a q danych. Aby uzyskat dodatkowe informacje o rejestrze, nalety zajneC
do rozdzialu 4. Procedury jezyka VBA sq w stanie odczytywak dane z rejestru i zapisywat
w nim nowe wartoki. Aby to bylo motliwe, koniecrne jest zastosowanie nastqpujqcych
deklaracji funkcji interfejsu API systemu Windows;
Private Declare Function RegmenKeyA L i b 'ADVAPI3Z.DLL' -
(ByVal hKey As Long. ByVal sSubKey As String, -
&Ref hkeyResult As Long) As Long

Private Declare Function RegCloseKey L i b "PDVPPI3Z.OIL" -


(ByVal hKey As Long) Ps Long

Private Declare Function RegSetValueExA L f b "AOVPPI32.OLL" -


(ByVal hKey As Long. 8yVal sYalueName As String. -
0.vVal &Reserved As Long. ByYal &Type As Long. -
@yVal sValue As Strtng. ByVal &Size As Long) Js Long
Rozdziat 1 1. + Pnyktody i metody pragramowania w jezyku VBA 343

Private Declare Function RegCreateKeyA L i b "ADVAPI32.DLL" -


(ByVal K e y As Long. ByVal sSubltey As String. -
ByRef hkeyResult As Long) As Long

Private Declare Function RegQueryValueErA L i b "POVAPI3Z.DLLW -


(ByVal Mey As Long. ByVal sValueName As String.
ByVal M e s e r v e d As Long. ByRef 1Value:ype As ~on;.
ByVal sValue As String. ByRef 1ResultLen As Long) as-~ong

Stworzytem dwie funkcle utatwiajqce korzystanie z rejestru. Sq to: GetRegistry


Obie znajdujq sig na ddqczonym dysku CD-ROM. Przykfadowy
skoroszyt Zawiera procedure demonstrujqcq odczyt i zapis danych w rejestrze.

Odczyt danych z rejestnr


Funkcja GetRegistry zwraca ustawienia znajdujqce sic w oheglonej lokalizacji rejestm.
Funkcja pobiera hisy argumenty:
8 RootKey -iaricuch reprezentujqcy gibwny klucz rejestru, ktdry zostanie u2yty
Oto rnotliwe taricuchy:
HKEY-CLASSES-RWT
HKEY-CURRENT-USER
-
HKEY LOCAL-MACHINE
-
HKEY USERS
HKEY-CURRENT-CONFIG
- -
HKEY OYN DATA

Path -peha Scietka kategorii rcjestru, ktora zostanie W a .


8 RegEntry -nazwa ustawienia, ktbre zostanie odczytane.
Aby na przyklad odnaleit w rejestne akhLalne ustawienie powiqzane z a k p m y m paskiern
tytulu okna, nalety w spos6b pokazany poni2ej wywotaC funkcjq S e t R q i s t r y (wielkoit
znak6w nazw argumentdw nie jest mn6hiana):

- --
RootKey "hkey-current-user"
Path "Control Panel\Colors"
RegEntry 'Act? weTitlem
MsgBox GetRegistryiRcatKey. Path. RegEntry 1 . -
vb[nformation. Path d '\RegEntryM

Okno komunikatu wyfwietli tny wartoki rcprezentujqcc komponenty czerwony, zielony


i niebieski (RGB -ang. Red, Green, Blue), t w o q c e kolor.

Lapis danych w rejestrze


Funkcja W r i t e R e g i s t r y zapisuje wartoid w oh3lonej lokalizacji rejestru. Jejli operacja
zakoliczy sig powodzeniem, funkcja h c i wart0915True. W pmciwnym razie m 6 c i
wartoSt False. Funkcja WriteRegistry pobiera nastepujqce argumenty (wszystkie sq
lahcuchami):
344 CzeSt Ill + Jezyk Visual Basic lor Applications

Prostsa rnetoda uxyakanla dostgpu do rejestru


JeSli w celu zapisania i odczytania danych dostqp do rejestru systernu Wlndows chcesz uzyskad
z poziornu aplikacji Excela. nie rnusisz stosowaC funkcji interfejsu AP1. Zarniast nlch rnotna u w
funkcji Getsetting i Savesetting jqzyka VBA. Obie funkcje zostaiy objaSnione w systernie parnocy.
dlatego nie bed9 ich tuta] szczegdlowo ornawiat. Jednak nalezy wiedzid, i e funkcje te dziatajq
tylko z kluczem o nastepulqcej nazwie:
HKEY-DRRENT-USER\Softuare\VB and VBA Program Settings
lnnyrni stowy, funkcje nie mogq zostac? zastosowane w celu uzyskania dostepu do dowolnego
Wcza rejestru. Funkcje te $3 najpnydatniejsx w pnypadku zapisywania inforrnacji o wtasnych
aplikacjach Ex,cela, kt6re chcesz pnechowat pomiedry kolejnymi sesjami.

RoctKey -lancuch reprezentujqcy odgatpzicnie rejestru. k d r e zostanie utJ;te


Oto motliwe lancuchy:
HKEY-CLASSES-ROOT
-
HKEY CURRENT-USER
-
HKEY-LOCAL MACHINE
HKEY-USERS
-
HKEY CURRENT -CONFIG
HKEY-DYN-DATA
m Path - pelna Scietka kateporii rejesrm (jcfli Scietka nie istnieje, zostanie
zdetiniowana);
RegEntry -nazwa katcgorii rejestm. w ktbrej zostanie zapisana wartog OeSli
kategoria nie ismieje, zostanie dodana);
ReqVal -zapisywana wartoSC.
Ponitej zamieszczono prrykhd procedury zapisujrlfej w rejestm warto9t reprezentujqcq
datp i czas uruchomienia Excela. lnformacja jest zapisywana w miejscu, w kt4rym sq .
przechowywane ustawienia dotycqce Excela.

RcotKey
- - "hkey-current-user'
Sub i2uts-0pen:)

RqEntry - 'DateTime"
PET^ ~~ofiware\mi~ro~oft\office~ll.P\Excel\LastStarted'

RegVal Nu#( -
-
I f JrlteReqistry(RootKey. R t h . RqEntry. RegVal) Then
msg 'egYal & ' zostala zap1 sand w rejestrze."
Else
-
msg 'Wystqpil blqd.'
End !f
Msgbx msj
End Sub

J d l i proccdura jest przechowywana w skoroszycie makr osobistych, usgwienie zdefinio-


wane w rejamjest autornatycmie uakhralniane kaMorazowo pm,whamianiu Excela.
Zastosowanie
formularzy UserForm
Alternatywne metody
tworzenia niestandardowych
okien dialogowych
Prawdopodobnie okna dialogowe sq najwatniejszym elementem interfejsu utytkoumika
aplikacji Windows. Konysta z nich prawie M a aplikacja Windows i wi~hzoSCw o w -
nik6w dobrze rozumie zasady ich funkcjonowania. Pmjektanci przy utyciu formularzy
UserForm wprowadzajq do aplikacji Excela niestandardowe okna dialogowe.
Zanim przejdg do konkret6w zwiqzanych z tworzeniem formularzy UserForm pomocne
mote by6 zapoznanie siq z kilkoma wbudowanymi na-iami Excela wyfwietlajqcymi
okna dialogowe. Ich zastosowanie pozwala wyeliminowat koniecznoff twonenia niestan-
dardowego okna dialogowego. Om6wie je w kolejnych podrozdzialach tego rozdziatu.

Okno wprowadzania danych


Okno wprowudzanio danych jest pmtym okncm dialogowym urnotliwiajqcym wtkow-
nikowi wprowadzenie pojedynczcgo wiersza danych. Mote posiuty6 do wprowadzania
tekstu. liczb, a nawet wybierania zakresu. Dostepne sq dwie funkcje InputSox -jedna
pochodzj z jpzyka VBA, a druga z Excela.

I
I Funkcja InputBox jezyka VBA
I
Skladnia funkcji InputBox jczyka VBA jest nastcpujqca:
I InputBax(k~~ikdt[.tytull[. 1lert-dony1:la][, wsp_x][. m p y ] [ . pl?k:parocy. tm:e4s:!!
a k m n i k a t (wymagany) -tekst wyfwietlany w oknie wprowadzania danych:
a tytul (opcjonalny) - tytut okna wpmwadzania danych;
wart-danH Ins (opcjonalna] -domyllna wart056 wyfwietlana w oknie
dialogowym;
wsp x . wspy (opcjonalne) - wspblrzqdne pozycji gd'rnego lewego narotnika
o&;
p7ikgcwrocy. tontekst (opcjonalne) -plik i temat pomocy.
I
348 Czg5C IV Zastosowanie forrnularry UserFonn

Funkcja InputBox pmsi utytkownika o wprowadzenie pojedynczego wiersza infonnacji.


Zawsze zwraca lancuch. dlatego mote bbyt konieczne wykonanie konwersji wyniku na
wan066 liczbowq.

Kornunikat mote IiczyC okolo 1014 makow [rnniei lub wiecei .


. w zaletnoici od ich sze- - ~

rokogci). Ihdatkowo motna zdefiniowat tyhltbkna bialorowego i wartoid dornyilnq ornz


okreilic potozenie okna na eknnie. Poza wm rnotna okrej0it niestandardowv temat
pornocy. 'W tyrn pnypadku w oknie wpmwadzania danych pojawi sic przycisk h ~ o c .

W poniFszej przykladowej pmcedurze, ktdrej cfekt dzialania pokazano na rysunku 82.1,


zastosowano funkcj~InpurBox jezyka VBA, ktora prosi utytkownika o wprowadzenie
imienia i nazwiska. Pbtniej procedura pobiera imip i przy utyciu okna komunikatu qy-
jwietla powltanie.

Rysunek 12.1.
Efekt wywolania
funkyi lnpurEox
j+?yka VBA

Sub GetNawO
D i m UserName As String
Dim F i rstjcace As Integer
D3 Unt,,l UserYaw <> " "
-
Usersame Inplr:80x("?odaj i m l e 1 nar*?sko:
"laentyfikacja")
". -
LXP
FirstSwce - !nStr(UserName. " " )

-
If FlrstSpace <> 0 Then
UserNamtr Lnft(UserName. FirstSpace 1:
€no I f
-
YsgE3x 'Witaj " 8 UserNamtr
ERG SuD

PowyLszy przyktad znajduje sie na ddaczonym dysku CDROM.

Aby zagwarantowat, 2e po pojawieniu sip okna zostanq wprowadzone dane, funkcja In-
nutsox zostata urnieszczona wewnqtn pptli Do Untll. Jefli ukytkownik kliknie pnycisk
Cuncel lub njc wprowadzi Qdnego tekstu, zmiennej UserName zostanie przypisany pusty
tancuch, po czym okno wprowadzania danych pojawi sip ponownie. Po wprowadzeniu
danych procedura szuka pierwszej spacji (prry u w i u funkcji InStr), aby pobraC imiq,
a nastepnie korzystajqc z funkcji Left, pobiera wszystkie maki przed spacjq J d l i nie
znajdzie spacji, pobierze c a b wprowadzony lakcuch.

Jak j u t wspamnialern, funkcja InputBox zawsze m c a tahcuch. JeSli zwrdcony ladcuch


wyglqda na lic*, motna go na nqzamienid za p o m c q funkcji Val jezyka VBA. M o h a
tet zastosowat metode InputBax Excela, ktdra mstanie om6wima jako nastepna.
Rozdriat 12. Alternatywne metody tworrenia niestandardowych okien dialogowych 349

Metoda tnpufBox Excela


Utycie metody InputBox Excela mrniast funkcji InputBox jezyka VBA przynosi nastc-
pujqce konysci:
pojawia sit rnotliwoft oknflenia typu danych zwracanej wartoici;
m utytkownik mote zdefiniowat zakres poprzez pneciwniqcie rnystkq w obrqbie
arkusza;
m sprawdranie poprawno9ci wprowvadzonych danych jest wykonywane
autornatycznie.

Skhdnia rnetody InputBox Excela jest nastppujaca:

k m n i k a t (wyrnagany) -tekst wyfwietlany w oknie wprowadzania danych;


t y t u l (opcjonalny) -tytul okna wpmwadzania danych;
m wart dcwySTna (opcjonalna) -dornyflna wartoit zwacana przez funkcjc,
gdy G k o w n i k nie wprowadzi danych;
wsp x, wspy (opcjonalne) -wsp-ne pozycji g6mego lewego narotnika
okna;
p r i k p m y , kontekst (opcjonalne) - plik i temat pomocy,;
I typ (opcjonalny) -kod identyfikujqcy ryp danych m c a n e j wartdci (tiabela 12. I).
Tubela 12.1. Kod identyfikujqcy typ danych, z w m n y pnez meto* InputBox Excela
Kod Znaataie

0 Formula

4 Warto3C logicma (True lub False)


8 Odwolanie do kombrki b@qcc obiektem Range

64 Tablica wartoici

Metoda Inputbx Excela jest do66 wsztchstronna Aby hnkcja nvrcicah wigej n i t
j&go typu danych, naleky mtyd sumy odpowicdnich kodbw. Pszykhdowo, aby wyiwie-
tlif okno urnoZliwiajqce wpmwadzanie tekstu i liczb, jako wnrtoSf typ mlety podat 3 (1
+ 2 lub licba + luhcuck tekprowy). J d l i warkdciq argummtu typ kdzie 8, utytkownik
mote v m i e wprowadzit adres komorki lub mkresu albo wskazat go w arkuszu.
Aby urnotliwit utytkownikowi wybranie zaluesu, Mry zostanie wyczyszcwny (rysu-
nek 12.2X ponitsza p r o c t d m Eraseknge stosuje m e t o e InputBnx. Utytkownik m a
rvznie wprowadziC adres ;takrrsu lub zamaczyt go w arkuszu za pomocq myszy.
Rysunek 12.2. U+fe okna wpmwedlania danycb od zdefinfowania zakresu

Metoda InputBox z argumentem Type o wartoki 8 nvraca obiekt Range (nalety zwr6ci6
uwagp na stow0 kluczowe Set). Z a k n s jest nastqpnie c z y s m n y p n y utyciu mctody
Clear. Domyilna wart056 wygwietlana w oknie wprowadzania danych jest adnsem ak-
tualnego zamacania. JeSli w oknie m t a n i e klikniqty przycisk Amtluj, instrukcja On
Error kodczy wykonywanie procedury.
Sub EraseRange()

-
Dim UserRange As Range
Defaul tRange Select ion.Address

-
On Error GoTo Canceled
Set UserRange Appl i c a t i m.InWtBox -
:Prompt :-"Padaj zakres. Zt6ry zostanie wycryszczony :' .-
Title:-"Czyszczenie zakresu". -
Default :-DefaultRange.-
Type: -8)
UserRange. C l ear
UserRange. Sel ect
Cancel ed :
End Sub

Powszy pnyktnd znalduje slq na dot4uclnym dysku CD-ROM.

Kol j n q korzy9ci~wynikajyq z zstmowania mctody Inputsox E K C C ~ automatycme


jest
sprawdzenie wprowadmych danych. J d l i w pnykkidowej procedurze EraseRange msta-
nie wprowadmne coS innego nit adres zalaesu, Excel wySwietli komunikat i umo2liwi
uzytkownikowi ponowne wykonanie operacji (rysunek 12.3).
Rozdziol 12. Alternatywne m e t o d y tworzenia niestandardowych o k i i n dialogowych 351

Rysunek 12.3.
Metoda lnputBox
Excels automatycznie
sprawdza poprawnoSE
wpmwadzonych danych

Okna komunikatu -funkcja MsgBox jezyka VBA


Funkcja MsgBox jpzyka VBA umotliwia wyiwietlenie komunikatu utytkownikowi lub
odebranie od niego prostej odpowiedzi takiej, jak wciinivie przyciskbw OK lub Anulig
(Cancel). F u n k c j ~MsgBox postugujc sic w wielu pnyktadach z tej ksiqtki d o wyiwietla-
nia warrofci zmiennej. Oto jej sktadnia:
Msgbx(kmjkat[, przyciskil[. tytuil[.pI7kpanocy. kmtekst])
k m n i k a t (wymagany) -tekst wyfwietlany w oknie komunikatu;
m przyciski (opcjonalne) - w y r e c n i a nurneryczne decydujqce o tym,
kt6re pnyciski i ikony pojawiqsiq w oknie komunikatu (tabela 12.2):
Tabela 12.2. Stale w'powWajqce prryclskorn obslugiwanym przez funkye MsgBox
Stnla Wart046 Opis
vbOKOnl y 0 WySwietla jcdynic prycisk OK.
vbOKCancel WySwictla pnyciski OK i Anuluj.
vbAbortRetryl gnore W'ylwietla pnyciski P c e w i j , Pondw prob( i I ~ ~ o ~ u J .
vOVesNoCance1 Wylwietla pnyciski Tak.Nie i Anuluj.
vbYesNo Wylwietla przyciski Tak i vie.
vbRet ryancel Wyfwictla pnyciski Pondw p r 6 k j Anufuj.
vbCritica1 Wyfwiala ikonp komunikatu krytycznego.
vbbestion Wyfwietla ikon$ pytania.
vbExcl amatlon Wflwictla ikonp kornunikatu osrmgawczego.
vblnfornatjon Wylwicrla ikone komunikatu informacyjncgo.
vboefaul tButtonl 0 Dornyflny jest pienvszy przycisk.
vM)efaultButton2 256 DornySlnyjest drugi p ~ c i s k .
vt&faul t8uttm3 512 DornySlny jest trzcci przycisk.
vb0efaul t b t t o n 4 368 Dornyllny jest w a r t y pqcisk.
vbSystenEbda1 40% Wsystkie aplikacjc sq whlymyrvane do momentu uzyskania
od utytkownika odpowiedzi na wylwietlone o h o komunikatu
(mote nie dzialat w kazdej sytuacj i).

tytu? (opcjonalny) -tp-14 okna kornunikatu,;


p3 i k g u w y , kmtekst (opcjonalne) -plik i temat pomocy.
352 Cze5e IV + Zastosowanie formulaw UserForm

EIastycmoSC argumentu przyciski pozwala z h i c i a dostbsowywat okna komunih6w.


Tabela 12.2 zawiera wiele stalych. kt6n magq by6 utyte w przypadku tego argumentu.
Motliwe jest okreSlenie. kt6re pryciski sip pojawia,, czy h d z i e widocma ikona i jaki
przycisk bedzie domyslny.
Funkcja MsgBox mote wstat utyta samodzjelnie (w celu wyfwietlenia jedynie komuni-
katu) lub jej wynik mote byt przypisany zmiennej. Gdy funkcja MsgBox m6ci wynik.
reprezentuje on pnycisk klikni~typrzez utytkownika P o n h z a przyktadowa procedura
wyJwietla komunikat i nie zwraca wyniku:
Sub H s g B o x O m O
H s g b x "Aby k o n t y n m c t . k l i k n l j przycisk OK.'
End Sub

Aby pobrat odpowiedi utytkownika udzielonq w oknie komunikatu, naleZy wyniki


dzialania funkcji MsgBox p n y p i ~ zrniennej.
t W ponitrzym kodzie Wdlowym zastosowa-
tern dwie z wbudowanych stakych omowionych w tabeli 12.3, ktbre utatwiajq pmtwamnie
wartoici zwracanych przez funkcje MsgBox:

-
Sub Gethswer( l
Ans MsgBox("Czy kontynuwat?', vbYesNo)
Select Case hs
Case vbYes
Ckod tr6dlawy wykonywany. gdy zostanle k l l k n l e t y przycisk Tat]
Case vbNo
Ckod t r 6 d l g wykonpany. gdy zostanle k l l k n l e t y przycisk Niel
End Select
End Sub

Tabela 1 2.3. Stale stosowanelako wartoSci zwracane pmz Ivnkcjq MsgBox

Stela WsrtodC Klikniqty przycisk


v:C< 1 OK.

vb1gnore 5 Ignoruj
vhYes ' 6 Tak
vtNo 7 Nie

Aby p r z e t w o w wynik funkcji MsgEox, nie jest nawet koniecme stosowanie zmiennej.
Ponitsza procedura wyfwietla okno komunikatu zawierajqce przyciski Tak i Nie. JeSli
utytkowik nie kliknie przycisku Tuk, procedura zakhczy dzialanie.
Sub GetAnswerZC 1
I f KsgBox('Czy k o n t p w a t ? ' . vbYesNo) 0 vbYes Then Exit Sub
[rod tr6dlmy wykmjwany, gdy zostanie t l i k n i e t y przycisk Tat!
a

End Sub

Aby w oknie komunikatu zostaly wylwietbne pnyciski Tuk i Nie oraz ikona pytajnika,
w ponitszyrn pnykjadzie zastosowalem kornbinacjp statych. Drugi pnycisk spehia
funkcjp domySlnego (rysunek 12.4). Dla uprosz~zeniastale p n y p i d e m zmiennej Config.
Rozdzial 12. + Altemotywne rnetody tworrenia niestandardowycholden dialogowych 353

Rytunek 12.4.
Argument prryclsW
funkcji MsgBox
o M a , jahie p2yxk-M
pojawiq sie w oknle

Private Function tPntinueProcedure0 As h l e a n


D i m Config As Integer

--
D i m Ans As Integer
Config vbYesNo + vbljuestion + vbOefaultButton2
Ans MsgBox('Wystqpi1 blqd. Czy kontynuowat?'. Config)

-
Else ContinueProcedure False -
IfAnS vbYes Then ContinueProcedure - True -
End Function

Funkcja Cont 1nueProcedure mote zostat wywdana z innej procedury. Przykhdowo po-
nihza i n s w c j a w y w h j e funkcjq ContinueProcedure (@wietla okno kornunikatu).
JeSli funkcja zwr6ci wartog Fa1 se (u.tytkownik kliknqt pnycisk Nie), proccdura zakohczy
dzialanie. W pneciwnyrn razie zostanie wykonana nastqpna instrukcja.
I f Not ContinuePmedureO Then E x i t Sub

Aby wstawit w kornunikacie mak po& w i m q nalcty w tckkie stalcj v b C f l f lub


vbnewline. Ponitszy pnyklad wySwiala kornunikat umieszczony w trzech wienzach:
Sub M u l t i l i n e 0

--
Dlm Nsg As S t r f q
Msg "To j e s t plerwszy wiersz.' d vbCrLf

-
Msg Msg & 'To jest drug1 wlersz.' & vbCrLf
Usg Msg & 'To jest ostatni wiersz.'
MsgBox nsg
End Sub

Pny utyciu stabj vbTab mobla tet wstawit znak tabulaji. W cetu wySwietlenia wartoici
&su zlotonego z 20 x 8 komdmk (rysunek 12.5) ponhza procedura korzysta z okna
komunikatu. Proadura oddziela kolumny pny Wciu stalej vbTab i wstawia nowy wierq
korzystajqc ze stalej vbCrLf. Funkcja MsgBax akceptuje laficuch o rnaksymalnej dhgosci
wynosqcej I023 maki, co stanowi ograniczenie dla liczby korndrek, kt6rych zawartost
mote wstab wyiwietlona.

Rysunek 12.5.
Okno kornunikaiu
Hn/fwietf@qcetekst l
n
~
l
~
M
~
n
q
n B
1 5
a
1
X
m O P
sformatowany w T LV B P I +I

-
s x n ~ ~ r z ~ a , ~
przy uiycu znakdw w ..,ar w I . 47
a - r n 1 6 m L m a
tabulacji i makdw s t
podziatu wiersza )
%
31
1 W ' I .
. r ( l
. . ..
' ,
I
. ~ I
3
s
. S
29
m
. S
ol
n
.
12'
. g - Y
m
F -6.'
21
n
11
m
13
.n - B
41'.
W
11
I?'.*
s
9 ) * I I Y Y P I I . I
~ P I I I I ~ U ~
S 5 L 1 7 W l I Y
m 0 3 L r w )I

.*
9 l ? 4 Y I X m m Y U
.II
3) -w n
, ,
19
. m +
1 6
g
1
. ..
354 Cze-36 IV Zastosowanie formulany UserForm

Sub ShowRangeO
Dim Hsg As Strl ng

Msg --
Dim r As Integer, c As Integer
""
For r 1 To 20
For c 1 To 8 --
Msg b Cellscr. c ) & vbTab
Msg
Next c
-
Msg Msg & vbCrLf
Next r
MsgBox Hsg
End Sub

W rozdziale 15. majduje sle prrykhd formularza UserForm ernulujqcego funkcje

Metoda GetOpenFilename Excela


JeSli aplikacja musi popmsif ukytkownika o podanie nazwy pliku, m o h a w tym celu
utyf funkcji InputBox. Jednak w pmypadku tej metody cqsto w y s t ~ u j liter6wki.
q Lepsq
pmpozycjq jest zastosowanie metody GetOpenFi 1ename obiektu Appl Ication, ktbra gwa-
rantuje, t e aplikacja pobiene prawidbwq n a m e pliku, a t a k e jego pehq Scietkq.
Metoda wySwietla okno dialogowe Ofwierunie (wySwietlane rbwniet po wybraniu po-
zycji Otwcirz z menu Plik), ale nie otwiera pliku, kbrego nazwp podano. Zamiast tego
zwraca lancuch zawierajqcy Scietkp i n a n q wybranego pliku. Teraz nazwa pliku mote
by6 w dowolny spodb przetwomna Sktadnia metody GetOpenFi 1 enarne jest nastepujqca
(wszystkie argumenty sa, opcjonalne):
obiekt.Get~nFtlenarne(FileFllter.Fflterlndex. Title. BvttmText. MultiSelect)
Fi J e f 7f ter -lafrcuch okreSlajrlcy kryterium filtrowania plikbw;
F i lterlndex -numery indeksdw domySlnego layterium f i h w a n i a plikow;
D Title - tytul okna dialogowego; jebli zostanie pominiw, tytuiem &&ie
Iaf~cuchOnudrz,; !

BuetonText -stosowany tylko w przypadku srjtemu Macintosh,


MultiSeJect -j&1 argument ma wartog True, wybtanych mote bye wiele
plikbw; wartobciq dornyilnqjest Fa1se.
Argument FileFilter okrebla, co pojawi sit na IiScie mnvijanej Pliki rypu okna dialo-
gowego. Argument sklada sip z Mcuch6w identyfikujqcych filtr plik6w, za ktbrymi
majdujq sip symbole filtrujqcych mak6w wieloznacznych, w przypadku ktbrych kaMa
czcSC i W a para jest oddtielona przecinkami. JeSli wart& argumentu nie mstanie
podana, bqdzie utyta wart036 domyglna o naStcpuj4cej postaci:
"Wszystkie p l i k i (*.*I.*.*"

Piawsta @E powy%zego Mcucha Pszystkie p l i k i (*.*I) jest ttkstem .~ySwi&ym


na likie rozwjjmej PIiki rypu. Z kolei jego druga cz@ (* .*) o M l a , jakie pliki zostanq
wyhvietlone w oknie. ..
R o z d z i a l 12. + Altematywne metody iworzenia n i e s t a n d a r d o w y c h okien dialogowych 355

Ponitsza instrukcja prrypisuje laricuch miennej F l l t . Laficuch mote nastepnie zostac


utyty jako argument F i 1eFi 1t e r metody GetOpenFi lename. W tym pnypadku okno dia-
logowe umotliwi ukytkownikowi wybranie jednego z czterech r62nych typ6w plikdw
(dodatkowo dostepna jest pozycja Wsrysrkie plikr]. Pny definiowaniu miennej F ?1t
poskty#em sic sekwencjq jqzyka VBA kontynuujqq instrukcjq w nastqpnym wierszu.
Dzipki temu latwiejsze bpdzie modyfikowanie tego racnej ztotonego argumentu.
Filt - " P l l k l tekstowe :*.txt).*.txt." & -
" P l i k i arkusza kalkulacyjnego firmy Lotus (*.?m).*.prn." 5 _
" P l i k i u t p a j a c e przecinkz jako separator8 :*.csvl .* csv." 8 -
-
' P l i k i A S C I I (*.asc).*.esc." 5
"Mszystt'e p l i k i (*.*).*:*

Argument F i I t e r I n d e x okreila. kt6ry film plikbw b&ie domyllny (przypisany zmiennej


Fi l e F i 1 ter), natorniast argument T i rle zawiera tekst wyiwietlany na pasku tytulu. Jeili
wartoiciq argumentu Mu1t i Sel ect jest True. utytkownik mote wybrat wiele plikow. ktore
zostanq nvr6cone w tablicy.

W ponitszym przykbdzie utytkownik jest pmszony o podanie nanvy pliku. W procedurze


zdefiniowano pic6 filhbw plikbw.
Sub GetImportFi leName( 1
Cim F i l t As String
C i m FilterIndex As Integer
C i m F i l e N m As Var:ant
O i m T i t l e As String

-
Zdefinimanie l i s t y f i l t r t n r p l i t 6 w
-
F i l t 'Pliki tekstcme ( * . t x t l . * . t x t . ' &
' P l i t i arkusza kalkulacyjnego firmy Lotus i*.prn).*.prn." 8 -
'Pllki u t p a j t c e przecirta jako separatora (*.csv) .*.csa7." 8 -
" P l l t i ASCII (*.asci.*.esc." 8 -
"Yszystkie p l i k i (*.*I .*.*"

-
'
h y i l n i e wy5wletlany jest filer *.*
F l l terIndex 5

-
Zdefiniowanie t y t u l u okna dlal@owego
T i t l e "Wybierz p l i k do zaimpor:mama"

-
Pobranie p a m y p:iku
Fi letlame A ~ pication.SetOpenFi
l
F i 1eFilter:-Filt. -
lenaae( -
FilterIn6ex:-F11terIndex. -
Title:-Title1
'
-
iabohczeniepracy, j e 5 l i wcknledialogowyrnzostz~isklikniety przycisk Anulu;
I f F l l m w False ;hen
MsgGox 'Nie wybrano i a d r q p l - t u . "
E x l t Sub
EM If

WyMetlenie pelnej Scieiki i namy p l i k u


MsgBox "Xybra7e5 pl ik : ' & F i lettame
End Sub
356 CzpJe IV + Zostosowanle formularzy UserForrn

Na rysunku 12.6 pokazano okno dialogowe pojawiajqce sip w trakcie wykonywania


procedury.
I
Rytunek 12.6.
Metoda
Getopenfilename
wyfwietla okno
dialogowe
dostosowane
do wtasnych
vagafi
uzytkownika

Kolejny przykkd jest podobny do popmedniego. R6tnica polega na tym, t e utytkownik


mote wcisnqC klawisz CIrl lub Shg i po otwarciu okna dialogowego wybraC wiele plik6w.
P o p m z okreflenie, c y a i e n n a F i leName jest tablicg sprawdzam, czy tostat klikniqty
przycisk Anuluj. Jetli utytkownik nie kliknie ptzycisku Anuluj, wynikiem h d z i e tablica
z przynajmniej jednym elementem. W tym prrykiadzie lista wybranych plikdw jest wy-
Swietlana w oknie komunikatu.
Sub Get ImpnrtFll eName2( I
C i m F i lt As String
Om FilterIndex As Integer
D-m FileName As Variant
D-m T i t l e As String
Dim I As Integer
D-rn Usg As String

F:lt -
Zdefiniwanle l i s t y f i l t r d w p l i k b
"Pllkf tekst~we(*.ta).*.tanm 8-
'Pllkl arkusza talkulacyjnego finny Lotus (*.prn).*.prn.' & -
" P l i k i utywajace przecinta jako sewratora [*.csv).*.csv." & -
" P l i k i PSCII (*.asc).*.asc." .
I-
'Wszystkie p l t k t (*.*).*.*"

-
Donyilnie wy6wietlany jest f i l t r
F'l terIndex 5
*.*

T!tle -
Zdeflnlwanie tytulu &na d l a l c q w g o
'Wybierz p l l k do zaiwportwnla'
Rozdziaf 12. Alternatywne rnetody tworzenia niestandardowych olden diologowych 357

Zakokzenie pracy. je$di w oknie dialogowyn Zostanie kliknlety prZyClSk Anuluj


If Not IsArray ( F i 1eName) Then
Msgbx 'Nie wybrano tadnego pllku.'
Exit Sub
End If

--
' WyWetlenle pelnych f c i e t e i nazw p l l k h
For i LBound(F1leNm) To VBound(F1leName)
nsg Msg L F i l e N w ( 1 ) 8 vDCrLf
Nexr 1
nsgbx ' w r a l e i p l l k l : ' d vbCrlf d Hsg
End Sub

Zrnicnna FileNam zostala zdefiniowana przy utyciu typu Variant, a nie String, jak
w poprzsdnich pnykbdach. Wynika to stqd, & n i e n n a F i leName zarniast pojedynczej
nazwy pliku mope przechowywaC tabliq nazw.

Metoda GetSaveAsFilename Excela


Metoda GetSaveAsFilenamejest bardm podobna do rnaody GetOpenfl lename. Wyfwietla
okno dialogowe Zclpigwanle j& i ummwia Uytkawnikowi wybmie pliku lub podanie
jego nanvy. Funkcja nwraca namq pliku i jego kid$,ale nie podejmuje tadnych dziahi.
Sktadnia mctody GetSaveAsFi 1 enam jest nastcpujqca:
obfekt.GethveAsFilenam(InltialFilenam. F i l e f i l t e r . Flltertndex. T i t l e . ButtonText)
Oto jej argumenty:
I n i t i a l F i 1 enam (opcjonalny) -pornla okrc9liC sugerowanq n a m t pliku
(mat ze Scictkq do pliku);

-
r F i 1eFi 1 ter (opcjonalny) taricuch okrellajqcy kryterium filtrowania piikbw;
F l l terIndex (opcjonalny) -
numcry indeksu dornyflnego bytcrium filtrowania
plikbw;
-
T I t 1 e (opcjonalny) tytul okna dialogowego;
w ButtcnText -
stosawany tyko w pnypadku systemu Macintosh.

Okno wybierania katalogu


Aby p o w namq pliku, najpPoatszym t o m i m i e m jest zasttosowanie metody Getopen-
F1l enam, co zostalo powyhj ejomdwione. lednak rozwiipnie zastasowanc do pobrania
tylko nazwy katalo& tqdzie zalebe od wersji Excela posiadanej p r m utytkownika
Piemsza mcktda, bardziej skomplikowma, jest zgodna z Excelern 97 i nowszymi wersjami
aplikacji Druga rnetoda jest macmie prostsza do zastosowania, ale m a Excela 2002
lub nowszego.
358 CzeJC IV 4 Zostosowonie fomlorzv UserFomr

Wybieranie katalogu
przy uiyciu funkcji inkrfejsu API systemu Windows
W tym punkcie zaprezentujp funkcjp o nazwie GetOi r e c t o r y wwietlajqcq okno dialogowe
pokazane na rysunku 12.7 i nvracajrlcq taficuch rrpmentujrlcy wybrany katalog. JeSli
umkownik kliknie przycisk Anuluj, funkcja zw%ci pusty hdcuch. Metoda zadziata
w przypadku Excela 97 lub jego nowszych wersji.

Rysunek 12.7.
Zastosowanie Itmkcjl
interfejsu APl
do wySwietlenia
okna dialogowego

Funkcja GetOi r e c t o r y pobicra jedm opcjonalny argument, kt6ry jest l ~ c u c h e mwygwietla-


nym w oknie dialo~owyrn.
- . Jdli argument zostanie pominiqty, - - kom~mikaternwyiwietlonym
w oknie dialogowym b ~ d z i elancuch Wybieronie kato~ogu.
Na dotwzonym dysku CD-ROM znajduje sle skoroszyt demonstrujyy omawian*
procedure.

Ponitej zarnieszczono deklaracje fimkcji interfejsu API majdujqce sit na poczqtku moduhr
skoroszytu. Funkcja Get01 r e c t o r y korzysta tet z typu danych o nanvie BROWSEINFO.
32-bitme detlaracje I n t e r f e j s u API
Oeclare Functton SHGetPathFranIOLi s t L l b 'she1 132 . d V '-
Alias "SHGetPathFromiDListA" (ByVal p i d l As Long. ByVal pszPath As String) As Long

Declare Function S H B r ~ e F o r F o l d e rL i b 'shell32.dll"


Alias "Y(8mseForFolderA" (IpBrowseInfo As BRIMS~INFOI AS Long

Public TJW BROWSEINFO


h h n e r As Long
p i d l b t As Long
pszDi splayNam As String
I p s z T i t l e As String
ulFlags As Long
l p f n As Long
lParam As Long
iImage Ar; Long
End Type
+ Altemotywne metody tworzenio niestandardowych oklen dialogowych
I Rozdziat 12.

Oto kod M b w y funkcji GetDi rectory:


359

Function GetDirecttry(Optiona1 Msg) As String


Dim bInfo As B R M E I N F O
Dim path As String
Dim r As Long, x As Long. ws As Integer

' Katalog gl6wny


bInfo.pidlRoot
-- Pulprt
08

' Tytul ckna dial-o


I f IsMissing(4sg) Then
b1nfo.lpszTitle -
"'Aybieranie katalogu"
Else
bInfo.lpszTltle Msg
End If
-
bInfo.ulFlags -
Typ zwracanego katalcqu
W1

-
Wyiwietlenie okna dialogowego
x SHBrowseForFolder(b1nfo)

--
a Analiza wynltu
path SpaceStSlZ)
r SHGetPathFraIDList(ByV.?1 x . ByVal oath)
I f r Then
- -
pos *InS:r(path. ChrS(0))
GetDirectory Left(path. ms - 1)
E l se

End If
GetDlrectory - "

End Functton

ProsFa procedura zaprcrcntowana ponitej demonstmje spos6b utycia w kodzie hdlowym


funkcji GetDi rectory. Po umchomieniu procedury zostanie otwarte okno dialogowe. Po
k l i k n i ~ i uOK funkcja MsgBox wyiwietli peha f c i e t k ~wybranego katalogu. JeSli utyt-
kownik kliknie pnycisk Anuluj, w oknie komunikatu pojawi siq bricuch .4nrrlowano.
Sub GetWolderl()
Dim Msg As String

- -
D i m UserFi l e As String
Hsg "Pmsze o t r e j l i t :okallzacje kooi i rapasowej."

-
UserFi l e GetOi rectory(Msg1
I f UserFile "" Then
Msgbx "Anulouano."
Else
Usghx UserFile
End If
End Sub

i,s$$%*
Nlestety nie istnleje prosta mtoda okreslenia katalogu domySlnego luo startowego.
Q,
mmm
360 CzefC IV + Zastosowanie formulam UserFon

Wybieranie katalogu przy uiyciu obiektu FileDialog


JeSli wsyscy ukydmmicy aplikacji konystajq z Excela 2002 lub nowszcgo, motna
zdecydowaf sit na zastosowanie o wiele prostszcj metody opanej na obiekcie F i 1eOlalcg.
Obiekt FileOialog pojawlt sle w k e l u 2002. W zwiqzku z tym metoda nie mote b$
zastosowana w ~ p a d k starszych
u wersjl Excela.
@
&gp!
Ponitsza procedura wytwietla okno dialogowe umotliwiajqce utytkownikowi wybranie
katalogu. Nazwa wybmnego katalogu (lub Mcuch AmIowano} jest nastcpnie wy4wietlana
p n y utyciu funkcji MsgBox.
Sub GetAFolderZ( 1
' Dotyczy Excela 2002
i f ~ral(~ltcatt~n.Yerslon) < 10 Then
MsgBox " W g a pragrmu Excel 2002 lub nowszego.'. vbCritIca1
E x i t Sub
End If
Wtth Applicazi~~
-
.InltlalFil&m -
.Fi1eOialog(msoFileDlbl~FolderPlcker)
Application.DefaultFi1ePath 6 "\'
.Title 'Prosze okreflit lokalizacje kopii z a p a s w j . '
.Show
I f .SelectedItems.Count -
Msg6ox "Anul m n o . "
0 Then
Else
nsqaox . Select*Items(l)
End If
End M i th
End Sub
Poprra ustawienie wart& dla w ~ i w o . 4 cIn1 i tlalFilename obiekt F11eDialag umotliwia
o h i l e n i e katalogu startowego. W tym prrypadku w k&e &6dlowym lokalizacja ka-
talogu startowego jest identyfrkowana przez domfllnqScie2kp Excela.

Wyfwietlanie
wbudowanyc h okien dialogowych Excela
Kod ir6dlowy napkany w jqzyku VBA mote wykonywad polecenia menu Excela JeSli
wykonane polecenie o t w i m okno dialogowe, kod tr6dbwy umotliwia modyfikowanie
zawartych w nim opcji, pomimo te samo okno nie jest wy9wietlane. Wykonanie ponhzej
instrukcji jezyka VBA odpowiada wybraniu z menu Edycja polecenia Pnej& do, za-
maczeniu &esu Al:C3 i kliknipciu OK. Jbdnak okno Prrechdenie do nie zostanie
otwarte, co jest M e z twoimi oczekiwaniami.
Pppl tcation.Gota Reference:-Range( "AI :U")
W niekt6rjch sytuacjach mow ci zal& na otwarciu jednego z wbudowanych okim
dialogowych Excelq tak aby kolicowy utytkownik m6gi dokonaf wyboru. Mas to
zrealizowat na dwa sp~soby:
I Rozdzid 12. Alternatywne metody tworzenm niestandardowych okien dialogowych 361

1 poprzez wykorzystanie zbiom Dl a1ogs obiektu Application,


poprzez bezpoSrednie wybranie pozycji menu.
Obie metody zosta11qom6wionew kotejnych punktach.

Zastosowanie rbioru Dialogs


Zbidr Dial ogs obiektu Application sklada sip z ponad 200 element6w repnzentujqcych
wipkuofk wbudowanych okim dialogowych Excela. Katdy element posiada predefinio-
wanq stah ulatwiajm wybtanie h@nego o h dialogowego. Rzykbdowo o h o dialogowe
Pnechodrenie do Excela jest reprezentowane przez stah xlDialogFormulaGoto. Aby
wyiwietlid samo o h 0 dialogowe, naleky metody Show. Oto przyktad instmkcji
otwierajqcej okno dialogowe Prrechoh-enie do (rysunek 12.8):

Rysunek 12.8.
Okno dlalogowe
otwarte prq u2)ciu
Instmkcfl]~zykeV M

Po wySwietleniu o h dialogowego Pnechodzmie do uQ&wmik mote wprowaddC w nim


name zakresu lub adm kombrki, kt6ra ma zostaC zlokalizowana Takie samo okno poja-
wia sic po wybraniu z menu Edycja polecenia Pnejdf do lub wciinieciu klawisz. F5.
M a tet napisad kad .Mdbwy stwicrdzajqcy, czy uQtkownik mnknq! okno dialogow.
W lym celu naleky utyC miennej. Wartolciq miermej Result zawartej w poniBzej in-
strukcji b&ie True, gdy u2ytkownik Hilolie OK, lub False, jdli kliknie pnycisk A d u j
albo wciinie klawisz Esc.

Wbrew temu, czego motna by oczekiwat, zmicnna Result nie przcchowuje zakrcsu
zdetiniowanego w oknie dialogowym Pnechodzenie do.
Metoda ta nie jest zbyt dobrze uddnunentowana. System pomocy traktuje ten temat
bardzo og6lnikowo i nie wspomniano w nim,tt wy9wietlanie okna dialogowego Excela
przy u2yciu insmkcji j ~ k VBA
a nie zawsze pnebiega identycmie, jak w prtypadku
otwierania o h a poprzez wybranie pzycji menu. W efekcie w cclu upewnienia sie, te
kod kr6dlowy dziala zgodnie z ocakiwaniami, mate bye koniecme wykonanie tcstdw.

Gdy okna dialogawe Prredrwhenie do W i c cvhwarec przy utyciu instrukcji jezyka


VBA, pnycisk Specjufniejest nieaktymry. Klilcnigcie tego prrlcisku norrnalnie powoduje
otwarcie okna dialogowego Przechodzenie do - spe&ilnie. Aby wyiwietlit to o h 0
z poziomu kodu Wdtowego jpzyka VBA, nalety utyC nastepujqcej instrukcji:

Kolejny potencjalny problem polega na tym, te nie jest motliwe poprawne wygwietlenie
niekt6rych zakladkowych okien dialogowych. Przyktadowo nie jest motliwe otwarcie
okna dialogwego Formatowanie komdrek zawierajqcego wszystkie zakladki. W danej
chwili motna wySwietlif tylko jednq zaktadh. Poni-tsza inshukcja wyiwietla zakladkp
Wyrdwnanie okna dialogowego Formotowanie komdrek (rysunek 12.9):

Rysunek 12.9.
Zakfadka ~ w n a n l e
I... -.
. -
-d _~

-
..................... ._
okna dialogowego - 1

..
&
-
I GIlna
Fomatowanie -
. .. - .. - -. ;
. .
',
.
kom6rek Doah C,
, .: ..
.....
, ,. 1
-. . ,, , , ....,- .., ...
0 ; 'k
tdr -.! ' , T n -

.......:... t
, *'
-Mu" . *:
om- ...,. . .
0-S- :O-,-; dm1
Or~baa
DIDrml*llll

---
--.....
K&
... .
I I x
Aby wyfwietlif inne zakladki okna dialogowego Formatowanie komdrek, tneba utyC
jednej z pipciu stalych: xl Dl a1 ogFomtNumber, xl DialogBorder, xl DialogCell Protec-
ti on, xlDialogPatterns lub xlOial ogfontproperties. Nalety zauwatyf, t e pomiqdzy
nazwarni statych nie wyst~pujetadna zgodnoS6.

Dodatkowe inforrnacje na temat wbudowanych oklen dialogowych


List? wszystkich stalych z w i m y c h z oknarni dialogowymi rno2na male26 w systernie
pornocy lub za pornocq narqdzia Object Browser. ~b~ GfwietliC pciy utyciu n k d z i a
Object Browser elementy zbioru Dialogs, nalety wykonaQnastppujqce kroki:

1. W oknie m o d u h VBA wciSnij klawisz F2,co spowoduje uaktywnienie narzqdzia


Object Browser.
2. W oknie dialogowym Object Browser w gdrnym palu listy wybierz pozycjp Excel.
3. W dmgirn polu listy wpisz stowo xlDlalog.
4. Kliknij p y c i s k Search przedstawiajqcy ikon? lometki.

Pr6ba wySwietknla wbudow~egookna dialogowego w nieWa8ciwym kontekScie


spowod~je~ e n e r - n l e bkylu. M l i na pmyklad na wykresie zamaczpr sene.
a nastepnie spr6bujesz otworzyd okno dialogowe powigzane re statq
xlOialogFontPrcperties, pojawi slg komunikat btedu, poniewai okno to nie jest
Wafclwe w prrypadku takiego zaznaczenia.
I Zastosowanie argumentbw z wbudowanymi oknami dialogowymi
WipkszoSC wbudowanych okien dialogowych akceptuje tet argumenty, M6re zazwyczaj

r n a t o ~ a nkomdrek
i~
- -
odpowiadajq ich kontrolkorn. Przyktadowo zakladka Ochrona okna dialoeowego For-
(otwierane pny utyciu stalej xl D i alogCel1 Protect-on) korrysta
z dw6ch argurnent6w - locked (opcja Zablohj] i hidden (opcja Ukryj). JeSli w zakhdce
okna dialogowego obie opcje majq byc uaktywnione, nalety utyC nastcpujqcej insnukcji:
Application.Oialogs(x1DialogCellPr~~esclr,nl.Shw True. Trse

Argumenty katdego wbudowanego okrra dialogowego sq zawarte w systemie pomocy.


Aby zlokalizowad mi-y z tyrn temat pomocy, w polu Wyszukaj nalety wprowadzic
hssk Built-ln Dialog Box Argument L~sts.Niestety w systemie pomocy nie wyjainiono.
jakie jest przemaczenie poszczegolnych argurnent6w!

Zgodnie z informacjami zamieszczonymi w systemie pomocy okno dialogowe Przecho-


henie do (wywotywane pny u2yciu stakj xlDialogFomlaGoTo) pobiera dwa argumenty
- reference i corner. Argument reference zawiera domySlny Lkres pojawiajqcy si
w polu Odwdanie. Z kolei argument corner jest warto5ciq Iogiunq okrejlajqq, uy mkres.
do kt6rego jest wykonywane odwotanie, zostanie wyi;wietlony poczqwszy od gomego
lewego namtnika okna. Oto pnyklad zastosowania obu argumentow:
ApplIcation.Olalogs(xlOtalogFormulatoTo) .Show Range('?100"). True

Udane konystanie ze zbioru Dialogs mote jednak wymagad wykonania testow w oparciu
o metodp pr6b i Mpdbw.

Bezpoirednie wybieranie pozycji menu


Druga met& wyiwietlania wbudowanego okna dialogowego wyrnaga pewnej wiedzy
na ternat pask6w narzpdzi, oficjalnie nazywanych obiektarni C m n d B a r .
Szenej obiekty C m a n l B a r mstanq orndw~onew mzdziatach 22. i 23.
c
e
I
mma
i Wykonanie ponitaej instntkcji odpowiada wybraniu z menu Edyca pozycji P r q & db:
Ppplication.ComnandBars('Worksheb W~.J!% r " ) -
Control s('Edycja"1 .Control s("Przejdi do. . . " 2 . Execute

Po wykonaniu instrukcji zostanie otwarte okno dialogowe Przechoh-enie do. Muzq byc
podawane pehe nanvy pozycji menu (z uwzgl~dnieniemtrzech kmpek po hhcuchu
Prrej& do). W ptzeciwiebtwie do metody opartej na zbiom D i a1 ws,ta metoda nie
urnotliwia oheilenia dornyilnych ustawieh w oknach dialogowych.

s* Pnyktady rarnieszczone w tym punkcie ujrwajq odwoiah do kontrolek t m n d e a -


dotyczqcjch okre5lonej wersji jqayknrej Ucela. W k k c i e lado owe inrtrukcje
h d q dzlatdytytko w jego polskojezycznych wersjach. W pnypadku aplikacji
wsp5ipracujqcych Z innymi wersjami jezykowyrni rnoina uw m t o d y FindContml
wraz z argumentem Id identyfikujqcym polecenie. W cetu uzyskanla dodatkowych
infcrrnacji nale2y zajrzeC do rozdziaiu 22.
364 C r e e IV + Zastosowanie forrnular~UserForm

W punkcie ,,htosowanie zbioru Dialogs" wspomnidem, tc podczas korzystania ze


zbioru Dialogs nie j,est rnotliwe wy$wietlenie zakladwwych okien dialogowych. Problem
ten nie wystppuje przy wykonywaniu polecen menu. Przyldadowo ponitsza instrukcja
wySwietla okno dialogowe Fomatowanie komdrek zawierajzp wszystkie zakiadki:
Appl ication.CarmandBars(~Worksheet Menu Bar').
Controls["Format') .Controls('Kar6rkl.. .') .&cute

Nawiasem mbwiqc* mnoda Execute sprawdza sic te2 w przypadku kontrolek paskbw
n-dzi niewySwietlajqeych okien dialogowych. Przykladowo wykonanie ponitszej in-
strukcji odpowiada kliknipciu prrycisku Popbienie znajdujqago sic na pasku n m ~ d z i
Formatowanie:
Appl icatTon.CmndBars('Formattlng') .Controls("Pogrublenie') .Execute

Jednak nic przychodzi mi na my41 tadm powbd, dla ktbrcgo warto z niej skorzystaf.
Efektywniejsza metoda pnelqczania wartoSci wlaSciwoSci Bold zaznaczonych komdrek
polega na zastosowaniu nasttpujqcej instrukcji:
-
Se1ection.Font.Bold Not Selectlon.Font.Bold
Rozdziat 13.
Wprowadzenie
do formulurzy UserForm
Excel pamala w stosunkowo prosty sposdb hvoayC w aplikacjach niestandardowe okna
dialogowe. Tak naprawdq moma powielit wyglqd i spos4b obshgi prawie wsqstkich
okien dialogowych tego arkusza kalkulacyjnego.

Projektaaci aplikacji opartych na Excelu z a w s a mieli motliwog t w o m i a niestandar-


dowych okien dialogowych. W Excelu 97 wprowedmo istome zmiany - formulane
UserFonn, dostcpne z poziomu edytora Visual Bait, zampily przcstanate arkuste
dialogowe. Jednak dla zachowania kompatybilnoici Excel 97 i nowszc w m j e aplikacji
nadal obshgujqarkusa dialogowe stosowane w wmjach 5 i 95. Fonnularze UserForm
q macmie prostsze w zastosowaniu i ofcrujq mndstwo dodatkowych rnotliwofci.

Wstawianie nowego formularza UserForm


Okno dialogowe twxmne jest prry u g c i u formularza UserFon z wykorzystaniem
edytora Visual Bmic. Typowa maoda hvonenia okna dialogowego sklada sip z nastc-
pujqcych krok6w:
1. Wstawienie do projeldu nowego f o n n u h U s e r F a n
z U t w o m i c procedury powodujqcej wyhvietlenie fmularn! UserFon. Procedw
ta powinna majdowat sip w standardowym module VBA (nie w kodzie modutu
m i w e g o z fomularzem).

5. U t w o m i e p d u r obslugi zdamfi dla konmlek majdujqcych sip na formulam.


Pracedury te p o w i ~ m
y a j d d sic w module k& fomularra UserForm

Aby mtawie nowy formularz UserFonn,aale2y uaktywniC edytor Vinrol Basic popnez
wchiqcie kombirnaji klawiszy A&,Fll. Wrn w oknie f@eci myhat projekt s k o m
szytu, a z menu Imeri pozycjp U s e r F m . Kolejnym u~mmmymformulmrn
UserForm q nadawane domyilne nazwy UserFannl, UserForm2 itd.
366 Czeft IV + Zastosowanie formulazj' UserForrn

Aby utatwlC Identyllkacjq formularza U s e r h , W n a zrnieniC jego n-. W tym celu


naleiy wybraC formularz I pczy W l u okna Properties zrnlenlC wartog wlafciwofci Name.
Je611 okno Properties nle jest wldoczne, nalety wcisn* klawtsz F4. Na rysunku 13.1
pokazano wyglqd okna Propeftles po wybraniu pustego formularza UserForm.

Rysunek 13.1.
Okno Properlies
powiqzane z pustym
fonnularzem
UserForm

Skoroszyt m d e zawierad dowolnq liczbg fonnulany UserForm, z kt6brych katdy bdzie


przechowywat pojedyncze niestandardowe okno dialogowe.

Dodawanie kontrolek do forrnularza UserForm


Abv dodat konkolki do fonnularza UserForm. naletv utvC okna Toolbox. Edvtor Visual
~ & i cnie oferuje poleced menu dodajqcych konklki. je~libkno Toolbox nie jes; w i d m e ,
z menu View nalety wybraC polecenie Toolbox. Na rysunku 13.2 pokazano okno Toolbox.

Rysunek 139.
Okno Toolbox
umotllwia dodawanie
kontrolek do fornulama
UserForm

Aby dodak kantrolke o do-lnym ropniam, wystarczy klikn@ w oknie Toolbar pnycisk
repraentujqcy a d a q konholb, a mi&pnie klknqt w o h m h v o m e g o okna dialo-
gowego. W celu okrcflenia w i e k o k i konvolki m o mjq kliknqi, a nastepnie pmciagnqt
kursor myszki w obszarze okna dialagowego. ..
Rozdzld 13. Wprowadzenie do formulary UserForrn 367

Dodanej kontrolce zostanie nadana nazwa zlotona z identyfikatora typu kontrolki i ko-
lejnej wartoSci liczbowej. JeSli na przyklad do pustego formularza UserForm zostanie
dodana kontrolka ComnandButton, jej nanvq bpdzie ComnandButtonl. Je9li nastppnie zo-
stanie dodana dmga tego typu kontrolka, jej nazwqbpdzie ComnandButtonP.
Dobrym pamystem jest zmlana nazw wszystkich kontrolek. ktdre b@q przetwanane
pny uwiu insttukcji kodu frbdtowego jqzyka VBA. DziqkI temu zarniast vtyvania
'm ogdlnych nazw w stylu Listbxl bedzie moiliwe odwolvwanle sie do aozurniakh n a m
takich, jak na pnyktad ~ista~rod"kt6w.Aby zrnieniC name kontrolki, nalezy postu&!
sie oknem Properties edytora Visual Basic. Wystarczy zaznaczyC oblekt i wprowadziC

Kontrolki okna Toolbox


W kolejnych punktach omdwip w skr6cie kontrolki dostppne w oknie Toolbm.
W forrnularzach UserForm mogq tei byc! stosowane inne kontrolki ActiveX. Zapoznaj
sic z padrozdzialcrn .Dostosowywanie okna Toolbox do wlasnych m a g a h " z dalsrej
c e h i rozdzlalu.

Kontrolka CheckBox
Kontrolka Chectbx (pole wybom) jest przydatna w przypadku pobierania wartosci
dwustanowych typu tak lub nie,pruwda lubfal~z,wiqcrony lub wylqczony itd. Uaktyw-
-
niona kontmlka CheckBox ma wartoit True, natorniast wyfqczona wartost Fa1 se.

Konlrolka ComboBox
Kontrollka Can3Wx @olekombi) jest podobna do konbolki Listsax. Jednak ta kontroka jest
oknem rozwijanym i w damj chwili wySwietla tylko jednq pozycjp. Kolejna M i c a polega
na tym,2e utytkownik mote wprowadzit wartost, ktdra nie majduje siq na IiJcie pozycji.

Kontrolka CommandBufton
K&de twomne okno dialogowe prawdopodobnie h d z i e zawierato przynajmniej jednq
kontrolkq ComndButton @nycisk polecenia). Zanvyczaj zostanie uzyta kontmka Con-
MndButton o n&e OK i kolejna o nanvie Anuluj.

Kontrolka Frame
Kontrolka Frame (pole grupy) to kontena dla imych kontrolck Kontrolki umieszczane
sq w tej konbolce dla celdw estetycmych lub w celu poppowania zbioru obiektow.
Kontrolka Frame jest szczegdlnie pnydama, gdy o h dialogowe zawiera wivej nit jeden
zbi6r kontmlek Dptlonlutton.
368 C z e f t IV + Zastosowanie iormvlany UserFwm

Zastosowanle kontrolek w arkuszu


Kontrolkl formularza UserForm. dostqpne na pasku nafz@d Pqbornlk formant6w Excela, a nie
edytora Wsual Basic, rnogq by15 osadzone bezpoSrednio w arkuszu. Ich dodanie do arkusza wy-
maga macznie mniej pracy nii pny tworzeniu okna dialogowego. Dodatkowo nie jest koniecme
tworzenle makr, poniewai kontrolka rnoie m s t k polqczona z komdrkq arkusza. JeSll na pnyklad
w arkuszu zostanie umiemzona kontrolka CheckBox, w celu pdqczenia jej z okreSlonq kornbrkq
.
nalety ustawid wartost wlaSciwoSci LinkedCel 1 Po uaktywnieniu kontrolki CheckBox. w polqczonej
z niq kom6rce pojawl sl? wart046 PWhQA. Po Wqczeniu kontrolki Checkbx, w komdrce pojawi sig
wart056 FALS:.
Na ponitsrym rysunku jest widoczny arkusz zawierajqcy kllka osadmnych kontrolek:

Dodawanie kontrolek do arkusza mob ok& sig t m h g zagmatwane, poniewai moha je pobkra6
z dw&h pask6w narzgdzl: Forrnolane i Pnybcmik fomantbw. Kontrolki z paska narzqdzi Formo-
lane sq obiektami. ktdre motna wstawid do arkusza. Ponadto sq zgodne z Exce:lern w wersjach
5 i 95. Na pasku n a r m d W m i k formant& majdu]q slq kontrdki ActiveX Stanowiq podzbidr
kontrolek. ktdre sq dostgpne przy tworzeniu formulary UserFom. Kontmlki te sq kornpatybilne
tylko z Excelem 97 I nowszyrni wersjami. Nie sq obstugiwane przez Excel w wersjach 5 i 95.
Motna s t o M kontrolki z obu pask6w narpedrl, ale wake jest ~czumienierbhic pwnlgdzy nimi.
Sposbb dzi&ania kontrolek paska nanqdzi Formularre rbini sip zneczqco od spsobu dziatania
kontrolek ActiveX.
Gdy do arkusza jest dodawana kontrolka paska n a n w Rzytmrnik formantbw, Excel pnetqcza
siq w t@ prolektowania. W priypadku tego t@u m o t l i i Jest modynkowanle wtaSclwoSci d&
wo[nej kontrolkl umieszczonej w arkusru, dodawanie lub edytowanle pocedur obslugl xlarzeci
powlwanych z kontrolkq bqdf zmlana wielkoSci lub potoienia kontrolki. Aby dla k,ontrolkiActiveX
rnyszy i z menu podrpcznego Wra6
wyhietlit okno Pmperties, naleiy jq klikn* pral~ym~ l s k l e m
pozycje WlaSciwgci.
W przypadku huwrenia proSych m i s k d w czgsto uZywarn kontrolki Prz)cisk (8utton) z paska
narzgdzi Fornulame, ponlewai umoillwla rnl przypisanie jej dowolnego rnakra. Je51i mstosujp
kontrolke Przjcisk polecenia (GmmndWlttonJ zawartq na pasku narz@zi m o r n i k formanrdw. po
Rozdziol13. + Wprowadzenie do fomnrlorzy UserForrn 369

jej kllknigclu zostanie wykonana powlqrana z niq procedura obslugl zdarrenia (majqca np. nazwq
CmandButtonl-Click), ktdrej kod frddtowy majduje sle w module obiektu Sheet. Nie jest moiliwe
bezpogrednie przyplsanie do taklej kontrolki dowolnego makre.
Gdy Excel znajduje sie w ttyble projektowanla, nle jest motliwe testowanle kontmlek. Aby wytq.
cqd tryb projektowania, naieiy kllknqC przycisk Zakodcz t@ projektowania na pasku nangdzi
Prrybornik fonnantdw.
Skoroszyty, ktdre dernonstnrJq wszystkie kontrolki arkusza, sq dostepne na dolqczonym dysku
CDROM.

Konfrolka Image
Kontrolka Image (obraz) stub do wyiwietlania obrazu pobieranego z pliku lub wkleja-
- - -
neno ze schowka. M o t t zostaC S / t a w oknie dialoaowvm w celu wy5wietlcnia loco
w
firmy. Obraz jest przcchowywany skorasycie. Dziqki temu w sytuacji, gdy skomszyt
zostanie pnestany k o m d innemu. nie kdzie koniecme dolquanic kopii pliku graficmego.
Nlektdre pllki graflcme sq bardzo dute, dlatego zastosowanle ich mote znacmie
?,w
k,@
i rozrniar skomszytu. Dl. uzyskania ]ak najlepsqrh kynikdw obrazy powinny
by6 "&wane rradko lub wtedy, gdy sq nlewlelkie.

Kontrolka Label
Kontrolka Label (etykieta) po prostu wySwietla tckst w oknie dialogowyrn.

Kontrolka ListBox
Kontrolka L i stBox @ole listy) prczentuje listq poycji, ktdre utytkownik moze w y b d
(jedna lub wiele). Kontrolki C i s t k x sq bardzo elastycme w zastosowaniu. Na przyklad
rnotna okretlid zakres zawierajqcy pozycje kontrolki L l stBox. Zakres ten mote skhdad
sit z wielu kolumn. Pozycje kontmlki L i stBox mogq t& zostat zdefiniowane p n y uZyciu
instrukcji jqzyka VBA.

Kontrolka MultiPage
Kontrolka Multi Page um&liwia t w o m i e zaldadkowych olden dialogowych podobnych
do tego, ktbre jest otwierane po wybtaniu z menu Nan~ukiapozycji Opcje. DomySlnie
kontrolka MultiPage posiada dwie zakladki. Aby dodaC kolejne, prawym pnyciskiern
rnyszy nalety kliknaj zakladkq i z menu podpcnego wybraC pozycjq New Page.

Kontrolka OptlonButton Iprrycisk opcji) przydaje sic, gdy utytkomikowi zaleb na


wybraniu jednej spoSrdd niewiclkiej liczby opcji. Zawszc ma postat p p y ztokonej
zprrynajmnicj dw&h opcji. Po wybraniu kontrolki OptionButton pozostak takie same
kontrolki majdujqce sip w grupie y wylqdzane.
370 CzqJC IV + Zastosowanie forrnularzy UserForm

JeSli formulan UserForm zawiera wipcej nit j d n q g r u konmlek


~ OpticmButton, kontmlki
katdej grupy rnusq wsp6ldzieliC unikatowq wart066 wlaSciwoSci GroupName. W pne-
ciwnym razie wszystkie konholki OptionButton stanq sic czqhiq tej samej gnrpy, l ~ l e
mzwiqzanie polega na umieszczeniu konwolek OptionButton w kontrolce Frame, ktora
automatycznie je pogrupuje.

Kontrolka RefEdit
Konkolka RefEdi t jest s m w a n a , aby umotliwif uhytkownikowi wybranie zakresu arkusza.

Kontrolka ScrollBar
Kontrolka Scrol lBar (pasek przewijania) jest podobna do kontrolki SpinButton. R6tnica
polega na tym, t e w celu miany wartoici kontrolki Scrol lBar w wipkszym zakresie utyt-
kownik mo2e pmciwd jej suwak. Kontrolka Scrol 1Bar najprzydatniejstajest w prrypadku
wybierania wartofci, ktdra zawiera sic w szerokim zakresie motliwych wartofci.

Kontrolka SpinButton
Kontrolka SpinButton (pokrctb) umotliwia utytkownikowi wybranie wartofci p o p m z
klihiecie dw6ch sbzalek. Pierwsza z nich zwieksza wartoJt. natomiast druea mnieisza
w
~ontrolkaSpinButton czpto jest stosowana pdqczeniu.t kontrolkami-~extE!ox lub
Label, kt6re wySwietlajqaktualnqwartoJC zwiqzantz tq konholkq.

Kontrolka Ta bStrip
Kontrolka TabStrip jest podobna do konfmlki MultiPage, ale w przcciwiehstwie do niej, nie
spelnia funkcji kontenera dla innych obiektbw. Jest r6wniet trudniejsza w utyciu i znacz-
nie rnniej wszechstronna.

KontroIka TextBax (pole tekstowe) umotliwia utytkownikowi wprowadzenie tekstu.

Kontrolka ToggleButton
Kontrolka ToggleButton [przycisk pnetqcmika) posiada dwa stany -
wlqczony lub
wylqaony. Kliknipcie pnycisku powoduje pr&czanie pomiedzy dworna stanami. Dodat-
kowo zmienia sic wyglqd pprzycisku. WartoJciq konholki jest True (pnycisk wcifnim)
lub False (przycisk nie jest wciSniqty). WlaSciwie nie jest to standardowa konbolka
j lepszym wyjsciem jest stosowanie dw6ch kontrolek OptionButton lub jednej CheclcBox.

Modyfikowanie kontralek formularza UserForm


WielkoJC i polotenie kontrolki umieszczonej w oknie djalogowym m o h a m i e n i d za
p o m o q myszy.
as lstnleje motllwoSE zamaczenla wlelu kontrolek. W tyrn celu nde& wcisnqd klawisz
.ShR i kAkaf kontrolki rnysza Iub nacisnq6 przycisk rnyszy i pceciqgnqd nad kontrolkarni
prostokqtny obrys.

Formularz UserFonn mote zawierat podorne i pionowe linie siatki zlotone z kopek, kt6re
pomagajq przy wyr6wnywaniu dodanych kontrolek. Podczas dodawania lub przemiesz-
czania kontrolka przylega do linii siadci, aby uhtwiC wyr6wnanie jej w stosunku do innych
kontrolek. Linie siatki rno2na wylqczyb, wybierajqc z menu Tools edytora Y&ual Basic
pozycje Opfiom. W o h i e dialogo\tym Opfiom nalety kliknqd zakYadkq General i w sekcji
Form Grid Seftings wybraC tadane opcje.

Menu Format edytora Visual Basic oferuje kilka polecen pomocnych w precyzyjnyrn
wyrownaniu kontmlek w oknie dialogowym i ustawieniu odleg4oSci porniqdzy nimi.
Pmed uyciern tych polecen n a l e q zaznaczyc kontrolki, ktbre bcdq rnodyfikowane.
Polecenia dziahjq zgodnie z oczekiwaniami, dlatego nie b& ich tutaj objdnial. Na ry-
sunku 13.3 pokazano okno dialogowe zawieraj%cekilka kontrolek Opti onButton, ktore
zostanq wyldwnane.

Rysunek 13.3.
Polecenie Format/
Atign umotliwia
zmiane sposobu
wydwnarna Kontrolek

Gdy zaznaemnych zostab wiele konblek, wok61 ostafnlej z nich zarnlast standwowych
czarnph uchwytb pjawiajq siq bide. Konfrolka z biatyrni uchwytarni p h i funkcje
rnodelu, z ktdrym pod wzglqdern wlelkoSci i pdotenia sq porbwnyane kontrolki
z czarnyml uchwytami.

Modyfikowanie wla~ciw&cikontrolki
Ka2da kontrolka posiada kilka wl&ciwolci okreilajqcych jej wyglqd i zachowanie.
WMciwoSci kontraki m o m byf modyfikowane na dwa sposoby:
pay utyciu opcji okna Properties -w trakcie projektowania formularza UserForm,
p r y W i u inshukcji jqzyka VBA -po wySwietleniu formulam UserForm
przez m o w n i k a .
....
Zastosowanie okna Properties
ZawartoSC o h a Properties edytora Yisual B a i c zmienia sip w zalctnoici od wlafciwodci
aktualnie wybranego obiektu, ktorym m o b by6 kontolka lub sam forrnularz UserForm.
Dodatkowo kontrolkp motna wybmt z listy rozwijanej majdujqcej sip w g6rnej czeci
okna Properties (rysunek 13.4).

Rysunek 13.4.
Wybieranle kontrolki
OpttonButlon3 z listy
' rozwijanej okna
Properties

Olcno PmperUes ma dwle zaktadkl. Zaktadka Alphabetic w kolejnodcl alfabetyczne]


wyfwietla wt&ciwn4cl zaznacmnego obielu. Zakladka CatepolMdwy&wietlaje
pogrupowane wedlug logicznych kategoril. Oble zaktadki zawierajq takie same
vJla5ciwoSc1, ale w r6tny sposdb uporzqdkowane.
Aby zmodyfikowat wta$ciwdC, wystarcy jq k l ~ h q ti podat n o w wartoft. Niektdre
w~aSciwo5cim o m oferowak skodczonq liczbq wartoki wybieranych z listy. JeSli tak
jest w oknie Properties pojawia sip przycisk ze m # k qskierowanq w d&. POklikniqciu

pnycisku motliwe w e wybranie z listy wartdci whkiwoici. Rzykladowo whkiwoSC


TextAl ign mo2e p i a d a t take wartohi, jak 1 - fmTextAl ignleft, 2 - fmTextA1igncentor
lub 3 - fmTextAlignRight.
Po wybraniu niektdrych wiafciwoSci (np. Font i Picture) pojawia sip niewieki przycisk
z fxzema kropkami, M r y tneb klhqt, aby Wwietlit okno dialogowe p o w i m z wta-
hiwoSci$
WIaSciwoX Picture kontrolki Image jest godna uwagi, poniewat umotliwia wybranie
pliku graficmcgo zawierajqcego obraz. Aby wstawik obraz, najpienv nalety skopiowd
go do schowka, a e q n i e wybrat w b k i w o f t Picture kontmlki Image i wcisnag kom-
binacje klawiszy Ctrl+ V.
k511 zaznaczona zostanle wlgcej nit jedna kontmlka, w oknle Pmpertles pojawiq sig
tylko te WakIwoScl. kt- rzj wsp6lne dls wszystklch mranych kontrolek.
Rozdziat 13. + Wprowadzenie do fom~llarzyUserForm 373

Wiele wlaSchvoSel farrnulana UserForm motna modyRkoww2. P6fnkj wartofcl tych


wtafciwoSci petnl$ hmkcje domySlnych dla wta5ciwoScl kontrolek dodawanych
do formulana UserFom. JeSli na pnyhtad zostanie zmieniona wartoe wtaSciwoScl
Font formulana UserFonn, wsrystkie dodawane kontrolki utyjp wybranej czclonki.

K&da konmlka ma wlasny zestaw unikatowych wlaSciwoCi, ale niekt6re w4afciwoSci


sq wspblne. Na przykbd kazda kontrolka posiada wlaSciwoSC Name i wlaSciwoSci o h -
Slajqce jej wielkoSE i pdotcnie (Height, Width, Left i Right).

JcSli kontrolh b g z i e pnetwarzana przy W c i u instrukcji jpzyka VBA, warto nadat jej
z n a q c q nazwq. Pnykhdowo pierwsza kontralka OptionButton dodana do formularza
VserFom posiada domySlnq nazwp OptionButtonl. W celu odwalania sip w kodzie trb
dbwym do tego obiektu nalcty &ye naswpujqcej insmtkcji:

! OptionEuttrnl .Value - True

Jdli jednak kontrolce OptionButton zostanie nadana bardziej m a c q c a nanva, taka jak
obOrientacjaPozicma, rno2na u t y t nastppujqcej i n s d c j i :
I obOrlentacjaPozlm .Value - True

Pornacne Jest s t o m n l e nazw Identyflkujrnh r6wniet typ obiektu. W poprzednim


I pnykiadzle @kin laficucha ob. aby potwierdrlc?, Le jest s t o m a n e kontrolka
Optlon8utton.

. -
opt1onEiuitm motna &w& wzgI@ern lewej m n y . W tym eelu wystarcq zaznaczyt
wszystkie kontrolki btionBvttm. a nastepnie w oknie Prurntics zrnodytikowa6 wart066
wl&idci Left. Waystkie zamaczone I;bntrolki u2yjqn&ej W c i ~ ~ c i w oLeft. ~ci
I Zdobywanie dodatkowych infarmacjl a wtaichvofciach
;
II
iI Najlepsza metoda zdobycia w i e d y o wla9ciwokiih konbolki polega na W c i u systemu
pomocy. W tym cetu w oknie Properties wystarczy k l h q t wtaSciwo45 i wcisnqt klawisz
FI. Na rysunku 13.5 pokazano pnyldad okna pornocy p o w i m e g o z wlaSciwoScia
I

: , Uwzglednienle wyrnagah uiytkownik6w


I preferujqcych konystanle z klawiatury
Wielu Irtytkownik6w preferuje przcrnicszczanie s i ~ne obzarze okna dialogowego za
pornocq klawiatury. Wciskajqc klawisz Tab i kornbinacjp klawiszy Shift+Tab, rnoma
cyklicmie uaktywniaC kolejne kontrolki. Wybraq kontrokq uaktywnia r6wniet wci-
Sniwie klawisza sb6tu. Aby m i d pewno% Ze okno dialogowe uwzglednia wyrnagania
~Zytkownik6wpreferujqcych klawiatwq, konicczne jest zapo~laniesic z dwoma zagad-
nieniami -klawiszami skldtu i koIejnoSci~tabulacji.
374 Cz&& N + Zastosowanie formulam UserForn

Rysunek 13.5. I
System pomocy
zawiera informade
o kaidej wfafciwoSd Mulaselect Proparty
esuroh wbsn
wszystkich kontrolek S..AI*O :
I-

h ""m.4.rt --.
r ~ k tn. r *

W.nmI.h)I.M*l..dl
hapnnarmmn . * a m r .

*r- ha, h,.rm:

..&.a ".a *
a
.!
~#.TIm.*.eammhhnhmdum.

n,..~r".r'".n?

--
-
munram*
v*r
.I.
m a w h o
Onr err un b. u-

d.nmhed n m m in he hC
(ddaull.

r m ~ * . t r r a u n r d h n q u h ~

lmnnp Dnl* nd dam h. MI, c? mselq


1"InM m. . I h..rm" .,,.k "wed, h.
d-n Inm ha mvio~h r#hamdmrn ah.
m m m . wwnnp C ~ andL dun#s . mu.
~1.mar d...l.e, m n.m.

Zmiana kolejnoici tabulacjl kontrolek


KoiejnafC tabulacji oznacza kolejnoS6 uaMywniania kontmlek, gdy W k o w n i k wciska
klawisz Tab lub kombinacj~klawiszy Sh~@+Tab,oraz o k d l a , kt6ra kontrolka bpdzie
aktywTla jako pierwsza. JeSli na pnyklad utytkownik wprowadzi tekst w kontmlce TextBox.
stanie sip ona aktywna. JeSli kliknie konbulkq Optionhtton, ona aktywnym obiek-
tem. Gdy okno dialogowe jest wyiwietlane po raz pienvszy, aktywna bedzie pierwsza
kontrolka na liScie kolejno4ci tabulacji.

Aby dla kontmlek zdetiniowat kolejnoS4 tabulacji, z menu View n a l w wybrat pozycjp
Tab Order. Moms t e t prawym przyciskiem myszy kliknqd okno dialogowe i z menu
podrpcmego wybrat pozycje Tab Order. W tym przypadku Excel wyiwietli okno dia-
logowe Tab Order (rysunek 13.6). zawierajye listp wszystkich kontrolek w kolejnoici
zgodnej z kolejnoiciq uaktywniania ich w fonnulam UserForm. Aby mienid pozycjp
kontrolki, nalety jq zamaczyt i kliknqd klawisz shzatki w g6rp lub w d6t. Jednoczeinie
motna zamaczyC wiscej nit jednq kontrolke (nale2y je kliknqe, hzymajqc wciininty
klawisz Sh$ lub C ~ r l i) m i e n i t pozycje ich wszystkich.

Pny utyciu okna Properties m o h a te2 okrellit pdotenie pojedynczej kontroIki znaj-
dujqcej siq na liScie kolejnoki tabulacji. WartoSciq wMciwo4ci TabIndex pierwszej
kontrolki z tej listy jest zero. Zmiana wartoki widciwo~ciTabIndex kontrolki mote
mied wplyw na wldciwo5f TabIndex pozostalych kontrolek. Operacja odpowiedniego
ustawienia wartoici wldciwoSci TabIndex jest wykonywana automatycznie, co ma na
celu zagwarantowanie, t e w przypadku ani jednej kontrolki wartoit tej wtaSciwoSci nie
p m h c z y liczby wszystkich utytych kontrolek W celu usuniecia kontrolki z listy ko-
lejnoSci tabulacji, dlajej w ~ c i w o S c TabStop
i nalety ustawit wartoft Fa1 se.
KontrolW takle, Jak Fram i MltiPage pelnlq funk& kontener6w innych kontmlek.
Kontrolki w q t n kontcma majp wtasnp kolej*lm6etabulacji. Aby stworryC kolejnoa
tabulacji dla grupy kantmlek Opt~onButtonznajdujqcych siq wewnqtn kontrolkl Frame,
przed wybraniem z menu View pozycji Tab Order naleiy zaznacz$ kontrolke Frame.
Rozdzial13. Wprowadzenie do formulorry UserForm 375

Rysunek 13.6.
Okno dialogowe
Tab Order umotlhvla
okreglenie kolejnogd
tabulacji kontrolek

Deflnlowanle klawiszy skr6tu


Klawisze skr6hr mogqbyt powiqme z wieksmkiq kontrolek okien dialogowych. Dtiqki
temu utytkownik mo2e ich utyd, wciskajqc kornbinacjp klawisza Alr i klawisza skr6tu.
W celu zdefniowania klawisza sk6tu nalety poslutyc siq whiciwoiciq Accelerator
z okna Properties.
NleMdre kontrolki (np. TextBox) nie posiadalq d a k i w o k l Accelerator, poniewai nie
metlajq opisu. Jednak pny uFyciu kontrolki Label molna Im przypisd klawisz skr6tu.
W tym celu dla kontrolki Label naleiy zdefiniowaE klawisz skr6tu. a nastqpnie na lijcie
kolejnoSci tabulacjl umleScid jq przed danq kontmlkq TextBox.

WySwieflclnie i zamykanie formularzy UserForm


W tym podrozddale omdwit zastosowanie jqzyka VBA do sterowania formularzami
UserForm.

Aby z poziomu kodu trddlowego wySwictlic formularz UserForm, nalej stwonyt


procedure konystajqcq z metody Shcw obiektu UserFom. Nie jest mokliwe wy4wialenie
formulam UserForm bet utycia przynajrnniej jednej instrukcji j&a VBA. JeJii for-
m u l a UserFwm nosi n a m e UserForml, poni- pmcedura Wwietli okno dialogowe
w nim zawarte:
Sub ShowFornO
UserForml.Shm
End Sub
376 Czett IV * Zastosowanie fonnulanv UserForm
Procedura musi m a l e 2 sie w standardowym module VBA, a nie w module kodu tr6-
dkwego formularza UserForm.

Formularz UserForm pozostanie widocrny na e h n i e do mornentu jego zamkniecia


(prry utyciu polecenia Unload) lub ukrycia (przy utyciu metody Hide obiektu UserForm).
Zanvyczaj na formulam UserForm jest umieszczana kontrolka C m n d B u t t o n wyko-
nujqca procedure zarnykajqcq formulan. Zagadnienie to stanie sip bardziej uozumiale
po zapomaniu sic z rbtnyrni przykladami z tego i kolejnych rozdziat6w.

Dodatkowo ismieje motliwoiC wyiwietlenia niemodalnych f o r m u l a q UserForm. Po


wySwietleniu takiego fonnularza, ktdry caty czas b@zie widocmy, w dalszym ciagu
motna u2ywat Excela. Dornyslnie formularze UserForm sq wyiwietlane jako modalne.
- ~

Oznacza to, t e w celu wykonania jakiejkoiwiek operacji zwiqzanej z erkuszem Excela


koniecne jest zamkniccir: forrnularza. Aby. wyiwietlit
- niemodalny formulac User-
Form, naleh u t y t nastqpujqcej instrukcji:
UserForml .Show 0

Jefli nazwa formulana UserFonn jest przechowywana jako mienna typu String, w celu
dodania formulana do zbioru UserFom m o m u t j metody Pdd, a nastqpnie metody Show
zbioru UserForms. Ponitej zamieszczono pnyktad, w kt6rym przypisano nazwe formu-
lama L'swForm miennej HyFon, a nast~pniego rvyiwietlono:

Metoda ta mote byC pmydatna, gdy projekt zawiera kilka formulany UswForm i to,
ktory z nich tostanie wy91vietlony. zalery od programu.
Jqzyk VBA ofemje let insmkcje Load, kt6ra iaduje formuIan do pamieci, ale nit jut
on widocmy do momentu utycia metody Show. Aby zatadowad fonnulan UserForm,
nalety utyC nastqpujqcej instrukcji:
Load UserFonnl

7
Testowanie formularza UserForrn
Zaprojektowany fmularz Userform naleiy przetestowaE. Motna wyr6biC tny rnetody testowania
fomularza VserFonn, niewymagajqce otwierania go z podornu kodu frbdbwego proceduryjpzyka
VBA:
r wybranie z menu Run polecenia Run Sub/UserFom,
M wciSniecie klawisza F5,
B ldiknlvie ~ z y c i s k uRun Sub/UserForm znajdujqcego sie na pasku narzedri Standard.
Wszystkle wymienlone rnetody genetujq zdarzenie I n i t i a l i z e powiqzane z forrnularzem User-
Form. Po wySwietleniu okna dlalogowego w trybie testowym moina sprawdzid kolejnoff tabulacjl
I klawlsze skdtu.
Rozdzial13. + Wprowodzenie do f o m u l o UserForm
~ 377

JeSli formularz UserForm jest zlotony, motna go zaladowa6 do pmieci, zanim bqdzie
poaebny, dzieki czemu po zastosowaniu metody Show pojawi sip macmie sybciej.
Jednak w wipkszofci pnypadkbw nie jest konieczne stosowanie inseukcji Load.

Zamykunie formularza UserForm


Aby zamknqC fomulan UserForm, nalety pos&yC sip instrukcjq Unload. Oto pmyklad:
Unload UserFoml

JeSli kod hbd+owy znajduje sip w module formulana UserForm, motna utyC nastcpu-
jqcej instrukcji:
Unload Me
W tym pnypadku slowo kluczowe He odnosi sig do formulana UserForm.
Zwykle w kodzie M l o w y m jqzyka VBA za instrukcjami wykonujqcymi operacje z w i p -
ne z formularzem UserForm powinna sip male% instrukcja Unload. Na pnykIad forrnulan
UserForm mote zawierab kontrolb ComndButton s p e h i a j ~ qhnkcjc przycisku OK.
Kliknipcie pnycisku spowoduje wykonanie makra. Jedna z insaukcji makra usunie
z pamipci formularz UserForm, ale pozostanie on widoczny na ekranie do momentu za-
konncnia wykonywania tego makra.
Gdy formuIan UserForm jest usuwany z pamipci, wla6ciwoSci jego kontrolek przyj-
mujq domyflne wartofci. lnnymi slowy, po z a m h i p i u f m u l a n a UserForm instmkcje
kodu tr6dbwego nie b@q dysponowaly dost~pemdo wartoSci wprowadzanych przez
utydrownika JeSli wart046 podana pnez utytkownika musi mstaC pdtniej wykorzystana
(po usunipciu z p a m i e fomularza (IserFonn), koniecme w e zapisanie jcj w zmiennej
publicmej zdeklarowanej (z utyciem slowa klucmwego Pub1ic) w sgnda~iowymmodule
jqzyka VBA. Warto4C motna tet umieScit w kom6rce arkusza.
Formularz Userfirmjest automalycmle usuwany z pemlgd, gdy utytkownik kliknie
@.$$ prrjclsk Zamknij (ikona X znajdujqca siq na pasku tytutu formulam). Operacla ta
powuduje tet wygenemwanie zdanenla QueryClosepowlqzanego z formulanem
UserForm,po ktdrym nastqpl zdanenie Temnate.

Po wywolaniu m d y Hide fbrmularz LlserForm wstanje uloyty, ale powsoMje w pamjpci


dzipki czemu bmukcje kodu M d b w w caly czas be&dysp&owa& dostepem d&r6Znych
wlaSciwofci kontmlek. Oto przykiad instmkcji ukrywajqcej fomularz UserFurm:

J d l i kod ErbdIowy majduje sic w module formulana UserForm, m o h a uQC nastqpu-


jqcej instrukcji:

J d l i z jakiegd powodu forrnularz UserForm ma mstat ulayty natychmiast po urucho-


mieniu pmedury, na jej pocqtku nalety urnieSciC rnaadq Hide, a za niq instrukcje
OoEvents. Na ptzykM poniBza procedura uloy;va formulam UserForm bezpotrednio
po klikniwiu kontmlki CmndButtonl, a ostamia instrukcja usuwa formularz UserForm
z pamipci:
378 Cz&t IV + Zastosowanie formularzy UserForm !

Private Sub ComMnButtonl-Cl ick0


*.Hide
DoEvents
For r -1 To 10000
-
Cells(r. 1) r
Next r
Unload He
End Sub

;' 4
@ W mzddale 15. wyjagnig, w jaki sposdb wySwietllC wskatnlk postgpu,
kt6" wykorzystuje to. I.torrnularz UserFom7 mzosta]e vldocmy w trakcie
wykonywania makra.

Procedury obslugi zdarzeh


Utytkownik konysta z formulana UserForm, wybierajqc pzycje z listy kontrolki L l st8ox.
klikajqc kontrolki ComnandButton itd. Poslugujqc siq oficjalnq terminologia utytkownik
generuje tdanenie. Na przyklad kliknipcie kontrolki CmndButton wywohje powiwne
z niq zdarzcnie Cl iclc. Koniecme b*ie s t w o m i e procedur wykonywanych po wyge-
nerowaniu takich zdarzen, nazywanych czasami procedurami obshgi zdatzeri.

=%F Kod fr6d)owy procedur obstugl zdanerl rnusl zostd urnleszczony w oknie Code
(E! powiqzanym z formulanem UseBonn. Jednakie procedura obstugl zdarzenia mote
wywoia6 innq prctcedurq znajdujqcq slp w standardowym module VBA.

lnsbukcje kodu &&Ilowegokyka VBA mogq modyfikowef W c i w&iwofci konm-


lek wy$wietlonego forrnularza UserFwm. Ma przyktad kontmlce L l s t h x rnotna przypisad
proceduly, kt6ra po wybraniu z listy pozycji zmienia tekst tawarty w kon,ntrolce Label.

Przyklad tworzenia formularza UserForm


W tym podrozdziale krok po kroku prezentuje proces tworzenia prostego o h a dialogo-
wego i pisania procedury jgzyka VBA, kt6ra z nim wspblpracuje. W przykiadzie utyto
formularza UserForm pobierajqcego dwie informacje - imiq i plef. W celu pobrania
imienia i p k i (kobieta, m@czyma, niemana) w oknie diabgowym zastowwano odpowied-
nio kontrolkg Textsox i trzy kontrolki OptianButton. Informacja wprowadzona w oknie
dialogowyrn jest przesyhna do nastepnego pustego wiersza arkusza.

Twonenle formularza UrerForrn


I
Na rysunku 13.7 pokazano gotowy formularz UserForm zastosowany w przykladzie.
Aby uzyskad jak najlepszz efekty, otw6rz nowy skoroszyt zawierajqcy tylko jeden arkusz
i wykonaj nasepujqce kroki:
1. W celu uaktywnknia edytora Visual Bmic wcifnij kombinacje klawiszy Alr+FI I .
2. W oknie Project Eqdorer wybierz projekt skomsytu i w celu dodania pustego
fonnulana Userfirm w menu h e r [ kliknij pozycjq UserFarm.
Rozdziat 13. + Wprowadzenie do formularzy UserForm 379

Rysunek 13.7.
Okno dialogowe
umotliwia
uzylkownikowi
wprowadzenie imienia
i okreglenie pki
..
..
.. r- , .. . . . ..

, .. .. ... .

3. Domyslnq wartoiciq wlaSciwoSci Caption forrnulana UserForrnjest UserForrrl


Aby dla w#afciwoici ustawit wart046 OkreSlanie imienia i p l r i , poslut sic
oknem Properties. JeSli okno Properties nie jest widoczne, wcisnij klawisz FJ.
4. Dodaj korrtrolkp Label i ustaw wartoSci dla jej nastqpujqcych wv4aiciwoici:

Wtalciwol6 Wart046
Accelerator I
Caption Imie:
TabIndex 0

5. Dodaj kontrolkq Textsox i ustaw wartogci dla jej nastcpujqcych wlakiwoici:

WlaSciwoiC WartoSC
Name Texth'ane
TabIndex 1

6. Dodaj koatrolke Fram i ustaw wanoSci dla jej nastqpujqcych w#dciwoici:

Caption
TabIndex

7. Wewnqtrz kontrolki Frame umiefC kontrolkq 0pt;onBution i ustaw wartoici dla jej
nast~pujqcychwlaSciwoSci:

WaSciwodt WartoSC

Nane OpticnYaie
TabIndex 0
380 Cz@C IV + Zastosowanie forrnulatzy UserForm

a. Wewnqz kontrolki Frame umie9C kolejnq kontrolkp OptionButton i ustaw


wanoQcidla jej nastqpujqcych wldciwo9ci:

Accel arator K
Caotion Kobieca

Tab Index 1

9. Wewnqat kontrolki Fram urnie.46jeszcze jednq kontrolkq OptionButton iustaw


wartoSci dla jej nast~pujqcychwiaSciwoSci:

Accelarator tI
Caption Nieznana
Nam Opt: onUntnovn

Va 1ue True

lo. Poza obszarem kontrolki Frame umieSC kontrolkq CmndButton i ustaw wartofci
dla jej nastppujqcych wldciwoSci:

Caption OK
Default True
Nar~ OKButton
Tab1ndex 3

11. UrnieiC kolejnq kontrolke ComndButton iustaw wartdci dla j e j nast~ujqcych


wlaSciwoSci:

Ceptlon Anul u j
Cancel True
N2m2 Cancel Button
TabIndex 4

W przypadku tworzenla kilku pdobnych kontrolek od dodawanla nowe] kontrolki


labiejsze nab okaza6 sip skoplowaniejut istnlejqcej. Aby skoplowaC honfmlhg.
w trakcie jej przeciqgania nalety trzymaC wcihiety klawlsz Ctrl. Po wykoclanlu
tej operacji rnozna zrnodyfikowaC wartoScl wtaSciwo5ci skopiowane] kontrolki.
Rozdziol 13. Wprowadzenie do formularry UserForm 38 1

Pisanie kodu ir6dtowego


procedury wybwietlajqcej okno dialogowe
Pora dodat? do arkusza kontrolkq Pnyciskpolecenia (ComndButton). Kliknivie prryci-
sku spowoduje wykonanie procedury Mwietlajqcej formularz UserForm. Aby to byio
motliwe, wykonaj nastppujtce kroki:
1. Uaktywnij o b o Excela (np, ra pmocqkombinacji klawisy AIt+FII).
2. Prawym pnyciskiem myszy kliknij dowolny pasek n a q d z i i z menu
podrtcmego wybierz pozycjq Przybornik formantdw. Excel wyiwietli pasek
narzpdzi. kt6ry bardzo przypomina okno Toolbox edytora Visual Basic.
3. W celu dodania do arkusza kontrolki Pnycisk polecenia (CmndButton) utyj
paska narztdzi Prrybornikjormantdw. Po kliknipciu kon~rolkiPrryciskpolecenia
nalety jq przeciqgnqd do arkusza. Istnieje motliwoit n i a n y opisu kontrolki
ComnandButton umieszuonej w arkuszu. W tym celu prawym pnyciskiern myszy
kliknij przycisk i z menu p o d r ~ m e g owybierz Obieb CommandBurtodEdit.
Po wykonaniu tej operacji motliwa bpdzie edycja opisu kontrolki ComndButton.
4. Dwukrotnie klihij konttokp ComnandButton, co spowoduje uaktywnienie edytora
Visual Basic. Dokledniej m6wiqc, zostanie wyiwialony modul kodu Wdlowego
arkusza zawierajqcy pus@ procedurq obstugi zdarzenia powiipnq z kontrolkq
Com~ndButton.
5. Wewnttrz proccdury CmndButtonl-Cl ick wprowadt pojedyncq instrukcjq
(rysunek 13.8). W celu wyiwietlenia formularza UserForm ta kr6tka procedura
korzysta z metody Show obiektu UserFonl.

I Rysunek 13.8.
I Procedura
CommandButtanZ_Cllck
/ Jest wykonywana
*. po kliknieciu p q / s k u
majdujqcego sip
i w arkusru
I

1 Testowanie okna dlalogowego


Nastqpnym lcrokiem jest pitehstawanie prmdmy wy9detlajwej akno didogowe.
I
! Po zak06cmniu trybu projebwania k l i w c i e przycisku spowoduje wyOwictlenie for-
m u l a m UserFonn (rysunek 13.9).
Ryrunek 13.9.
Procedure obsfugl
zdarzenls Click
powigzanego
z kontrolkq
CornrnandButton
wySwietla formularz
UserForm

Po kliknieciu kontmlki ComndButton znajdujqcej sie w arkuszu nic siq nie dzieje.
Wynika to stad, Ze Excel nadal znajduje sie w trybie projektowania, kt6ry uak-tywnia
sie autometycmie, gdy dodawana Jest kontrolka majdujqca sie na pasku nerzqdzi
Pnybomik formantdw. Aby zakoric* tryb projektowania, nalej kliknqt pnycisk
paska narwdzi Pnybornik formantdw o nanvie Zakoficz tryb projektowania.
Aby dokonaC jakichkolwiek modflkacji kontrolki Ccmnandhttcn, konieczne k d z i e
ponowne przetqctenie Excela w tryb pmjektowania.

Po wygwietleniu okna dialogowego w polu m o h a wpmwadzit tekst i kliknqt OK, ale


nic s i nie
~ wydany, poniewat dla formulana UserForm nie stworzono jeszcze ?adnej
procedury obshgi zdanenia.

Kliknlqcie psyclsku Zamknv na pasku t y t h fofomarza Userbm spowoduje


(1- zamknlwle okns dialogoweg~~

Dodawanie procedur obslugi zdaneh


W tyrn punkcb wyjdniq, jak napisat p m e d u q obshgujqce zdaacnia g m w a n e po wy-
Swietleniu formulam L'serForm. Aby kontynuowak pnyldad, wykonaj nasqpujqce kroki:
1. W celu uaktywnienia edytora V h a / Bait wciSnij kombinacjp klawiszy Alt+FII.
2. Po upwnieniu siq, te formuIan UserForm zostal wySwietlony dwukromie
kliknij pnycisk Anuluj. Spowoduje to uaktywnienie okna Code farmulana
UserForm iwstawienie w nim pustej procedury o nazwie Cancel Button-Cl ick.
Nalety zauwaZyC, t e nazwa procedury jest zlotona z n a y obiektu, znaku
p o d h i l e n i a i n a m y obshgiwanego zdanenia.

3. Zmodyfikuj procedure do ponitrnej postaci:


P r i v a t e Sub CancelButton-C1 i c t 0
Unload Vserionnl
End Sub
Rozdo'at 13. Wprowadzenie do forrnulany U s e r F m 383

Jest to pmcedura obshgi zdarzenia Cl i ck powiqzanego z kontrolkq Cancel Button.


Procedura wykonywana pa k l i k n i ~ i uprzez utytkownika przycisku Anuluj usuwa
jedynie z pamiqci formularz UserForm.
4. Aby ponownie wySwietliC fonnularz UserForml, wciSnij kornbinacjp klawiszy
Shr$+F7 lub kliknij ikonp View Object widocmqw gdrnej c z ~ s cokna
i Project
Explorer.
5. Dwukrotnie kliknij OK i wprowadi p o n k q procedure uchwytu zdarzenia C l i c k
powiqzanego z kontrolkqOKButton:
Private Sub OKeutton-ti i c k ( )
' Sprawdza, czy uaktywnlono Arkuszl
Sheets("Arkusz:") .Activate

--
R r e l l a nastepny pusty wlersz
NextRow
Appl ication.UorksheetFunc:~on.CountA~Range( "A:A") 1 + 1
Pczenosl im? e
-
CellstNextRow. 1) TextName.Text

Przenosi p l e t
--
if OptionMale Then Cells(NextRw. 2) "MeZczyzna'

-
If OptionFernale Then CellstNextRaw. 2 ) "Kobieta'
If O p t i o n u n k m Then Cell s(NeaRow. 2) "Nieznana"

--
'
Czydcl kontrolki przed wprcwadzenlm kolejnych danych
TextHam.Text "-
OptimUnknown True
TextName. SetFxus
End Sub

6. Po uaktywnimiu okna Excelq w celu wyswietlenia formulam tiserfarm


ponomic kliknij kontrolke CmndButton.
7. Ponownie u ~ c h o m
procedurp. Kontrolki formularza UserForm bed4 dziataC
teraz poprawnie.

Na rysunku 13.10 pokazano efekty uruchomienia procedury.

WyjaSniq tcra. d z i h i e procedury OKButton Click. Najpienv procedura sprawdza, cry


zostat uakpmiony wldciwy arkusz (hrkusz?). Nastqpnie jest u2ywana finkcja COUNT4
(ILE. NIEPUSTYCH) Excela, ktdra identyfjkuje kolejnq pustq korn6rkq kolumny A. W dalszej
kolejnodci procedura przenosi tekst z konmlki TextBox do kolumny A, po c y m przy
utyciu kilku instrukcji If okreSlq ktbqkontrolkq MLionButton ramacmno, i w kolumnic 3
zapisuje odpawiedni Mcuch (Kohieta, Metczyma lub Nieznana). W celu przygotowania
okna dialogowego do wprowadzenia nastqmyeh danych na kohcu sq ustawiane dla niego
wartdci poczqtkowe. Nalety zwr6cif uwag?, 2e kliknigcie OK nie powoduje mmknivia
okna dialogowego. Aby zakohczyt wprowadzanie danych i usun* z pamieci formularz
UserForm, nalciy kliknaj Anuluj.
384 CzefC IV + Zasto~owonieformularzy UserForrn

Rysunek 13.10.
Informaya
wpmwadzona
w fornulam
Userformjest
wstawiana
w pierwszym
pustym wienzu.

Sprawdzanie poprawnojci danych


Z omawianym tu pnyktadern wi@ sip drobny problem. Mianowicie procedura nie gwa-
rantuje, te utytkownik fakrycmit wprowadzi w polu tekstowym dane. Zamiestczony
poniiej kod b6diowy m s t d umieszczony w proccdurze OKLtton-Cl ick przed instrukcjq
przenosqq tekst do arkusza. Dzicki tcrnu uzyskuje sic pewnofC. te utytkownik poda
imiq (lub wpisze jakikolwiek tekst) w polu kontrolki TextBox. Jdli pole kontroki TextBox
jest puste, pojawi sip kornunikat, po czym zostanie ponownie uaktywniona konholka
Texrbx. lnsrmkcja E x i t Sub koriczy p m c e d q bez wykonywania dodatkowych operacji.

I f TextNam.Text -
Sprmdza, czy wpmadzono irnie
"" Then
UsgBox 'Uusisz podat inie.'
TextName. SetFocus
Ex?t Sub
End If

Ukohczenie hvorzenia okna dialogowego


Po wykonaniu wszystkich rnodyfikacji okno dialogowe dziah bczblqdnie. Nie nalezy
zapomnied o pzetestowaniu skr6tbw klawiaturowych W m a y w i s t e j aplikacji prawdo-
podobnie trzeba Wiep o b d wieksq l i c e infonnacji, a nie tylko imiq i pkt.Niezalehe
od tego caly czas obowiqzujq takie same zasady. Koniecne jest j e d ~ i ezastosowanie
dodatkowych kontrotek formulamy UserForm.
Rozdziof 13. + Wprowodzenie do f m k ~ r r UserForm
y 385

Zdarzenia powiqzane z formularzem Userform


Kaz&la k o n m k a formulam UserFom, a taktc sam fonnularz odpowiaddjq na zdarzenia
okrellonego typu. Zdarzenia te mogq gmerowat utytkownicy lub Excel. Na przykiad
klilcniqcie konnoUri C m n d B u t t o n powoduje wygenerowanie powkpnego z niq zdarzenia
Click. Motna napisat kod h6dtowy wykonywany, gdy wystrlpi okrdlone zdarzenie.

Niekt6re o p ~ ~ ~generujqc j e wiele zdarmi. Na p r z y w klihiqcie ~ c i s k strza4ki


u w g&q
kontrolki SplnButton wywduje zdarania SpinUp oraz Change. Po wySwictleniu formu-
larza UserForm, przy utyciu metody Show Excel generuje p o w i m e z nirn zdarzenia
I n i t ~ a l l z ei Activate. Tak naprawdp zdarzenie I n a t l a l l z e wystqpuje w chwili tado-
wania do pami~ciformularza UserForm, jeszcze przed jego wySwietleniem.
Excel obsluguje tei zdarzenla powiqtane z obiektarnl Sheet. Chart i ThisllOrkbook.

Zdobywanie inforrnacji no ternat zdarzeh


Aby dowiedled sip, kt6re zdarzenia obshrguje W l o n a kontrokn, wykonaj nastqpujqce
kroki:
1. Do formulana UserFonn dodaj kontrolkp.
2. W celu uaktvwnienia moduh kodu h-6dtoweeo formulana UserForm dwukrotnie
kliknij kontklkp. Dla domydlnego zda&eniipowiqzanego z kontrol kq edytor
Visual Basic wstawi p u m procedurp obstugi zdanenia.
3. Po klikniqciu listy rozwijanej majdujqccj sip w prawym g6mym namtniku okna
rnoduh pojawi sip @a lista zdarteri powimnych z kantrolkq(rysunek 13.1 1).

Rysunek 13.11.
Lista zdarzeii
powiqzanych
r kontrolkq CheckBox

4. Po wybraniu zdamnia z tisty edytor Yimd Basic automatycznie utwony pusq


p r o c w obshgi zdanmia.
386 CzgSC IV + Zastosowanie formularzy UserFarm
.
Aby zapomd slq z doWadnyrnl Infomacjami o zdarzenlu, naleiy skorzystaC z systemu
pomocy. System pomocy zawlera t e t llstg zdarzeri dostqpnych dla kaMej kontrolki.

Nazwa procedury obstugl zdarzenla zewlera nazwg powlqzanego z niq obiektu. A zatem
jesli mstanie mienlma n a m kontrolki, kaiecme P~dziet e t dokonanie odpaiednich
modyrikacji w powiqzanej z niq procedune lub procedurach obstugi zdarzeh. Nazwy
nie sq zrnlenlane autornatycznle! Aby soble uproSciC zadanle, moina nadaC nazwy
kontrolkom. zanim rozpocznle slg hvonenle procedur obslugl zdaneri.

Zdarzenia formulana UserForm


Z wyiwietlaniem formulam UserForrn i usuwaniem go z pamipci z w i p n y c h jest kilka
zdarzeh. Oto one:
Initialize -wystppuje przed zaladowaniem lub wylwictleniern formularza
UserForm, ale nie jest gcnerowane, gdy formulart zostat wczeSniej ukryty;
Activate-wystqpuje po wygwietleniu formularza UserForm;
Deactivate -wystppuje po deaktpacji formulana UserForm, ale nie jest
generowant w pnypadku ukrywania formularza;
B 0ueryClose -wystepuj~eprzed razpacvciern uuwania z pamipci formulana
UserForm;
Terminate -wystppuje po usunipciu 7: parnieci fomularza UserForm.
lstotne jest aby wybrad odpowlednle zdarzenla. z ktdryml bda'e powiqzana
(.-
procadura uchnlfu zdamnia. I orlentowad F& w kolejno4ci wystppowania zdarzeh.
Zastosowanie metody Shov spowoduje wygenerowanie zdarzeri Initialize I Activate
(Wtakiej kolejnofci). Insltrukcja Load generuje tylko zdarzenie I n l t i a l ire. Z kolei
instrukcja Unload wywotuge zdarzenia OueryClose i Terminate (w takiej kolejnolcl).
Metoda Hide nie generuje tadnego z wymienionych zdarzefi.

Na dotqcmnym dysku CD-ROM majduje s b skoroszyt monitorujqcy wszystkie


zdarzenla I po Ich wystqplenlu *ylwietlajqcy okno kornunik8tu. klll zdarzenia
zwlqzane z fomularzem UserForm wydajq ci slg zagmatwane, przeanallzowanle kodu
trddtowego zamleszczonego w tym przykladaie powinno rozwlad wiele wqtpllwolcl.

Zdarzenia zwiqzane z kontrolkq SpinButton


Aby u W C mzumienie rdaneh, w tym punkcie om6wip blitcj zdancnia powiqzane
z kontrollq Spi nlutton.
I
Na dolqczonym dysku C:DROMznajduje sl? skorosqt demonstrujqcy sekwencje
zdamefi wystgpujqcych r zwiqku z kontmlkq SpinButton I zawlera]q~njq formulamm
UserForm. Skoroszyt pmchowuje kilka pmcedur abslogl zdamd, po jednej dla kaMego
zdarzenia powiqzanego z kontrolkq SpinEutton i formularzem UserFon Kaida z tych
pmcedur wygwietla okno komunlkatu informujqce o wiaSnie wygenerowanym zdarzeniu.

W tabcli 13.1 zamieszczono wsystkie zdarzenia powiapne z k o n m l k q Spi r8utton.


Rozdziat 13. + Wprowadzenie do fcmulorzy UserForrn 387

Tabek 13.1. Zdarrenia powiqzane z kontrolke SpinButton


Zdxrzenic Opis
Afterupdate Wystquje po zmodyfikowaniu kontrolki za poSrcdnictwcrn interfejsu uiytkownika.
BeforeDra~Over Wystwuje w trakcie wykon-wania operacji przeciqgania i upuszczania.
BeforeDmpOrPaste Wyst~puje.gdy utytkownik z a m i m na obszane kantrolki wstawif lub wkleit h e .
1 SeforeUpdate Wystquje p d zmodyfikowanicm kontrolki.
I Cyanqe Wystquje po mianie warto9ci wlafciwoSci Value.
Eater Wystquje prnd Faktycznym uaktywnieniem konmlki pnez poprzedni obiekt
majdujqcy sip na tym samym farmulam UserForm.
Error W y s t w u j ~gdy kontrolka uykqje bl@ i nic jest w stanie mrocif informacji o nim
proccdurzc wyvolujqccj.
Exl t Wystguje bezpo<rednio pried pnekazaniern pnez konlrolkp sranu aktywno4ci
innej kontrolce majdujqcej sip na tym samym formulam.
YeyOam Wystppuje, gdy utytkownik wciSnie klawisz gdy obiekt jest uaktywniony.
KeyPress Wystqpuje. gdy utytkownik wcihic dowolny klawiu, kt6ry spowoduje
wpmwadzenic maku.

~
I

1
I
Y~YUP
SpinOorm

SpinUp
Wyst~puje,gdy utytkownik zwotni klawisz gdy obiekt jest uaktymiony.
Wystqpujc, gdy utytkownik kliknie przycisk s&ki
skierowanej w d6l lub w lnvo.
kontrolki Spinautton

Wyst~pujc,gdy utytkownik klilmie pnycisk svralki kontrolki SpinEutton


skierowanej w g6q lub w prawo.

Utytkownik mote s k o n y s t 3 z konuolki SpinButton, klikajg j a myszq lub wciskajqc


klawisz stnaiki w g6rq bqdi w d61 (jeili kontrolka jest aktywna).

Zdarrenia generowane pnez mysz


Gdy u2ytkownik kliknie pnycisk strzalki w g6rc kontrolki SpinButton, generowane s q
zdarzenia w dokladnie takiej kolejnofci: Enter ( w y w o m a n c tylko, gdy kontrolka Sp-n-
Button nie byia wczeiniej aktywna), Change i SplnUp.

Zdanenia generowane przez klawiaturp


W celu uaktywnienia kontroki SpinButton m o w n i k mote t e t w c i s n d klawisz Tob.
a nastepnie zastosowad klawisze stnalek zwiqkszajkce lub zmniejszajqce wanoiC kon-
tmlki. W tym przypadku wystipiqnastepujqce A r z e n i a (w podanej kolejnoici): Ertfr,
KeyOavn (lub Keyup), Change, SpinLp.

Dokonywanie zmian za poirednictwern lnstrukcji jqzyka VBA


Kontrolka SplnButton mote byf t e t mdyfikowana przy W i u i n s d c c j i jqzyka VBA
-eennuislcvch
- - - odpowiednie zdancnia Ponitsza msbukcia dla wlaSciwoSci V? 1 ue obiektu
i ~ i n B u t t o n &wia
1 wartdC 0 i generuje zdarzenie cnhge p w i m e z kontrollq Spin-
Button (oezywikie tylko wtedy, gdy ulczeJniej wartoick. wMciwoSci Value nie byio m):
388 Cz&C IV Zastosowanie formulorzy UserForm

Motna by przypuszczaf, tc popnez ustawienie dla wtaiciwo~ciEnabl eEvents obiektu


Application wartoSci False motliwe jest wylqczenie zdaned. Niestety wlaSciwoS6 ta
dotycy tylko zdarzeh powiqzanych z typowymi obiektami Excela takimi, jak Workbooks,
Worksheets i Charts.

Wspdpraca kontrolki Spin~Buttonz kontrolk~TextBox


Kontrolka SpinButton posiada wlaSciwofC Value, ale nie dysponuje etykieq umozli-
wiajqq wyswietlenie jej wartdci. Jednak w wielu przypadkach utytkownik powinien
zobaczyd wartoSC w ~ c i w o l c Value
i kontrolki SpinButton. Czasern bqdzie tet wskaza-
ne, aby utytkownik m6gt anienif tp wart036 bezpotrednio, a nie poprzez kilkukrome
kliknipcie kontrolki Spin8uttw.
Rozwirnnie polega na wspblnyrn utyciu konnolek SpinButton i TextBox. UmoZliwia
ono utytkownikowi ohdlenie wartoici p o p m wprowadzenie jej bezpoindnio w kon-
trolce TextBox lub poprzez k l i k n i ~ i ekontrolki SplnButton, co powoduje nvipkszenie
tub mnicjszenie wartotci wytwietlantj w kontrolce TextBox. Na rysunku 13.12 poka-
zano prosty przyktad. WartoBciq w h k i w o k i Hin kontroki SplnButton jest 1. natomiast
wk5ciwoSci Max liczba 100. W zwiqzku z tym klikniecie saa.lek kontrolki Spi n8utton
spowoduje zmianq jej wartoki cdkowitej zawartej w przedziale od 1 do 100.
Rysunek '13.12.
Kontrolka SpinButtm
rastosowana razem
z kontrofkq TextBox

Skoroszyt pnyktadu majduje sig na ddwzoym dysku CDROM.

Kod Wdbwy hczqcy kontmlkp SplnButton z kontrolk~TextBox jest stosunkowo prosty.


A h nvnchronizowaC W c i w o e Value kontrolki SoinBution z wlaSciwdcia Text kontro-

Ponitsza proccdura jest wykonywana k ~ o r a z o w opo wygmerowaniu zdarzenia Change


p o w i m e g o z kontrolkq SplnButton. Omacza to, te procedura jest uruchamiana, gdy
W o w n i k kliknie kontroke S~inButtonlub gdy zmieni wartosf iei wldciwo3ci Value

Text8oxl.Text
Enb Sub
-
Private Sub SpinBlrttml-Change( )
Spln@uttonl.Value

Procedura prypisuje jedynie wMciwoSC Value kontroki SpinButton ~IagFiwoSCiText


kontmlki TextBox. W tym pnypadku kontrolki posiadajq domyflne nanvy (Splnkttonl
i TextBod). JeSli u?~&~wnikbezpoSrednio w p r o d wart& w koniroke TextBox, znsta-
Rie wygenerowane z w i w n e z niq zdanenie Change i wykonana nastppuj~caprocedura:

W a l -
If Nedal -
Private Sub TextBoxl-Change( )
Yal (TextBoxl .Text
SpinButt~onl.Win Pnd -
End sub
-
NewVal <- SplnEuttonl.Hax Then
SplnButtml .Value MewVal
-

W celu zamiany tekstu wpmwadzonego w kontrolce TextBox na wartoSf na pocqtku


procedura konysta z funkcji V a l jpzyka VBA. Jeflf kouwlka TextBox zawiera hicuch,
kfbrynie da sip przcksztalcit na lit*, M c j a Val m d c i zero. Kolejna instrukcja ohLla,
czy wartold jest zawarta w pnedziale obshgiwanym p m z kontrolkp Spi nButton. JeSli
tak jest, dla wlaSciwoSci Value kontrolki S p i nButtan ustawiona zostaje wart086 wpro-
wadzona w kontrolce TextBox.

W ornawianyrn pnykladzie klikniwie OK (konhmokao nanvie OKButton) powoduje


pneniesimie wandci kontrolki SpinButtan do aktywnej kom6rki. Procedura obshgi
zdmenia Cl lck powiqmnego z kontrolkq ComndButtm wyglqda nastppujqco:
Private Sub OKButton-Cl l c k ( )
'
[ f CStr(Splnhtton1 .Value)
Activecell
-
Wprwadzenie wartoicl do aktywnej konbrki

- T e x t b x l .Text Then
SpinButtonl.Value
Unload Me
Else
.
Msgbx "tfleprawidlowa wartole. ' vbCri tica 1
TextBoxl SetFocus
TextBoxl .SelStart 0--
TextBoxl .SelLength Len(TextBox1 .Text)
End I f
End Sub

W I a O c M C Tag
Katdy formulsn U s e f i r m i kontrolka posiadajq MablwoSC Tag. W C h v o # nle reprezentuje nl-
czego szczeg6lnego i domy8lniejest pusta. Mote Jednak paslut$ do pprrechowywania lnformacjl.
Przylmljmy, ze w fwmulatzu Usefiorm majduje sie kllka kontrolek TextBox. Od utytkownika mote
b$ wymagane wprowadzenb tekstu tylko do nlektdrych z nich. W celu identyftkacji wymaganych
@I mozna zastosowaC wta5eiwoSC Tag. W tym pnypadku wartoSciq wtahlwoki Tag mote by5 taki
tahcuch, jak Mywagane. P6fniej w trekde pisania kodu frbd(owego spmdzajzpgo poprawno%
danych wprowadzonych przez uiytkownika m o ~ OCIWOM a sie do wtaSchvoScl Tag.
Ponitej zadeszczono +d funkcjl sprawdzajqcej wszystkle kontrolkl T e x t b x fonnulana User-
Form1 i macajqcej llczbe wymaganych kontrolek TextBox, M6re sq puste:
F u n c t l m EmptyCount( )

-
O l m c t l As Control
EaptyCount 0

--
For Each c t l I n Userfnnnl.tontrols
IfTypeNae(ct1) 'Text&" Then

--
Ifc t l .Tag 3lymagane" Then
If Ct1.Text "" Then
ErrptyCowt EqtyCount + 1
End If
End I f
End I f
Wxe. ctl
EN F W i o n
W b a k e konystanfa z formularzy U s M u n prawdapodobnle pz53dsl d M myfl inne zastosomia
w)alciwoScl Tag.
Procedura wykonuje kokowe sprawdzenie, czy hkst wpmwadmny w kontrolce TextBox
odpowiada m c i wl&iwofci Value konmlki SpinButton. Operacia taka jest koniecma
na'wypadek wprowachnia niepoprawnych danych JeSli na pq&adCu2ykdwnik wprowa-
dzilby w konaolcc TextBox hncuch 3r, wartoSC wlaSciwoSci Value kontrolki SpinButton
nie zostahby zmodyfikowana i w efekcie wynik umieszcwny w aktywnej kom6rce nie
bylby zgodny z onekiwaniarni.
WidciwoSC Value kontrolki SpinButton jest zamieniana na faf~cuchp n e z hnkcjq CStr.
Dzieki ternu uzyskuje sip gwarancjp, ;te w przypadku pohmywania wartofci z fancu-
chem nie zostanie wygenerowany b#qd.JeSli wart066 kontrolki SpinButton nie odpowiada
zawartoici kontrolki TextBox, wstanic wyiwietlony komunikat Mqdu. Nale2y zwrdcit
uwagq, t e uaktywniany jest obiekt TextBox i pny utyciu wMciwoSci SelStart i Sel-
Length zaznaczana jego zawartoik. Dzipki temu utyikownik w bardzo prosty sposdb
mote poprawif wprowadzone dane.

Odwotywanie sie do kontrolek formularza UserForm


Pry korzystaniu z kontmlek formulare UserFm powizpiny z nimi kod M b ~ ~ y k a
VBA zazwyczaj majduje s i w~ oknie Code formularza. Do konmlek fmularza UserForm
rnotna odwolywat siC~tet z poziomu kodu trddtowego zawartego w podstawowym mo-
dule VBA. W tyrn celu koniecme jest zdefiniowanie odwdania do kontrolki p o p z
zawarcie w nim nanvy forrnulana UserForm. Dla przykladu przyjrzyjmy sic ponitszej
procedurn znajdujqcej siq w module VBA, k6ra wyswietla jedynie forrnularz L'ser-
Form o nazwie UserForml:
Sub GetData[ 1
UserFornl .Show
End Sub

mi& Cantmh
Kantrolkl formulana Userform tworzq zblbr. Na przyklad ponltsza lnstrukcja wygwletla l l d g
kontrolek forrnulana UserFonnl:
HsgBox UserFonl .Controls .Count
Me lstnlele zbi6r dla katdego typu kontmlki. Ne ptzykkd nie istnieje &i6r kontrolek CarmandButton.
Jednak za pomocg funkcji -ypeNm rnotna okre511C typ kontrolki. Ponitsza procedura pny utyclu
mtli For Each . . . Next pmtwana zbl6r Contra; s, a nastgpnie wySwietla iiczb? kontrolek Ccm-
mnd@utton fonnularza UserFsrml:
Sub CountButtonsO
Dim c b b u n t As Integer

-
O l m c t l as Control
cbCount 0

- -
For Each c t l In UserFonnl.Controls
If TypeName(ct1) "ComndButton" n w -
cbCount cbCbunt + 1
Next ctl
MsgMx CbCount
End Sub
Rozddal 13. Wprowadzenie do fmlarry UserForrn 39 1

ZatdMy, te formularz UserFoml zawiera kontrolkq TextBox o nazwie TextBoxl i zalety


ci na umieszczeniu w niej domyflnej wartodci. W tym celu procedura mote mstac
zmodyfikowana w nasepujqcy spos6b:
Sub GetData( I
UserForml.Ted8oxl.Value
UserFonnl.Shw
- "Jan Nwak'
End Sub

W pnypadku kolejnej metody ustawienia dornyilnej wartdci wyko~tystujesic zdarzenie


I n i t i a l 1ze p o w i ~ n ze fonnularzem UserForm. Instrukcje kodu badbwego mogq zo-
stad umieszczone wewnqtrz procedury UserForm I n i t i a ? ize majdujqcej sie w module
powiqzanyrn z fonulartem UserForm. Oto jej p G k h d :
P r i v a t e Sub
-
UserForm_Initialize()
TextBoxl .Value "Jan NMrarc"
End Sub

Gdy o d w o h i e do kontrolki znajduje sic w module kodu Wdlowego formularza User-


Form,nie jest konieczne umieszczanie w nim nazwy formularza lednakte ze stosowa-
nia pehych odw& wynika kony$6. Polega ona na tym, t e jest motliwe utycie opcji
Auto List Members pozwalajqcej na wybieranie nazw konwolek z listy rozwijanej. Za-
miast stosowania rzcczywistej nazwy forrnularza UserForm preferowane jest u w a n i s
laticucha Me. Dzi~kitemu po mianie nazwy fomularra L'serForm nie k d z i e konieczna
modyfikacja odwdari do niego zawartych w kodzie trbdlowym.

~ostosowywanieokna Toolbox

Po uaktywnieniu w edytorze Yhual Bosic formulam UserForm jest Wwietlane okno


Toolbox zawierajqce kontmlki, ktdre motna umieSciC na fonularzu. W niniejszym
podrozdziale zostanrlom6wione m d y dmosowywania okna Toolbox.

Modyfikacja ikon lub tekstu podpowiedzi


Je6li dla okdlonej kontrolki chcialby3 m i e n i t ikone lub uedC podpowiedd, kliknij jq
prawym ptzyciskiem rnyay i z menu padrepnego wybierz pozycjp Cusromize xxr,
gdzie xne identyfikuje n m q kontrolki. Efektem operacji k d z i e wyiwietlenie nowego
okna dialogowego umotliwiajqccgo zmiane mdci podpowiedzi (pale Tool Tip Tar).
edycjc ikony lub zahdowanie nowego o b m ikony z pliku.

Dadawanie nowych zakladek


Poaqtkowo o h o Todbar zawiera jednq zaktadkq. Aby do okna Too(box dodak nowq
zakladke, nalety prawym pnyciskiem m y s g kliknqt jut istniejqca, i wybraS pozycje
New Page. Popnez wybranie z menu -mego pozycji Rename m o a a tez m i e n i t
tekst wyiwietlany na zaktadce.
392 CzedC W 6 Zastosowanie formularzv UserForm

Dostosowywanie lob lqczenie kontrolek


Bardzo pnydatna jest motliwoff dostosowywania kontrolki, a naswpnie zapisywania
jej do p6tniejszego utytku. Dla pnyktadu rnotna stworzyf kontrolkq CmndButton,
kt613 bqdzie spehiala Funkcje przycisku OK. Motna ustawit wartoSci dla takich wta-
fciwofci, jak Width, Height. Caption. Default i Nam, a nasrqpnie tak modyfikowanq
t okna Toolbox. W efekcie zostanie utworzona
kontrolke CornnandButton p r r e c i ~ qdo
nowa kontrolka. Aby zmieniC name nowej kontrolki lub jej ikon?, n a l e q kliknqf j q
prawym przyciskiernmyszy.

Motna tet w oknie Toolbox stworzyt nowy element zbtony na przykhd z dwdch kon-
trolek CornnandButton reprezentujqcych przyciski OK i Anuluj formulam Userform. Po
dostosowaniu obu kontrolek do wtasnych wyrnaga6 naleiy je pneciignqf do okna To-
olbox. P n y u2yciu tej nowej kontrolki okna Toolbox za jednym razern motna dodat
dwa odpowiednio zmodyfikowane przyciski.

To samo dotyczy kontrolek pehiqcych ibnkcje kontener6w. Przyktadowo motna zdefi-


niowad kontrolkq Frame i umieicif w niej czmy wyr6wnane ijednakowo ad siebie oddalone
konmlki OptionButton. W celu stwornnia wlasnej wersji kontrolki Frame rnotna nasepnie
do okna Toolbox przecimqf obiekt Frame.

IstnieJemotllwoSt umleszczenia dostosowanych kontfolek na oddzielne) zakkdce


akna Toolbox. Dziqki ternu moma wyeksportDwd cat* zaktadke i udostp(nl6 ]a innym
uiytkownlkorn Excela. Aby wyeksportowaf zakladke okna Toolbox, wwym przyciskiern
rnyszy naleiy jq kliknqf i z menu podvznego wybraf pozycje Export Page.

a Na dotqczonym dysku CD-ROM majduJesie pllk newmbPls.pag zawierajqcy kilka


dasfaowanych kor~trolek.Plik ten mole zostat zalmportowany do akna Tdbox jsko
n o w zaktadka. W tyrn celu prawym pqciskiern myszy naleiy kliknqf zaKadke i z menu
wybr& pozycje Import Page, a nastepnie dokallzowat plik o rozszerzeniu .pag. Okna
Toolbox b m i e pnyporninato pakazane na rysunku 13.13.

Rysunek 13.13.
Okno Tocfbox
zawierajqce now?
za kladh
z kontrotkarnl

Doduwanie nowych kontrolek ActiveX


Formularze UserForm mogq zawierak dodatkowe konmlki ActiveX stworzone p m z
Microsoft lub innych pmducent6w. Aby dodai do okna Toolbox dodatkowe kontrolki
ActiveX. nalety kliWc5 okno prawym przyciskiem m y s q i z menu wybraf pozycjp
Addifional Controls. Spowoduje to Wwietlenie okna dialogowego pokazanego na ry-
sunku 13.14.
1 Rozdziat 13. Wprowadzenie do fonnularry UserForm 393

Rysunek 13.14.
Okno dialogowe
Addltlonal Controls
omoilhvia dodanie
innych kontmlek
ActiveX

Okno dialogowe Addirioncrl Conbok zawiera wszystkie kontrolki ActiveX zainstalowane


w systemie. Nalety nmaczyt konmlki, ktdre zostanq dodane, a nastepnie kliknqf OK
w celu ddqczenia ikony dla katdej z nich.

Nie wszystkie kontrolkl Acthex zalnstalowane w systemle bqdq moglymsM umieuczone


r formulam Urwfam Excela. Tak naprwdg wiCrzo56 z nlch prawdopcdobnle
nle zadziala. Poza tym,aby utyE kontrolkl w aplikacjl, nlektdre z nlch wyrnagajq zakupu
Ilcencji. JeSll u2ytkownik aplikacjl nle dysponuje Ilcencjq dla okreSlonej kontrolki.
w prbbie jej utycia zostanie wygenerowany btqd.

Tworzenie szablon6w formularzy UserForm


T w o q c kolejne formularze UserFwm, cfqsto stasujesz takie same kontrolki. Na przyklad
ka2dy fonnularz UserForrn mote zawieraf dwic kontrolki Co~mndButtonspehiajqce
funkcjq pmycisk6w OK i Anuluj. W poplzednim punkcie wyjdailem, w jaki sposbb
stworzyf nowq kontrolkp h c ~ obaq dostosowane pnyciski. Altematywna metoda p
lega na StWOneniu szablonu formuIana UserForm i wyekspottowaniu go, dziqki czemu
mo2liwe bqdzie zaimportowanie go w innych projektach. Kod ir6dlowy pmcedur obshgi
zdaneh powi-ych z kontrolkami jest umieszczany w szablonie.

Emulowanle oklen dialogowych Excsla


Wyglqd i zachowanle okien dlalogoych systtrnu Windows r6tnl siq w zaletnoici od programu.
Projektujqc aplikacje Excela, wswzie, gdde jest to motliwe, nalety ImitowaC okna dialogowe
arkusza kalkulacyjnego.
Dobra metoda nauczenia si? twommia efektywnych oklen dlalogowych Mega na skopiowanlu
okna dlalogowego Excela z uwzglgdnlenlem jego najdrobniejsrych srczegMw. Na p?lk!ad naleiy
zadba-5 o to. aby zdefiniowab wszystkie skr6ty klawiaturowe I zastosowaf ldcntycmq kolejnoSf
tabulacji. Konlecme jest r6wnlei prretestowanie powlelonego okna I sprawdzde, ]ak sig zachowuje
w r62nych sytuacjach. Gwarantuje, i e przeanalizowanie okien dialogowych Excela m z y n i sle
do zwi~kszenlatwoich umiejmoSci tworzenia oklen.
Nle jest jednak mtl'i porvietenle rnzystkich oklen dielogowych Excela. Gdy na m k a d w okde
dialogowym Znajdowanie i zamienianie Excela 2002 zostanle kllknlety pzycfsk ZnHcL? ws2y~tk0,
ujtkownik bgdzie rndgt mlenlaf wielkodt okna. Nle motna stwonyC formulana VserFonn ofew
jqcego takq motiiw&f.
Na p q t k u nalcty stworzyC formulam UserForm zawierajqcy wszystkie kontrolki
i modyfikacje, kt6re hdqwymagane w innych projektach. Po sprawdzeniu, czy fonnulan
UserForm jest zamaczony, z menu File naleq wybraC pozycje w o r t File lub wcisnqt
kombinacjp klawiszy Ctrl+E. Pojawi sip pmSba o podanie namy pliku. W cclu zalado-
wania zapisanego formulam UserForm w nowym projekcie z menu File nalety wybrad
pozycje Import File.

tista kontrolna
zwiqzana z tworzeniem formularzy UserForm
Zanim formularz UserForm zostanie udosqpniony kohcowym utytkownikom, naleq
upemid siq, c y wszystko poprawnie dziala. Ponitsza lista kontrolna powinna porn&
w identyfikacji potencjalnych problem6w.
Czy podobne kontrolki qjednakowej wielkofci?
Czy odlegioh! pomipdzy kontrolkami jest idmtyczna?
Czy tawart& okna dialogowego nie jest zbyt przythczaj4ca? JeSli tak, przy
ugciu kontrolki Hulti Page motna pogrupowaC kontrolki.
Czy katda kontrolkamok mstaC uaktywniona pny utyciu skr6tu klawiaturowego? .
Czy nie d o d o do powielenia skr6t6w klawiaturowych?
m Czy papramie zdefiniowano kolejndt tabulacji?
C y po wci$niqciu przcz u$ykownika klawisza Erc lub klikniviu przycisku Zamhg
formularza UserForm kod W l o w y jpzyka VBA wykonuje wla3ciwq operacjq?
Czy w etykictach nie wystwujq liter6wki7
Czy o h o dialogowe posiada odpowiedni tytut (Caption)?
Czy o h o dialogowe mstanie poprawnie Wwietlone w przypadku katdej
rozdzielczo3ci eluanu? Czasami etykiety, k6re q poprawnie wyswittlane prty
wytszej rozdzielczoSci, po wlqczeniu standardowego trybu VGA zostajq obciete.
Czy kontrolki sq logicmie p o p p o w a n e (wedlug hnkcji)?
Czy kontrolki Scroll Bar i Spl nButton umotliwiajq ustawienie tylko popmwnych
wartogci?
Czy popmmie zdefiniowano kontrolki Li stsox (wartoSci w&iwoSci Mu1 tiSel ect:
- -
0 - frrt.lultiSelectS~ngle,1 frrk!ultiSelectnulti i 2 frMultiSelectExtended)?
Rozdziat 14.
Przyktady
formularzy UserForm
W tym rozdziale zaprezentowano wiele prrydablych pnyklad6w dernonstrujqcych kilka
dodatkowych metod zastosowania formulanv UserForm. lsmieie rnoAiwoSC dostosowania
omowion~chrnetod do wlasnej pracy. ~ s & t k i e pnyklady &ajdujq sip na dhcronyrn
dysku CD-ROM.
W rozddale 15. zamieszczono dodatkowe prrykIady bardziej zaawansowanych rnetod
wybrzystanla formulary Userform.
I ,

Tworzenie formularza UserForm


pelniqcego funkcjq menu
Formulan. UserForm mote zostat utyty w roli menu. Utytkownik w oparciu o opcje
tego menu tydzie rn6gl dokonat wyboru. W niniejszym punkcie zostanq zaprezentowaqe
-
dwie metody t w o ~ e n i amenu p q V c i u kontrolek ComndButton lub L i stRox.

Zastosowanie w formulanu UserForm kontrolek CommandButton


Na rysunku 14.1 pokazano formuIan UserForm mwierajqcy kontrolkj CcmnandBbttoi
i p e 4 i q q funkcjp prostego menu. Stwonenie takiego formularza to bardzo tatwe zadmie.
a p o w i m z nim kcd h4dbwy jest do% pmty. KaMa konhoka CmndButton posiada
wbsna procedurp obshgi zdanenia. Na p q k h d ponitsza procedura jest wykonywna
po klikniqciu kontrolki Comnandfluttonl:
Private Sub CarmandButtml-Click0
Call Hakrol
Unload Me
End Sub

Procedura wywohje jjedjnie makro Makrol i zamyka formulan. LL~erForm.Z imyrni


przyciskami s$ powiqane podobne procedury obshgugi zdanm.
1
396 CzgSC IV 4 Zastosowanie fomlarzy UserForm

Rysunek 14.1.
Okno dialogowe
z kontrolkami
CommandButton
spehiajqce funkcjq
menu

Zastosowanie w forrnularzu UserForm kontrolki ListBox


Na rysunku 14.2 pokazano kolejny pnyklad, w ktdrym w mli menu zastosowano kon-
trolkp L i stBox. Przed wyfwietlmiem formularza UserForm wywdywana jest procedura
obshgi zdarzenia I n - t l a ize. Procedura ta, kt6rej kod Wdlowy zamieszczono ponitej.
u g w a metody AddItm dodajqcej do kontrolki ListBox ueSc pozycji.

Rysunek 14.2.
Okno dlalogowe
u2jwajqce w roli
menu kontrolki
ListBox

P r i v a t e Sub UserFom- I n i t i a l i z e ( 1
With ListBoxl
.MdItem "Hakrol'
.PddItem 'Makr~a'
.AddItm 'Hakro3"
.AddItm 'Hakrod"
.AddItm 'HakroS"
.Addltem 'Yakm6"
End U l t h
End Sub

Z pnyciskiern Wykonajjest tet p o w i p n a procedura obshgi ndarzenia C1 ick:


P-ivate Sub Executeeutton-Cl ick 0
Select Case ListBoxl.LlstI&x
.Case -1
HsgBox *Aybierz makm z listy .'
Exit Sub
Case 0: Cal' Macro1
Case 1: Call Macro2
Case 2: Call Macro3
Case 3: Call Macrd
Case 4 : Call Macro5
Case 5: Call vacro6
End Select
Unload He
End Sub

Aby zidentyfikowad zamaczonq pozycje, prwedura korzysta z wIa4ciwo5ci L i s t Index


kontrolki L i s t b x . JeSli nie mstanie z a z n a w tadna pozycja, wartoSciq wh4ciwdci
L i s t Index h d z i e -1. Nast~pniejest wykonywane odpowiednie makro.
Rozdzid 14. + ~tzykladyfomwlarry UserForm 397

OcrywiSde Excel urnotliwia tworzenie menu I paskdw naredzi z prawdziwego


@ fl Mamanla. Wlqcej informacjl ma ten ternat zarniermrono w mzdzi&.;h 22. i 29.
mlw
Zaznaczanie zakres6w
przy uiyciu forrnularza UscrForm
Kilka wbudowanych okien dialogowych Excela urnotliwia uty&ownikowi zdetiniowanie
takrcsu. Na pnyklad okno dialogowe &ukanie celu prosi u2ytkownika o zamaczenie
dwbch zakesdw. Utytkownik wprowadza zakres bezpoSrednio w polu lub zaznacza go
w arkuszu, uZywajqc myszy.

Dzi* konuoloe RefEdit rdwnief formulane UserFonn o h i d taka motliwoJC. Kontrolka


~ e f ~ dnie i t wyglqda dokladnie tak, jak kontrolka umotl&iajq& okreSlenie zakresu,
stosowana w oknach dialogowych - - Excela. ale dziata w podobm, swsdb. JeJli utytkownik
k l i i i e maly prrycisk z prawej strony konklki, okno dikogowe-na chwila miknie i pojawi
sic niewielkie okno umotliwiai&ce okre9lenie zakresu. Podobnie dzieie - sic- w pnypadku
. ..
wbudowanych okien dialogoGch Ercela.
Nkstety kontmlka RefEdit Excela nle umotllwla stosowania skr6t6w klawiaturowych
tsznaczajqqch zakres. Na pzvktad HciSnime kombinacjl Wawlsry ~hii?+fnie smoduje
zaznaczenia kornbrek w d6t do kofica kolurnny.
Na rysunku 14.3 pokazano formularr UserForm zawierajqcy kontrolkc RefEd i t . Okno
dialogowe umotliwia wykonanie prostych operacji maternatycznych na wszystkich ko-
mdrkach xmmmnego zakresu, w ktdrych nie umieszczono formul. Wykonywanej operacji
odpowiada wktywniona kontrolka Opcionbtton.

Oto kilka zagadnied, o ktdrych nalcty pami@ pny rtosowaniu kontrolki Ref Edi t:
Kontrolka RefEdit m c a M c u c h tektowy nprezentujqcy adres zakresu. Pny
uZyciu p o n h z e j instmkcji hticuch m o k zosmt ramieniony na obiekt Range:
Set UserRange - Range(RefM1t l . T u t )
W celu wySwiedenia aktualnie zgmanonego zalaesu mleca sip dokonanie
inicjalkcji kontrolki RefEdit. Moma to & b i ~ poprzez w n i e s k i e
w procedurze UserForm-In1ti a1 t ze nastwujqcej instmkcji:

Nie naiefy zakMaC, tt konntroka Ref Edi t zavme nvr6ei m w n y a d m


zakresu. Zamaczenic my- z a h s u nie jest jedyq metodqumieszczania adresu
398 CzefC IV Zastosowanie fomulany UserForm

w kontrolce. Utytkownik mote wprowadzib dowolny tebt, jak rdwniee


modyfikowa6 lub usunqt! laf~cuchzawarty w kontrolce. W zwiqku ztyrn konieme
jest sprawdzenie, czy adrcs zakresu jest pprawny. Ponitej zamieszaono
kod 2r6dkwy sprawdzajqcy poprawno46 adresu. JeSli zostanie stwierdzona
nieprawid4owobt adresu, u2ytkownik zobaczy kornunikat i w celu urnotliwienia
mu ponownego podania adresu aktywna stanie sip kontrolka RefEdit.

I f Err- 0 Then
-
On Error Resume Next
Set UserRange RangeCRefEdt t l . T e x t )

MsgBox "Uybrano nleprawidllowy zakres. "


RefEdItl.SetFocus
Exit Sub
End I f
On Error GoTo 0
W trakcie zamaczania zakresu p n y utyciu konholki RefEdi t u2ytkownik mote
tet klikat! karty arkuszy. W zwipku z tyrn nie m o a a przyjqt!, t e zamaczony
zakres znajdzie siq w aktywnyrn arkuszu. JeSli jednak zostanie wybrany inny
arkusq p m d adresern zakresu znajdzie siq nazwa arkusza. Oto pnyklad:

Aby pobrat ad= jednej komdrki zakresu zaznaczonego p n e z utytkownika,


nale2y wybrat! gbrnq lewq korndrkc zakresu, ut)waj@cponitszej instrukcji:
Set OneCell - Range(RefEdit .Text).Range( " A l * )

a4 W rozdzlale 12. oplsalem, Jak przy utyciu funkcjl inputBox jezyka WA umotliwiC
u,kownikowi zaznaczenie zakresu.

Tworzenie okna powitalnego


Niektdny projektanci lubiq w trakcie otwierania aplikacji wySwietlaC kilka wstppnych
infonnacji. Okno z takirni infomacjami powszechnie jest nazywane o h e m powirulnym.
Z pewnobciq m a u okno powitalne Excela pojawiajqce sic na kilka sckund podczas urn-
chamiania prograrnu.

Okno powitalne projektowanej aplikacji Excela rnowa stwonyC przy utyciu formulam
Usefirm. W ponitszym przyktadzie zaprezentowano fonnularz UserForm. ktory jest
wySwietlany autornatycznie i zarnykany po pipciu sekundach. Aby shvonyf takie okno
powitalne, wykonaj nastqpujqce kroki:

2. Uaktywnij okno edytoraKsucrI Basic i w projekcie umieSE nowy formularz


UxerForm. W kodzie tr6dlowym pryjpto, te fonnularz nosi nanvq UserFonl.
3. UmitSC na fonnularzu U s e r F o n l *dane kontrolki. F'nykladowo m o h a
zastosowat! kontrolke 1mge przcchowujqcq logo firmy (rysunek 14.4).
Rozdzid 14. + Pnyklady formubrzy UserForm 399

Ryrunek 14.4.
Okno powitatne
jest w e z chwie E F S ~ ~w "U, P , ; -
wySwletlane
w tfakcie B ! . . c o i E - F 1 G i-H--_I J Y

4. P o n i t s q p r o c e d u ~umieX w module kodu h6d+owegopowiqzanego z obiektem


ihiskrorkbook:
Private Sub korkbooic-Open( )
UserForm?.St;w
End Sub
5. P o n b q p m c e d q wstaw w module kodu b6dlowego formulam Usercorrr;
(zastosowano pi~ciosekundoweop6Znienie):
3rlvate Sub UserFom-Activate0
Appl~cation.OnTime U r n + TineVal ~ e"00.PO:
( :
j"."Ki7'TheFormm
!
End Sub
6. Ponitszq procedurp wstaw w podstawowym module VBA:
Pnvatc Sub K i l l T h e F o n O
Unload UserFoml
End SvS

PO otwarciu skorosrytujest wykonywana pnxedura Wcrt bcok-Open, ktbra wySwietla


forrnularz Usefirm. W trakcie tej operacji powiqzane z formutanem zdanenie
Pctivate wywoluje procedlnp U~erF~rm~Activate. W ceEu ykonania w okre'ellonym
crasie psocedury K i 11Thdon pmedura Workhok men konysta z metody OnT- w.
W tym pnypadk-u chwila ta nastqpuje po uplywie &ciu sekund od wygenerowania
zdarzenia Activate. Pmcedura K i 11ThaFc;rlusriwa jedynie z pamieci fonnulan
LkerFwm.
7. Opcjonalnie motesz dodat niewielkq konntrolkq Comr?d&lttor, o nazwie
Calcel eutton, ustawid dla jej wkticiwo9ci Cancel wartodt True, a nastepnie
w module kodu ir6dbwego fomularza umidcit ponibq proceduq uchwyhl
zdarzenia:
Private Sub Cance1Butt.m-Click0
K i 1 lTheFom
End Sub
400 Cze36 IV + Zastosowanie formulam, UserForm

Dzigki temu u2ytkownik poprzez wcifni~cieklawisza Esc k d z i e m6gt zarnbqt


okno powitalne jeszcze przed uplywem pnyjptego czasu opbinienia.

8% Okno powitalne nie jest wyWetlane do momentu catkowitego zatadowanla


skoroszytu. lnnyrni sbwy, nie jest mozliwe. aby w trakcle ladowania skoroszytu
u2ytkownik miat p m d oczaml okno powitalne.

JeSli w trakcie uruchamlanla apllkacja rnusi ,wykonad kllka procedur jezyka VBA,
m t n a wy5vletll~nlemodalny fomulan Usefiom, dzieki c z e m kod iddbwy bad&
caty czas przetwarzany. W tym celu nalety u q f ponijszej procedury:
Private Sub Workbook Open0
UserForml.Show v~ttodeless
W tym miejscu znajduja sic lnne instrukcje
a

End Suh

Wy!qczanie przycisku Zamknij formularza UserForm


Klikniecie przycisku Zamknij (ikona X w prawym g6mym naromiku) powoduje za-
- .. - .iednak
mkniecie formulana UserForm. Wvste~uia - sytuacie, kiedy taka rno2liwoSf iest
niewskazana. na przyktad wbwczas, gdy formularz iiserkoim ma by= zamykany $ko
po klikniqciu olueklonej kontrolki CmdndButton.

Co prawda, nie da sip wylqczyc przycisku Zamknij, ale monitomjqc z d m i e OueryClose


powiqzane z forrnulanern UserForm, moha uniemoeliwik utytkownikowi k l i h i v i e ikony
X.Ponitsza procedura znajdujqca sip w module kodu ir6dtowego f o m u l m a L'srrForm
jest nykonywana przed jego mmknipciem, czyli po wystapieniu zdarzenia CueryClose:

IfC : o s W e -
'rivate Sub UserForm-QueryClose(Cance1 As Integer. Closettode As rntegerl
vScanControlttenu Then

-
Hsgbx "Aby zamknqt okno, t l i kni j przycisk OK.'
Cancel True
Enb I f
Erg SLitJ

Procedwa UserForm_OueryCloseutywa dw6ch argument6w. Arpment CloseMcde zawiera


wartoid idmtyfikujqcq pnyczyne wy-ienia z d m i a OueryClose. Jefli wartosciq ar-
gumentu CloseMode jest vbFormControlMenu (wbudowana stala), oplacza to, te ukyt-
kownik kliknql przycisk Zamknij. W takim pnypadku zostanie wySwietlony komunik~t,
a argument Cancel jest ustawiany na True iformulan faktycmie nie jest zamykany .

:ah* W celu przewania wykonywania makra uZytkownik mote k l s n q kornbinacje


~ klawfszy
Cbl+Bfeak W pzypdku pmy&aj pxedury wciSni@le tej kornblnacjl klmvlsry w trakcie
wySwietlanla forrnularza Userfirm spowoduje jego zamknlqcle. Aby ternu zapobiec,
p m d wy%wletlenlemformulana UserForrn naleiy wykonaC nastqpuJacqinstrukcjg:

Wcz&nie] Jednak naleiy up%nlC slg, te aplikecja nie ma b&d6w. W prreclwnym


rarie, jeSI1 w kodrie fr6dbwym wy;tqpi pnypadkowa nleskoficzona Rtla, nie bedzie
mozllwe przefwanie jej wykonywania.
.-
&
Zmiana wielkofci formularza UserForm
Wiele aplikacji korzysta z okien dialogowych, ktbre mieniaja swojq wiclkoit. Pny-
kladowo okno diatogowe Auroformatowanje Excela, wy$wietlane po wybraniu z menu
Formaf./Auroformarowonie,po klikniviu pnycisku Opcje mienia wysokoSC. Ponitszy
pnyklad demonstruje, w jaki sposbb dynarnicmie modytikowat wielkoft formularza
UserForm. Z m h a wielkoici okna dialogowego odbywa siq poprzez modytikacj~war-
toici wldciwoici LJidth lub Height obiektu UserForm.
Na rysunku 14.5 pokazano okno dialogowe, kt6n w przyktadzie jest wy9wietlane jako
pierwszc, natomiast na rysunku 14.6 zaprezentowano wyglqd tego samego okna po
klikni~ciupncz utytkownika przycisku Opcje. W zaletnofci od wielkoici okna zmicnia
siq etykieta pmycisku.

Rysunek 14.5.
Pmste okno
dialogowe
o standardowej
wielkogci

Ryrunek 14.6.
To semo okno
dialogowe
powipkszone w celu
Wmetlenb
dodatkowych opcJ

W trakcie t w o m i a formulam UserForm n e l q ustawit dla n i q p jak najwieksy mzmiar.


tak aby motliwa byta praca z wszystkimi kontrolkami. N m p n i e w celu ustawienia do-
my2lnej wiekdci (mniejsze okno) formulana nalety lrtyC prccuiury UserFom-Ini ti a 17 ze.
W prtykladzie jest wygwietlana lista arkuszy aktywncgo skomstytu, ktbw utytkownik
mote m a c a d , aby je wydrukowm?. Ponitej zawarto procedurq obshgi darzenia wy-
konywanqpo kl~hipciukontrolki CmndButton o nazwieGptions8uttcn:

-
If ~ptions~utton.~apt~un -
Private Sub OptimsButton CltckO
'Opcje >>" Then
&.Height 164
-
CptionsButton.Caption "<< Owe"
Else
W.P,eight - 128
OptlonsBvtton.Capt1on - " m e =-*"
End i f
End Sub

Procedura sprawdza warto9f wlaSciwdci Caption konmiki Carmandsutton i ustawia


odpowiedni~wart& dla wldciwo9ci Height obiektu UswForm.
402 Czgfe IV + Zostosowanie f o m w l o n y UserForrn

Gdy kontrolkl nie sq Wwietlane, poniewat znajdujq sie poza wldocznq czeSclq
forrnularza UserFonn, motna je uaktywnid ptzy u2yclu klawlszy skrbtdw, Mdre zostaiy
z nlml powlqzane. W tym przyktadzie utytkownlk moie wcisnqC kombinacje klawiszy
Alt+L (uaktywnla opcje Orlentacje pozloma) nawet wteby, gdy opcja nie Jest widoczna.
W celu zablokowania dostqpu do opcji, M6re nle sq wy5wletlane. nalety napisat kod
frddtowy wylqczajqcy kontrolkl, gdy sq nlewldoczne.

Powiekszanie i przewijanie arkusza


przy uzyciu formularza UserForm
Pnewijanie arkusza to jedna z podstawowych operacji wykonywanych przez utytkownik6w
aplikacji Excela. Jednak po wygwietleniu okna dialogowego nie jest ona standardowo
motliwa.

Poczwszy od Excela 2000, fonnularze UserFom mogq by? nlemodalne. Oznacza to.
i e pned uaktywnlenlem skomszytu i ykonaniem innych zadarl w Excelu utytkownik
nie rnusi zarnykad okna dialogowego. DomySlnle metoda Show obiektu UserFonn
wySwietla forrnularze Jako modalne. Aby wy3wietllC okno dlalogowe jako nlemodalne,
nalety utyd nastqpuJqcejInstrukcji:
UserFonl . Show vbHodeless

Pnyklad z tego podroldzialu demonstruje, jak utyk kontrolek Scroll Bar w celu umot-
liwienia przewijania i powiekszania zawarto9ci arkusza po wySwietl'eniu okna dialogo-
wego. N a rysunku 14.7 pokazano pnyktadowe okna dialogowe. Po ~ S w i e t l e n i uformula-
rza UserForm uzytkownik mote. modyfikowad warto46 wskahika powi~kszeniaarkusza
(w zakresie od ID do 4 W h przy utyciu kontrolki ScrollBar z gdmej c q k i okna). Dwie
kontrolki ScrollBar urnieszczone w dolnej czeSci okna dialogowego umotliwiajq uiyt-
kownikowi przewijanie arkusza w pionie Lub poziomie.

Ponitszy kod br6dbwy jest nienvykle prosty. K o n w t k i q inicjalizowane przy utyciu


nast~pujqcejprocedury UserFom-In1 tlal ize:

'
-
Private Sub UserFonn_Initialize()
Labe1Zm.Caption ActiveWindow. Zoom & ' X '
Powiekszanie

--
With k r o l IBarZoan
.Min 10
.Max 400
.$ma1 IChange 1--
.Lamange 10
-
.Value Activeuindow. Z m

End Uith

Przewi janie w poziomie

--
kith Scml IBarColmns
.Mill 1
.Max
- 256

--
.Value ActiveWlndow. k r o l l b l u r m
.Largechange 25
.Sml IChange 1
Ella With
Rysunek 14.7.
Hontmlki ScrollBar

' Przewt janle w plonie

--
Y+t h ScrollBarRcws
.Min 1
.Max Activesheet .UsedRan~e.Rows.Count -
- -
+ Activesheet .UsedRange. Row
.Value PctivdJindow. Scroll Rm

-
.Laq&hange 25
.Smal lChange 1
End W i t h
End Sub

Konystajqc z wartoici okreilanych w akrywnym oknie, procedura rnodyfikuje rome


wMciwo4ci kontrolek Scroll Bar.

Po uaktywnieniu kontmlki ScrollBarZoom jest wykonywana procedura ScrollBErZm-


Change, kt6ra dla whiciwofci Value kantrolki Scrol ]Bar ustawia wartosc w4aiciwoici
Zoom obiektu Acti veWi nbow. Dodatkowo w celu wyiwietlenia aktualnego wskafnika po-
wiqksania modyfikuje kontmlke La kl.
Private Sub ScmllBarZoom-Change0

..?om - -
With ActiveHindu#
ScrollBarZm.Va1ve
Label Zwm .Zm& 'X"
End With
End Sub

Pnewijaniern arkusza stemjqdwi3e ponitsze procedury, kt6re dla w+aiciwosciScro' 1 Ron'


lub Scml 1 C a l m s o b i e h ActiveWindow ustawiajq odpowiedniq wartok wlaiciwoici
Value kontrolki Scrol 1Bar:

- ;
Private Sub Scrol18arColums~Change~
ActlveWIndow.Scrol?Colwnn Scml1BarCo1lmns.Value
End 5ub
404 Czf$C IV + Zastosowanie formulany UserForrn

Activellindow.Scrol1Rw
End Sub
-
Private Sub Scrol1SarRc.s-Change()
Scrol IBarRows. Value

Zamiast zdanenia Chanae zastosowanego w popnednich procedurach motna utyC


L9
.;
. ,-
~ zdarzenia Scroll. Mdre jest generowane po przeciagnigciu suwaka kontrolek Scrol ]Bar.
W efekcie operacje powigkszania I pnewiJania cechujq siq clqgtoSciq. Aby zastosowaC
zdarzenie %roll, wystarczy w nazwie procedury w rniejsce stowa 5hange wstawiC Scroll.

Zastosowania korrtrolki ListBox


Kontrolka ListBox jest wyjqtkowo wszechstronna. ale korzystajqc z niej. nalety zachowat
ostromo4t. W tym punkcie zamie8cilem kilka prostych przykladdw demonstmjqcych
czeste zastosowania kontrolki L: stBox.

,;&pi> W wiekszoScl przypadk6w zastosowanla omdwione w tym ~ l n k c i ed o w q tet kontrolki


C3woBox.

Kontrolka LlstBox
Ponitcj wymieniono kilka ngadnieh. o ktdrych nalety pamiqtaf, stosujqc kontrolki Li stbx.
Szerzej zostanqomdwione w nast~pnychpunktach.
r Pozycje kontrolki Li stflox mogq byt pobrane z zakresu komdrek (okreglany ptzez
wlaiciwosd Rowsource) lub dodane p n y utyciu instrukcji kodu h6dfowego
jezyka VBA (stosowana jest metoda Addltem).
Kontrolka ListBox obshguje pojedyncze i wielokrome t e a c z e n i a . Umotliwia
to rvf&ciwobC Mu1 tiSel ect.
Jesli konwolka ListBox zostak tak zdefiniowana, aby nie obshrgiwad
wielokromych zamaczen, p n y q c i u w+aSciwoSciControlSource jej wtdciwoft
Value mote zostat pdqczona z kom6rkq arkusza.
Motliwe jest wyiwietlenie kontrolki L i stBox bez zmacmnych poqcji (wartoicia
wlaJciwodci List Index h d z i e -1). Jednak po wybraniu pozycji utytkownik nie
bqdzie m6gt usunqt zamaczenia, b d z i e m6gl tylko zmienid z a z n a c m q pozycjg.
Wyjqtkowo jest to motliwe, gdy wartoSciq wiaSciwoici MultiSelect jest True.
Konwlka ListBox mote zawierak wiele kolumn (kontrolowane przez wlaSciwoSd
ColumCount), a nawet nagtowki kolumn (kontrolowane p m z wta5ciwo4t
CalumHeads).
WysokoS4 kontrolki Ll stBox wydwietlanej w tworzonym formulam UserForm
nie mwsze jest taka sama, jakjej wysokott po otwarciu okna forrnularza
uruchomionej aplikacji.
R Pozycje kontrolki ListBox mogqmied postat kontrolek CheckBox (w
. p-dku
. ..
zamaczenia wielokrotnego) lubbption~utton[w pnypadku zaznaczenia
pojedynczego). 0 wyglqdzie pozycji decyduje wlaSciwoSC Li stSty'e.
\*!
P%W
ImEa
Aby uiyska6 szczegMowe informacje na temat wta§dwo§cl i rnetod kontrolki ListBox.
nalety skorrystaC z systemu pomocy.

Umieszczanie pozycjj w kantrolce ListBox


Zanim wySwietlisz formularr UserForm utywajqcy kontrolki Li stBox, prawdopodobnie
spr6bujesz wypehiC jqpozycjami. Pozycje mogq zostaf umieszczone w konrrolce L i s t -
Brjx w trakcie projektowania (za pomocq element6w zapisanych w kom6rkach zakresu
arkusza) lub po uruchomieniu aplikacji (za pomocq instrukcji jpzyka VBA).

W dwbch przyktadach zamieszczonych w tym punkcie p n y j ~ t o


nastppujqce zalotenia:
formularz UserForm nosi nanvq UserForrnl,
formularz UserForm zawiem kontrolkq L i siBox o nanvie L i stBaxl,
skoroszyt zawiera arkusz Arkuszl i shes A 1 :A12 pnechowujqcy pozycje, kt6re
zostanq wyfwietlone w kontrolce L i s t k x .

Umleszczanie pozycji w konkolce ListBox w takcie projektowania


Aby w trakcie projektowaniaw konbolce ListBox urniefcik pozycje, m u s q one byC p m -
chowywane w mkmie arkusza. W celu oknSlmia zala-esuzawierajgcgo pozycje konmlki
ListBox nale2y u 2 y C wlaSciwo2ci RcwSource. Na rysunku 14.8 pokazano okno Propenies
powiqzane z k o n t m h L l s t b x . Warto2ciq wMciwoSci RowSource jest odwdanie Ar-
tuszl!Al:A12. Po wy4wietlmiu fonnularza UserForm k o m k a L l stBox lydzie zawierala
12 pozycji pnechowywanych w tyrn zakresic. W trakcie projektowania pozycje pojawiq
s i t w kontrolce L i stsox bezpoirednio po podaniu z a b u dla wMciwofci 4RowSource.

ern Ustawldw wart046 wta*cfwcfd Ru&um, nale2y w@ednld na- arkusza.


W przeciwnyrn M e kontmlka r l r t b x idyl. zdeflnlaanego nkresu msjdu]qcego siv
w aMywnyrn arkuszu. W nfektdrych ptzypadkach mote by5 koniecme zastosowanie
w p h i kwallflkowanego odwotania do zakresu uwzglgdniajqcego name : s k o r o s w .
Oto prryktad:

Lepszym rozviiqzanlem Jest nadanle namy zakresowf Iutycie jej w kodzie Wdtowym.
Dzieki ternu na pewno zostenie utyty w h h t w y zakres nawet wtedy, gdy powyiej niego
wkownik usunie b d d doda wiersze.

Urnleszczanie pozycjl w konkolce UstBox


po uruchomlenlu aplikacji
Aby po uruchomieniu aplikacji do kontrolki L i stBox d d 3 pozycje, r n m a w y b d jedno
z dw6ch nastepuj$cych r o z w i ~ d :
przy u2yciu instrukcji kodu tr6dbwego okreSliC adns takresu dla wlaSciwoSci
RWurce,
napisat kod M k w y , Mry za pomocq metody Addl tem umi&i pozycje
w konmlce Lf SiBox.
406 Cze9C IV + Zastosowanie famwlany UserForm

Rysunek 14.8.
Ustawlanie wertotolcl
WaSclwoSci
RowSoune
w lrakcie
projektowania

WartoSC wlaSciwoSci RowSource zarniast pny utyciu okna Properties m o t e byC usta-
wiona za poSrednictwem inmukcji kodu fr6dlowego. Przykladowo ponitsza procedura
ustawia wartoSC wlaSciwoSci RowSource kontrolki ListBox ieszcze ~ r z e d
wyBwietleniem
f o r m u l a m UserForm. W tym pnypadku pozy-cje kontroiki s q p&choGwane w ko-
mbrkach zakresu Kategorie majdujqcego siq w arkuszu Budtet:
UserForml. ListBoxl .RawSource
.
UserFonnl Show
- 'Budtet!Kategorie"

JeSli pozycje kontrolki L i s t b x nie sq przechowpane w zakresie arkusza, w celu ich


dodania przed wy4wietleniern okna dialogowego m o a a napisat odpowiedniq procedup
jpzyka VBA. Przy q c i u metody AddItem procedura wstawia w konaolce List8ox na-
zwy rniesiqcy.
Sub ShowllserFormZ()
' Wypelnienie kontrolk: L i s t b x

-
W i t k UserFom2.LtstBoxl
.RowSource " "
.Addl tan "Styczeh"
.AddIten "Luty"
.AddItm "Marzec"
.Add[tan "Kwiecieh"
.Add[tem "Maj"
.Add[tem "Czerwiec"
.AddItm "Lipiec"
.AddItem "Sierpieri"
.AddItm "Wrzesieri"
.AddItem "Paidziernik'
. A d d I t m "Listopad'
.AddItwn Trudzleri'
End With
U s e r F a d .Shm
End Sub
I W powytszym kodzie trddwvym dla wta5ciwoSc.i RwSaurce ustawiono pusty taricuch.
Ma to na cslu uniknlqcie mo*liwold wyntqpienla Mpdu, JeSliw oknie Pmpeflier
dla MaSciwoSc.i Rowsource mstanie ustawiona wartost. Przy prdbie dodania pozycji
do kontrolki ListBox, w przypadku ktdrej wartolciq wta5ciwoSc.i RowSource nie jest pusty
taficuch, zostanie wygenerowany btqd informujqcy o braku dostqpu.

W celu pobrania pozycji kontrolki L i stflox z zakresu rnotna tet poslutyd sie metodq Ac-
dItem. Oto przyklad kodu irbdtowego wypelniajqcego kontrolkc L ? s t B z r zawartoscia
kombrek zakresu A1 .A12 arkusza Arksszl:
-
For Row 1 To 12
UserFonl.Li stBOxl.MdIten 5heets:"Arkuszl") Cell s(P.0~.1;
Next Row

JeSli dane sq przechowywane w jednowyrniarowej tablicy. w celu umieszczenia jej zs-


wartolci w kontrolce LisrBox nalety utyc jednej instrukcji. Dla przyktadu zalozrny. ze
ismieje tablica dData zawierajqca 50 element6w. Ponitsza instrukcja utworzy w kontrolce
ListBox liste ztotonqz 50 pozycji:

Umleszczanie w kontrolce LIstBox tylko unikatowych pozycji


W niektirrych przypadkach mote byC konieczne wypehienie kontrolki L i srBcx ~miku-
tavymi (niepomrzajqcymi siq) pozycjami z lisry. Zaldtmy, t e w arkuszu sq przecho-
wywane dane o klientach. W jednej z kolumn mogq by6 przechowywane identyfikatory
amerykanskich stanow ((rysunek 14.9). Zadaniem jest wypehienie kontrolki L:sz3c,.<
identyfikatorami nazw stanbw powiwnych z klientami, ale bez ich powtarzania.

Jedna z metod polega na zastosowaniu obiektu zbioru (Co1lec:ion). Aby w zbiorze


umieSciC pozycje, nalety utyf instrukcji o nastepujqcej sktadni:
obiekt.Add pozycjd. klucr. before, after

JeSli zostanie uiyty argument klucz, jego wartoit rnusi byc unikatowym lancuchem
tekstowym pchiqcym funkcje nieraletnego klucza stosowanego przy uzyskiwaniu do-
stepu do elementu zbioru. Istome jest tutaj slow0 unikarowym. P n y probie umieszczenia
~ i pozycja nie zostanie doda-
w zbiorze klucza, ktbr), nie jest unikatowy, pojawi s i Mqd
na. Zdarzenie to mote zostaC wykonystane do shvorzenia zbioru zawierajacego tylko
unikatowe pozycje.

Zadernonstrowano to w ponibzej procedurze. Na poczqtku procedura deklaruje nowy


zbi6r o nazwie NoOupes. Zatohno, &. zakres o nanvie Cata zawiera listc pozycji. z ktdrych
niektbre mogq sip powtarzat.

W ramach ~ t l kod i k4dlowy przetwarza kat* korn6rkp zakresu i pr6buje do zbioru


NoDupes dadah prrechowywane w kombrkach wartolci. WartoX kombrki jest tet utywana
przez argument ~ J K Zt'po zarnianie na laricuch). Instrukcja On Error Resure Next powo-
duje, te interpreter jpzyka VBA ignoruje Mqd wystepujqcy, gdy klucz nie jest unikatowy.
Po wystqieniu W u , zgodnie z oczekiwaniern, pozycja nie zostanie umieszuona w zbio-
m.Nastepnie procedura przenosi pozycje ze zbioru NoDupes do kontrolki ListBzx. Formu-
larz L'serForm mwiera let kontrolke Label vry3wietla;qcq liczbc unikatowych pozycji.
408 Cz@C IV + Zastosowanie fomwlarzy UserForm .
ij
i

Rysunek 14.9. I
ObleM zbioru sfuty
do wypelnienia
kontrolki ListBox
unikatowymi
poqcjami z kolumny B

Sub RmveOupllcatesl()
D i m A1 lCells As Range. Cell As Range
O i m NoOupes As New Collection

On Error Resune Next


For Each Cell In Range("R2:RZOl')
NoOupes.Add Cell .Value. CStr(Cell.Value)
Next Cell
3- Error Golo 0

-
)cdarne do kontrolkl LIstBox unikatowych pozycjl
Fgr Each item In NoOupes
UserForm1.List80xl.AddItem Item
Next ::m

Myiwietlenie formularza UserForm


UserForml .Show
End Sub

Skoroszyt zawierajqcy powszq procedup wraz z nlmo bardzlej zaawansowanq


wersjq pryldsdu rnajduje rig na do+qcmnymdysku CDROM.

ldeniyfikowanie zaznaczonej pozycji


Po wykonaniu procedur z popnednich punkt6w wygwietlany jest f m u l a r z UserForm
zawicrajqcy kontroikq L i stBox wypelnionq r6hymi pozycjami. W grocedurach porni-
niqto jednak kluwowq kwestid c q l i stwierclzenie, czy uZytkownik zaznaczyl pozycje
lub pozycje.
W poniiszym orn6wienlu zatotono, te wartoSciq w)a5ciwobl Hulti Select kontrolki
-
ListBox jest 0 fWultlSelectSingle. co odpowiada pojedynczernu zaznaczenlu.

W celu ident)fikacji zamacmnej pozycji naJW utyC wWciwoki Value kontroki ListBox.
Przykladowo ponitsza insttukcja wyiwietla tawartoft zaznaczonej p o q c j i kontrolki
L i stBox:
VsgSox ListBoxl .Value

JeSli nie zostala zmaczona tadna pozycja, instrukcja wygenemje Mqd.

Aby zarniast zawartoici o b i l i e jej lokalizacjp na likie, m o h a utyC wtdciwo4ci


ListIndex kontrolki ListBox. Poni2sza i n m k c j a wydwictla okno komunikatu zawiera-
jqct numer zaznaczonej pozycji kontrolki L i stB3x:
MsgBox 'Zaznaczono pozycje numr " & LlstBoxl.L\stInden

JeSli nie zaznaczono tadnej pozycji, warto9ciq wlaSciwoSci List Index bedzie - 1.

Numerowanie pozycJikontrolki L i s t b x rozpoczyna sig od 0,a nle od 1.W miqzku


z tym numerem pierwszej pozycjl przyplsywanej wlaSciwoSci L l stlndex kontrolki
L i ~ t B o jest
x 0.W przypadku ostatnlej poryc]l ns IiScie wartog #eSciwolcl L~st!nden
jest r6wna wartolci wtaSciwo5ci LlstCount pomniejszonej o jeden.

ldentyfikowanie wielu zaznaczonych pozycji kontrolki ListBox


Standardowo wartoSciq wla4ciwofci HultiSel ect kmtrolki LlstBox jest 0 - fntblti Se-
1 ectSingle, co omacza. te utytkownik mote zamaczyt w konmlce Lis;Box tylko jcdnq
pozycjc.
JeSli kontrolka Li stBox umotliwia wielokrotne zmaczenie (omacza to, te wartoiciq
-
wtaJciwoSci jest 1 frrE(u1t i Sel ectHulti lub 2 - fmltlSelectExeended), pr6ba utycia
wtakiwodci ListIndex lub Value spowoduje wygenerowanie m. Zamiast tych wWci-
woSci nalety &yC wWciwoSci Selected m c a j q c e j tablig wartdci logicznych odpo-
wiadajqcych zaznaczonym pozycjom w lidcie, przy czym pierwsza pozycja listy posiada
indeks o wartoici 0. Pnykkdowo ponitsza instrukcja wyiwietli wartoit True, jefli na
liicie kontrolki ListBax zostanie zaznaczona pierwsza pozycja:
HsgBox ListBoxl .Selected(O)

Na dotqczonyrn dysku CDROM malduje sic pnykbdowy skoroszyt demonstrujqcy,


@@ w jaki s w a b identyflk- zamacnxle pozyle kontrolld ListBox. Zawiera on kontrolki
ListBox obsh@u]qcepojedyncze i wlelokmtne zaznaczenla.

Ponizsza pmzdwa, zamieszczorra w przyk4dowym &omqcie m j ~ d u j t g psiq mi dysku


CD-ROM,przy utyciu pqtli przetwam W q pozycje k m t m k i L i stBox. Po zamaczeniu
pozycji procedura przypisuje jej z a W o M nniennej Msg. Na kohcu etykiety wszystkich
zmaczonych pozycji sqwwietlane w oknie komunikatu.

--
Private Sub OKBvtton-Click0
nsg - *
For i 0 To ListBoxl.ListCount 1 -
If ListSoxl.SelecW(i) Then -
Next i
-
Hsg Msg & LIstBoxl.List(i ) & vbCrLf

Msghx 'Wybralef: ' 8 vbCrLf I Hsg


Unload Me
End Sub

Na rysunku 14.10 pokazano wynik dzialania procedury, gdy zmaczonych zostalo wiele
pozycji kontrolki ListBox.

Rysunek 14.10.
Okno komunlkatu
wySwietla llste
pazycji
zaznaczonych
w kontrolce
ListBox

Wiele list w jednej kontrolce LlstBox


Kolejny przyktad pokazuje, jak utworzyd kontrolk~L i s t k x , ktbrej zawartoit zmienia
sir; w zaletnoki od kontrolki wybranej przez uiytkownika spdrbd gmpy obiektow
Opti OnButton. W przykladowym formularzu UserFonn (rysunek 14.11) pozycje kon-
trolki LlstBax sq pobierane z zakresu arkusza. Procedury obstugi zdarzenia C l i c k po-
wiqzanego z kontrolkami OptionButton ustawiajqjedynie r 6 h e zakresy dla wbSciwo9ci
Rcdource kontrolki L i stBox. Oto jedna z tych procedur:

-
Private Sub obMonths-Cl lck( j
ListBoxl.RowSource "Arkusrl!Manths'
End Sub

Klikniwie konbolki OptionButton o nazwie oMonths ustawia dla wlaSciwdci RowSwrce


kontrolki ListBox zakres arkusza Arkuszl o nanvie Months.

Przenoszenie pozycji kontrolki ListBox


Niekt6re aplikacje wymagajq od utytkownika vrybrania na IiScie kilku pozycji. Czr;sto
ma to na celu stworzcnie nowej listy ztotonej z zaznacmnycb pozycji. Aby zapomat
s i z~ptzyktadern takiej sytuacji, nalety sprawdzif okno dialogowe Do/qczanie paskdw .
Rysunek 14.1 1.
ZawartoSC widocznej
kontrolki LktBox
zale2y od tego,
jaka kontmlka
OptionButton
zostanie uaktyniona

n a ~ q & i ,k t b e jest wyfwietlane po klikniqciu przycisku Dolqc w okn ie dialogowy rn


Dostosowywanie (w celu jego otwarcia nalely z menu wybraC IVidokPaski nc~rzqki.'
DosI~XUJ].

Na rysunku 14.12 pokazano okno dialogowe z dwiema kontrolkami ListBox. Przycisk


Dodaj umieszcra w prawej kontrolce ListSox pozycje zaznaczone w lewej kontrolce
List8ox. Przycisk Usltti usuwa pozycjq zaznaczonq na lilcie znajdujqcej sic po prawej
stronie. Pole wyboru Zezwoluj nu dzrplikary okrefla zachowanie formularza. gdy do listy
zostanie dodany duplikat pozycji. Jesli pole wyboru Ze-?valaj na dzrplikaly nie jest ak-
tywne, pny pr6bie dodania pnez uykownika pozycji do listy, ktora j u t na niej sie
majduje, zostanie wySwietlone okno komunikatu.

Rysunek 14.12.
Tworzenie //SO,
w oparciu o inn* iiste

Kod Zrddlowy zastosowany w omawianym przyktadzie jest dog6 prosty. Oto procedura
wykonywana po klikniqciu przez uMkownika p ~ i s k Dodaj:
u

-
Private Sub A W t t o n - C l i c k ( )
If ListBoxl.ListIndex -1 Pen Exit Sub
If Nct cbDuplic2tes Then
For - -
Sprwrdza. czy pozycja jui istnieje

-
0 To LlstBox2.ListCwnt - 1
If ListBox1.Y~:~~ List3ox2.Lisr:i) Then
Beep
Ex1 t Sub
End If
Next i
End If
ListBox2.AddItem ListBoxl.Value
End Sub

Kod trbdlowy procedury p o w i ~ n ezj prryciskiem UsuA jest jeszcze prostszy:

-
Private Sub [)eleteButton-Cl i c t ! 1
i f List&xZ.Listlndex -1 Then E x i t Sub
ListBoxZ.RemoveItem L i s t B o x Z . ~
stIndex
~
End Sub

Powytsze procedury sprawdzaj% czy pozycja faktycmie mstata zamaczona. Jcfli war-
toiciq wlaSciwoSci L i s t Index kontrolki L i stBox jest - 1, oznacza to, t e nie zamaczono
tadnej pozycji, co rpowoduje zakoficzenie wykonywania procedury.

Przemieszczanie pozycji kontrolki ListBox


W pnyktadzie z tego punktu demonstmjp, jak umotliwit utytkownikowi przemiesz-
czanie w g 6 i ~w d61 pozycji kontrolki Lt stBox. Takq motliwo6C wykonystuje edytor
Visual Basic do kontrolowania kolejnoici tabulacji kontrolek formularza UserForm.

Na rysunku 14.13 pokazano okno dialogowe zawierajr\ce kontrolkc L i s t B o x i dwie kon-


trolki C~~mndButton. Kliknipcie ptzycisku Przesuh w g6re spowoduje pl-zemieszczenie
~ kontrolki ListBcx, natomiast klikniqcie pnycisku Przesuri w d6f -
pozycji w g 6 listy
przernieszczenic w d61 lisry.

Rysunek 14.13.
Pnyciski umotllwiaj~
u,?ytkownikowi
pnemieszczanie
porvcji w gdrq I w ddl
listy kontrolki UstBox

i
Procedury obskgi d a n e h powiqzane z komlkami CmndEutton wyglqdajq n a s t p u j p : !I

Private Sub MaveUpBuctm-Cl l c k ( )

-
I f LiStBaxl.List[ndex <- 0 Then E x i t 5 3
NumIterns ListBoxl.Listtount

'
Oim TenpLtstO
R&lm TempList(0 To %nItm - 11

F3r i -
Wypelnlenle t a b l l c y oozycJami kontrolkt ListBox

-
0 To Num1:ms - 1
TenpLtst(i1 L i s t b x l . L i s t ( t 1
t+ext i
I
I

I
-
Wybrana pozycja
ItemNun List8oxl.Li stIndex
!

-
b ~ a n apoTotenia pozycjl i
T~npLi~t(1tm~W - -
r m p [ t m TWL~S~(I~~NWI)
T m p L l ~ t ( I t a- 11 I
-
impllst(1temNum - 11 TemItem
L?stBoxl.List TenpLis:
nodyfikacja indeXsu 'isty porycji
/

9"
ListBoxl.ListIndex
End Sub
- ItemNum - I

- -
Prlvate Sub Mvd)o*nButton-C1 i c k (
-
If LlstBoxl.List1ndex ListBoxl.ListCovnt 1 Then E x i t Sub
Numltens ListBoxl.ListCount
Dim TempLlstO
ReOim TmpList(0 To NmItems - 1)

-
Wypelnienie t a b l i c y pozycjaml k o n t r o l k l ListBox

-
For i 0 To NumItems - I
TempList(i) ListBoxl.List:i )
Next i

-
' Wybrana pozycja
ItecrNum LtstSoxl.ListIndex
a

-
Zmiana palotenla pazyc:I

- -
TempItem TempLlst(It~nNm)
Tem~List(ItmNum1 TempList(1rmHwn im. 1)

List8axl.List -
Tem~List(1temNum+ 1) TempIt?
TempLlst
'
Llstbxl.List[ndex
End Sub
-
W y f i k a c j a indeksu 1 i s t y pozyc;?
ItenNm 1 +

Pmcedury dziahjq przyzwoicie, ale z jakiegd powodu szybkie klikniwie nie zawsze jest
rejestrowane. Pnykladowo m o a a szybko tnykmtnie kliknqt pnycisk Przesuh w ddl,
ale pozycja zostanie prremieszmna tylko o jedno lub dwa miejsca R o m i ~ n i problemu
e
polega na powiqzmiu z W d q kontrolkq ComndButton nowcgo zdarzenia OblCllck
i napisaniu dla niego procedury. Kod Mdlowy procedur wywdujqcych jedynie proce-
dury obstugi zdarzenia Click wyglqda nastcpujqco:
Private Sub MoveUpButton-OblClick(ByVa1 Cancel As HSFonns. Returnbolean)
C a l l MoveUpButton-Cl l c k
End Sub

Private Sub MoveDmButtm-OblC!ick(ByVal C a ~ e As


l HSFons.ReturnBooleanI
Call MowDovnButton-Cl ick
End Sub

Stosowanie wielokolumnowych kontrolek ListBox


Zwykla kontrolka L i stBox swojc pozycje ptrechowuje w pojedyncaj kolumnie. M o a a
jednak stwo-6 konbolkc ListBox wyjwietlajwq wick kolumn i opcjmlnie ich nagfiwki.
Na rysunku 14.14 pokazano przyklad wielokolumnowej kontrolki L ~ s t B c , xpobierajqcej
dane z zakresu arkusza.

Aby stwonyt5 wielokolumnowq konmlkp ListBox korrystajqcq z danych przechorvy-


wanych w zakmie a r k u a i ~ y k o n anastqpujqce
j kraki:
I. Upewnij sig c y dla wMciwoSci ColmCwnt kontrolki LlstBox ustawiono
poprawnq liczbe kolumn.
2. W arkuszu Excela okreSl wielokolumnowy zakres b&q wartohi$ w!aSciwoSci
RowSource kontrolki L l stBox.
Rysunek 14.14.
Kontrolka ListBox .,, , .. . "-.
wyJwietlaj$ca
trdjkofumnowq llstg
wraz z etykletami
kolumn

P.5 1.k

k 1%
$!',
.,. In{
;I9
m-
?I. 4 . *\Sh.l,/

3. Aby wylwietlit nagldwki kolumn podobne do pokazanych na rysunku 14.14,


dla wiakiwofci Col umnHeads ustaw wartoit True. P n y ustawianiu dla wlaSciwofci
RowSource zakmu arkusza nie uwzglqdniaj nagMwk6w kolurnn. Interpreter
jczyka VBA automatycznie utyje wiersza najdujqcego siq bezpoirednio
nad pierwsrym wierszern zakresu hdqcego wartolciq wi-alciwolci RowSource.
4. Podajac kilka wanoSci wyratanych w punktach (1172 cala) i oddzielonych
od siebie Brednikami, okre91 szerokogf kolumn, b t d q q wartosciq wtntciwoSci
I
ColumnWidths. Przykladowodla h6jkolumnowej kontrolki L i s t B o x wartoSciq
wfaiciwo8ci Cal umnWidths mote byC nastepujpy lahcuch tekstowy:
100:40:30
1
I
5. Jako wartost wlaSciwoSci B c u n d C o l m okrctl odpowiedniq kolumnq. WtaSciwoiC
BoundColumn identyfikuje kolumnp, ktdra jest utywana, gdy instrukcja sprawdza
wartoit wlaSciwoSci Value kontrolki ListBox. i
!

Aby wypelnit danyrni wielokolumnowq kontmlkq L l stBox b


u stosowania zakresu,na-
i
I
l e e najpierw stworzyt dwuwyrniarowq tablicp, a nastqpnie przypisat jq w~aSciwolci
L i s t kontrolki L l s t Box. Ponitrza procedura dernonstmje zastasowanie tablicy o nazwie
Data tlotonej z 12 wierszy i 2 kolumn. W pienvszej kolumnie dwukolumnowej kontrolki
L i s t B o x sq wygwietlane nazwy miesitcy, natorniast w drugiej -
liczby dni miesipcy
(rysunek 14.15). Dla wbtciwoki Col umnCwnt procedura ustawia wartolh 2.
Private Sub UserFonn-Initializef)
' Wypelnienie kontrolki L i s t b x
i
I

For i 1 To 12-
Dim Datatl To 12. 1 To 2 )

-
Datatl. 1) Format(DateSerial(2001. i.1). 'mmm")
Next i
- I
For 1 1 To 12
-
Data(%. 2) OaytOateSertal(2DDl. i
kxt i
- 1. 1) - 11
Rysunek 14.15.
L)wukolumnowa
kontrolka ListBox
wypehiona danymi
pmechowywanymi
w tablicy

ListBoxl.List
End Sub
--
ListBoxl.ColurmCount 2
Data

Wydaje sie. ie nie jest rnozllwe okreslenie nagldwkdw kolurnn, gdy Zr6dtem danych
listy jest tabllca jezyka VBA.

Zastosowanle kontrolki ListBox do wyblerania wierszy arkusza


Pmcedura zarnieszczona w tym podpunkcie jest pnydatnym narzedziem, ktore wyswietla
kontrolke L i stBox zawierajqcq c a b u2ywany zakres aktywnego arkusza (rysunek 14.16).
Uzytkownik mote zamaczyt wiele pozycji kontrolki L i stBox. Klikajqc pprzycisk Wszyrtkie,
zaznaczy wszystkie pozycje; klikajqc pnycisk Zadna, spow,oduje usuniecie wszystkich
zainaczeh. Kliknivie OK spowoduje zaznaczenie w arkuszu wierszy powiqzanych z w-
branyrni pozycjami. Oczywilcie rnoaa zaznaczyC nieprzylegajqce wiersze bezpoirednio
w arkuszu. pnytrzymujqc wciiniw kklawisz Cirl w mkcie klikania etykiet wiersry. Jednak
zaznaczanie wierszy jest latwiejsze p n y utyciu kontrolki Li stBox.

Rysunek 14.16.
Kontrolka ListBox
utatwia zaznaczanie
wierszy arkusza

Zamaczenie wielu poqcji jest motliwe, poniewat wartoiciq wlaiciwolci Mu: t 1 S ~ ' e t t
kontrolki Li stsox jest 1 - fmui tiSelectVu1 ti. Pole wybom obok ka2dej pozycji j e s t
wyswietlane, poniewat wartoiciq wMciwo5ci ~ i s ? ~ i y lkontrolki
e L i stBox jest 1 - fn-
L i stStyl eOption.

Poni2ej zamiescmno procedw obshgi a k r m i a I n i t i a l i z e p o w i y e g o z fonnularzem


UserForm. Pmcedura tworzy obiekt Range o nanvie rng reprezentujqcy utywany zakres
aktywnego arkusra. Dodatkowy kod irbdlowy ustawia wartoici dla wkiciwolci konmlki
ListBox o nazwach ColilmnCount i RowScu~e,a t a b e rnodyfikuje wartost wlaSciwosci
ColumnWidths w taki sposbb, te szerokog kolurnn kontrolki Lis~Boxjest proporcjonalna
do szerokdci kolumn arkusza.
41 6 Cz&& 1V 4 Z a s t o s o w a n i e forrnubrzy UserForm

--
Private Sub Userform-Initial ize(
.
ColCnt ActiveSheet UsedRange.Calumns .Count
Set rng Activesheet .UsebRarge

--
With L i s t b x l
.ColunmCount ColCnt
.RowSource rng .Address
or.
For c
~d
""
-- cw
1 To .ColumnCount
& ~ q . C o l u m n s { c ) . H ~ d t&h ':'

--
Next c
.ColumnWidths cw
.LI s t Index 0
End With
End Sub

Z przyciskami Ws-yssrkir. i irrdna. bedqcyrni odpowiednio konttolkami SeTectAllButton


i Sel ectNcneButton. sq powiqzane proste procedury obslugi zdarzeh. Oto one:

-
Prq,vate Sub SelectA11Button-Cl ick( 1
For r 0 To List&sxl.LlstCoun:
listSoxl.Selected(r) True - - 1

Next r
End Sub

-
Pfivate Sub SelectNone8utton-C1 I c k (
For r 0 To ListBoxl.ListCaunt - 1
listBoxl.Selec:w(rl False -
Next r
End Sub

Ponitej ejicszczono kod Wdlowy procedury OKButton-Cl id. Rocedura morzy obiekt
Range o nazwie !?Mange zlotony z wierszy odpowiadaj~cychm a c z m p pozycjom
kontrolki Li st8ox. Aby stwierddd, czy zamactono wimt, procedura sprawdza wan066
wMciwoici Selected konttblki ListEox. W celu dodania do obiektu RMange dodatkowych
zakredw pmedura konysta z funkcji Umon.
Private Sub OKButton-Cl i c k ( 1

--
G i m RowRange As Range
RMnt 0
:or r 0 To ListBox!.?!s;Ccunt 1 -
--
If LlstBoxl.Selected(r1 Then
RowCnt Rolctn: + l
I f R m c f l t 1 Then
-
S e t RmRange ActiveSheet.Rows(r + 11
E l re

End If
-
S e t RouRange Unfon(RowRange. PctlveSheet.Rows(r + 11)

End If
Next r
I f Not RowRange I s Nothing Then RouRange.Select
Unload He
End Sub
UaMywnianle arkusza za pomocq kontrolki UstBox
P n y k h d zaprezentowany w niniejszym podpunkcie jest w r6wnym stopniu pnydatny
i pouczajqcy. Zastosowano tu wielokolumnowq kontrolk~ListBox wySwietlajqcq listc
arkuszy aktywnego skorosEytu. Kolumny przekazujq takie informacje, jak: n a m a arku-
sza, typ arkusza (nvykly, wykresu lub okna dialogowego Excela w wersjach 5 i 95),
liczba niepustych korn6rek arkusza i w i d o c m o ~ tarkusza. Na rysunku 14.17 pokazano
przykiadowe okno dialogowe.

Rysunek 14.1 7.
Okno dialogowe
umotliwia
uiylkownlkowl
uakfywnienle arkusza

Ponitej zamiesrczano kod W I o w y procedury UserFonn-lnltial Ize twomcej d m -


wymiarowq tablice i zbierajqcej informacjs poprzez przetwaenie przy utyciu ~ t l i
kivdego arkusza m e g o skoroszytu. N e p n i e procedura przenosi zawartoSC tablicy
do kontrolki ListBox.
Public OriginalSheet As Object

Private Sub UserForm-Initialize(

- -
Dim SheetDataO As String
Set Originalsheet ActiveSheet
ShtCnt Mive!dorkorkbaQ.Sheets.Count

-
ReDIm SheetData(1 To ShtCnt. 1 To 41
ShtNm 1

--
For Each Sht I n nctiveWorkbook.Sheets
I f Ylt .Name Activesheet .Name Then
-
-
-
L i s t P ~ s 9tNm 1
SheetData(ShtNum. 11 Sht .Name
Select Case TypeName(Sht1
Case 'Wwksheet'
-- -
SheetDaU(ShtNum. 21 'Arkusz'
%eetData(SMIYum. 31
Appl1catton.CountA(Sht.Cells)
Case .Ch?rtm
SheetData(ShtNun.
SheetDatafShtNun.
2)
3)
--
'Uyl;res"
'8rak danych'
Case "DtalogSheet'
SheetOats(ShtNm.
SheetData(ShtNun.
2)
3)
-- "@no dialogowe"
"8rak danych'
End Select
! f Sht.Yislble Then
SheetData[SMNvn, 4) - 'Prawda'
Else
SheetData(SMICn. 4) - 'Falsr'
End I f
-
SMNun ShtNun + 1
Next Sht
- --
With ListBOxl
.CalmnWidths '70 pt:70 pt:60 pt:50 pt'
. L i s t SheetOata
.LlstIndex ListPos
End With
End Sub

Procedura L i stBoxl-Cl ick wyglqdd nastepujqco:


Prlvate Sub L i s t b x l - C l i c k (
If cbPrevtew Then -
Sheets(LtstBox.1 .Value) .Activate
End Sub

Wart056 wEs4ciwo9ci Value kontrolki CheckBox o nazwie cbpreview decyduje, czy dla
wybmnego arkusza zostanie wySwietlony podglqd, jJli utydcownik zmaczy w kon-
trolce ListBox p o w i w q z niqpozycjp. Klikniecie OK (kontrolka OKButton) spowoduje
wykonanie procedury OKButton-C1 Ick, kt6rtj kod Wdtowy wyglqda nastepujqco:
Private Sub OKButton-Click0

-
O i m UserSheet As Object
Set UserSheet heetstListBox1 .Value)
IfUserSheet .Visible Then
UserSheet .Activate
Else

- -
I f MsgBox("tzy pakazaC a r k u ~ ~ ? -" ,
vbQuestian + vbYesNoCance1) vbYes Then
UserSheet . V i s i b l e True
UserSheet .Activate
Else
0riginalSheet.ktivate
End If
End I f
Unload He
End Sub

Pmedura OKButton-Cl i c k tworzy miennq obiektow& reprezenbjqq wybrany arkusz.


Jeili arkuszjest widacmy, zostsnie uaktywniony. k3li nie jest widoczny, wySwietli sip
okno kornunikatu i utytkownik zostanie zapytany, czy arkusz powinien by6 p o k m y
i uaktywniony. W pr&iwnp razie uaktywniony zostanie oryginalny arkusz [prze-
chowywany pnez publicmq zmienn;3obiektow~OriglnalSheet).

Dwukrotne klikniecie pozycji konlmlki LlstBox da takie same efekty, jak kliknigie OK.
Ponihza pmcedura L i stBoxl-Dbl C1 ick wywohje jcdynie p r o c e d u ~OKButton-Ci ick:
Prlvate Sub L i s t b x l - b l C l l c k ( B y V a 1 C a ~ e As
l NSForms.Return~lean1
Call OKButton-Cl lck
End Sub

Zastosowania kontrolki MultiPage


Konwolka MultiPage jest bardzo pnydatna w przrpadlcu formulamy UswForm zawieraja
cych wiele kontrolek, poniewat umdiwia gropowanie wybranych obiektbw i umieszczanie
ich w oddzielnych zakiadkach. Na rysunku 14.18 p o r n o pnykladowy formularz U~er-
Form z kontrolkqHulti Page. W tyrn pnypadku kontmlka posiada biry zakladki (.sWony).
Rysunek 14.18.
Kontrolka MultiPage
grupuje kontrulki
na stronach

(W Okno Toolbox zawi~erar6wnlel kontrolke TabStrip pnypominajqcq kontrolkg M;l:i:age,


Jednak w pneciwiefistwie do kontrolki MlllltiPage, kontrolka Tabstrip nie phi funkcji
kontenera dla innych obiektbw. Kontrolka Muit?Paeejest o wiele bardziej uniwersalna.
OsobiScie nigdy nie skorzystalem z kontrolki TajStrip.

Korzystajqc z kontrolki MultlPage, naleq zachowaf ostrobloft. Ponitej wymieniiern


kilka zagadnieh, o ktorych t m b a pamigat.
To, ktdra zakladka (strona) zostanie domyilnie wyswietlona. zaleiy od wartoici
wta5ciwoici Value kontrolki Mu1ri Page. Wartoif O spowoduje uaktywnienie
pierwszej zakladki, 1-dmgiej itd.
Domyllnie kontrolka MultiPage posiada dwie zaktadki. Aby w edytorze Visuaf
Basic dodaf do kontrolki nowq strone, naleq kliknqt jqprawym pnyciskiem
myszy i z menu podrtcmcgo wybrat pozycje New Poge.
Aby w trakcie modyfikowania kontrolki h l i i P a g e okreilit whsciwotci
.
wybranej smny, wystarczy jq kliknqt W oknie Properties zostana y s w i e t lone
wiaSciwoici, ktbre motna edytowat.
Zaznaczenie kontrolki Mu1ti Page mote oka& siq trudnc, poniewat jej klikni~cie
spowoduje wybmnie jednej zjej stran. Aby zamaczyf calq kontrolke Mu'tiPage.
nalety kliknqt jej obrzcte lub wciskaf klawisz Tab do momentu jej uaktywnienia.
Kolejna metoh polega na ~lmaczeniukontrolki Mu1ti Page poprzez wybranie jej
z Iisty rozwijanej okna Properties.
Je91i stworzona kontrolka Multi Page zawiera wiele zakhdek, w celu wyiwietlenia
ich w wiwej nitjednym tzqdzie nal- dla wlaSciwosci Mu?t i R o w ustawik
wartoif True.
Zamiast zakladek w kontrolce Mu1t i Page motna tek wylwietlit przyciski. W tyrn
celu wystarczy dla wtaJciwofci Sty1e ustawif wartoit I - fmTaMtyl eButtcns.
JeSli wartofciqwhkiwoki Style jest 2 - fmTabSty1ebr?e, kontrolka Multi Page
nie wyiwietli mi zaktadet ani pnyciskdw.
WIaSciwoSC TabOrientation okrella pdo2enie.zakladek kontrolki Mu1 t i Page.
Poprzez rnodyfikacjg wartdci w h k i w o k i T-8nsit:cnEffect dla k a d e j zakladkl
motna ustawit typ e f e h pmchodzenia Przykladowo kliknivie zakladki mote
spowodowat, t e przesunie i ulayje ona popnednio wyfwietlanq zakladke.
Aby okreSlif szybkoit efektu pnechodzenia, nalezy u t y t wk&ciwosci
Trznsi t i onPeri 3d.

W nastefmym rozddale zamiemzono kilka ptzykhddw zastosowania kontrolki


@ Mu1t i Page.
Rozdziat 15.
Zaawansowane tec hniki
korzystania z formulurzy

Ten rozdziai kontynuuje tematykq rozpoczetqw rozdziale 13. Znajdzierny tu dodadtowe


prryklady zastosowania fomularzy UserFom WiqkPzoX prqkladbw dotycry zagadnieh
zaawansowanych, ale jak siq przekonamy, wszystkie majqpraktycme zastosowanie.

Wyiwieflanie wskaf nika postqpu zadania


DoSt cqsto pmgrarniki Excela pytajq mnie o sposoby tworzcnia wskafnika postepu
zadania W s M i k pmtepu mdania to element graficzny podobny do termomem rtecio-
wego, wskamjqcy postcp wykonywanego zadania (np. &go d z i a h j ~ e g omakra).

Od mornentu wydania E m l a 97 n v ~ wskaLnik6w


d p o w zadania jest stosunkowo
latwc. W tym pdrozdziale op* sposbb tworntnia trzeeh rodtaj6w w s b i k b w postepu.
ktbre r n m a wykonystat dla:

Wydwietlanle wskzhika paatqpu zadmnla nr pcuku stanu


Wskahik postepu wykonanla makra rnotna prq niewlelkfm naktadzle precy wySwietliC na pasku
stanu IExcela. Nlestety wlgkuofC utytkownik6w nle jest przyzwyczajona do obsemwanla pasha
stanu I woli elementy bardzlej wyeksponowane.
Aby wpisd tekst w pasku stanu, nalety skorrystaC z instrukcjl postacl:
App14cation.StatusBar - 'Pmsq u e k a t . . :
OaplSde m h a Iraktualhtd tekst na pasku stm w czasie wykonywania m a k a Jetell na a t a d
zmlenna Pct raprezentuje procent wykonania radanla, rnoterny naplsa6 kod, M6ry co jaki5 czas
wykonuje nastepujm ~nstrukcJq:
Application.StatusBar - IWykoneno ' I Pct d L' ~ k r a "
Po rakot5czenlu Matanla makra nab@ 1
-6 stan pocz@kavy ra p o m q nastepuJqce1In-
strukcji:
Appl.lcation.Status@ar - Fa1se
422 Cz@t IV 4 Zostosowanie fomlamy UserForm

makr, kt6re nie sq inicjowane przez formulart UserForm (sarnodzielny w s k h i k


postepu);
makr inicjowanych przez FornuIan UserForm -w tym pnypadku w fonnulanu
UserForm wykorzystywana jest kontrolka Mu1 tipage wySwietlajqca wskafnik
post~puw czasie dziabnia rnakra;
makr inicjowanych przez forrnularz UserForm- w tym przypadku zwi~kszasic
wysokost formularza UserForrn, a wskatnik posepu pojawia sit u d o h okna
dialogowego.

Wskafnik postepu motna zaimplementowar!, jeJli da siq o s z a c o d jak d u q cz@ zadania


zostala j u t w danej chwili wykonana. Sposdb dokonania takiego oszacowania mote by6
rotny, w zaletnofci od wykonywanego rnakra. Na przykhd jeteli dzialanie makra polega
na zapisywaniu danych do kombrek (a mamy liczb kombrek, do kt6rych btdq one za-
pisywane), z latwolciq napiszemy kod obliczajqcy .procent wykonanja zadania.
Zastosowanie wskatnlka postqpu nleco spowalnia makro, ktdre musi wykonaC
dodatkowe dzlalanla. lekeii szybkogt ddalania apllkacjl ma maczenie kluczowe.
rnokna zrezygnowat ze wskafnika post.g~u.

Tworzenie samodzielnego wskafnika postqpu zadania


W tym punkcie opisano spos6b tworzenia samodzielnego wskatnika postepu zadania -
tzn. takiego, kt6ry nie jest inicjowany przez wySwietlmie formularza UserForm.

<-e Ten przykiad jest dostgpny na wie CDROM ddqczonej do ksiqtki.

Tworzenie fomularzu UserForm


jako samodzielnego wskafnika postgpu zadania
Aby utwonyt formularz UserForm s m c y do wyiwietlania posttpu zadania, wykonaj
nastepujqce czynnofci:
I . Wstaw nowy formularz UserFom i u m w wartoft wlaSciwoSci Caption na Postg
zadania.
2. Dodaj kontrolkt Frame i nadaj jej n a n q FramProgress.
3. Dodaj k o n t ~ ~ l kLabel
g wew@z kontrolki Frame i d a j jej nanq Label Progress.
Usuri tYhh chkieh. lwldciwoSC
. Caotf onl i ustaw kolor tla (wIajciwdC BackColor)
na c z e k f o n i Na tym etapie rozmhr et;kiety i jej nie rnajqmaczenia.~
4. Wpmwadi dodatkowqetykietq powytej ramkii w ktdrej umidcisz opis
wykonywanych dzidah (opcjonalnie).
5. Dosmsuj wygl;ld fonnularm UserFonn i kontrolek w taki spos6b. aby przypomindy
fonnularz pokazany na rysunlcll 15.I .
Rozdzial15. Zaawonsowone techniki korrystania z fomlorzy UserForm 423

Rysunek 15.1.
Ten formulan UserForm
shty jako wskafnik
postepu zadania

Motna oczywiScie zastosowat dowolne elementy fonnatowania. Na przykiad dla okna


wyfwietlanego na rysunku 15.1. modyfikowano wlafciwoSC Speci a1 Effect.

Twonenle procedur obshgi zdaneri


dla samodzielnego wskainika postgpu zadania
Zasada dziahnia tcgo wskahika polcga na automatycmyrn uruchomieniu procedury
-
w momencie Mwietlania fomularza U s e r F o n . Moms skomstat ze zdarzenia Act'vatc?.
ktbre zachodzi w rnomencie wygwiettania fornulam UserForm, zatem idealnie nadaje
sit do tego celu. Nie motna natomiast utyk zdanenia Ini ti a1 ire, ktbre nastepuje przed
wtakiwyrn wySwietleniem formularra UserFarm.

Nitej pokazanq procedure nale2y wprowadzit w oknie kodu formularza U s e r F s m . lej


clziahnie polega na wywohniu procedury Main w momencie wylwietlania formularza
UserForm. Pmedura Main zapisana w module VBA jest makrern, kt6re uruchamia sig
podczas wygwietlania wskainika postqpu zadania.
Private Sub UserFo~m-ktivate0
Call Wain
End Sub

Proceduq Maln pokazano poni2cj. W tym p n y k W e jej dziahnie polega na wstawianiu


losowych liczb do aktywnego arkusza. Podczas wykonywania dziahnia nastqpuje zmiana
szerokoki kontroIki Label i wySwietlenie procentu wykonanego zadania za pomocq
wh$ciwo$ci Caption kontrolki Freme. Poni%za pmcedura shiky jedynie twiczcniu w za-
stosowaniu wskatn.ika postepu Moha jednak wpmwadzic wiasny kod. ktdry bedzie
slutyl u2ymrny-m celorn.
Sub # i n 0
'
Wstawtente losawych l i c z b w aktymym arkuszu

---
Cells.Clear
Counter 1
RawMax 200
Co!Max
- 25

-
For r 1 To M a x

- -
For c 1 To to1 Hax
Cellsfr, c l Intcbd * 13110)
Counter Counter + 1
Next c
-
PctDow Counter / [ R M x * ColMax?
Call lbdateProgress(Pn3one)
Next r
Unload UserFoml
End Sub
424 Cz@t IV Zastosowanie formulaw UserForrn

hedmb i n zawicra p ~ t l c( ~ M c i w i edwie pqtle). W m q m pCtli wystqmje wywolanie


procedury UpdateProgress. Procedura, k t 6 q zaprezcntowano ponitcj, pobiera jedcn ar- 1
-
gument wart026 z p m d z i a h od 0 do 100 reprezentujqcq postep wykonania makm
Sub UDdateProgress(Pct 1

--
With UserFonl
.FrameProgress.Captton Format( Pct. "0%')
.LabelProgress.Width Pct * ( .FramePrcgress.Nidth - 10)
.Repaint
End With
End Sub

Twonenie procedury startowe]


dla samodn'elnego wskahika postgpu zadania
Brakuje tylko prbcedury wyfwietlajqcej fonnularz UserFom. W module VBA nalety
wprowadzit nastqujqcq procedure:
Sub Shd)lalog(
UserFonnl .Label Progress .Uidth
UscrFonnl .Show
- 0
End Sub

Jak dziala samodzielny wskainlk postepu zadania?


W momencie uruchamiania procedruy ShowOialog szerokoSf obiektu Label jest usta-
wiona na wart046 0. Nastcpnie rnetoda Show fomularza UserForml wyfwietla formularz
UserForm (bqiqcy wskainikiern postppu zadania). W rnumencie wyfwietlania formulam
Userform nastppuje wyzwolmie zdarzenia Activate, Mbre wywduje proccduq Main. Proce-
dura Main a,pewien czas uaktualnia szerokodt obiektu etykiety Label Pragre:s. W procedu-
rzc.wykonystano metodq Repaint formularza Userform, bez kt6rej m i a n y etykiety nie
byfyby widmme. Ostamia instrukcja powoduje wuniq5c zpami~cif m u l a n a UserForm.

Aby m m a byb dostosowaf te technikq do wknych potneb, hzeba o M l i f spos6b obli-


czania pmantu wykonania zadania i przypisaf oblicronq wart046 do zmiennej PctDone.
Sposbb obliczania tcgo procentu mote byf r 6 h y dla r62nych aplikacji. Jeteli kod jest
wykonywany w pctli (jak w zaprezentowanp pcykbdzie), obliczenie procenru wykonania
zadania jest iatwe. W przcciwnym razie czasami trztba obliczyd procent wykonania za-
dania w kilku rniejscach kodu.

WySwietlanie wskainika postepu zadania


za pomocq kontrolki MuMPage
W poprwinirn pnykhdzit makro nie byb inicjowane przez fwmu1.m UserForm. J e ~ e l i
jednak nastFpuje uruchomienie makra w momencie ydwietlenia fomularza UserFom
lepszym rotwiqzaniem dla w s b i k a p t q w jest technh opisana w niniejsym punkcie.
Przyjgto nastcpujqce zaio2mia:
pmjekt jest vkohczony i zostaly usuniqte Mqdy,
Rozdzial15. Zoowansowane techniki korr/stania z formularzy UserFom 425

do zainicjowania dhgiego makra w projekcic wykorzystano formulan UserForm


(bez kontrolki Mu1t i Page),
istnieje sposdb m i m m i a p o e p u wykonania makra
Przyktad demonstmjqcy tg technikg majduje sle na wie CDROM ddqcmne]

Modyfikowanie forrnulana UserForm


w celu wyiwietlania wskainika postepu zadanla
wykonystujqcego kontrolkq MultiPage
Pmyjmijmy, 2e zakoficmno konfigurowanie formulam UserFom Naswne tadanie polega
na dodaniu kontrolki M u l t i Page. Na jcgo pierwszej smnie (Strcnal) umiekimy kontrolki.
ktbre znajdowaty siq w popnedniej wenji o h . Kontmlki umieszczone na drugiej stronie
(Strona2) b ~ d twotzyiy
q wskahik post~puzadania (rysunek 15.2). W momencie mzpo-
czqcia wykonywania makra instrukcja VBA spowoduje zmiana wartohi wiaSciwo3ci
Value kontmlki MultiPage. W efekcie kontrolki wygwietlane na picnvszej m n i e mstanq
ukqte i nastqpi wydwietlenie wskalnika postqpu zadania.

Ryrunek 159.
Na d ~ g l estronie
j
kontrolki MultiPage
mstanie wySwietlony
wskainik
postppw zadania

Jest to w zasadzie ta sama kombinacja kontrolek, co w pnyklpdzie z poptzedniego


punktu. Aby jq pmanalizowat, wykonaj na~tppuj&cc kroki:
1. Dodaj kontrokq Frarne i nadaj jcj namq Frameprogress.
2. Dodaj kontrokp Label we- kontrolki Frame i nadajjj nany Label Progress.
Usud tytui etykicty ( w l a J c i d d Caption) i ustaw kolor tia (w!a$cidt BackColor)
na c m o n y .
3 Dodaj kolcjnqetykim, w Wzj umidcisz opis wykonywanych drjaM (opcjonalnie).
4. UakQvmij sam4 kontmlkp Mu1tipage (ank stnmp kontmIki) i ustawjego w$9ciwdC
S t y l e na 2 - fmTabStyleNane (co spowoduje ukryck zaldadek). Najprostszym
sposobem zamaczenia kontrolki Mulltipage jest utycie rozwijancj listy w oknie
Properties. Aby uwzglqdnid ukrycie zakladek, nalety zmienii rormiar kontrolki
Mu1t i Page.
Utwonenie procedury Updateprogress
dlcr mkainika postgpu zadania
utworronego za pomocq kontrolki MultiPage
W module kodu formularza UserForm urnieScirny nasQpuj8cq proudup:
Sub UpdateProgreSstPct)

--
With UserFonl
.FramProgress.Capt1on Format(Pct. '0%")
.Label Progress .Wi~dtb Pct * ( .Frame!Jrogress .Width - 10)
.Repaint
End Wlth
End Sub

Procedura ta, w y w o w a n a z gtbwnego makra, bqdzie aktualizowak wskafnik post~pu


zadania.

Modyfikowanle procedury obhgujqcej wskafnlk postgpu zadania


utwonony za pomocq kontrolki MultiPage
T e r n zmodyfihjemy procedure wykonywanq po klikniviu OK. Bedzie to procedura
obsi-ugi zdarzenia C1 ick dlra pnycisku, kt6rcj nadamy n a m e OK-Click. Najpienv, na po-
cqtku praccdury, wprowadzirny poni2sq instrukcje:
MultlPagel.Valw - 1

Insaukcja uaktywnia drug%stronp kontrolki Mu1t i Page (tq, ktbra wyiwietla wskafnik
postepu zadania).
Nastqny krok zal* od aplikacji. Musimy napisad kod do obliczania procentu wykonania
zadania i pnypisania wyniku do z m i e ~ ePctDone.
j W wiekszoici przypadkbw rakie obli-
m n i e wykonpme jest w e l i . Po wykonaniu obliczenia zastosujemy ponitsq instmkcj$
do uahalnienia wskatnika postppu zadania:
Call VpdateProgresstPctDone)

Jak dzida wskaf nlk postqpu zadania


utwonony za pomocq kontrolki MultiPage
Ta technika jest bardm prosta i -jak sit przekmalilmy - wykonystuje jedynie for-
rnularz UserFom. Kod powoduje pnelqczanie stron kontrolki Multi Page i pneksztalca
nvykle okno dialogowe we wskatnik postqu zadania.

Wyiwietlanle wskainika postqpu zadanla


bez korzystania z kontrolki MultCPage
Pnyktad zapmentowany w tym punkcie prypomina pnykhd z punktu popncdniego.
Pokazana technika jest jednak prostsza, ponicwa nie wymaga zastosowania kontrolki
Mu1t i Page. Wskafnik post~puzadania zostanie urnieszuony w dolnej c@ci formularza
UserForm. Normalnie bedzie niewidocmy z powodu zmniejszenia wysokoici formulam
UserFon Jdli jednak procedura uaktyrmi opcjq wySwietlania wskahka, wysokog obiektu
odpowiednio nviqkszy siq.
I
Rozdzid 15. Zaawansowane techniki korzystania z forrnularzy UserForrn 427

Na rysunku 153 pokazano fwmularz UserFon wySwietlany w oknie edytora Visual Basic.
WtaSciwoSC Height formularza Userform wynosi 172. Jednak p m d wyswietleniem for-
mularza UserForm wtaSciwoSd Height jest zmniejszana do 2 4 (co oznacza. t e kontrolka
wskainika postwu zadania nie jest widocma). Dopiero kiedy utytkownik kliknie OK.
w kodzie VBA nastqpi modyfikacja wlaSciwoSci Height do wartoSci i i 2 za pornocq na-
stqpujqcej instrukcji:

Rysunek 15.3.
Pokazany wskainlk
postepu zadania
zostanie ukryty
paprzez mniejszenie
wysokoJci fonnulana
UserForm

-
Kreatory interakiywne sekwencje
okien dialogowych
W wielu aplikacjach wykorzystuje sic kreatory, kt& prowadqu2ytkownika przez pmces
wykonywania dziaiah (pnyk(adem mote by6 beator jmportu Excela). Kreotor to nic
innego, jak sekwencja okien dialogowych, kt6re pobieraja infomacje od utytkownika.
Czqsto wybory dokonane przez utytkownika w jednym oknie dialogowym majq wpiyw
na zawartott okien kolejnych. W wighzo2ci krcator6w M o w n i k ma swobodt poru-
szania sie w prz6d i w tyl w sekwencji okien lub mote kliknqt ZakoAcz, aby zatwiirdzi6
wartosci dornytlne.

Kreatory m o m oczywiicie hvorq6 za p m o q jqzyka VBA i sekwencji formu[arzy


UserForm, jednak wydajniejsze jest wykorzystanie pojedynczego formulana UserFo-r?
i kontrolki MultiPage. ~a rysunku 15.4. pokazano pnyklad prostego czteroetapowego
kreatora, kt6ry utwarzono z jednego formulam UserFom z kontrolkq H l i l ti Page. KaMe
okno kreatora Wwietla siq jako oddzielna strona kontrolki Yulti Page.
Naukg twonenia kreatow rnotna rozpocqC od przeanalizowania skorosrytu
urniesxzonego na plycie CD-ROM. M to kreator rklada]iry siq r czterech eta@w.
kt6rego dziatanie polega na pobraniu infonacji od utytkownika i wstaMeniu ich
do arkusza.

Sposbb utworzenia kreatora opisano w ponizsrym punkcie.


428 CzgSC IV + Zastosowonie formulamy Userform

Rysunek 15.4.
W tym kreatone
zastosowano
kontrolkq MultlPage

Konfigurowaniekontrolki MultiPage w celu utwonenia kreatora


Racp nalety roqaiqC od uhvorzenia nowego fonularza UserFom i wstawienia do niego
kontrolki Mu1 tipage. Domy9lnie ta kontrolka sklada sic z dwbch s m n . NaleZy kIiknaj
prawym przyciskiem m y s y dowohqzaktadkp Mu1tlPage i wybierajqc popozycje New Page
z menu podrccznego, wstawit odpowiedniq liczbp nowych s w n (po jednej dla M d e g o
kroku Icreatora). Przykladowy kreator na pFycie CD-ROMsktada s i z~czterech h k b w ,
a zatem kontrolka Mu1 t i Page powinna zawierat cztery swny. Nazwy zakhdek kontrolki
Mu1 t i Page nie majq znaczenia. WartoSC wMciwoSci Style po zakodczeniu projektowania
-
n a l e y ustawit na 2 fmTabStyleNone, natomiast podczas pracy z formularzem User-
Fonn zakladki powinny pozostat widocme - dzipki temu lydzie latwiejsry dostqp do

Nasbqnie nale2y wpmwadzit odpowihie kontfolki na W e j sbonie kontmlki MultiPage.


..
Beda one rdtne dla r6tnvch a~likacii.Aby utwonyt miejsce dla kontrolek p o d c m
projektowania, czasami &eba zkicnii ro&iar kontrilki Muiti Page.

Dodawanie prrycisk6w do fomularza UserForm kreaiora


Nast~pnaczynndch jest dodanie pnycisk6w sterujqcych dziahniem kreatora. Prryciski
zostanq umie-ne poza k0nt~ok.qMu1ti Page, p o n i m q Mwyhvietlane w kartdym h h
kreatora. W wipkszoici kreatorbw qcztehy przyciski:
w Anuluj -anulowanie dzialania kreatora;
Wstecz -powr6t do popnedniego b o k u (podczas wykonywania pienvmgo
koku pnycisk powbien byt nicdoqpny);
R Dalej- pnejScie do kolejwgo kroku (padczas wykonywania ostatniego hoku
kreatora przycisk powinien by6 niedostqpny);
m Z a b A a -zakoficzmie dzialania kreatora.
I
I
Rozdzial 15. Zaowclnsowane technikl korrystania z formularzy UserForrn 429

W nlekt6ryh kreatorach ulytkownlk mote kllknqd prryclsk Zakodcz w davalnym


momencie i zaakceptoviat unawlenla domy6lne dla tych kmk6w kreatora. *tare mstaiy
porniniqte. W lnnych pnypadkach odpowledt uiytktkownikajest obowiqzkowa. W takich
sytuacjach pnycisk Zakoficz powinien by6 nieaktywny do mornentu wprowadzenia
wszystk~chwymaganych denych. W przyktadzle urnieszcmnym na ptycie CDROM
wyrnagane Jestwprowadzenie warto6cl w polu tekstowym w plenvszym kroku.

W zaprezentowanym przyk4adzie pqciski polecef~(obiekty typu CaMndEutton) nazwano


odpowiednio CancelButton, BackButton, NextButton oraz Fini shsutton.

Programowanie prryclsk6w kreatora


K d y z czterech pnycisk6w kreatora wymaga zdefiniowania procedury obshgujqcej
zdarzenie Click. Rocedurt obstugi zdanenia Cl ~ c dla
k przycisku CancelButton raprezen-
towano ponb-j. wyko&tano wniej funkcjp HsgBox (hsunek 15.5) w celu spradzenia,
czy Wownik rzeczywiicie chce zakohczyt dzialanie kreatora. Jeteli kliknie Tak, nastqpi
z&k&cie formula& UserForm bez wykinania tadnych dziaM. Takie sprawdzenie jest
oczywiicie opcjonalne.

Rysunek 15.5.
KMknlgcie pnycisku
I Anuluj spowoduje
wygwietlenie
kamunikatu

-- -
P r i v a t e Sub CancelButt~llckO
Usg 'AnulwaC dzlalanie kreatora?'
Pns Hsgbx(Hsg, vbQuestion + vblesb. APPNfflE)
If Ans vbYes Then Unload Me
End Sub

Procedury obshgi zdarzeh dla pnycisk6w Wstea oraz Dolej zapmentowano ponitej:
I

-
Prlvate Sub B&Button-Cl IckO
MulttPagel.Value MultlPagel.Value
UpdateControls
- 1
End Sub

UpdateControls
-
P r i v a t e Sub NextButtcn-Clickt)
HultiPagel.Value MulttPage1.Value 4 1

End Sub

Pokazane wytej dwie procedury q bardw p m . Ich d t i a h i e polega na modyftkacji


wlaSciwoki Value kontrolki Hultl Page, a n w p n i e wywolaniu procedury UpdateControls
(listing 15.1). Jej d a n i e r n jest uaktywnienie i dczdctpmja pnyciskdw BackButtm oraz
NextButton.

Sub UpdateCcntmls()
Select Case kltlPagel.Va1 w
Case O
8ackButtm .Enabled
kxtButtar.Enabied
-- False
True
430 CzqE IV + Zastosowonie formulamy UserForm

Case HultiPagel.Pages.Cwnt - 1
Back0utton.Enabled
NextButton.Enabled Fa1 se
-- True

Case Else
BackButton .Enabled True
NextButton .Enabled = True
-
End Select
'
-
Aktuallzacja t y t u l u
Me.Captlon APPNM 8 ' Krok "
I Mu1t i P a p 1 .Value + 1 & " z " -
-
& Mu1t i P a p l . P a g e s . t a m t
'
I f tbName.Text -
Pole Nazwlsko j e s t obawiqzkowe

FimshButton.Enabled -
" " Then
Fa1 se
Else
Finish&rtton.Enabled
End If
- True

Ena Sub

W celu wySwietlenia n u m m b i e w e g o kroku o m cakowitej liczby krok6w procedum


modyfikuje wtafciwoSC Captlon fonnularza UserForm (APPNAME jest stat%publicznq zde-
finiowanq w module Hodulel). Nast~pniesprawdza pole tekstowe tbName na pierwszej
stronie. Jest to pole obowi@owe, a zatem kiedy jest puste, klikniqcie pnycisku Zakodci
nie powinno bye mo2liwe. Jeeli o h siq, 2e pole tbNamjest puste, przycisk FinishButton
bpdzie nieaktywny.

Zaleznojci programowe w kreaforach


W w i c k d c i lucaor6w wczdniejsze decyje -ika majq wplyw na zawartoSC ko-
lejnych okien dialogowych. W przyldadzie zamieszcmnym na plycie CD-ROM w h k u 3.
utytkownik okrella, jakich produktbw m a , a w kroku 4. ocenia te produkty. Pnyciski
opcji oceny b g q widoczne tylko wtedy, gdy wczeiniej utytkownik wybierze produkty.
W programie mo2na to osiqgn@, monito~jqcz d a m i e Change kontrolki Mu1tipage. Za
W m razem, kiedy mienia siq wart&& wMciwoSci Value kontrolki MultiPage (w wy-
nikuk~ikni~cia
p&isk6w ~ s t e c zlub Dalej), wywolywana jest pmedura Mu1t i ~ a g e i -
Chame. Pned wySwietleniem ostatniej zakjadki kontrolki MultiPage (krok 4.), procedura
spmwdra w&ci p6l wyboru zkroku 3. i wykonuje odpowiednie korekty o h z kroku 4.

W naszym pnykladzie w kodtie utyto dw6ch tablic kontrolek -jednej dla @I wyboru
produkt6w (kmk3.J drugiej dla kanh-olek Frame (krok 4). Zastosowano pedq For . . . Next,
kt6ra ukrywa n i e w w a n e ramki produkt6w oraz koryguje ich pozycje w pionie. Jeteli
w kroku 3. nie zaznaczono 2adnych produkt6w. wszystkie kontrolki w kroku 4. bp*
ukryte poza p l e m tekstowym wyiwietlajqcym tekst Kliknij Zukorics, aaby ~3,js'C(jeteli
w h k u 1. wprowadmno nazwe) lub Wprava&enie nmwiska w b o b I. jest obowiqrkawe
ljeteli w kroku 1. nie wprowadmno nazwiska). Procedu1.e HultiPagel-Change zapre-
zentowano w listingu 15.2.

~ ew zaletndcl od d a m h wpmwadzanych pzez utytkowniha


Ustlng 15.2. ~ t l a n stron
Private Sub Hult'lPagel-Change()

-
Czy w y W e t l i C s t m e z ocena?
IfPbltiPagel .Value 3 Then
Rozdziot 15. + Zoowansowane techniki komystonio z formulam/ UserForrn 431

Utwarzenie t a b l i c y kontrolek ChecLBax

--
Dim Pr,MCB(l To 3) As HSFons. CheckBox
Set PmdCB(1) cbExce1

-
Set PmdCB(2) W o r d
Set ProdCB(3) cbAccess
Utworzenie tab1 i c y kontrolek Frame
Dim ProdFram(1 To 3 ) As FISForms.Fram

---
Set PmdFram( 11 FrarneExcel
Set ProdFram(Z1 Frameword
Set ProdFram(31 Framebccess

--
TopPos 22
FSoace 8
-
AtieastOne False

-
Petla dla wszystkich p r o d ~ k t j w
Far i 1 To 3

- -
If ProdCB(i ) Then
ProdFraWi) . V i s i b l e True

- -
ProdFrame(i) .Top TapPos
TopPo5 TopPos + PmdF:ane() .Height FSpace
AtLeastOne True
Else
ProdFram(i).Visikle
End I f
- Fa'se

Next 1
Nie wymleniono produktow?

- --
I f AtLeastOne Then
131Headings.Visible True
Image4. V i s.i b l e True
1blFinishM~g.Visible False

- -
Else
1blHeadings.Visible False
Imge4,Visible False

-
IblFinisht4sg.V1slble - True
If tbName "'Then
1b l FinishMsg.Caption -
"Wprwadzenie nazwitla w krohu 1. j e s t obowiaztoue
Else
1blFinishMsg.Caption -
'Kliknl j Zakokz. aby wyjit."
End I f
End If
End If
End Sub

Wykonywanie zdat? za pomocq kreatorbw


Kiedy ukyihwnik k l h i e pnycisk ~~, b a t o r vvykonuje zadanie: przenosi infoma-
cje z f o m h UserForm do kolejnego pustego wiersza w arkuszu. Ta procedura jest
bardzo prosta @okazuje jq listing 15.3). Najpierw trzeba maleit kolejny pusty wiersz
w arkusz~,a n-ie pnypisd te mrtdt do zmiennej {r). Pozostala czqSt proceduy
polega na przeksaaiceniu wartoici kontrolek i wprowadzeniu danych do arkusza.
432 CzelC IV + Zostosowanie fornnrlony UserForm

Listing 15.3. Wprowadzanie danych pobranych od uij4mvnika do arkusza

r -
Private Sub F i n i s h & l t t ~ ~ - C l I c k ( )
Application.WorksheetFunction. -
CountA(Range('A:A') ) + 1
'
-
Wstawi eni e n a m i ska
Cel1s:r. 1) tsNam.Text

k t a w l e n l e informacji o p l c i
Select Case True
Case obnak: C e l l s ( r . 2) --
'Metczyzna"
Case obfenale: C e i l s ( r . 2) 'Kocleta"
Case obNoPnswer: C e l l s l r . 2)
End Select
-
'Brat odpowtedzf~"

---
' Wpravadzenie i n f o n a c j ; 3 prbduktach
Cell s ( r. 3) cSE.xcel
Cellscr. 4) c'snor3
C P ~l s ( r . 5 ) cnkcess

Wpmadzenie ocen
[ f obExcell Then C e l l s ( r . 6 ) " " --
I f obExcel2 Then t e l l s ( r . 6 ) 0
If obExce13 Then t e l l s ( r . 6) 1 --
I f obExcel4 Then t e l l s ( r . 6 ) 2
I f obUordl Then C e l l s ( r . 71 "' --
--
I f obWord2 Then C e l l s ( r . 7) 0
:f 0bU0rd3 Then C e l l s ( r . 71 1

---
If oaWoroJ Then C e l l s ( r . 7) 2
If obaccessl Then Cells(r. 8) '"
I f obAccess2 Then Cells(r. 8) il
I f obAccess3 Then C e l l s ( r . 81 1
If oMccess4 Then Cells(r. 8) 2 -
Usuniecie f o m l a r z a
Unload !4e
End Sub

Jeteli po pmtestowaniu lweatora o k a k siq, te wsEystko dzjala poprawnie, m o h a ustawit


wartost wlaSciwoSci Style kontrolki tlulti Page na 2 - frnTabSty1 eNone.

Emulacja funkcji MsgBox


Funkcja MsgBox jqzyka VBA jest do$t niecodzienna, poniewat w odrbtnieniu od wick-
szoki funkcji wydwietla okno dialogowe. Z kolei podobnie do innych finkcji zwraca
-
wartoSC, a Scislej liczh c.owitqrepretcntujpq przycisk, kt6ry kliknqt utyHromik

W koIejnym w e om6wip funkcjp m6jcgo -a, ktdra emuluje dzialanie Mcji


MsgBox jqzyka VBA. Na pierwszy rzut aka wydaje sie, te utwmenie takiej funkcji jest
stosunkowo pmste. Zastanbwmy sip nad tym dokhdniej? Funkcja Msgbx jest niezwykle
uniwemlna ze wzglcdu na argumenty, ktdre przyjmuje. W efekcie utwanenie funkcji,
ktbra emuluje fhkcjq MsgBox, stanowi d u t c wyzwanie.
I Rozdziat 15. Zaawansowane techniki korrystania z formulolly UserForm

Celem tego Cwiczenia nie jest utwomnie altematywnej funkcji wyswietlania komuni-
katow, ale zademonsh-owaniesposobu twonenia stosunkowo skomplikowanych funkcji
433

z wykonystaniem fomularzy UserFon. Niektbrym utytkownikom pnyda sic ponadto


motliwoX dostosowania komunikatdw do wlasnych potneb (moms np. zmienid czcionkq,
kolory. tekst prycisk6w itd).
Mojq fUnkcjp emulujqcq nazwalem MyHsgBox. Emulacja nie jest doskonah. Ma nasqpujqce
ograniczenia:
nie obshguje argumentu He1 pfi 1e (powodujqcego dodanie pnycisku Pomoc,
kt6rego klikniccie otwiera plik pomocy),
nie obstuguje argumentu Context (umotliwiajqcego okrc4lenie identyfikatora
kontekstu dla pliku pomocy),
1 nie obsluguje opcji system modal, kt6ra powoduje wstrzymanie dzialania

II aplikacji do momentu udzielenia odpowiedzi na pytanie w oknie dialogowym.


Skhdnia funkcji MyMsgBox jest nast~pujqca:
I MyVsgBoxtpytanie[. przycjskil [ . tytutl)

Skhdnia jest taka sama, jak h k c j i MsgBox, ale nie motna wprowadziC dw6ch ostatnich
opcjonalnych argumentbw (Helpfile i Context). W hnkcji MyMsgBox wykorzystamy te
same predefiniowane stak, kt6re wykorzystano w funkcji MsgBox: vbOK0nly. v w u e s t i o n ,
vbOefaul t B u t t o n l itd.

I
Aby poznaC agurnerrty funkcji MsgMx, nalefy zapomd sie z jej listinglem dostecmym
w systernie pomocy.

/ Emulacja funkcji MsgBox: kod funkcji MyMsgBox


W Funkcji HyMsgBox wykcnzystano fwmularz UserForm w micnnej o namie MyMsgBoxForm.
Sama funkcja, kt6q zapmentowano ponii?ej, jest bardzo Mtka. Wiqkszdd dziatah wy-
konywanych jest w procedune UserForrn-Ini t i a l i ze.
Petny kod funkcji MyMsgBox.lnlballze jest zbyt dtugl, aby rnotna go byto umie6cid
u tekscie ksiqal. lest on jednak dostepny jako skomsly( na m i e C D W M
dotqczonej do ksiqiki.
Pub1l c Ptomptl As S t r i n g
Public Wlttonsl As Integer
Publ'c T l t l e l As S t r i n g
Publlc UserCllck As Integer

Function MyHsgBox[ByVal Pmnpt k String. -


Optional ByVal Buttons As Integer.
Optional ByVal T i t l e As String) As integer

--
Ptocrptl Pmnpt

-
&Ittons1 &Ittons
Title1 Title

HflsgBox
End Function
-
I?yMsgi%xForm. Shw
Userclick
434 CzefC IV Zastosowanie bmwlorzy UserForm

Dzialanie funkcji MyMsgBox pokazano na rysunku 15.6. (zastosowalem inn4 czcionke dla
tekstu kornunikatu).

Rysunek 15.6.
m t k di3ahnia finkdl
emufujqcej lunkch MsgBox
(z zastosowaniem
innej czcionkj)
Ponitej majduje sic kod. kt6rego utykrn do umchornienia finkcji:
--
Prcmnpt "Masz zaniar wymazae zawartoSC dystu twardego."

--
P m p t Pmmpt & vbCrLf 8 " K l i k n l j OK. aby kontynuowat."
Buttons vb0uestlon + vbYesNa

-
T i t l e "Marny problem"
h s MyMsgBox(Pranpt. &Ittans. T i t l e )

Jak dziala funkcja emulujqca MsgBox


ZwrbCrny uwagq na zastosowanie czterech zmiennych publicmych. P i e m e trzy (Prompt 1.
Buttons1 oraz Titlel) rcprmntujqargurnenty przckazywane do ftnkcji. natorniast czwana
(UserCl ick) - wartoki zwracane przez hnkcjc. Procedura UserForm-Ini t i a l i z e , aby
pobrat te informacje i w y s M je z powrotem do funkcji, korzysta ze zmiennych publicmych,
Formularz UserFon, pokazany na rysunku 15.7, tawiera cztery obrazy (po jednym dla
ka2dej ikony), trzy pnyciski polend o m pole tekstowe.

Rysunek 15.7.
Fomulan UserForm
dla lunkcjl MyMsg8ox

-
W procedune UserForm I n i t i a l 1 ze s q s p r a w h e argumenty, po czym odbywa sic:
H sprawdzenie, kt6rj obrazek nalety wySwietBC Cjeteli wybrano wyiwietlenie
o b h ) , i ukrycie pozostalych.
H sprawdzenie, kt6re pnyciski nalety wySwietlit, i ukrycie pozostalych,
sprawdzenie, kt6ry.pnycisk jest dornfllny,
wySrodkowanie pnyciskbw w oknie dialogowym,
okreilenie podpisbw pnyciskdw,
okrdlenie pozycji tekstu w oknie dialogowym,
Rozdziat 15. z formulcrny UserForm
Zaawansowane techniki ko~zystania 435

okre4lenie szerokoSci okna dialogowego (za pornocq wywdania funkcji interfejsu


API pobierajqcej rozdzielczott elmnu),
m okreSlenie wysokoici okna dialogowego,
wyiwietlenie formularza UserForm.

Dodatkowo zdefiniowano tny pracedury obslugi zdarzen @o jednej dla kadzdego pqcisku).
W procedurach tych nastqpuje sprawdzenie, &dry pnycisk klikniqto. i zwrbcenie war-
toici funkcji popnez ustawienie warto3ci zmiennej UserCl ;cl.

Interpretacja drugiego argumenhl @r,ycisk~)jest d o g skornplikowana. Argument ten


sktada sic z kilku statych, ktore sq do siebie dodawane. Na przyklad drugi argument
mote przyjqt nastppujqcq postat:
vbYesNoCance1 + uWwstlon t vbOefaultButton3

Ten argument powoduje utworzenie okna RgBox z tmrna przyciskami (Tak. Nie i Anul~rj).
wyiwietlenie ikony pytajnika i ustawienie tncciego przycisku jako dornyilnego. Rze-
czywista wartost?argumentu wynosi 547 (3 + 32 + 512). Na podstawie tej jednej liczby
trzeba uzyskat? t n y informacje. W tym celu nalety przeksaalcit? argument na postat bi-
narnq i sprawdzit ustawienie poszczegdlnych bifiow. Na pnyktad liczba 547 w postaci
binarnej to 100010001 1. Cyfry binarne na pozycjach od 3 do 6 ohellaja wygwietlana.
-
ikonq. od 8 do 10 wyfwietlane przyciski, natomiast cyfry na pozycjach I. 2 informuja..
kt6ry pnycisk jest domyslny.

Wykorzystanie funkcji MyMsgBox


JeSli chcesz wykorrystaC funkcje MflsgBox, wyeksportuj najpierw modui MyMsgBoxMcd
-
oraz obiekt typu Usercorm VflsgBoxFom a m n i e oba pliki zairnportuj do wtasnego
projektu.

Niemodalne okna dialogowe


Wi~kswStokien dialogowych to okna modalne, kt6re wsazymujqdziahie aplikacji zanim
nie zostanie zakolrlczona ..bstuga okna Niekt6re olcna dialogowe sq jednak niemodalne.
co omacza. Ze w czasie, kiedy jest wiwietlane okno dialogowe, uiytkownik rnoze pra-
cowat z aplikacjq.

SyQ
- .1
Po raz plenvszy obstu@ nlemodalnych &ten dlakgowych wprowadzono w Excelu 2000.
We wczedniejszych wersjach Excela wtafciwofC ta jest niedostgpna.
mrm
Aby wySwietlii: niernoralny f m u l . a n U s e r F o nakty
~ skorzystad z nastcpujqcej insinkcji:
UserFonnl. Sl?ow vhdeless

Slowo kluczowe vModeless jest wbudowana sta$o wartoki 0. Tak w i ponyzsza


~ in-
strukcja dziah tak, jak instrukcja;
UserFoml.Show 0
436 CzgS6 IV + Z a s t o s o w a n i e fonnulatzy UserForrn

Na rysunku 15.8 p o h o niemodalne olcno dialogowe wyfwietlajqce informacje na temat


aktywnej kombrki. Podczas wygwietlania okna utytkownik mote swobochie urzemiesz-
czat kursor aktywnej kombrki-oraz uaktywniad inne arkusze.

Rysunek 15.8.
Niemodalne okno
dialogowe umotlhvia
utylkownikowi prace -
z innymi oknami S)#i.4aL
ma,,,
..E..
J@JII.Y.L
B
i . .P -E
-#I'
-.~:-.F.-Q. .: .!- :... 1
-1
..--

Ten pnyktad jest dostgpny na ptycle CDROM dotqczonej do ksl*ki.

Najwi~kszymproblemem jest okdlenie momentu uakhlalnienia okna dialogowego. W tym


celu sq rnonitorowane dwa zdanenia zwiazane ze skoroszytem: 5heeiSf;ectionChanse
o m SheetActivate. Te pmcedury obshgi &en squrnicsz&ne w module kodu obiekru
Thi ~Wortbaok.

i S 4 Oodatkowe inform.acje na ternat zdarzeh motna znaletC w rozdziale 18.

Procedury obsfugi zdarnd zaprezentowano ponikj:


Private Sub Workbook SheetSelectionChange -
(ByVal Sh As O L " ~ ,Bytlal Target As Range)
Call UpdateBox
End Sub
Private Sub Workbwk-SheetActivate(ByVa1 Sh As Object1
t a l l UpdateBox
End Sub

Procedury tc wywofujq procedurq UpdateBox zamieszczorvqponitej:


Sub UpdateBoxt
With UserForml
Sprawdzenie. jakiego typu artusz j e s t aktyrny

1blFomla.Caption -
If TyoeNane[ActiveSheet) 0 'Worksheet' then
'NIA"
1 Rozdzial 15. + Zaawansowane techniki kotzystonia z forrnularzy UserForm 437

--
.I blNumFonnat .Caption 'N/A'
1 blLocked.Caption "NIA'
E x i t Sub
End If

-
.Caption "Komdrka: ' L ActiveCell .Address(False. False)
Fornula

-
If ActiveCell .HasFormula Then
.lblFomla.Caption Activecell .Formula
Else
-
1blFonwla.Caption "(brakl"
End If
Format liczby
-
.lblNtnnFormat.Caotion ktiveCell . NumberFormat

-
Kombrka zablokowana ?
IblLocked.Caotion Activecell .Locked
End With
End Sub

W celu wytwietlenia a d m u &()RHnej kom6rki prodma UpdateBox modyfikuje w h i -


wait Caption forrnularza Userform, a nastppnie uaktualnia tny ctykiety (lblforrula,
1 bl Numforwt oraz I bl Locked). Zamieszcmne ponitej punkty pozwalajqmzumieC sp656b
dziahnia tego pnykladu.
Formulan UserForm jest wyhvictlany iako niernodalnv. a a t e m w cmsie ieao
Wwialania m o t l i 6 jest dostw do g
kus
za ~aparni&jrn~niernodalne f&lane
Userform nic sqobslugiwanc w Excelu 97 i w wersjach wczefniejsqch.
I
Kod na poczqtku procedury sprawdza, czy aMywny arkuszjest arkuszem
roboczym. Jeteli tak nie jest, etykictom nadawane sq wartoSci N/A.
w Skoraszyt rnonitoruje aktywna kom6rkt za pomocq zdamnia Sel ecti on-Change
(kt6ngo procedura obslugi majduje sip w kodzie moduh Thl ~Workbwk).
Informacje sqwyfwialane w formulam UserForm za pomocqetykiet.

Na rysunku 15.9 pokazano macmie W c j zaawmsowaq wersje &go prrykladu. gdzic


wySwietlane sq dodatkowe informacje o wybranej kom6rce. Utytkownicy, ktony od
dawna korzystajq z Excela, byf motc zauwatq podobiehstwo do okna Informaqie, k6re
usunicto z Excela kilka lat temu. Kod pnykladujest zbyt obmrmy, teby moZna go bylo
zaprezcntowaC w t e k i e ksi@ki, ale zaintcmowani mogq go p
ncw na m i e CD-ROM
i zapomat sip z zamieszcmnymi tam Iicznymi komentarzami. Ponitej ejszczeg6lniono
najw&niejsze elernenty tej bardziej zaawansowanej wenji.
Fonnularz UserFon zawiera pole wyboru ( A u f o m ~ akruallzncja).
a Jeteli jest
ono zaznacmne, formularz UserForm uaktualnia sip autmatycznie. J e M i p l e
nie jest zaznaczone, uZytkownik w celu uaktualnienia infonnacji powinien utyk
pnycjsku Uaktualnij.
W skoroszycie zastosowano modut klasy w celu monitmwania dwdch zdaneh
dla wqstkkh otwartych skoroswk. SheetSel ectlontzlarqe one SheetActivate.
W rezultacie kod s w c y do wygwietlania inforrnacji o b-i kmnbrce jest
wykonywany automatycmie za kazdym razcm, kiedy w dowolnyrn skoroszycic
wy-i jedno z wymienionych zdamri (pny A ? e n i u , 2 m m n o p ~ w
k y b
438 CzeSt IV + Zastosowanie formularzv UserForm

Rysunek 15.9.
W tym f o n u l a m
UserFonn
wyfwietlono
infunnacje na temat
a k w n q kombrki

Automoyczna akhtalizacja). Niekt6re dzialania (np, zmiana formatu liczby


wySwietlanej w kornbrce) nie powodujq wynrlpienia tadnego z wyrnienionych
zdarzefi. Z tego powodu w formulanu UserForm majduje siq przycisk Uakruulnij.
Wlgcej inforrnacjl na ternat rnoduMw klas znajduje sle w rozdziale 29.

Liczniki wySwietlane dla kom6rck utytych i zaletnych uwzglqdniajq wykcznie


kom6rki aktywnego arkusza. Sq m ograniczenia wMciwofci Precedents
i Dependents.
Poniewat rozmiar wyiwietlanych inforrnacji b&it r6tny dla r6lnych arkuszy,
wykorzystano kod VBA w celu okreSlenia rozmiaru etykiet oraz odstep6w
pornicdzy etykietami w pionie, a t a k e zmiany wysokoSci formularza UserForm.
jeili zajdzie taka koniecznoit.

Obsluga wielu przyciskbw formularza UserForm


za pomocq jednej procedury obslugi zdarzeh
Z kaZdym obiektem ComndButton w formularzu UserForrn nalety p o w i p f procedure
obshgujqcq zdanenie Click. Jeteli na przyktad zdefiniowaliSmy dwa o b i e 'h Comard-
~ u t t o n , m u s i r nxlefmiowaf
~ co najrnnij dwie procedury obshgi zdarzen:
Private Sub ConmandButtonl-Cl ick()
' hlluj MI* m&iciCkod
End Sub

Prlvate Sub ComnandButton2-Click0


' fulqi mledy umlrfci~M
End Sub

M6wiqc inaczej, nie motna skonfigumwa6 maha, kt6re b@zie wykonywane w mornencie
kliknivia dowolnego pnycisku. K d a proeedua obslugi zdarzenia Click jest ,.Mtwardo"
powiqzana z konkretnyrn przyciskiem CannandButton. Moma jednak spowodowaC. teby
w katdej procedurze obshgi zdanenia majdowalo sig wywoianie uniwersalnego ma-
ha, ale w takim przypadku trzeba pmkazat do niego argument wskazujqcy na to, ktbry
przycisk kliknitto. W ponilsych przykladach kliknipcie przycisku ComndBut:onl lub
C m a n d B u t t o n Z spowoduje wybnanie pmcedury ButtonC?i ck i przekmanie do niej ar-
gurnentu informujqcego, kt61y pnycisk klikni~to.
Private Sub CmandButtonl-C1 i c k ( I
t a l l ButtonClick(l)
End Sub

Private Sub CmndButton2-Cl'ck( )


Cdn ButtonCllck(2)
End Sub

Jeteli w formulanu UserFom skonfigurowano wiele przyciskdw ComndButton, definio-


wanie wszystkich procedur obshgi zddarzeii mote by6 uciqtliwe. Wygodniejsze bytoby ,
zdefiniowanie pojedynczej procedury okreSlajqcej pnycisk, ktory klikniqto, i na tej
podstawie podejmujqcej odpowiednie dziaianie.

Ten wryktad jest dostgpny na plycie CDROM dolqczonej do ksiqik.

W ponitszym przykhdzie opisano sposdb obejicia podanego wytej ograniczenia polega-


jw na zastosowaniu moduh klasy w cclu zdefiniowania nowej klasy. Aby to o s i ~ n q 6 .
wykonaj nastepujqce kroki:
I. Uhvbn fomularz UserFon i dodaj kika pnycisk6w ComrandButtm (w przykhdzie
umiesznonym na plycie CD zdefiniowano 16 przycisk6w). W tym przykladzie
fonulatzowi nadano n a m e Usercorm!.
2. Dodaj modul klasy do p r o j e h (wybierz polecenie Inserf/Cfass module), nadaj
mu nazwp BtnCl ass i wprowadt podany ponitej kod. Procedulp.ButtonGroupPCCick
nale* zmodytXowaC odpowiednio do patrzeb konkretnego przyktadu.
Pub1ic HIthEvemts EuttonGrouo As MsForms .ComnandButtcn

--
Private Sub ButtonGroup-Cl ickc)
Hsg "Kliknieto " & euttonGmup.Name & vbCrlf 6 vbCrtf

--
Hsg Msg 8 "?odpia: " & &ttcnGrcup.Cap:lw. & vhCrLf
Hsg Hsg & "Lewa wspdlrzedna: " & 0uttonGrwp.Left 8 vKrL:
Hsg Hsg & "G6rna wspbl rzqJna: ' & ButtonGrcup .-op
4sgBox Ysg. v b I n f o m t i o n . F!uttanGroup.Name
End ScS
3. Dodaj modul VBA i wprowadi podany nitej kod. Dzialanie tej pmcedury polega
na wytwietleniu fonnularza UserForm.
Sub 9OwOialog( )
UserForml .Shm
End Sub

4. W module dla fomulana Userform wprowadZ kod z listingu 15.4. Procedur~tq


w y w h j e ularzenie Initialize formularza User-Form. W grupie pqciskow nie
u ~ ~ i o prrycisku
n o OK (OKButton). W z w i ~ &z~tym k l i k n i ~ i ep r q ~ i s k u
OK nie s p o d u j e wykonania procedury ButtonGrcup-C1 ick.
440 Czele W Zastosowanie f m u l a r t y UserForm

Listina 15.4. Zdefiniowanie tablicv obiektdw Buttons0


D i m Buttons0 As New BtnCiass

Private Sub UserFonn-imtlal 1zeO


D i m ButtcnCovnt As Integer
D i m c t l As Ccntrol

Utworze~ieo b i e k t b Button
ButtonCwnt = 0

I f TypName[ctl) -
For Each c t l In-EJserForml.C3ntrol s
"tomnandButton' Then

-
Ifc t l .Name u "OKButton" Then ' pomimecle przyci sku OK
ButtonCount ButtonCwnt + 1

-
ReOim Preserve Buttons( 1 -0 ButtonCount 1
Set Buttons(EvttonCount) .ButtonGrovp c t i
End I f
End If
Next ctl
End Sub

Po wykonaniu tych czynnoki, w celu wygwiellenia formularza UserForm nalety wywolat


proceduq Sho4ialog. Kiiknivie dowalnego przycisku (porn pnyciskiern OK) spawoduje
wykonanie procedury ButtonGrwp Click. Na rysunku 15.10 pokazano przyktad komu-
nikatu wy$wietlanego po klikni~i~-~rzycisku.

Rysunek 15.10.
Procedura
ButtonGroup-Click
wySwietla infonnacje
o tym, &dry przycisk
kliknieto

Technikq tc mozna dostosowad do imych kontrolek. W tym celu naleZy zmodyfikowat


nazwp typu w deklaracji Pub1 i c WithEvents. Aby na pnyklad zastosowa6 procedurq dla
pizycisk6w opcji (DptionButton) zamiast poleced (CmndButton), nalety utyC nastq-
pujqcej deklaracji:
Public WithEvents ButtonGmup As MsFarms.Optionhtton
I Rozdzid 15. + Zaawonsowane techniki konystania z forrnulorzy UserForm 44 1

I
i Wyb6r koloru za pomocq formularza UserForm
Przyklad zaprenntowany w tym podrozdziale jest nieco bardziej skomplikowany od
przykladu poprzedniego, choC sq one do siebie podobne. W pnykfadowym skorosqcie
zademonstrowano technikq wyiwietlania formularza UserForm umotliwiajqcego wybie-
ranie kolor6w z palety skokszyCu skladajqcej sic z 56 kolor6w. ~ ~ k o r z y s t a nfunkcjp
o
Get ACol or wyswietlajqcq forrnulan UserForm i zwracajqq wart066 wybranego koloru.

<-2s Ten prz$Iad]est dostepny na plycle CDROM ddqczonej do ksiqtkl.

Funkcje GetAColor zaprczentowano ponitej:


Pub1 i c ColorVaiue As Variant
Dlm Buttons(1 To 55) As New ColorbttonClass

Function GetAColorO As Variant


'
WySwietlenie fonrularza Userform i wrdcenie wartofcl koloru l u b wartoscl False.
' jete1 t koloru n l e wybrano
Dim c t l As Control

Buttonbunt 0 -
Dlm ButtonCount As Integer

For Each c t l I n UserFonnl .Controls

- -
Dla 56 przyctskbn oznacrajqcych kolory w~afclwo5tTag ustawiom na ColorButtan
I f c t l .Tag "ColorButton" Then
ButtonCount ButtonCount + 1
Set Buttons(ButtonCwnt) .Colorflutton c t l-
Pobranie k o l o r b z palety aktywnego skoroszytu
0uttons(8uttonCount).ColorButton.BackColor --
ActiveUorktcak .Colors(&rttonCount)
End If
Next c t l

-
UserFonnl .Show
G e t n b l o r ColorValue
End Functlon

Formularr UserFarm zawiera 56 przyciskbw (obiekt6w typu C m n d B u t t o n ) o kolorach


zgodnych z paleq aldywnego skoroszytu. Dosgp do funkcji GetACol or rnotna uzyskac
za pomocq nastppujqcej instrukcji:
UsetCalor - GetAColorO

Jej wykonanie spowoduje e w i a l c n i e formulam UserForm i pnypisanie warto5ci kolom


do zmiemej UserColor. Kolor odpowiada wartohi wybmnej przez utytkownika.

Na rysunku 15.11 pokazano formularz UserForm (w k o l m w y gw Icpiej), zawierajqcy


56 kontrolek typu ComndButtm. WMciwoSC BackCdlor kakdego przycisku odpowiada
jednernu kol&k z palety k o l d w skomszytu. Kliknivie przycisku powoduje usuniecie
formularza UserFon i ustawienie wartofci, kt6ra nastqpnie jest zwracana p n e z funkcjp.
442 Cz~fcSIV t Zastosowanie formlamy UserForm I

Rysunek 15.1 1.
To okno dlalogowe
umozliwia
uzytkownikowt
wybranie kolom
poprrez kliknigcie
przycisku

Plik umieszczony na plycie CD-ROMddqczonej do ksiqtki zawiera:


formularz UserForm (UserForml) z oknem dialogowym skhdajqcym sic
z 56 przyciskdw (ConandButton) oraz kilku innych kontrolek,
modd klasy (ColorButtonClass), w kt6rym zdefiniowano klasp ColorButton,
w modut VBA (Modulel) zawierajqcy kod funkcji (GetACol or),
dwa przyklady. kt6re dernonstrujq dzialanie funkcji GetAColor.

Procedura GetAColor konfiguruje formulart UserForm i wyhietla go. Nastqpnie zwraca


wartoSt koloru odpowiadajqcq wybranemu przyciskowi. Je2eli utytkownik kliknie Anuluj,
funkcja zwr6ci wartoit False. Kiedy utytkownik umietci wskahik rnyszy nad przyci-
skiem koloru, w ramce wyiwietli siq prdbka wybrantgo koloru.

Kod obshgujqcy ten formulan UserForm ma do46 d u e objqtoft i dlatego aezygno-


watem z urnieszczenia go w tekScie ksiGki. Motna jednak otwonyd skoroszyt z piyty
CD-ROMi przeanalizowaf kod.

Wyf wietlanie wykres6w w formularzac h UserForm


W programach Excel 5 lub 95 wyiwietlanie dynamicznych wykrcs6w w oknach dialo-
gowych zdefiniowanych przez utytkownika byto bardzo tatwe. Wystarczyto skopiowat
wykres i wkleik go do arkusza dialogowego. Co jednak dziwne, nie istnieje prosty spos6b
wyiwietlania wykresdw w formularzu UserForm. Motna oczywilcie skopiowak wykres
i wkleit go jako wMciwo3 Picture ilustracji, ale w ten spos6b powstanie statycmy obraz
wykresu, bez rnotliwoSci dynarnicznych zmian.

Chociat fonnulanr UserForm majq daleko wiqksze motliwo~cinit stare afkusze dialogowe.
to jednak wydaje sic, te o tym jednyrn aspekcie Microsoft zapomnial.
a&* W Excelu 97 i w wersjach p6tnieJszych w dalszym clqgu motna kofzystaC r arkuszy
(9, dlalogawych I z ich pomocq wySwietlaC dynamiczne wykresy w oknach dialogowych.

W tym podrozdziale opisano dwic rnetody wydwietlania wykredw w formulamch


UserForm: poprzez zapisywanie wykresu w postaci pliku Lub za pomocq kontrolki Cnar-
tSpace nal-cej do kornponent6w sieci Web pakietu Oflce (ang. Once Web Compo-
nents -
OrVC).
Rozdziot 15. + Zaawansowone techniki kotzystania z fomwlatzy UserForm 443 .
Metoda 1. zapisanie wykresu do pliku
To, te programiSci Microsoftu nie pomydleli o rnotliwoSci wyswietlania dynamicznych
wykresdw w formularzach UserFon, nie oznacza, t e nie m o h a tego uobif! Na rysunku
15.12 pokazano formularz UserForm z wykresern wyiwietlanym jako obraz (obiekt Image).
Wykres jest zapisany w arkuszu i dzitkj temu formularz UserForm zawsze wyswietla aktu-
alny wykres. Zastosowanie tej techniki wymaga skopiowania wykresu do roboczego
pliku graficznego i ustawienia whiciwoki Piclure obrazu na ten roboczy plik. Szcze-
gdtowe objainienie tej techniki znajduje rig ponitej.

Rysunek 15.12.
mtarczy
odroblna pomystowo9ci,
aby wyjwietlat
"dynarniczne" wykresy
w forrnulanach UserFom

Spos6b wyiwietlania wykresbw w fcrmularzach UserForm


Aby wySwietliC wykres w formulam UserForm, wykonaj poni2sze czynnoici:
I . Utw6rt wykres lub wykresy.
2. Dodaj formularz UserForm, a w nirn kontrolke Imzge.

3. Napisz kod VBA zapisarj;\cy w k r e s do pliku GIF,a nastcpnie usrawiajqcy


w h l c i w d t Picture kontrolki Imge na utworrony plik GIF. W tym celu
skorzystaj z funkcji Loadpicturejezyka VBA.
-. .
4. Dodaj inne elrmenty w miare ~otrzeb.Na ~rzvklad
, formularz UserF3rrn w oliku
dernoktracyjnym i w i e r a kontrolki ponvalajqce na zmianq typu wykresu:
Alternatywnie motna napisat kod wyiwietlajqcy wiele wykres6w.

Zapisywanie wykresw jako pllku GIF


Ponihzy kod demonstruje spos6b uhvorzenia pliku GIF [o n m i e temp.gfl na podstawie
wykresu (w tym przypadku jest to pienvszy obiekt typu Chart dla arkusza Dare):

Fname -
Set Currentchart -
She?tts['Dane" .ChartObjects(l).Chzr:
ThisUorkboot. Path b ' \ t m p . g i f '
CurrentChart.Eqort Fi 1eNaee:-Fname. F l l terName:-'GIF"

W czasie wykonywania kodu bedzie wyiwietlalo sit okno pokazujwe p a s t ~ pzadania


(na pytanie, w jaki sposhb wylqczyc to okno, odpwiadam -nie wiern).
444 CzeJC IV + Zastosowanie fomularzy UserForm

Modyfikacja wla5ciwo5ci Picture kontrolki Image


Ponitsza instrukcja spowoduje zaladowanie obrazu (reprezentowanego przez zmiennq
Fname) do kontrolki lmge (dla sytuacji, kiedy kontrolkc Image formularza UserForrn na-
m a n o 1;mgel):

,:r3...+:Y Pokazany powytej spas6b ddaia, ale podczas zapisywania i odtwamnla wykresu
\ef WjStepUje niewielkie op6tnienie. W przypadku szybkich kornputer6w to op6fnienie
- nie jest jednak odczuwalne.

Metoda 2. zastosowanie kontrolki ChartSpace z pakietu OWC


Jak wspomniatem w rozdziale 13., w f o r m u l a m UserForm motna umieicid kontrolki,
ktdrych nie ma w przybomiku. Microsot? dohczyt do pakient qffice 2003 skladniki Offie
Web Cornponenu (OWC). D z i ~ ktemu
i w formularzach UserForm m o m a umieszczat
kontrolki OWC. N a rysunku 15.13 zaprezentowano pnykhd formularza UserForm z kon-
trolkq ChartSpace.

Rysunek 15.13.
Ten formularz . . ,- . .. fl

UserForm zawlera
kontrolke Chartspace

Zaprezentowana technika nie pozwala na wy5wietianie wykresu Excefa w tonnulanu


UserFon. Aby W w i e t l i f wykres, tneba napisat kod twonqcy wykres w kontrolce
ChartSpace.

Udostqpnianle kontrolki ChartSpace


Najpierw do-y k o n w l k p ChartSpace do pnybornika. W tym celu nale* kliknqt
pnybomik prawym prryciskiem myszy, co spowoduje wy9wietlenie okna dialogowego
Dodutkowe formunfy. Nastcpnie nale2y p r z e w h j liste w d& i zamaczyE pole wyboru
I Rozdzial 15. Zaawansowone techniki korrystonia z formulorry U s e r F m 445

obok pozycji Microsofl Ojlice Chart 11.0. W pnypadku Excela 2002 bgdzie tarn pozy-
cja Microsofl O J c eChart 10.0, natorniast w przypadku Excela 2000 pozycja Microsofr
Ofice Ch& 9.0. Klikniecie OK spowoduje dodanie nowego przycisku do przybornika.

Dodawanie kontrolki ChartSpace w formulanu UserForm


Kontrolki Chartspace w forrnulamch UserFonn dodaje sic tak samo, jak kontrolki stan-
dardowe. Po dodaniu kontrolki wykres nie jest wyiwietlany natychmiast. Aby utwonyt
wlaSciwy wykres, hzeba napisat odpowiedni kod.

Tworzenie wylcresu dla kontrolki OWC ChartSpace


Ponitszv kod. umieszcwnv w module kodu fonnulma UserFom, tworzy wykres na
podstadie da&h zapisanich w arkusm. Etykiety kategorii urnieszczono 4 k&6rkach
A2: A13, a dane, rra podstawie kt6rych tworzony jest wyhes, w kom6rkach 82:013.Zdoiono.
t e obiekt ChartSpace ma nazwq ChartSpacel.
Sub Createchart( )
Dim Olartl As ChChart Kchart
Dim Seriesl As ChSeries ' WCfeies
D i m r As Integer
Dim N a l u e s ( 1 To 121
Dim DataValues(1 To 12)

-
'
Dodanie wytresu do oblettu ChartSpace
Set Chart 1 ChartSpacel .Chz~s.ACd

Nadanle wytresoui t y t u l u
Ulth Chartl
.HasTit l e True - -
.Title.Caption Range('B1'1
End U i t h

For r - 2 To 13
--
XValuestr - 1) Cellscr. 11
DataYalues(r - 1) Cellstr. 21
Next r

-
Utworrenie sert i danych wykresu
S e t Seriesl Chartl.SerlesCollectian.Add

CtkreSlenie typu wylrresu 1 danych


With Seriesl
-
.Type chChartT~CaluatPustered
.SetData chDimtatequr1es. chDataLitera1. #Values
.SetOata chOimValues, c h h t a l i t e r a l . DataVal-
End Uith
End Sub
1
Kod roqmclyna siq od deklaracji zrniennych. Zadeklarowano dwie tablice, z ktbrych
jedna pncchowuje etykiety kategorii (%Values), a druga zawiera dane [OataValues). In-
I strukcja Set twony obiekt Chart wwm@zkontrolki Chartsoace. Obi& C h a r t nosi name
Chartl. W kolejnym bloku instrukcji nastwuje ustawienie tytuiu wykresu za pomocq

i etykicty zapisanej w kwminre 01. Dane z arkusza a% p m o s z o m do tablic w ntti For


446 CzgJC IV + Zastosowanie forrmlafzy UserForm

Zastosowanle komponent6w slecl Web pakletu MAee


Komponenty sleci Web pakletu OMce opracowano w celu tworzenla interaktywnych stron WWW.
Da komponent6w nale2q arkusz kalkulacyjny. wykres oraz tabela przestawna. U~chomienleaplikacji
wykorzystujqcej sktadnlkl OWC wymaga zainstalowania tych sktadnikdw w komputene uzytkownika.
Sktadniki OWC s$ dotwzane do pakietu OM=. poczqwszy od wersji OMce 2006).lnstalacja nie
odbywa siq automatycznie. Nie rnoina zatem zato2yt, i e wszyscy uiytkownicy pakietu majq zain-
stalowane sktadniki OWC, poniewai bfl mote nie zamaczyli tej opcji instalacji. Z tego powodu.
w przypadku zastosowania kontrolek OWC w aplikacjach. naleiy z a d b l o wyswietlenie odpowied.
niego ostrzetenia. Jeieli aplikacja jest przemaczona dla szeroklego krqgu odbiorcdw, naleiy unikzd
korzystania z OWC.
-
. . . Next. Kolejna instmkcja Set powoduje dodanie serii danych do wykresu. Obiektowi
serii nadano nazwq Seriesl. W bloku kodu With . . . End nastepuje ustawienie typu
wykresu (standardowy wykres kolumnowy) i wprowadzenie danych dl,a serii.

Dokurnentacja obiektbw OWC znajduje sie na twardym dysku. Jest ona instalowana
w momencie instalowania skladnika OWC. Altematywnie motna uAyC prLeglqdarki obiek-
tbw, dziqki niej motliwe jest lepsze pomanie w+aSciwo9cinowych kontmlek.
Model obiektbw do twonenla wykres6w dla sktadnlk6w OWC nle jest taki Sam.
c~F** jak model oblektbw do tworzenla wykres6w w Excelu. Zastosowanie jqzyka VBA
do wykonywania dziatah na "rzeczywistych" wykresach Excela om6wiono w rozdziale 18.

Na rysunku 15.14 pokazano nieco bardziej skornplikowany pnypgdek formulam UserForm.


Utytkownik ma motliwoiC wyboru danych, na podstawie kt6rych utwolrzy wykres. W tej
wersji istnieje t a k e motliwoSC eksportowania wykresu jako pliku GIF.

Rysunek 15.14.
Ten fomularz
UserFom zawlera
kontrolke Chartspace
(jeden
z komponentbw sleci
Web pakietu Office)

Ta apllkacja jest dostqpna na plyde CD-ROM do)qczoneJ do kl@l.Jej wykonanie


wymaga isinstalmania Excela 2002 lub nwszej wersji tego programu.

Wyfwietlanie arkuszy w formularzach UserForm


Wyhietlanie wykresbw w forrnulanach UserFon nie wystarcza? A co powiecie na cale
arkusze? Na rysunku 15.15 zaprezentowano prryklad formulam UserFon zawierajqcego
kontrolke Microsoft Spreadsheet 11.O. Ta kontrolka umotliwia urnieszczenie interak-
tywnego arkusza zawimjqcego fwmuly oraz elernenty formatowania. W rzeczywistosci
Rozdziat IS. Zaawansowane techniki korzystania z formulam/ UserFortn 447

Rysunek 15.15.
Ten formularr
Userform
1 Spreadsheet

kontrolka ma istotnq przewag? nad standardowym arkuszem Excela: jego wymiary to


18 278 kolurnn x 262 144 wierszy. To prawie 300 razy wiecej komdrek n i t w standar-
dowym arkuszu Excela!

Udostqpnianie kontrolkl Spreadsheet


N a j p i m nalety dodat konmlkc Spreadsbeet do pnybornika. W tym celu nalezy kliknqc
przybornik prawym przyciskiem myszy, co spowvoduje wy9wietlenie okna dialo,mowego
Dodatkoweformanly. Nastppnie nal* przewinqt list? w d6l i zamaczyc pole wyboru
obok pozycji Microsofr W c e SpreadFheet 11.0. W przypadku Excela 2002 bedzie tam
pozycja Microsofi Ofice Spreadsheet 10.0, natomiast w pnypadku Excela 2000 pozy-
cja Microsofr Ofice Spreadrheet 9.0. Klikniqcie OK spowoduje dodanie nowej ikony do
pnybomika.

Dodawanie kontrolki Spreadsheet w formularzv UserForm


Kontrolke Spreadsheet dodaje sip w fornulanu UserFon tak samo, jak inne standzrdo-
we kontolki. W efekcie w Formularru UserForm zostaje urnieszczony skoroszyt zzlazony
z tnech arkuszy. Jak siq p~ekonamy,ten skomszyt rno2na dostosowaC do indywidual-
nych pomeb.

Prosty przyklad zastosowania kontrolki Spreadsheet


komponent6w sieci WWW pakistu Office
W tym p r r y k M e wykorzystano kontrolke Sprezdsheet do u t w o m i a prostego kalku-
latorapotyczek w fonnulam LlserForm. Efekt pokazano na rysunku 15.16. Utytkownik
wprowdza informacje o kwocie potyczki w kolumnie 0, nastepuje obliczenie miesi~me!
raty (z wykonystaniem forrnuiy), a y n i k jest wyiwietlany w komdrce majdujacej si?
w prawyrn doinym rogu.
448 CzeSC IV + Zostosowanie forrnulany UserForm

Rysunek 15.16.
W tym fomulam
UserForrn zastosowano
kontrolke Spreadsheet
do utwonenia prostego
kalkulatora rat poaczki

Ten przyktad ma charakter jedynie ilustracyjny. Wykorzystanie kontrolki S~readsheei


dla potrzeb tak prostej aplikacji jest prresadq. 0 wiele wydajniejszym sposobem
obliczenia rat poiyczki za pornocq kodu VBA jest zastosowanie p6I edycyjnych.

Aby utwonyC formularz UserForm spchiajqcy opisane funkcje, U ~ W ~nowy


R skoroszyt,
dodaj kontrolke Spreadsheet do przybomika (wipcej informacji na ten temat majduje
sip we wczeiniejszyrn punkcie ,,Dodawanie kontrolki Spreadsheet w formularzu User-
Form"), a nastepnie wykonaj ponitsze czynno3ci:
1. Wstaw nowy formularz Userform i dodaj do niego kontrolkp Spreadsheet.
Nie zmieniaj jego nazwy domyilnej (Spreadsheetl). Domyflnie obiekt Spreadsheet
wySwietli sip z paskiem narz@zi, nagt6wkami wierszy i kolurnn, paskami
pnewijania oraz zakladkami wyboru arkusq. Aby zachowaC przejrzystoiC
interfejsu. p6tniej pozbcdziesz sip tych elernent6w.
2. Zamacz dowolnq kom6rke w arkuszu, nastepnie kliknij jq prawym przyciskicm
myszy i z menu podrecmrgo wwybierz pozycjp Polecenia i opcje. Na ekranie
wyiwietli sip okno dialogowe z nkladkami podobne do pokazanego

Rysunek 15.17.
Tego okna
dialogowego matna
utyC w celu
dostosowania
-kc-bwda 1Qmra :I
-
a
.
F m e 1 k m ( . I M P m
..- . ~.

f-w-
. ........
i+%dax:,

A
m
...

-
cwnm=m
wtabciwodci kontrolki ~~

Soreadsheet r wmpaars r w m -
rw* Pmkmodd
- .-. - - -.--- . - -.
-........ -. .- . . . .
me.:
, ..-
awl

ibY1' + d
b b w d

i * *

3. Kliknij zakhdkp Skomnyr i u s d pozycje Ark& oraz A r k 3 . Nastepnie wyczy3C


pola wybom Pasekprzewijnniapoziornego, Pmekpr:ew@tria pionowego,
Selektor arkuszy oraz Pmek norzedii.
4. W kolurnnie A wprowadt tekst widoczny na rysunku 15.1.6. Nastppnie dostosuj
szerokoid kolurnny A w taki spos6b. aby nniejcil siq w niej tekst.
5. Wprowadt liczby w kom6rkach z &esu 81 :83. Nasepnic w komorce 05
wprowadf p o n i a q formutp:
-PHT(B2/12.53.-81)
Rozdziat 15. Zaawansowone techniki korzystania z formulary UserForm 449

6. Zaznacz zakres 81: 03, a nasqpnie kliknij zakladke Format w oknie dialogowym
Polecenia i opcje. Kliknii ikonc klucza w celu odblokowania zaznaczonvch
kom6rek (po;o;tale kornbrki p&ostanq zablokowane; jest to dzialanie &myilne).
7. Kliknij zakhdkc Arkarsz w oknie dialogowym Polecenia i opcje. Wpolu Widocty
zakres wprowadi A1: 05. Spowaduje to ukrycie nieutywanych wierszy i kolumn.
a. Anuluj zamaczenie opcji h'agldwki wiersry oraz Nagkjwki kolumn.
9. Na koniec dodaj dwa przyciski poleceb. Prycisk Cancel8utton bqdzie spelnial
funkcje przycisku Amrluj, przycisk PasteButton spowoduje wykonanie kodu,
ktdry wklei obliczony wynik do aktywnej komdrki arkusza Excela.

Teraz nalety wprowadzik kod VBA. Wykonujqc czynnoici z poprzedniej procedury,


odblokowaliSmy trry kom'6rki. Blokowanie korndrek nie daje tadnych e.fekt6w. o ile arkusz
nie jest zabezpieczony (podobnie jak w Excelu). Z tego powodu wprowadzimy kod, kt6ry
b&e zabezpieczat arkusz w momencie inicjowania formulam UserFon. Arkusz motna
by zabezpieczyt w czasie projektowvania (za pornocq okna dialogowego Polecenia i opcje),
ale w takim przypadku nicmotliwa bylaby edycja arkusza - a poza tym moglibyimy
zapomniet o ponownym zabezpieczeniu arkusza po wykonaniu mian.

Zabezpieuanie arkusza w fazie wykonywania prograrnu urnotliwia wprowadzanie danych


w komdrkach z danymi wejiciowymi. Zadanie to jest realizowane przez nastppujqcy kod:
Private Sub UserFon-In1 tlalize( 1
Spreadsheet1.Activesheet .Protect
End Suo

Kliknivie przycisku fomularza UserFom opisanego etykietq Wklej plarnoiC spowoduje


wykonanie nastppujqcego kodu:

-
Private Sub PasteSutton-Ctick( )
ktiveCel1 .Value S p r e a d s k ' . ? .Range("35'f
Unload He
End Sub

Dzialanie tej procedury polega na urnieszczeniu zawartoSci komirrki 85 (z kontrolki


Soreadsheet) w aktywnej kombrce arkusza Excela. a nastppnie usunieciu formularza
UserForm z parnipci.

Na koniec zdefiniujemy procedurq obstugi zdarzenia dla pnycisku Anuluj:


Private Sub CancelButton-Click()
Unload He
End Sub

W zasadzie budno mi m a l a sytuacje, w kt6rych naleabby zastounvat kontolkq Spre-


adsheet w fomularm UserFcrm. Wano jednak wiedzied, % taka wldciwdC jest dostppna,
gdyt motc okazat sic potnebna.
450 Czeft IV + Zostosowanie formulany UserForm

UserForm Deluxe: ulepszony formularz danych


PonitFj zaprezentujqjeden z najbardziej zaawansowanych fonnularzy UserForm spoSr6d
zamiestczonych w tej ksi-e. Zaprojektowalem go, aby zastr\pid formularz danych Excela
pokazany na rysunku 15.1 8. Jak pamictamy, jest to o h o dialogowe, ktdre wyiwietla sie
po wybraniu polecenia Dane/Formulan.

Rysunek 15.18.
Forrnulan danych
Excela

Podobnie jak formulam danych Excela, m6j ulepszony formularz danych wykonuje
dziaiania dla listy z arkusza. Jednak, jak motna zobaczyt na rysunku 15.19, ma zupehie
inny wyglqd i dodatkowe zalety.

Rysunek 15.19.
' Ulepszony fonnulan
danych opracowany
przez aurora ksiqtki

Opis ulepszonego formularza danych


W ulepaonym formularzu danych wprowadzono usprawnienia wyszczegolnione w ta-
beli 15.1.

Ulepszony formulam danych to produkt kornercyjny. Jest dostepny na &Tie CD-ROM


dohczonej do kslg2kI i rnotna go utywaC I rozprowadzaC bez tadnych optat. Jednak
dostep do kornpletnego kodu a6dbwegojest rnoiliwy po uiszczenlu niewielkiej oplaty.

lnstalacja dodatku - ulepszonego formularza danych


Aby wypr6bowC ulepsany fonnularz danych, zainstaluj dodatek, wykonujw n w p u j *
czynnolci:
Rozdziat 15. + Z a a w a n s o w a n e techniki k o r y s t a n i a z formularzy UserForm 45 1

I l a b e l a 15.1. Podwnanle ulepszonego fomularza danych z fonnulanem danych Excela

Ulepszony Cormularz danych Formulan danych Excela


Obsluguje dowolnq liczbq rekord6w i p61. Ograniczenie do 32 p61.
I Okna dialogowe motna wyJwietlaC w dowolnym rozmiarze. Okno dialogowe dostosowuje r o m i a r
do liczby pbl. Czasarni zajmuje caly ekran!
1 MotIiwo3i wykorzystania zardwno p61 ~kstowych.jak p6l
kombi.
W oknie dialogowym motna skorzystat
wylqcznie z p61 tekstowych.
i
Rekord wySwietlany w oknie dialogowym jest zawsze Nie przewija ekranu i nie pod$wietla
widoczny na ekranie i jest wyr6tniony. dzicki czemu bi%cego rekordu.
dokladnie wiadomo. z jakim Rkordem ~ykonujemydziatania
Poczatkowo okno dialogowe zawsze wySwietla ~ k o r d Zawsze rozpoczyna wydwietlanie
w aktywnej kombrce. od pienvszego rekordu w bazie danych.
Zamknipie okna dialogowego powodujc wybranic bieacego Po zamkniqciu okna wybrany mkord jest
rekordu. taki sarn,jak przy jego otwieraniu.
1
Pozwala wpmwadzih nowy rekord na dowolnej pozycji Nowe rekordy motna dodawat rylko
w bazie danych. na kohcu b a q danych.
Znwiera przycisk Undo dla polecef~rnodyfikacji danych, Zawicra tylko prryfisk Prqwrbf.
wstawiania nowcgo rekordq usuwania rekordu i wpmwadzania
nowego rtkordu.
Kryteria wyszukiwania sqzapisywane w innym panelu. Dzieki K v e r i a wyszukiwania nie zawsze sq
temu zawsze wiadomo, co jest wyszukiwane. widoczne.
Obsluguje maki wzorc6w w wyszukiwaniu (*, ? oraz 8). Nie obsluguje makirw wzorc6w.
Dostcpny jest kompletny kod fr6dlowy w j q y k u VBA. Formularzdanych nic jest napisany
co umotliwia dostosowanie formulam do potneb w jqzyku VBA, a zatcm nic moma
I utytkownika dostosowat go do potrzeb utytkownikr

1. Do katalogu na dysku twardym skopiuj plik dataform2,xlaz ptyty CD-ROM


d a c z o n e j do tej biqtki.
2. Uruchom Excel i wybierz polecenie Nan&zidDodatki.
3. W oknie dialogowym Dodarki kliknij Pneglqdaj i na dysku twardym odszukaj
i zamacz piik daraform.xla,a nasqpnie kliknij pnycisk OK.

Wykorzystanie ulepszonego formulana danych


Po zainstalowaniu ulepszonego formularza danych pojawia sip nowe polecenie w menu:
DandJWalk Enhanced Data Form. Ulepszony formulan danych rnoha wykonystat
do pracy z dowolnq b a q danych w arkuszu.
Zaawansowane techniki
Tworzenie narzedzi
dla Excela w jezyku VBA
Nancdrie, ogolnie rzecz biorqc, jest ulepszeniern prograrnu, wprowadzeniern do niego
uwecznych wlaSciwoici lub zwitkszeniern dostcpnoici ismiejqcych wlaiciwoici.
W tym rozdziale zostanie opisanych kilka zagadnien &iazanych z narzedziami Excela.

W prowadzenie
Nanqdzie nie jest produktern koricowym, takim jak na przyktad kwartalny raport. Jesr
to raczej program, kt6ry utatwia tworzenie produktu kon'cowego. Narzqdzie Excela to
prawie zawsze dodatek wzbogacajqcy jego motliwofci.

Pomimo tego, t e Excel jest doskonaiym produktern, utytkownicy wciqz zgtaszaja pro-
pozycje ulepszed. Na ptzykjad ci, kt6rzy wylqczajq wybwietlanie linii siatki, z radoiciq
powitaliby opcjp ponownego ich wtpzania bez konieczno8ci otwierania okna dialogo-
wego NanqdzidOpcje. Utytkownikom wykonujqcyrn operacje na datach przydalby sic
p o d r p n y kalendarz ulatwiajqcy wpmwadzanie dat w komijrkach. Jeszcze inni poazebujq
htwiejszej rnetody eksportowania zakresu danych do osobnego pliku. To tylko kilka
przyktaddw d z i a t a ktdre prawdopodobnie nigdy nie pojawiq sic w standardowym ze-
stawie whsciwoSci funkcjonalnych Excela. Motna je jednak dodad, t w o q c narzqdzia.

N q d z i a nie m u s q by6 skomplikowane. Niekt6re najutyteczniejsze nanqdzia sq wia-


Sciwie bardzo proste. Na przykhd poni&za procedura w jezyku VBA to narzedzie do
w$czania (wybczania) linii siatki w aktywnyrn oknie:
Sub ToggleGridDi splay( )
Act!veliim3w.OisplayGridlines -
Not kt1 v e ~ l n d w . ~ i s p l a ~ ~ r i d ~ i n e s
End Sub

Powy2sm makr~mo2na zapisak w osobistym skoroszycie z mahami I& aby by10 zawsze
dostcpne. W celu umo2liwienia szybszego dostepu, motna je przypisat do pnycisku na
pasku n a n e do nowej pozycji menu, do polecenia w menu podrccmym Iub do skrbtu
klawiaturowego.
Kilka pt-oIdadbw kodu fr6dbwego zaprezentowanych w czeCl IV m o ~ za tativo5ciq
meloztafcif ria namedzia.
456 Cz$SC V + Zoowonsowane techniki programowonio I

Zastosowanie jezyka VBA do tworzenia narzqdzi


Excel 5. wydany w 1992 roku, to pienvsza wersja Excela z obslugq jpzyka VBA. Kiedy
walizowakrn wenjq beta Excela 5 , j w k VB.4 wywart na rnnie dute wntenie. By* o niebo
lepszy od posiadajqccgo dute rnoPliwoici (ale nieczytelnego) jqzyka makr XLM, dlatego
postanowitern poznac nowy jqzyk i sprawdzic jego motli\vo$ci.
Podczas nauki napisatem zbior narzedri Excela, korzystajqc wylqcznie z jqqka VBA.
PomySlatern. t e naucq.sie jpzyka szybciej, jeteli postawiq sobie ambimy eel. W rezul-
tacie powstal produkt. ktdry nazywam Power U~dliryPak for Ercel. Udostepniarn go za
danno wszystkirn, ktbrzy kupiq tp ksii@kp.

Jqzyk VBA pocqtkowo mote wydawat siq trudny. ale w praktyce okazuje sie bardzo
przystepny. Kluczern do osiagniqcia mistrzostwa w j~zykuVBA jest eksperyrnentowanie.
Katdy projekt, ktbrym sic; zajrnujc, zwykle sktada sip z kilkunastu rnatych ekspery-
mentdw propnmistycmych, wsp6lnie tworqcych koticowy pmdukt. Jpzyk VBA pozwala
tet poszemc rnotliwoici Excela w sposdb spojny z jego standardmi dotycqcymi menu,
paskdw narrpdzi i okien dialogowych.
Za pornocq Excela rnotna &if pnwie wszystko. Kiedy napotkmy ilepq uliczke, nvykle
okazuje sip. t e do celu prowadzi inna icietka. Tneba rylko by6 kreatywnyrn i wiedzief,
gdzie nalety szukaf pomocy. Niewiele pakiet6w programowych zawiera tak obszerny
zestaw nmcdzi pozwalajqcych ~Zytkawnikowina rozszemnie standardowych motliw&ci.

Co decyduje o przydatnoici narzedzia?


Yancdzie Excela powinno ulatwiat pracp lub przyczyniat sit do wzrostu wydajnoici.
Jednak co sprawia, te narztdzie utwokzone dla szenzego grona utytkownikow jest warto-
iciowe? Ponitej utworzytem liste element6w charakterystycmych dla dobrych narzcdzi.
rt'prowad-.ojq do Ercela coi nouvego. Mote to by6 nowa wta4ciwoSC. potqczenie
ismiejqcych wfaiciwoici lub ulatwvienie konystania z ismiejqcych wldciwoici.
Mnjq charaher uniwersalny. W jdealnej sytuacji naqdzie jest dobrc, jcfli spehia
swojq role w jak najszenzyrn zakresie warunkdw. OczywiScie nauisanic namedzia
ogdlnego prz&nac&nia jest trudniejsze od stwonenia narzqdzia przemaczonego
do wykorzystania w iciile zdefiniowanym irodowisku.
Sq eius~czne.
Najlepsze narzpdzia zawierajqwiele opcji slutacych d o obstugi
wielu sytuacji.
Wyglqdajqjakpolecenia Excela. Chociat czasarni trudno sip oprzet chpci
wprowadzenia wlasnych elementbw, innym uiykownikom latwiej konysta sip
z narredzi, jelli sprawiajq wratenie poleceh E.xcela.
Zapewniajqpomoc qikownikom. M6wiqc iinaczej, n q d z i a powinny byf
\wposa2one w szczegolowvq i iatwo dostqpnqdokumentacjp.
W Obshrguj~bl&. Utytkownik nigdy nie powinien oglqdat komunikatu o btqfzie
systernu VBA. Jedyne dopuszczalne kornunikaty o btedach to te, ktbre sarni
zdefiniowalifmy.
Rozdzial 16. + Tworzenie narredzi dla Excela w jgzyku VBA 457

Efekfy ich dziafania motna cofirqf. Utytkownikorn, kt6ny nie bpdq zadowoleni
z dzialania naszych narzcdzi, nalety zapewnit sposdb cofnipcia skutkdw ich

Operacje tekstowe - anatomia narzedzia


W tym podmzdziale opisq stworzone przeze mnie narqdzie Operacje tektowe (rysunek
16.1). Jest ono n d c i q pakietu Power Urilip Pak i umotliwia utytkownikorn wykony-
wanie dzialari na tekstowej mwartoici wybranego zakresu kombrek. W szczegdlnolci
umotliwia wykonywanie nastcpujqcych dziam:

Rysunek 16.1.
NanNn'e Operaye
tekstowe motna
wykonystad
do zmiany wlelkofci
liter zaznaczonego
tekstu

zmianq wielkoJci liter tekstu (dute littry, mak litcry, wszystkie wyrazy z d q c h
liter, jak w zdaniu, przdzpnik mak-dute),
wprowadzanie mak6w w tekScie (m pocqtku. na koricu, na okrdlonej pozycji).
B usuwanie mak6w z tekshl (z pocqtku, z kodca lub z okrtglonej pozycji).
usuwanie spacji z tekstu (wszystkich spacji lub nadmiarowych),
usuwanie mak6w z tekstu jniedrukowalnych, mak6w alfabetu, makdw
niebcdqcych cyfmmi, mak6w nietydqcych cyframi lub znakami alfabetu).
Ne
- Opeq'e tekstowez pakietu Power UtiHty Pakmtdwbgpm na p)yde C W M
dolgzon) do ksiqtki. Mofna )e zainstalmaC, wy!Aera]+c w Excel" polecenlc
Nan@zia/Dodatki (,ale, klikng pnycisk Przeglqdaj i odszukad plik *.xlal. MoLna
tei po prostu ohvo m plik za pomczq palecenia Plik/Ohv&z W kazdym przypadku
~stniejedostep do pelnego kodu &&owego {ten prolekt VBA nie Jestchroniony haslem).
458 Czeft V Zaowansowane techniki ~ r o a r a m o w a n i a

Podstawy tworzenia narzqdzia Operacje tekstowe


Wiele funkcji tekstowych Excela pozwala wykonywai p q d a t n e dzialania na ciqgach
makbw. Na pnykiad motna zamienif litery tekstu w kom6rce na duze, usunqf znaki
z tekstu, usunqi spacje itp. Jednak w celu wykonania tych dziaiari trzeba napisat foimuly,
skopiowad je, zarnienik formuly na wartogci. a nastppnie wkleiC wartoSci w miejsce
oryginalnego tekstu. Mbwiqc inaczej, modyfikowanie tekstu w Excelu nie jest szczeg6lnie
tatwe. Z pewnogciq byloby wygodniej, gdyby istnialy narzpdzia umotliwiajqce modyfi-
kowanie tekstu bez koniecznoici utywmia fonnui.

Tak na marginesie, wiele pomysl6w na dobre narzpdzia biene poczqtek od sfomuiowania


zdania zaczynajqcego sip od slow: ,J pewnodciq byioby wygodniej ...".

Okreilenie~wymagairdla narzqdzia Operacje tekstowe


Pierwsq czynnoSciq, jakq n a l e g wykonat podctas tworzenia narzpdzia, jest okreSlenie
wymaga6. Ponitej znajduje sip m6j plan dziahnia ujety w dziesieciu punktach.
Narzqdzie bpdzie charakterymwaio sic widciwokiami, ktbre opisano na pocqtku
niniejszego podrozdzialu.
D Bpdtie umotliwialo utytkownikowi zatqdanie wymienionych modyfikacji
dla kom6rek tekstowych i nietekstowych.
Bedzie miak wyglqd innych poleceh Excela. Mbwiqc inaczej, okno dialogowe
narzpdzia bpdzie przypominat wbudowane okna dialogowe Excela.
Bedzie miato formp dodatku dostqpnego z menu Naff&b.
8 k d z i e d d a h dla bi-cego zakrcsu zamanonych komcirek (wlqcznie z wyborem
wielokrotnym). Dodatkowo b@zie motliwa zmiana zaznaczenia podczas
wySwietlania okna dialogowego.
U Ostatnia wykonana operacja bpdzie pamiptana i wy3wietli sip podczas pnownego
otwarcia okna dialogowego.
Narzgdzie nic btdzie modyfikowat kombrek zawierajqcych formuly.
Bedzie dzialalo s y b k o i wydajnie. Je2eli na przyklad utytkownik zamaczy catq
kolumnp, puste kom6rki zostanqzignorowane.
U2ytkownik bpdzie mial rnotliwolf cofniecia wykonanych a i a n .
B Bpdzie dostppna obszema pornoc.

Jak dziata narzqdzie Operacje tekstowe?


Otwarcie d o d a h Operacje tehtowe powoduje w menu NUTZ&~I uhvotzenie nowej
poycji: Operncje tekrtowe. Po jej wybraniu wykonywana jest procedura RunTextTools,
M6ra najpierw sprawdza, czy Excel dziata we wldciwyrn konteklcie (czy jest akeywny
arkuu). a nastppnie wygwietla glbwne okno dialogowe Operacje tehtowe.
, Rozdzial16. Twotzenie narzedzi dlo Excela w jezyku VBA 459

U m o w n i k o M l a modyfikacje do wykonania, a nastqpnie klika pnycisk Zmtosuj, aby


je wykonat. Modyfikacje y widocme w arkuszu, ale okno dialogowe w dalszym c i u u
wjiwietla sic na elmie. W d ~ o p e r a cmoma
j ~ cofnqc, a takte moAa wykonac dodatkowe
dzialania z tekstem. Klikniccie przycisku Pomoc powoduje wyiwietlenie okna pomocy.
natomiast klikniccie przycisku Znmknij - zamknipcie okna dialogowego. Jest to niemo-
dahe okno dialogowe, a wiqc w czasie, kiedy sip wy3wietla. rnotna konynuowat prac?
w Excelu.

Skoroszyt narzqdzia Operacje tekstowe


Skoroszyt narzqdzia Operacje teksrowe sklada sit z nast~pujacychkomponentdw:
jednego arkusza- katdy skoroszyt musi zawierac co najmniej jeden arkusz
(skonystalem z arkusza do obslugi procedury Co'ii j, co opisuje w punkcir
,,Implernentacja procedury Cofnij" w dalszej cz.$ci rozdzialu);
-
jednego modrc/ti VBA w tym module znajdujq sie deklaracje zmiennych
publicmych i stalych. kod wyswietlajqcy fomularr UserForm oraz kod obstugi
procedury Cofni j; kod wykonujqcy wlasciwe dzialania jest zapisany w module
kodu formulam UserForm;
jednego obiektu UserForm -zawiera okno dialogowe twkorqstywane
przez narz~dzie;
moduiu kodu Thi sworkbwk - zawien kod do tworrenia (i usuwania) pozycji
z menu N a q W a .

Forrnulan UserForm dla narzedzia Operacje tekstowe


Kiedy t w o m napdzia, zazwyczaj zaczynam od zaprojektowania interfejsu utytkownika.
W tyrn przypadku jest to okno dialogowe wyiwietlane utytkownikowi. Tworzenir okna
dialogowego zmusza mnie do przemyilenia projektu razjeszcze.

Fomularr UserForm dla nmgdzia Opwa4e tebrowe pokazano na rysunku 16.2. Wano
nvrdcit wag?, t e konfiguracja kontrolck zmienia siq w zaletnoSci od wybranej opcj i.

Rysunek 16.2.
Fonnularr UserForm
dla nanedzla
Operacle tekstowe

K o m l k i w formulam UserFmm sq ubtone k e j , nit wstanq faktycmie ewietlone.


Wynika to sQd, Ze dla r6tnych opcji wstaiy zastosowane r6me konbolki, a pzycje kon-
trolek sq obsiugiwane dynamicmie, w kodzie. Kontrolki ~rymienionoi opisano ponize-j.
460 CzeJe V Zoawansowone techniki progromowania

Pole kombi Operacja (CmboBoxOpertion): zawsze jest umieszczone z lewej


strony okna. Stuty do wyboru operacji. ktdra ma by6 wykonana.
Pole kombi Procl (ComboProcl) wykonystywane jest w wi$kszo4ci operacji
modyfikacji tekstu do bardziej szczeg6towego zdefiniowania dziahh.
Pole kombi Proc2 (ComboPrx21wykonystywane jest w dw6ch operacjach
modyfikacji tekstu do jeszcze bardziej szczeg&owego zdefiniowania dziatan.
Sq to.operacje Wprowad-' iehr oraz Usuri rekrr ipozycji.
Pole wyboru Pomiri nietekstowe (ctSkl pNonText jest opcjq wiaSciwq
dla niekt6rych operacji.
Przycisk pomocy (ikona pytajnika)
wyiwietlenie pornocy.
- klikniccie tego przycisku powoduje

Przycisk Zamknij [CloseLbttzn: -jego klikniecie powoduje znmkni~cie


formulam UserForm.
r Przycisk Zasiosuj ( AoplyButton 1 -jego kliknipcie powoduje wykonanie
wskazanych operacji dla zamaczonego tekstu.
Wskatnik postppu zadania: sktada siq z etykiety (konwlka Label) wewnqtrz
ramki (konrrolka Frame).
Pole tekstowe jest wykonystywane w opcji Wprowadi tekr!.

Na rysunku 16.3 pokazano wyglqd fonnularza UserForm dla katdej z pipciu operacji.
Konfiguracja kontrolek j e s t r6tna w zaleMo4ci od wybranej opcji.

Ryrunek 16.3.
Uktad fomulana
U s e r f i n jest r b a y
dla rdinych operacji

Opisywane tu nanflzie nanrsza jedng z zasad projektowanla, opisanq w podmzdzlale


.Co decyduje o prrydatno9ci narzedzia?". W odr6tnieniu od wlekszoSci wbudowanych
okien dialogowych Excela, nanedzie nic ma przycisk6w OK i Anvluj, a klikni-ie
m i s k u Zastosu] nie w d u j e zamknlwla okna. W pierwotne] wersji nanedzia
Operacje tekstowe by+ prqzisk OK. ktdrego ddatanie polegato na wykonaniu zadania
i zarnkniqciu okna. Uwagl xiytkownik6w skiunity mniejednak do zrniany tej wkfciwofci.
Jak slg okazaiu, wielu uiytkownikdw wykonuje kilka rdinych dziatat5 z tekstern
jednoczeOnie. Z tego powodu zmodflkowalern naqdzie. aby uwzglednit preferencje
uzytkownlkbw.
Rozdzial16. + Twonenie narzgdzi dla Excela w jegyku VBA 46 1

Modul kodu Thisworkbook


Otwarcie dodatku powoduje uruchomienie pmccdury Workbook-Open. Dzialanie tej pm-
cedury, kt6rej kod zamieszczono ponitcj, pwoduje dodanie pozycji do menu Nmediia.
Pozycja menu zawjera tekst zdefiniowany za pornocq stakj APPNNPME, kt6q zadeklarowano
w module Modul el (zobacz nastppny podrozdziat).

Private Sub Workhk-Open0


D l m ToolsMenu As tamMndBarPopup

--
D l m nui it en As ComnandBarSutton
Set ToolsMenu Application.CmndBars(1) .FindControl(Type:-10. 10:-30007)
Set W n u I t m ToolsMenu.Co~tro1s .Add(Type:-1. Temporary:-True)

--
With NewMenuItem
.Ca3tion APPNAnE
.OaAction "RunTextTool S "
End W i t n
End Sub

-
Gdy dodatek jest zamykany, nastepuje wykonanie procedury Workbook BeforeCl ose. Jej
dzialanie polega na usunipciu pozycji z menu ,Vurz&ia.
Private Sub Workbook-bforeClose(Cznce1 As Boolean)
On Error Resum Next
Applicatlon.Com~ndBars(1).Finbtootrol(Type:-10.
10:-30007) . t o n t r o l ~ ( A 3 ~ N A m
.Delete
)
On Error &To 0
End Sub

Na aysunku 16.4 pokazano menu Narrqdzia podczas otwierania narzpdzia Operacje rek-
stowe.

Rysunek 16.4.
Menu Naqdzta.
w Mdrym Wwfetla
slq dodatkowa m a

W ~ e Infomacji
j na temat dodawania pow1 do menu ma]&Je sig w mzdziale 23.
462 Czgfk V + Zoawansowane techniki p r o g r a m w a n i a

Modul VBA Modulel


Modul VBA Mcdulel zawiera deklaracje, pros9 proccdurq uruchamiajqq narydzie oraz
procedurq obshgujqq operacjp Cofnij.

Dekloracje w module VBA Module1


Ponitej wyszczeg6lniono deklaracje umieszczone na poczqtku moduh Modulel:
--
Public Const APPNAHE As String "Operacje tekstone'
Publ i c Const FROGRESSTHRESWOLO 2000
Public UserChoices(1 To 8) As Variant ' zapisuje ustawienia dla ostatnio wykonywanej
operacji
Publ i c UndoRange As Range ' w celu umotl iwienia c o f n i ~ i a
Publlc UserSelection As Range ' w celu m t l i w i e n i a cofniecia

Zadcklarowalem stat@p u b l i c m ~zawierajqcq hhcuch oznaczajqcy nazwp apbikacji. Ten


lahcuch mak6w zastosowano jako tytul formularza UserFonn oraz w kilku oknach ko-
munikatdw. Utyto go takte jako nazwy pozycji w menu (zobacz punkt ,.Modul kodu
Thisworkbook" we wczeiniejszej czp4ci rozdziah).

Stah PRERESSTHRESHWLOo W l a lit*, k t h decyduje o wySwietlaniu wskahika postqpu


zadania. Jeteli okreilirny dla stalej wartoX 2000, wskahik postppu zadania wySwietli
sic tylko wtedy, je9li nancdzie bedzie wykonywat operacje dotyczqce co najrnniej 2000
komorek.

W tablicy UserChoices zapisano wartofci wszystkich kontrolek. Te informacje q zapi-


sywane w rejesbze Windows i odtwanane w czasie mchornienia nanqdzia W celu
zapisania informacji umotliwiajqcych cofnipcie wykonywanych operacji, wykorzystano
dwa dodatkowe obiekty typu Range.

Procedura RunTextToolsw module VBA Modulel


Tekst procedury RunTextTwl s zamieszczono ponitej:
Sub RunTextTools (
Dim InvidContext As Boolean
-
I f AetiveSheet Is Nothing Then Inval idcontext True
I f TypeName(Act1veSheet) -
'Norksheet' -hen Inval~dContext True
I f Invalidtontext Then
. .
HsgBox 'Mybier2 zakres k d r e k " , v b t r i t i c a l APPWE
Else
UserFoml .Shm 0
End I f
End Sub

Ta prosta pmcedura sprawdza, czy istnieje akcywny obiekt i czy aktywny obiekt jest ar-
kuszern roboczym. Jeteli nim nie jest, mienna Invalidcontext otnymuje wartolt True.
a sprawdz&a w instrukcji If .. . Then . . . Else i w zaletnofci
Nastqnie z m i e ~ jest
od jej wartogci zostanie wyiwietlony komunikat (wbacz rysunek 16.5) lub fomulan
UserForm. W metodzie Show Eastosoweno wgurnent 0, k6ry powoduje. Ze okno UserForm
staje sic niemodalne (tzn. w crasie jego wyiwietlania utytkownik maze kontynuowat
pracq w Excelu). ~
I

I
Rozdziot 16. + Tworzenie narzgdzi dta Excela w jezyku VBA 463

Rysunek 16.5.
Ten kornunikat

i Mwietli sic, jehli


nie atwarto
skoroszytu lob jeSli
aMywne okno nie jest
arkuszem

1 -
:s7$%* Kod nie sprawdza, czy zaznaczono zakres komdrek. Obstug? tego Medu zawarto
w kodzie wykonywanym po klikniviu przycisku Zaslosuj.

Procedura UndoTextTools w module VBA Module1


Procedura UndoTextTool s jest wykonywan~kiedy u m o w n i k wybiene polecenie E4cjrr;
Cofinj'(lub jeili kliknie przycisk CofnQ na standardowym pasku narz~dzi).To dzialanie
zostanie om6wione w dalszej czqSci niniejszego rozdzialu w punkcie ..lrnplementacja
procedury Cofnij".

Modul formularza UserForml


'Wszystkie zasadnicze dzialania wykonuje kod VBA urnieszcmny w module formularza
Usericoml. W tym punkcie nviqfle opiszp katdq procedurq umieszczonq w module.
Kod pnykladu jest zbyt obszerny, teby m o h a go bylo zaprezentowac w teBcie ksiqzki.
ale zainteresowani mogq przejrzet kod. otwierajqc plik operacje leh~owcx/aurnieszczony
na pbcie CD-ROMdofqczonej do ksiqtki.

Procedura UserForrn-Initialize
Wykonywana jest przed wyiwietleniem formulam UserFo-m. Jej dzialanie polega na
obef leniu roniar6w formularza UsetFon i pobraniu (z rejestru Windows) popnednio
wybranych wartoSci dla fomant6w. Procedura dodaje t&e elementy na liScie pola
kornbi (o namie Com3oBoxOperation), ktdrego wartoif decyduje o wykonqwanej operacji.

Procedura ~ o m b o ~ o x ~ ~ e r a t i o n - c h b n g e
Wykonywana jest za katdym razern, kiedy utytkownik wybierze pozycje w polu kombi
Operacja:. Zadanie procedury to wyfwietlanie lub ukrywanie kontmlek.

Procedura AppIyButton-Click
Wykonywana jest w momencie k l i k n i ~ i aprzycisku Zustosuj. Najpienv sprawdza Mqdy,
a nastgpnie wywojuje funkcjq CreatekiartR~rgew celu sprawdzenia, czy oie ma pustych
komdwk w z a h s i e zamaczonym do pmtwarzania (wiwej infomacji znajduje sic
w nastcpnym punkcie .,Popram wydajnoici narzedzja Operacje tekstowe"). Procedura
App2yButton C l i c k wywohje rdwniei procedure SaveForUnCo, ktbra zapisuje biea.ce
dane na wypidek, gdyby u2ytkownik chcial cofnqt opaacje (wiqcej infomacji majduje
sip w punkcie ,Implementacja procedury Cofnij" w dalszej czqSci niniejszega rozdrjatu).
464 Cz@t V Zaawansowane techniki programowania

Nast~pniewykorrystuje konstrukcjq Select Case w celu wywolania odpowiedniej pro-


cedury wykonujqcej operacj~.Wywolywana jest jedna z nastppujqcych procedur: Change-
Case. AddText. RmveText, Removespaces lub RmveCharacters. Niektbre spbr6d tych
procedur wywofujq odpowiednie funkcje. Na prqktad procedura Changecase wywo#uje
Funkcje Toggl eCase lub Sentencecase.

Procedura CloseButton-Click
Wykonywana jest w,momencie klikniqcia prrycisku Zamknij. Jej dzialanie polega na
zapisaniu bieiqcych ustawieh konholek w rejestne Windows. a nastqpnie zarnknieciu
formularza UserForm.

Procedura HelpButton-Click
Wykonywana jest w momencie klikni~ciaprzycisku Pomoc. Jej dziatanie polega na wy-
Swietleniu pliku pomocy.

Poprawa wydajnojci narzqdzia Operacje tekstowe


Procedury narredzia Operacje tekrtowe pnetwarzaja w pqtli zamaczony zakns kombrek.
Nie ma sensu przetwanat w pptli kombrek, kt6re sic nie m i e n i g na pnykjad pustych
komorek lub nkich, kt6re zawierajq formuty.

Jak wspomniatem wczdniej, p k e d u r a ApplyButton-Click wywohje hnkcje Create-


WorkRange, kt6ra cworzy i zwraca obiekt Range skladajqcy sic z wsystkich niepustych
i niezawierajqcych formul kom6rek z zamaczonego zakresu. Zal6tmy na przykhd, Ze
w kolumnie A majduje sic tekst w zakresie A 1 : A l Z . Jeteli utytkown* zamaczy calq
kolumnq, funkcja CreateWorkRange ptzeksztaki cab zakres kolumny na podzbi6r tego
&esu skladajqcy sip z niepustych kom6rek (tm. zakres A:A zostanie przeksztalcony na
zakres A 1 :A12). Poniewat puste komdrki i forrnuly nie bpdaprzetwarzane, kod stanie s i t
o wiele wydajniejszy.

Funkcja CreateWorkRanqe pobiera dwa argumenty:


a Rng -obiekt ~ l p Range
u reprezentujqcy zakres wybrany p m utytkownika;
m TextCnly -argument typu Boolean. Jeteli ma wartoit True, funkcja nvr6ci tylko
korn6rki tekstowe. W innym prrypadku WqNlr6Mne wsystkie niepuste kom6rki.

TreSC funkcji zamieszczono ponitej:


Private Function CreateWortRange[Rng. TextOnly)
-
Tworzy i maca obiett Range
Set CreateWorkRange Notcing

If Rng.Count -
bjedyncza k&rka z forrm1.q
-
1 And Rng.HasFomla Ren
Set CreateWorkRange Nothing
E x i t Functlon
End If

- -
Pojedyncza tan6rrta l u b pojedynua scalona kdrka
I f Rng-Count 1 Or Rng.MeqeCells T r w Then
Rozdzial 16. + Twotzenie narzedzl dl0 Excela w jqzyku VBA 465

If TedOnly Then

-
I f Not IsNumericlRng(l).Valuel Then
Set CreateWorkRange Rng
Exit Function
Else
-
Set CreateUorkRange Nothing
E x i t Function
End I f
Else
I f Not Isbpty(Rng(1)) Then
-
Set CreateWorkRange Rng
E x i t Function
End If
End If
End I f

- -
On Error Resme Next
Set Rng Intersect(Rng. Rng.Parent .UsedRange)

-
If T e x t h l y True Then
Set CreateMrkRange Rng.SgecialCellstxlConstants. x!TextValues)
I f Err o 0 Then
-
Set CreateMrkRange Nothing
On Error GoTo 0
E x i t Function
End I f
Else
-
-
Set CreateNorkRange Rng. Specialcell s
txlConstants, xl7extValues + xl~umberi)
[ f Err 0 Then
-
Set CreateUorkilancje Mothlng
On Error GoTo O
Exit Furction
End I f
End I f
End Functla,

W funkcli CreaWrkRange -to monystywana jest wtafciwoSt SpecialCell s.


t . e Aby dowiedriet sig w i e j na temat tej wtaSciwo3cl, zerejestruj makro, modytiku~v

wySwietll6. W C ~ S ~ ~klawlsr
JW
-
ustawienia w oknie dialogowym Pnedrodzenie do specjalnle Excela. Motna je
F5. a nastqpnie klikalqc pr~jciskSpajalnfe w oknie
dialogowym P ~ e ~ h a d Z e n do.
i8

W czasie konvstania z okna dialogoweno Prre&o&enie do -


srrecialnie rnotna zaob-
serwowaC dzi&e dziahie. Zazw$kj dotyczy ono zammmegd&enr. JeSli na przy-
klad wstanie zaimczona cda kolumna, wynikicm bedzic podtbidr tej kolumny.

Jeteli jednak zananono p o j e d y n q kombrkq, operacje bpdml datyczyt calego arkusza.


Z t,ego powodu funkcja CreateWorkRange sprawdra Licztq komdrek w zakrcsic pmka-
zanym do niej w postaci argumcntu.

Zapisywanie ustawieh narzqdzfu Operacje tekstowe


N a n e e Operacje teksfuwe ma b a t przydatnq w!aSciwoX: pclmiqta ostamio wyko-
rzystywane ustawienia A v i e 2 wi&smX u?,dcmik(m, wywohjqc mnqdzie. cqsto
466 CzefC V Zaawansowone techniki programowgnia

Jak wspomniatem, ostamie ustawienia sq zapisywane w rejesme Windows. Kiedy utyt-


kownik kliknie pnycisk Zamknij, wywolywana jest funkcja VBA Savesetting zapisujqca
wartoki wszystkich kontrolek. Podczas mchamiania nmpdzia Operacje tekstowe wywo-
lywanajest funkcjaGetSetti ng pobieraj~ate wartoki i odpowiednio ustawiajqca kon~olki.
W rejesme Windows ustawienia sq zapisane w nastppujqcej lokalimcji:
HKEY-tURREKT_USER\Software\VB and VBA Program Settings\Text Tccl Utility\Settings

Na rysunku 16.6 pokazano te ustawienia wyswietlane w edytorze rejestru Windows (re-


gedit.exe).

Rysunek 16.6.
Za wmoca
e&ora rejestru
molna sprawdziE
ustawienia i.d-.a
.. r c p
r a-ta-.. arcs
zapisane i ..?WPlvdn
,-
w rejestffe ..,,,;r.
,;y-..
,,_,
PIGS

9 6 9
I*--. ucp
I31.d~- ercp

Do zapisania ustawieh zastosowano tablice UserChoices. Motna rbwniet utyC osobnej


miennej do zapisania katdcgo ustawienia, ale dzitki mstosowaniu tablicy kod jest nieco
prostszy.

lmplementacja procedury Cofnij


W odr6tnieniu od wlaSciwoJci Cofnij Excela, technika cofania operacji w nanpdriu
Operacje tekrtowe jest jednopoziomowa. Mdwiqc inaczej, utytkownik mote cofi~qttylko
ostamio wykonanq operacjq. Wiqcej informacji na temat zastosowania w#&ciwolci
Cofnij w aplikacjach moms znalefk w ramce ,,Cofanie skutk6w procedur VBA".

N m e Qmracje tekrtme zapisuje oryginalne dme w arkusm. Jeteli utylkomik zechce


cofni$ operacje, dam tam zapisane zostanq z powrotern skopiowane do skoroszytu u2yt-
kownika.

Pnypomnijmy sobie dwie mienne publiczne radeklarowane w module VBA Modul el,
kt6rych zadaniem byta obsluga operacji Cojnij:
Pub1 i c UndoRange As Range
Public UserSelectlon As Range
Rozdzial 16. + Tworzenie narzgdzi d l a Excela w jqzyku VBA 467

Cofanle skutkdw procedur YBA


Utytkownicy komputerdw pnylwyczalll sie do rnoiliwoSci cofania wykonanych operacji. Prawie
wszystkie dzlatania wykonywane w Excelu motna cofn*. Co w l ~ e ] ,poczi]wszy od Excela 97,
rnoiliwe Jest wielopoziomowe cofanie operacji. Programujqc w VBA. zastanawiamy sie, cry jest
moiliwe cofanie efektdw procedur. Chociai odpowiedi brzml: Tak, dokjadniejsza odpowiedi po-
winna brzrnieC: To nie zawsze]est khve.
Motllwo% cofanla efeMdw procedur VBA nie powstaje automatycznie. W tym celu procedura musi
zapsywaC poprzedni stan, kt6ty moina odtwo@, kledy ulytkownlk wybierze polecenle Edycja/
Cofnij. Spos6b zapisanla stanu zalety od dziatari wykanywanych przez pocedure. W przypadkach
ekstremalnych konieczne jest zapisanle catego arkusza. JeSli z kolei procedura zmodyfikuje zakres.
wystarczy zaplsaC zawartoSC tego zakresu.
ObleM Application zawlera m e t o e DnUndo. Mdra urnotliwia programlScie okre~lenietekstu, kt6ry
ma sie pojawit w menu Edycja, oraz procedury, ktdra ma by6 wykonana w przypadku wybrania
polecenia E&qk/Cofn$ Na pnyktad ponlisza instrukcja spowoduje, te w menu Edycja pojawi
sie pozycja Cofnij efekty molego makro. Jeieli ulytkownik wybierze to polecenie, zostanie wyke
nana procedura Undot4yMacm:
Ap~llcation.Ontlndo"tafntj efekty nojego marro". "UndoMyMacro'

Pried wykonaniem r n o d y k c j i danych procedum Appl y h t t o n C1: ck wywotuje p r o c e d q


SaveForUndo. Procedura rozpoczyna siq od wykonania t m c h kstrukcji:

- -
Set UserSelection Selection
Set UndoRange WorkRange
l3islkorkbook .Sheets(l).?IsslRange.C:ear

Obiekt WorkRange, jak pamietamy z poprzedniego punktu, jest typu Range i skhda sie
z komdrek zamaczonego zakrew, ktbre nie sq puste i nie zawierajq fonnul. Trzecia instruk-
cja z b l o b zaprezentowanego powyitej usuwa z arkusza dane zapisane w nim poprzednio.

Nastqpnie wykonywana jest taka oto n t l a :


For Each RrgArea I n MJorltRange.Areas
Thi sWorkbook.Sheets(1). Range (RngArea.dddress) .Formula
Next RngArea
- RyArea. Formu:?

W petli przetwarzane sz\ poszczeg6lne obszary zakresu NorkRange, ktbre nastepnie sa.
zapisywanc jako dane w arkuszu. JeZeEi zakres WcrkRange sktada sie z c i ~ l e g ozakresu
kombrek, arkusz b d z i e zawieraf tylko jeden obszar.

Po wykonaniu okre8lonej operacji wykorzystywana jest metoda OnUndo okre8lajqca


dziatania, ktdre naleZy wykonat w d e wybrania operacji Cofnij. Przykladowo po %-
konaniu operacji miany wiekoSci liter wykonywana jest nastepujqca instrukcja:
Appllcat1on.Mndo 'Cofnl j miane wlelkoScl l i t e r " . "UndoTextTools'

Po jej wykonaniu, w menu Edycja Excela pojawi sip pozycje: Cojnij zrnianq wiel.koici
liter, kteli w o w n i k wybierze to polecenie, zostanie wykonana procedura pokazana
ponikj:
P r i v a t e Sub UndoTextTools(
' Cofniecie ostatiio nykonanej oceracjl
D i m a As Range
468 CzeJt V Zoawonsowone techniki programowanio

On Ermr GoTo ErrHandler


-
Awl ication .Screenupdating Fa1se
Wttk UserSelection
.Parent Parent .Activate
.Parent.Activate
.Select
End With

-
For Each a I n UndoRange.Areas
a .Formula Tht sWcrkbook.Sheets(1) .Rangeta .Address1 Formula
Next a
-
Application.~creen~pdating True
On Error GaTo 0
E x i t Sub
ErrHandler:
-
Appl lcation.ScreenUcdatlng True
MsgBax "Nie mtna cofnqC operacji". vbInformation. APPNAHE
On Error GoTo 0
End Sub

Procedura UndoTextTools najpiem sprawdza, czy jest aktywny odpowiedni skoroszyt


i arkuss a potem wybiera zakres, M6ry poprzednio wybral utytkownik. Nastepnie w ~ t l i
przetwana wszystkie obsmry zapisanych danych, dostcpne dzieki zmiennej publicznej
UndoRange. Dane SF+ umieszczane w swojej pienvotnej Iokalizacji, co powoduje w i e n i e
zrnodyfikowanych danych.

,*a Na W e CD-ROM dohzonej do ksiptkl majduje sic prostsry m t a d , ktbry prezentuje


Swsdb uaktywnienia polecenla Edycja/Cofni]po wykonaniu procedury VBA.

Ocena realizacji projektu


W poprzednich punktach opisalern wszystkie komponenty nm&ia Operacje tekstowe.
W tym rnornencie warto pnyjrzod siq pierwotnym wymaganiom pmjektowym, aby
sprawdzii, czy zostaly spetnione. Ponitej wyszczeg6lniono zalotone cele wraz z ko-
rnentarzami.
Narqcfzie b&ie posiadalo wlaiciwoSci opisane nu pocrqtku niniejszego
podrozdzia/z~-spehiony.
B&ie umotliwia~ougytkownikawi zwdanie wymienionych rnodyJkacji
-
dla komdrek tekrtowych i nietekrrowych spehiony.
Bqkie miato wyglqd innychpoleceri Excela Mdwiqc inaaej, oakn dialogowe
m q a k i a b&ieprzypomi~C wbudowme okra dialogme Ereela. J a k wspornniatem
wczciniej, n&dzie Operage tekrthe nieco r6&1i%p od okien dialogowych
Excela, poniewai zawiera pnycisk Zastosuj zamiwt p y c i s k u OK. Ponadto
w odr6tnicniu od wipkszolci wbudowanych okien dialogowych Excela, okno
didogowe flaIZ~dZiaOperacje rekrtowe jest niemodalne. Biorqc pod uwagp
wygodc konystania, te rotnice motna uznaC za dopuszczalne.
Bqdzie mialofonnq dodatb dostgonego z menu N v & a -spehiony.
Bqakie driaiaio dla bieqcego zakrrsu Z ~ Z M C Z ~komdrek
J ~ A (Wcqczniez wyborem
w i e l o b o ~ )D. o d m h W i e moiIiwa n i a n a zmuccenirrpodam nyiwietlania
okna diaioguwego- spdniony. Poniewd okna dialogowego nie trzeba zamykat,
nie ma potmby wykonystywania kontrolki RefEdi t.
Rozdzial 16. t Tworrenie nanedzi dla Excela w jezyku VBA 469

O m i a wykonana operacja b&iepamietana i nyhidli sie podaas ponavnago


otwarcia okna dialogowego -spdniony (dziqki wykorzysmiu rejesm Windows).
Nanehie nie b~&iemocjlflkowaikomdrek zawierajq~hformu3,-spelniony.
&Lie &ia/a/osrybko i uydajnie. Jeteli naprzyklad utyrkownik zarnac,y cafq
-
kolumng, pusre komdrki w kolumnie zosfanqzignarowane spehiony.
U91kownikbehie miat moiliwoJ6 cofniecia wykonaqxh rmian -spelniony.
B&ie dmtena obszerna pomoc -spehiony.

Dzialanie nanedzia Operacje tekstowe


Osoby. M61-e nie do kohca rozumiejg jak dziala n e e . zachvam do zaladowania
dodatku i wykonystania debugera w celu wykonania kodu krok po kroku. Warto wy-
prdbowaf n-dzie dla r62nych zaknrdw komdrek. wMmie z calyrn arkuszem. Nieza-
Ie'mie od wybranego zalrresu, przetwonone bqdq cylko w M i w e kombrki; puste zostanq
calkowicie zignorowane. Dla arkusza zawierajqcego tylko jednq korndrkq tekstowq na-
rzcdtie bqdzie dzia+aCr6wnie szybko w przypadku m a c z e n i a tylko tej komdrki. jak
w pnypadku zamaczenia catego arkusza.
Jeteli przeksztaicimy dodatek na standardowy skomszyt, bpiu'emy mogli zobaczyt
sposbb zapisania danych w arkuszu dla pouzeb opcracji Ccy'kij. Aby przeksnakit dodatek
na skoroszyt. nalety kliknqt dwukromie modul ThisHorkbook. Nastqpnie nalety wcisnqc
F4 w celu wyswietlenia okna Properties i ustawit warto4d wlafciwosci IsAddin na Fa1 se.

Dodatkowe informacje na temat naapdzi Excela


Na rysunku 16.7 p a k m o menu pakietu Power Utility Pak ponvalajp na uyskanie do-
s t p u do n-. Ten produkt zawiera kilkadziesiqte (a t a b wiele nowych funkcji
arkusm). Za niewiclkqoplatqdostqpny jest rdwniet kod Wdbwy. Z n@em rn& sic
zapomak. instalujqc wwersjq testowq majdujqcqsiq na piycie CD ddqczonej do ksiqki.

Ryrunek 16.7.
Paklet Power Utllity
Pak. ktdreeo t w d m
jest autor nin~ejszei
ksi@ki, zawiera wiefe
przydatnych nanedzl

--
470 Cz&C V + Zoowansowone techniki programwanla i

Oprbcz pakietu Power Uriliw Pak, z internetu m o a a pobraf inne pakiety. Poszukiwania
dodatkowych narqdzi motna rozpacqk od mojej witryny WWW. Zapraszam na strone
Spreachheet pod adresem h t t p : / k . j - w a l k c o m / s s S
I

Rozdziat 17.
Tabele przestawne
Wedlug niektorych utytkownikdw Excela tabele przestawne sq jego najbardziej inno-
wacyjnq i oferujqcq najwipksze motliwoici wtaSciwoScig Jest to takie unikatowa cecha
Excela (taden inny arkusz kalkulacyjny niq nie dysponuje). Po raz pierwszy pojawita
sie w Excelu 5.

Ten rozdzid nie jest wprowadzeniem w tematykq tabel przestawnych. Zaktadam. ze


czytelnicy znajq tq wlakciwoii i pouafiq qcznie tworzyc i modyfikowad tabele. Jak
wiadomo, utworzenie tabeli przestawnej na podstawie danych z bazy danych lub listy
umotliwia wykonywanie podsurnow~danych w sposbb, ktdry bez ich zastosowania
nie bytby motliwy. Poza tym jest to sposob niezwykle szybki. Dodatkowo tabele prze-
stawne moma tworzyt i modyfikowac za pornocq kodu w jpqku VBA.

<*,
a&'*
Tabele pnestawne Excela znacznie ulepszono w Excelu 2000. Wykorzystano tam
ydajnlejsze metody buforowania danych, a takie wprowadzono obstuge wykresirw
powi~zanychz tabelami ~ e s t a w n p lZ. tego powodu pewna czeSC rnateriafu
zawartego w niniejsrym rozdziale nie dotyczy Excela 97 lub wersji wczeSniejsrych.

Wykorzystanie jqzyka VBA


I do tworzenia tabel przestawnych
W tym podrozdziale zaprczentowano prosty prqkhd wykorzystania jezyka VBA w celu
u t w o m i a tabeli przestawnej. Baza danych, pokazana na rysunku L7.1: zawiera cztery
pola: RepHandl, Region, Mies~aci Sprzedat. K a ~ d yrekord opisuje wielkoii sprzedaiy
jednego reprezentanta handlowego w okreilonym miesiqcu.

Tworzenie tabel przestawnych


Na rysunku 17.2 pokazano tabelp przestawnq utworzonq na podstawie danych. Wyko-
nuje ona podsumowania sprzedaty wedlug reprezentant6w handlowych oraz rniesiqcy.
Zawiera nastqpujqce pola:
m Region -pole strony w tabeli przestawnej;
RepHandl -pole wiersza w tabeli prrestawnej;
m niesiac -pole kolumny w tabeli przestawnej;
SprzedaL -pole danych w tabeli przatawnej, w kt6rym wykonystano hnkcjq SUU$..
472 CzeJCV 6 Zaawansowane techniki programowania

Rysunek 17.1.
Z tej prostej bazy
danych Iatwo motna
utwofiy2 tabele
pnestawna

Rysunek 17.2.
Tabela pnestawna
utwonona
na podstawie danych
zamieszczonych
na rysonku 17.1

Zanim utworzylem tq tabelp pncstawnq, wtqczylem rejestiator makr. Wygenerowany


kod zaprezentowano ponitej:
Sub Macro1 ( )
' Zarejestrarane makm
Range( "Al") .Select
k t ivebrkbook. P i vo:Caches .Add
(SourceType: -xlDatabase.
-
-
SourceData : - " ~ r k u s r 1 ! ~ 1 ~ 1 ~ ~ 1 3 ~ 4 " ) .
CreatePivotTable
TaS1eOestination:-'"
Tab1eName:-"Tabela p i r i s t a w a l " . -
Defaul:Versien:-xi PivctTabl eVersionl(1

With k t i v e S h ~ t . P i ~ t T a b l e s t ' T a b e l przestawnal").


a -
--
?ivotFields( "Region")
.Ortentation xlPageField
.Position l
Rozdzial 17. + Tabele pnestowne 473

i End With

With k t l v e S h e e t .PivotTables("Tabela przestawnal" 1. -

--
PivotFlelds("RepHand1")
.Orientation xlRouField
.Position 1
End With

With Activesheet. PivotTables('Tabela przestawnal"). -

--
PlvotFlelds( "Niesiac")
.Orientation xlColu~mField
.Position 1
End Hi t h
ActiveSheet.PlvotTables("Tabela przestawnal"). -
AddDataField ActiwSheet.PivotTables~"Tabelaprzestannal').
P-uotFields('SprzedatW). 'Sum z SprzedaL". xlSun
-
End Sub

Kod wygenerowany p n e z rejestrator rnakr zalety od sposobu, w jaki utwonyliSrny ta-


belp pizestawnq. W przykladzie uworzyiem tabelp pmstawna kt6ra byla pusta, dopbki
nie przeciqgnqlern pola r paska narydzi Tabela przestawna. Altcrnatywnq metodq jest
klikniecie przycisku Uklad w drugim kroku kreatora Tabelaprzestc~wnai zdetiniowanie
uktadu tabeli ptzestawnej przed jej utwomniern.
Motna oczywiScie wykonak zarejest-wane rnakro, co spowoduje utworzenie kolejnej.
identycmcj tabeli ptzestawnej.

Analiza zarejestrowanego kodu twonenia tabeli pnestawnej


Kod jtzyka VBA dotyczzgy dziahi z tabelami pmtawnymi rno* sit wydawaf niejasny.
Aby zarejestrowane rnakro nabralo sensu, trnba pomaC kika obiekt4w (opis katdego
z nich znajduje sip w pornocy online):
Plvottaches -zbibr obiektbw P i votCache obiektu Workbook;
P i v o t T a b l e s -zbibr obiekt6w PyvatTabl e obiektu Worksheet;
PivotFields -zbidr p61 obiektu P i votTable;
P i v o t Items -zbi6r danych dla pola okreglonej katcgorii;
CreatePivotTable -metoda obiektu P i v o t Q c h e t w o q c a tabelp pmstawnq
na podstawie danych w buforze tabeli przestawnej;
a PivotTableWi zard -metoda obiektu Worksheet two- tabel$ przestawng
Jak sic przekonamy w nasqpnym punkcie, korzystanie z tej rnetody nie jest
konieczne.

Ulepszanle zarejestrowanego kodu hvorzenia tabeli pnestawnej


Podobnie jak w przypadku wi&swici zarejestrowanych makr, zapmentowany w z h i e j
prrykhd nie jest tak wydajny, jak m6glby bye. M o h go u p h i t i uczynit bardziej
zrozumia~m.Kod z listingu 17.1 pomoli utworryC idmtycznq tabclp przestawnq.
474 CzJC V4 Zoowansowone technlkl prograrnowania

Listing 17.1. Lepszy s s d b generawanla tabell przestawne] za pornoce kodu VBA


Sub CreatePlvotTable(
D i m PTCache As Pi votCache
Dim PT As PivotTable

-
Set PTCache Act1wWorkbook .Pi votcaches .Add
(SourceType:-xlDatabase.
-
SourceDa~ta:-Range('A1') .c;rrent~eglon .Address)

-
Set PT PTCache.CreatePivotTable
(Tab1eDestination:-"". -
-
Tab1eName:-"Tabela przestawnal')

Wlth PT
--
.PivotFields("Regton") .Orlentation xlPageField

--
. P t v o t F i e l d ~ ( " M l e s l ~ c.Orientation
"I
.PivotFields("RepHandl "I .Orientation xlRowField
.PivotFields("SprzedaL") .Orientation xlDataField
xlColumnF1eld

End U I t h
End Sub

Procedurp CreatePivotTable uproszczono (co mote przyczynit siq do nvipkszenia jej


przejrzystoSc) d'eklarujqc tylko dwie zmienne obiektowe: PTCache oraz PT. Zastqpujq
one indeksowane odwdania do @I Activesheet. PivotCaches o m Acti veSheet . Pivot-
Tables. Nowy obiekt PivotCache tworzy sip za pomoq metody Add, a nowy obiekt
P i votTab1 e za pomocq metody CreatePivotTabl e obiektu PivotCache. W ostatniej sekcji
kodu nastppuje dodanie p61 do tabeli pnestawnej i okreilenie lokalizacji wewnqtn niej
(pola strony, kolu.mny, wienza i danych).
W pienvotnie wygenemwanyrn maknc majdowat siq zakodowany ,.na twardo" zakm
danych slu2qcy do utworzenia obiektu Pivotcache (an. ' A r k u s z l ! R l C l : R13C4'). W pro-
cedune CreatePivotTable tabela prtestawna jest hvorzona na podstawie bie2qcego re-
gionu otaczajqcego kom6rkp Al. Dzipki temu zyskujemy pewnoSC, t e makro btdzie
dziahC poprawnie po wprowadzeniu dodatkowych danych.
ad**
t!!,
Kod bytby bardde) uniwersalny, gdyby w zbiorze P!votFields zastosowano indeksy
zarniast literat6w. W ten sposdb makro dzialatoby nawet wtedy, gdy uiytkownik
mienilby nagldwki kciurnn. Na plzyktad bardrlej uniwersalny kod zawieratby odwotanle
PivotFields(1) zamiast PivotFields("Region"). Kod zastosowany w pokazanym
przykladzie najlepiej pasuje do sytuacji, kiedy uktad kolumn nie bedzie sig mienlae.

Najlepszym sgasobern po~laniap e b n y c h o b i e k h , metod i whkiwoki jest jak zwykle


zarejestrowanie wykonywanych dzi& w makrze. Nastepnie warto pncstudiowat tematy
pomocy online, aby nozumiet spos6bm utycia posxzeg6lny~helementbw. Niemal w ka2-
dym przypadku zarejestmwane makra wymagaja modyfiiacji. M o m tet napisak kod od
poczqtku, bez wykonystywania rejesbatora makr, ale to wymaga pewnego dotwiadczenia.

Zlozone tabele przestawne


W tym podrozdziale zaprezentujq kod VBA t w o ~ c stosunkowo
y zhtonq tabelq pRe-
stawnq
I Rozdziol 17. + Tabele przestowne 475

Dane dla ztoionej tabeli przestawnej


Na rysunku 17.3 zaprezentowano h g n e n t bazy danych w arkuszu, zbudowanej z 15 840
wiersq zawierajqcych hierarchicme dane budtetowe finny. Korporacja sklada sic z 5
oddzialbw, a kaMy oddzial z 11 wydrial6w. W katdym wydziale sq caery kategorie
budtetowe, a k d a kategoria zawiaa po kilka pozycji. Kwoty budtetu oraz rzeczywiicie
wydane Smdki q zapisane dla kritdego z 12 miesiqcy.

Ryrunek 17.3.
Dane z tego
skorosIytu bedq
zestawione w tabeli
pnestawnej

Ten przyktad jest dostgpny na p)ycle CDROM dohczonej do ksl+?ki.

Na rysunku 17.4. pokazano tabelp przestawnq utworzonq na podstawie zaprezentowa-


nych wytej danych. Warto m6ciC uwagq, t e tabela przestawna zawiera obliczane pole
Odchylenie o m cztery obliczane pola Kwl, Kw2, Kw3 i Kw4, zawieraj~cepodsurnowania
dla poszczegdlnych kwartatdw.,

Kod tworzqcy tabelq pnestawnq


Kod VBA z listingu 172 tworzy tabelq pnestawnq.

LMlng 173. Twomnie tabell pmstawnej dla wielu oddziai6w


Sub CreatePlvotTable( )
D i m PTCache As Pivotcache
Din P l As PivotTab7e

Ppplication.5creenUpdat~q - False
476 Cze9t V + Zaawanswane technlki ~roararnowania

Rysunek 17.4.
Tabela przestawna
utwonona
na podstawie danych
z lysunku 17.3

Usuniwie arkusza ArkuszTabel iprzestawnej. j e f l l i s t n i e j e


On Error R e s w Next
ApplIcation.DisplayAlerts False -
Sneets('ArkuszTabe1iPrzestmej') .Delete
On Error GoTo 0
#pplicat~on.DisplayAlerts True -
-
Utworzenle bufora tabell przestawnej
Set PTCache ActiveWorkbook. Pivotcaches .Add( -
SaurceTyp:-xlDatabase.
SoutceData :-"Range( - ~ l ' ) T ~ u r r e n t ~ e g .Mdress)
ion

Oodanie nowego arkusza


Workshetz .Add
baiveSheet.Name -
"ArkuszTabellPrzestmej"

.
-
Utworzenle tabeli p r z e s t m e j na podstawle bufora
Set PT PTtache.CreatePivotTable( -
Table0estination:-Sheets( 'ArkuszTabel iprzestawnej') .Range('Alm) .-
Tab1eName:-"TabelaPrzestarnzBudietu")
With PT
Dodarrie pbl
.PimtFields('WYOZIAC").Orientation --
xlRowField

--
.PivotFields('MIESIAC").Orientation xlCoLmnField
.PivotFields("ODOZIAC"),Orientation xlPageFleld
.PivotFields("8UDtET").Orlentation x1DataFteld
.PlvotFlelds("PJEUYWISTE WDATK!').Orientatron xlDataField -
Dodanie pola slutacego do obliczania odchylenia
.CalculatedFields.Afid "Wchylenie" , "-BUO2ET-RZEUWISTE WYDATKI'
.PiwtField~('Wchylenie') .Orientation xlDataField -
Rozdziat 17. + Tabele przestawne 477

Oadanle p61 obliczanych


.Pi~tFtelds("MIESI~C').CalculatedItm.Add -
"Kwl". "- Sty4utdar'
.PivotFtelds('MIESI~C").CalculatedItms.Add -
"Kw2". '-Kwi+aj+Cze'
.PivotCtelds("MIESI~C').CalculatedItens.Add -
"Kw3". '-Lip+Sie+Wrz'
.PivotCtelds("MIESI4C'l .CdlculatedItems.Add -
"Cw4". '- P a M i s+Gru"
Przenieslenie obl t czanych pazycjt
--
.PivctFields("MIESII(C'l .PivotItems('Kwl") .Position 4

.PlvatFields("MIESIAC'l.Pi~tItems('Kw4"l.Position
--
PivctFields('MIESI4C'l .PivotItems('Kw2"). Position 8
.PivatFields("MIESIAC'l.PivotItems('Kw3").Posttion 12
16
Modyftkacja podplsh
-
.PivotFields("Sm z BUOZET") .Caption "EudFet (21 )"
-
-
.PivotFields("Suma z RZECZYWISTE WYDATKI') .Caption "Rzeczywiste wydatki(z1)"
.PivotFields("Suma z Odchylenie").Caption "Odchylenie (21)-
End With
Appl ication.5creenUpdating
End Sub
- Tm
Jak dziala zlozona tabela przestawna?
Procedura CreatePivotTable z listingu 172 najpiew usuwa arkusz ArkuszTabel1Prze-
staknej, jeali taki w c d n i e j istnid. Nasttpnie tworzy obiekt PivotCache, wstawia nowy
arkusz o nazwie ArkuszTabel iprzestawnej i w koricu tworzy tabel? przestawna Do tabeli
pnestawnej dodawane sq nastqpujqce pola:
Wydzi a 1 -pole wiersza;
Mlesiqc -pole kolumny;
Oddzia? -pole strony;
Budtet -pole danych;
r Rzeczywiste wydatki -poledanych.
Nastqpnie w y k o ~ metod~
o Add zbim Cal culatedFields w celu u m n i a oblicul-
nego pola Odchylenie, IUbrego wart& jest wyliczana poprzcz odjr;cie m c i faktycmie
wydanej kwoty (pole RZECZYWISTE WYOATKI) od kwoty bu&m (pole BUDLET). Crtery
oblicmne pola sfuQ do wylicmia kwartalnych podsumowafi. Domyilnie oblictane pola
q dodawane po prawej shonie tabeli przestawncj, a zatem poirzebny jest dodatkowy
kod, aby umieScic je obok miesiqcy, ktorych dotycq (np. pole Kwl jest umieszczone za
polem Mar). Na koniec ksd modyfikuje podpisy wyiwietlane w tabeli pnestawnej (np.
nanva Suma z BUOtUjest zastqpowana nanvqBudLet (21)).

T"~nw te procedure, najplem w)%cnennvalern kod za p o r n westratora rnakr,


@#$ a nastgpnle go poprawltern, aby st& sle czytelnieJsry I wydajnlejszy.
478 Czese V + Zaawansowone techniki programowania

Tworzenie ta be1 przestawnych


na podstawie zewnetrznej bazy danych
W popnednim pnykhdzie krddkm danych byl arkusz. Jak wiadomo, Excel umotliwia
wykorzystanie zewn~trznychMde4 danych do tworzenia tabel prrestawnych. hzyklad
zaprezentowany w tym p o d r o ~ i a l edemonsmje kod VBA potnebny do utworzenia
tabeli przestawnej na podstawie danych zapisanych w bazie danych Access.
Baza danych Accessa zawiera pojedynczq tabel?, w Mdrej umiesmzono te same
,:&@ i'uiyto w poprzednim pnyktadzie.
dane, ktdrych

Kod z listingu 17.3 tworzy tabela przestawna Zalotono, te plik bazy danych budet,
mdb jest zapisany w tym samym katalogu, co arkusz

LSstlng 17.3. Generowanie bbell pnest8wnej na podstawie danych z zewnqtnnel bazy danych
Sub CreatePivotTableFrwiJBt 1
D i m PTCache As Pivotcache
D i m PT As PivotTable
D i m OBFile As String
Dim Constring As S t r i n g
D i m OueryStrtng As String

Usuniecie arkusza ArkPrzest. j e t e l i i s t n l e j e


Cn Error Resune Next
Ppplication. DisplayAlerts False
Sheets("ArkPrzest") .Delete
-
Cn Error GoTo 0

-
Utworzenie bufora t a b e l i przestawnej
Set PTCache ActiveWorltbook .Pivotcaches .Add
(Source1ype:-xl External 1
-

Constring -
tancuth polaczenia
" O D B C : M Access Database:DBP' 6 DBFil e

* Zapytanie
CueryString - "SELECT * mM f!U02ETm

With PTCache
--
.tonnectlon Constring
.CmandText OueryString
End UI t h

DPdanie arkusra
'&rksheets.Add
Activesheet .Hame - 'ArkPrzest'

-
Utwonenie t a b e l l przestawnej
Set PT PTCache.CreatePivotTab!e( -
Rozdziot 17. Tobele przestawne 479

W i t h PT
W a n l e pbl
.PivotFtelds<"WDZlAt') Or:enr.ation -- xlRowileld

.PivotFleldst'OCOZIAL') Or'entation
.PivotFieldsl'BUD2ET") .Orientzt'on --
.PivotFields ("MIESIAC') .I)rientstion xl CoLumnField
xlPageFieId
xlOataFielc
.PivotFields( 'RZECZYWISTE k'iZLTK1") .Orientation * xlDateF: ela
End With
End Sub

Argument SourceType metody Adc zbioru Pi votCi.ches okreilono jako x l Exterra 1.


W pnyktadzie zaprezentowanym w poprzednim podrozdziale (w ktdrym wykorzystano
dane z bazy danych w arkuszu] argument SourceType by1 typu database. Obiekt
P~votCachew celu pobrania danych z pliku zewnptmego potrzebuje nastqpujqcych in-
forrnacji:
m laricuchapolqc~eniaopisujqcego typ Mia danych oraz nazwc pliku.
kt6rym jest instmkcja SQL oknflajqca m c a n e rekordy i pola.
fdcuchazapy~unia,

\V tym przykladzie tahcuch poIi.czenia o m l a , kr6dto danych ODBC, ktorym jest plik
Accessa o nanvie buber.mdb. Laiicuch zapytania okreila w tyrn przypadku calq tabel?
BUDZET, lnformacje te q przekazywane do obiektu Pi votCache poprzez ustawienie d d c i -
woki Connection oraz ComnandTex;. Po zapisaniu danych w buforze tabeli prrestawnej
nastppuje utwomnie tabeli za pomocq metody CreatePivotTable.
SQLjest standardavym jezykiern sluz&yrn do twnenia zapytati do bazy danych.
@
$
b
* W i w j informacJl mozna uzyskd w pomocy online. Warto r6wnlei zakuplC ksiqlke
poswi~onqtern" jezykowi, co pozwoli poznaC go dokladniej.

Jednoczesne tworzenie wielu tabel przestawnych


W ostatnim przyktadzie utwonymy kilka mbel przestawnych, ktdre bvda zawierae
podsumowania danych pobranych z ankjety wypehianej pnez klientow. Dane sqzapisane
w bazie danych w arkuszu (rysunek 17.5) dotonej ze 100 wienzy. W d y wiersz zawiera
dane o pki respbndenta araz odpouiedi od I do 5 dla ka2dej z 14 pozycji ankiety.

Na rysunku 17.6 pokmmo kilka tabel ~ c s t a w n y c hDla


. W e j pozycji ankiety utwonono
dwie tabele pmsiawne -jedna m w i e t l a dane w procentach, dmga rreczywiste wartoici.

Kod VBA zlistingu 17.4 tworzy te tabele.

Ustlng 17.4. Tworzenle wielu tabel przestamjch na podstawle danych re zfozonej zewnetrznej b,ary

Sub MakePivotTablesO
'
Ta procedura twarzy 28 tabel prrestc*nyco
D l m PTCache As PlvatCache
Dim PT As PlvotTable
480 CzgfC V Zaawansowane techniki programowania

Rysunek 17.5.
m i k i anklety
bedq podsumowane
w kilku tabelach
pnestawnych

Rysunek 17.6. Tabele pfzestawne uhvonone za p a m q pmcedury VBA


Rozdzial 17. + Tabele przestawne 481

Dim SuinnarySheet As Worksheet


Dim ItmNsme As String
Dim Rw As Integer. 'i As Integer

Application.ScreenUpdat1ng - False

' Usuniecie arkusza "Podsumwanie". jete1 1 is t n i e j e


Cn Error Resume Next
Application.DisplayAlerts False
Sheets("PodsurnOwanie"1 .Delete
-
On Error GoTo 0

'
--
Dodante arkusza " P o d s m a n i e "
Set SumarySheet Worksheets .Add
Activesheet .Name " P c d r m a n i e "

-
Utworzenie bufora catel l przestawnej
Set PTCache Actl veWorkbook .PivotCaches.Add( -
SourceType:-xloatabase.
Source0ata:-Sheets( '~ane%nkiety") .Range( "Al') .-
CurrentRegim .Address)

Row --1
For 1 1 To 14
-
ItemName Sheets("DaneDnkiety').Cells(l. l + 2)

-
Utwrzenie tdbeli p r z e s t m e j
Set PT PTCache.CreatePivotTab1e -
(Tab1eDestination:-S~mrySheet.Cel IslRou. 6). -
-
Tab1eName: -I tmName)
R a r Row +ll

Dodanle p61

- --
With PT.PlvotFields(ItemName)
.Orlentation xlOataField
.Name 'Liczba odpowledzl "
.Function xlr&nt
End U i t h

PT.PivotFields("Plet"1 .Orientation xlColurmFTeld


Next i
-
PT.AddFields W i e l d s : - A r r a y ( ItmName. "Dane")

Row-1
- -
For i 1 70 14
ItenNane %eetsl'Dane~kiety").Cells(l, I + 2)

-
Utwrzenle t a b e l i przestawnej
5et P i PlCache.CreatePivotTable -
(Table0estinattan:-SurmarySheet.Cells(Row.1). -
-
Tab1eNam:-ItemName 8 "2')
Row Row + 11

- --
With F T . M v o t F i e l d s ( I t ~ m )
.Orlentation x1DataField
.Name ' P r x m t "
F~mction x l h n t
482 Czg5t V + Zoowansowone techniki programowanio

-
.Calm1 a t l o n xlPercent0fColm
End Hi t h
PT.AddFtelds RowFie1ds:-Array(1twnName. "Dane"

Zamlana l lczb na o p i s w tekst


Sumnary Sheet .Activate
With Range("A:A.F:FW)
.Replace '1'. "Kategorycznle s l e nle zgadzam'
.Replace '2". "Hie zgadzam sie"
.Replace "3". "Jestem nlezdecydwany"
.Replace "4". "Zgadzam sie"
.Rep1ace '5. 'Calkowicie ste zgadzam"
End Yl t h

' Skoryqowdnie szerokoict k o l m


C o l m s ( " A : I " ) .EntireCalmn.AutoFtt
End Sub

Tabele p m t a w n e q t w o m n e w d w k h p+tlach. wstystkie na podstawie jednego obiektu


Pivotcache. Pocqtek katdej kolejnej tabeli pmstawnej jest wyliczany na podstawie
zmicnnej Row. Po utwomniu tabeli kod zamienia kategorie l i c h w e w pimvszej kolumnie
na tekst (np. wart056 1 jest zastqpowsna tekstern Kategorynnie sie nie zga&am). Na
kohcu s p korygowane szerokoSci kolumn.

Modyfikowanie ta be1 paestawnych


Tabele prsestawne Bxula sp elastyme. Utytkownicy mag&z latwoJciq zarnienid pole
wiersza z polem kolumny tub uk@ niekt6re pozycje w tabeli, nieistome w danym mo-
mencie. Motna wprowadzit wlasne elernenty interfejsu, kt&= jeszne bardtiej utatwiq
rn~d~kacjW e . przyktadzie rapreantowanym w rym podrozdziale pokazano tabelq
pmstawng Mdrej wyglqdem motna stcrowat5 za pomocp pnelvznik6w oraz p6l wyboru
tak, jak pokazano na rysunku 17.7.

Rysunek 17.7.
U2ytkownIk mote
skorzystd
z formantdw w celu
modyfikowanla tabel
przestawnych

13-
+?..la."/ ..
1.1- I
-
rlE
Rozdziol 17. + Tobele przestowne 483

Tabela prrestawna zawiera cztery dodatkowe pola obliczane (Kwl, Kw2, Kw3 i Kw4). kt6re
s h a d 0 obliczania podsumowan kwartalnych. Kod wykonywany w przypadku zamacze-
nia pierwszej wartoSci pnebcznika (Tyiko rniesiqce) pokazuje listing 17.5. Procedura
jest prosta, przypomina procedury obslugi zdarzen dla innych pneiqcznikow.

Listing 17.5. M w k a c j a tabell pnestawnej


Private Sub OptlonButtonl-Cl ick( 1
Tylkomfesiace
-
Application.ScreenUpdatrng False
With ActlveSheet .PivotTables(l) . PivotFieids("Miesiqc")
PImtItms("Sty").Vislble-'rw
.PivotItem('Lut").Visible-True
.PivotItems("bar') .V?sible-True
.PivotItems("Ywl") .Visible-True
. PTvotIteas( "Maj") . V i sible-;rue
.PivotItms('Cze").Visible4rue
.PivotIimst"Lip').V1slbl~Tr~e
.PivotItems("Sie') .Visible-True
.PivotItem('Wrz").Vlsible-True
.PlvotItems('Pat') .Visible-True
.Plvotltems("Lis').Yis~bl~True
.PtvotItm~("Gru').Visible--rue
.Pivotltems('Kwl").Visible-False
.PivotICems~'Kw2"l.Visibl&alse
. Pl~0tIi~sl"K~3').Visible=False
.P{votItemst'Kw4") .Visible-Fclse
End with
End Sub

Pola wybom powodujq whczanie (wylpczanie) podsumowah dla wierszy i kolurnn.


Procedury obstugi tych zdarzen zaprczentowano ponitej:
Private Sub Checkhxl-tl ick(:
Podsumwanla kolunn
-
Agp1 ication.ScreenUpdat?ng F3lse
ktlveheet.P~votTables(l).CollnnGrand - Ci\eckZoxl.Val Lue
End Sub

Private Sub Ch~kSoxZ-Click()


' Podsunowanla wlerszy
-
Application .Screenupdating Fa1 se
Activesheet.PivctTables(1). W r a r d - CheckEox2. Val Le
End Sub

Tabele pnestawne ma- o c q w i k i e modyfikowad w rotny sposob. Jak wspornnklem,


najprostsym sposobem utwomnia kodu VBA, kt6ry modyfikuje tabele pnestawne,
jest wykonystanie rejestratora makr podczas rpemych modyfikacji. Nastqpnie w y s m z y
wprowaddd poprawki w kodzie i skopiowac go do procedur obslugi zdarze6 wybranych
formant6w,
Wykresy
Excel umotliwia twomnie r62nych w y k d w na podstawie danych zapisanych w arkuszu.
Dostqnych jest ponad 100 r6tnych typdw wykresdw. Programism motc konholowaC
niernal Mdy element wykrcsu.

' Podstawowe wiadorno5ci o wykresach


Wykres to nic innego, jak zbidr obiektbw, z M6rych katdy cbarakteryzuje sip innyrni
wlaSciwoSciami i mctodami. Z tego powodu wykonywanie dzialair z wykresami za po-
mocqjqzyka VBA jest doSC skornplikowane. W tym rozdziale om6wimy najwatniejsze
p o j ~ i a ,ktdrc b z e b porn* aby pisat kod VBA genemjqcy lub rnodyfikujqcy wykrcsy.
Kluczem do sukcesu, jak siq wkr6tce przekonamy, jest dokladne zapomane sic z hierar-
chi3 obiekrdw dotyciqcych wykresdw.

Pdoienie wykresu
W Excciu wykrcsy rnotna umieszczat w jednym z dw6ch miejsc w skoroszycie:
juko wbudowuny obi& w orkusm -arkusz m o e zawierad w6wczas dowolnq
liczbc wbudowanych wykresdw;
w osobnym m h u -arkusz wykresu zawiera tylko jeden wykks.
Jak opisano w dalszej c g k i rozdziatu. w arkuszu wykresu takte motna osadzaC
wykresy wbudowaw. Wiwej infompojl majduje s l punk& ~ .Zaplsywanie wielu
wykresb w arkuszu-wykresle'

W i p W C wykresdw twony sic m i e , wykonystujw b o r wykres6w. M o h a je


jcdnak tworzyC za porn- kodu VBA. OczywiScie&j VBA rnotna w y k m w celu

Najqbszym s p o h uhvorzenia wykresu w nowym arlcuszu jest zarnaczenle danych


i wciSnlph Wawiua fil.fieel utwrzynny W u u M s u . m o m s t u j w
domySlny typ.

Wykres ak!pny to wykm, ktbry zostal wybrany. Kiedy wytkownik kliknie wbudowa-
ny w y h s lub arkusz w y h s u , nasteuje uaktymicnic obicktu Chart. W jezyku VBA
wIafciwoSC Actlvomart m c a uaktywniony obiekt Chart Cjdeli jakiS ismieje). Moma
486 Czg5t V + Zoawansowane techniki progromowania

napisat kod wykonujqcy d z i a h i a z tym obiektem Chart, podobnie jak moma napisat
kod wykonujqcy dzialania z obiektem Workbook zwracanym p o p m z wLSciwoSC Ac-
1
t l veworkbook. Oto przykhd: jeteli uaktywniono wykres, ponits;za instrukcja spowoduje
wyfwietlenie wta4ciwobci Name obiektu Chart:
j
!
MsgBox Activechart. Name
I

Jeteli wykr~snie zostal uaktywniony, instrukcja spowoduje wygenerowanie blqdu.

*- Jak slq pmkonamy w dalsze] czgSci tego rozdziatu, aby wykonywat dzlatania
< ! A z wykresern za pornocq kodu VBA. nle trzeba go uaktywnid.

Model obiektu Chart


Aby uzyskaC wyobr-nie o tym, jakie obiekty q wykorzystywane podczas pracy z wy-
kresarni. wlqczyrny rejestrator makr, utwarzymy wykres i wykonarny kilka typowych
operacji edycji. Pewnie wielu zaskoczy iloSC kodu jakq generuje Excel. Pierwsza pr6ba ,
analizy rnodelu obiektu Chart z pewnokiq wprowadzi nas w zaklopotanie. Nic dziwnego,
poniewat model tego obiektu jest bardzo skomplikowany.

W h n y na pnyk4d. 2e postanowilifmy zmimit tytul wy4wietlany na wbudowanym wy-


kresie. Na stczycie obiektbw zmjduje sip oczywiScie obiekt Appl ication (Excel). Zawiera
on obiekt Workbook, a ten z kolei zawiera obiekt Worksheet. Obiekt Worksheet zawiera
obiekt Chartobject. ktdry zawiera obiekt Chart. Obiekt Chart zawiera obiekt ChartTitl e,
j
kt6ry zawiera wMciwoSt Text. To wtainie w niej jest zapisany tekst wyiwietlany jako
tytul wykresu.

Oto inny spos6b spojrzenia na tq hierarchiq:


Application
Workbook
Worksheet

Chart
ChartTi t l e

W kodzie VBA tmba oczywikie iciSle pnestrzegai madelu obiektowego. Aby na pcy-
ktad ustawiC tytuk wykresu na Spnedatfirny YTD,naIe2y zapisaC nast~pujqcqinstrukcje
VBA:

W tcj instrukcji &tono, te aktywny skoroszyt jest obiektem typu Workbook. Instmkcja
zadziala dla pierwszego elementu w kolekcji Chartobjects w arkuszu o nazwie Arkuszl.
WlaSciwoSC Chart m c a odpowiedni obiekt Chart, natomiast wWciwoSC ChartTitle
m c a obiekt ChartTi tle. Na koficu urjshjejemy dostep do wMciw&i Text.
W pnypadku arkusza wykresu hierarchia obiekt6w nieco s i r6tni.
~ poniewat nie zawiera
obiekt6w Worksheet i ChartDbJect. Ponitej pokazano hierarchic obiektbw dla obielrm
C3artTi t l e w przypadku arkusza-wykresu:
Appl icati on
Workbook
Chart
ChartTi t l e

W kodzie VBA, w celu miany tytuh wykresu na Spriedatfirmy YTD naletajobp za-
stmowat ponitszq instrukcjp:
Sheets("Wytresl'1 .thartTitle.Text - "Sprzedai f i rrny YTD"

M6wiqc inaczej, arkusz wykresu jest po prostu obiektem Chart, ktbry nie jest zawarty
w obiekcie ChartObject. Dla wykresu wbudowanego jego obiektem nadrzcdnyrn jest
-
ChartObject, a dla arkusza wykresu obiekt WOrkb00~.

Obydwie zaprczmtowane ponitej insmkcje spowodujq wySwietlenie okien komunikat6w


zawierajqcych slowo Chart:
MsgBox TypeName(Sheets('Rrtusz1') .ChartObjects(l).Ulart)
MsgBox TypeName(Sheets("Uykresl')
Twonenie nowego wykresu wbudowanego powodu]~dodanie nowego elementu
' do kolekcji ChWtCb~~ts a
m a n e j w okrerbnym arkurzu a h v u u nie ma kalekcj~
Charts). Tworrenie nowego arkusza wykresu powoduje dodanie nowyeh elementdw
do kolekcji Charts oraz kolekcji Sheets okreSlonego skorosrytu.

Rejestrowanie makr dotyczqcych wykres6w


Dobrym sposobem zapoznania sic z modelem obiektu Chart jest wlqczenie rejestratora
makr i wykonanie kilku ddakh. Chock?rejesmtor makr generuje rnn6mo nadmiarowego
i niewydajnego kodu, zarejestmwany kod urnotliwia uzyskanie informacji o obiektach.
wldciwo4ciach i metodach potrzebnych do wykonywania dzialah z wykresami.

Rejestrator makr Excela zawsze uaktywnia whSciwoSC Acti vdhart w celu zwrkenia'
obiektu Chart. W Excelu nie m b a ~ c z a obiektu
c (Lub uaktywniat wykresu), aby mi&
pracowat z nim w jczyku VBA. Jak wspomnialem, rejestrator makr genemje mn6stu.o
nadmiarowego kodu. Z tego powodu, jesli dbamy o wydajnoit, nie powinniSmy wyko-
rzystywdf zarejemwanych makr bez wprowadzeqia poprawek. Szczeg6lnie dotycq to
rnakr wykonujqcych dziahnia z w y h a r n i .

Zarejestrowany kod makra fwonqcego wykres


Kiedy t w o r z y b w y k s pokarany na rysunku 18.1, w ~ c z y rejestrator
h makr. W za-
rejestrowanym kodzie {listing 18.1) wprowadzikm p6hiej kilka poprawek. Wykres
wykorzystuje dane zapisane w &sie A I : F2.
488 CzelC V + Zaawansowone techniki programowania

Rysunek 18.1.
Ten wykres
utwonono
przy wtqczonym
rejestratone makr

Listing 18.1. Hod wygenernvany pnez westrator makr


Sub Hacrol()
Range( "A1 :FZm).Select
Charts .Add
-
Act iveChart .ChartType xlCo1urmClustered
Act iveChart .SetSourceData -
Source:-Sheets('Arkusz1') .Range( " A l : F2'). -
P1otBy:-xlRows
ktiveChart.Lccation -
Mere:-xlLocationAs0bject. -
Name:-'Arkuszl"
.ktiveChart.HasLegend -
False
.ktiveChart.ApolyQataLabels -
-
Type:-xlDataLabelsSh0uValue. Legend Key:-False
XtiveChart.HaSQataTabie False

-
k t i v e c h a r t .Axes( xlcategoryl .Select
Selection.Tick~abels.Orientation xlHorizonta1
blection.Font.Bold True
Selection.AutoScaleFont
- -
4ctiveChart.ChartTitle.Select

True

--
with Selec:ton.Fant
.Name 'Arlal"

-- -
.Size 12
.Stnkethrough False
.Superscript False

- --
.Subscript False
.Out? ineFont False
.Shadow False

--
Under l i n e xlUnderlineStyleNone
.ColorIndex xlAutomatic
.Background xlAutomatic
End Ui t h

5slection.Height
--
,ktiveChart.PlotArea .Select
5election.Top 18
152
kt iveChart .ChartArea .Select
k t i v e v l a r t .Axes(xlUaluel .Select

- -
Nth ActiveChart.Axes(xlValue)
.BinirmmScaleIsAuto Tme
.Haxim.unSca?e D.5
-
-
.MinorUnitIsAuto True

- -
.MajorUnitIsAuto True
.Crosses xlAutomatic

-
.ReversePlotOrder False
.ScaleType xlLinear
End With
End Sub

Ulepszanie zctrejestrowanego kodu tworzenia wykresu


WipkszoM kodu makra wygenerowanego w poprzednim punkcie jest niepotrzebna
Miedzy innymi ustawione zosta4y wartoici wMciwo4ci, kt6rych w rzeczywistoici nie
trzeba ustawiat. Ponitej majduje sit listing makra po wprowadmiu poprawek. Makro
wykonuje doktadnie te same czynnoki. co makro z poprzedniego punktu, ale jest kr6t-
sze i macmie wydajniejsze. Ustawienie wla.4ciw0.4ci Screenupdating na wartoJc Fa1 se
wyeliminowak odtwarzanie ekranu.
Sub Cl eanedMacro(
Ppplication.ScreenUpdatlng
Ularts .Add
- False

-
Activechart . L a a t I o n
Where : - x l L a a t ionAsDb,ject. Name :-'Arkus~l"
Wlth Activechart

--
.SetSourceOata Rangef"A1 :F2"
.HasTitle True

-
.ChartType xlColunnClusrered
.HasLegend False
.kplyDataLabels Type: -xlDaralabelsShowValue

--
.Axes(xlCategory) .TickLtbels.Orientation
.C?artTitle. Font .Bold True
- xlHonzonta1

--
.CiartTitle.Font.Size
.PlotArea.Top 18
12

. PlotArea-Height 162
.Axes~xlYalue).Maxlrmdcale 0.6
.Deselect
-
End Ui t h
Ppplication.ScreenUpdatlng
End Sub
- True

<&% Za pomocq metody AdU kolekcjl Charts zawsre utwonymy arkusz wykresu. W kodzie
zaprezentowanyrn powytej wykres zostd przenlesiony do arkusza za pomocq metody
Location.

Skoroszyt zawierajqcy zar6wno tarejestrowane makro, jak makro po wpmwarkeniu


ulepized majdule sle ns W l e CD-ROM dotqczone] do ksIqIXi. Wato wfdwna~
wydajnoSC abu rnakr.

Popularne techniki jqzyka VBA


dotycrqce wykresbw
W tym podrozdziale opisq sposirb wykonania typowych d z i a d o m c y c h wykrsdw.
490 Czg* V Zaawansowane techniki progromowania

Wykorzystanle VBA do uaktywnlenia wykresu


Klikniecie wbudowanego wykresu powoduje jego uaktywnienie. W kodzie VBA wbu-
dowany wykres motna uaktywnit za pomocqmetody Activate. Oto pnyktad:
ActiveSheet .Chart0bjects( "Wykresl" .Act1 vate

W pnypadku arkusza wykresu nalety zastosowaC nastepujqcq inshukcjq:


Sheets("Wykres1") .Activate

Do uaktymionego wykresu m o h a sip odwdywak w kodzie popnez obiekt A c t i veChart.


Na pnykfad wykonanie ponitszej instrukcji s p o d u j e wygwietlenie nazwy aktywnego
wykresu. Jeteli nie ma aktywnego wykresu, insbvkcja spowoduje wygenerowanie blcdu:
MsgBox ACttveChart .Name

Aby dokonaC rnodyfikacji za pomocq kodu VBA, wykresu nie meba uaktywniat. Efekt
wykonania dwdch procedur zarnieszczonych ponitej jest dokladnie taki sam: rnodyfikacja
wbudowanego wykresu o nazwie Wykresl na wykres warstwowy. Pierwsza procedura
uaktywnia wykres przed wykonaniem dziahh, druga tego nie robi.
Sub Modifychartlo

ActiveChart.Type -
ActiveSheet .ChartObjects('Nykresl').
x l Area
Pc',iveChart .Deselect
Mivate

End Sub

Sub Wl fyChart2()
Activesheet. ChartObjects( "Wykresl") .Chart.Typ
End Sub
- x l Area

Wykres wbudowany motna z htwokiq przeksztalcib w arkusz wykresu. Aby to mbiC


rqcznie, wystarczy uaktywnif wykres wbudowany i wybraf polecenie WykredLokaIizacjo.
W oknie dialogowym naleg, zamaczyt opcje Jako nowy a r h : i podat nazwq arkusza.
W skr6cie to dzialanie polega na skopiowaniu obiektu Chart (zapisanego w obiekcie
ChartObject) do osobnego arkusza. a nastppnie usunieciu obiektu ChartObject.

R6wnid za p o m o q kodu VBA motna przeksztakit wbudowany wykrcs w arkusz wy-


knsu. Ponitej zapremtowano przykfad, kt6ry pneksaafca pienvszy obiekt ChartObject
w arkuszu o nazwie Arkurrl na arkusz wykresu o nazwie M#j W y k a :
Sub CnnvertUlartlO
Sheets("Arkusz1') .ChartObjects(l) .Chart.
.
Location x l LocatlonAsHewSheet " ~ j ~ - r e s '
End Sub

Kod pokazany ponitej wykonuje doktadnie odwrotnq czynndt: przeksmlca arkusz


wykresu o nazwie Mbj Wykres na wbudowany w y k m w arkuszu o nazwie Arkurrl:
Sub tonvertChart20
U-tarts('M6jWyLres") -
.Location xlLocationAs0bject. "Atkuszl"
End Sub
Metoda Locatisn dodatkowo uaktywnla pnenleslonly ykres.

Wykres uaktywniony w obiekcie ChartObject w rzeczywistoSci znajduje sic w oknie,


kt6re w normalnych warunkach jest niewidoczne. Aby przekonat sip, t e wbudowany
arkusz majduje sit w osobnym oknie, wystarczy kliknqk prawym przyciskiem myszy
obiekt ChartObject i z menu podrqcmego wybraf pozycjp Okno yvkres~c.Wbudowany
~ y k r e pozostanie
s w arkuszu, ale dodatkowo wyiwietli sip w oknie (rysunek 18.2). Okno
.-
motna anemieszczak i mieniaC ieao rozmiar. ale nie motna rnaksvmalizowC Wvstarcn
przesunqc okno, aby sip dowiedziec. t e wbudowany wykres jest wytwietlany w swoim
pierwomym pdotmiu. Uaktywnienie dowolnego innego okna powoduje, i e okno obiektu
Chartobject ponownie staje sic niewidoczne.

wykresu w oknie

Ponizsy kod VBA wySwietla okno piwwszego obiekhl ChartCbject. w aktywnyrn arkuszu:

Activechart .ShMindow -
ActiveSheet.ChartObjects~1).Pctivzte
True

Praktycme zastosowanle wySwleUanla wbudowanego wykresu w oknie pokazano


u punhie .Drukowanie wbudowaqch ykresdw" u dalszej a e h i mzdziab.

Wykorzystanie VBA do deaktywacji wykresu


JcSLi zarejestmjerny makm, kt6re deaktywuje wykres, rejestrator makr wygeneruje na-
stepujqcq instrukcjq:
Activ&lndow.Visible - False

Ta instrukcja neczywiScie deaktywuje wykres, ale nie jest do konca jasne, dlaczego tak
sic dzieje. Piszqe makra, kt6re wykonujq dziahnia z wykresami, do deaktywacji wykresu
lepiej wykorzystaC rnetodp Deselect:
Activechart .Deselect
492 CzeSC V Zaawansowane techniki prograrnowonia

Pokame dwie instrukcje r6tniq siq nieco dzialaniem. JeSli wbudowany wykres jest ak-
tywny, wykonanie metody Deselect nie spowoduje zaznaczenia Zadnej kom6rki w arkusm.
Ustawienie wMciwoSci V i s i b l e obiektu Acti veW1 ndcw na wart056 Fa1se spowoduje po-
nowne zaznaczenie poprzednio zamaczonego zakresu.

Sprawdzanie, czy wykres uaktywniono


Za pornocq makr moma wykonaf pewne typowe dzialania z aktywnym wykrcsern (wy-
kresem zaznaczonyrn.przez ~Qtkownika).Na przyktad m o h a zmienit ryp wykresu,
zmodyfikowaC kolory lub zmienif rozmiar czcionki.

Powstaje pytanie, w jaki s p o d b z poziomu kodu VBA sprawdzit, c y utytkownik za-


macryl wykres? PTzez zaznaanie rozumiem uaktywnienie arkusza wykrcsu lub klikniecie
wykresu wbudowanego. Pierwsza mysl to sprawdzenie wlaSciwo9ci TypeNam obiektu
Selection tak, jak w ponitszym wyrateniu:
TypeName(Se1ection) - "Chart"

Powytsze wyratenie pnyjmie wartoe True, jeSli arkusz wykresu W i e aktywny, ale nie
przyjmie wartogci Ttue w pmypdku zamaczenia wykresu wbudowanego. W takiej ytuacji
zamaczony W z i e obiekt wewnqtn obiektu Chart. Na przyklad mote to byd obiekt Series.
ChartTi t l e , Legend, PlotArea itd.

Rozwiqmiern problemu jest sprawdzenie, czy wartoSt Activemart wynosi Nothing.


Funkcja ChartlsSelected, ktbrq zamieszczono ponitej, m c a wartoff True, jeteli ar-
kusz wykresu lub wykres wbudowany jest aktywny, o m wartoif False, jetcli wyuyktes
jest nieaktywny:

ChartIsSe1ec:ed
End Function
-
Private Function ChartIsSelectedO As Boolean
Not ktiveChart Is Nothing

Ta ftmkcja sprawdza wartoSC obiektu Activechart. Jeteli wynosi ona Nothing, wykres
jest nieaktywny.

Usuwanfe element6w z kolekcji Chartobjects Iub Charts


Aby usunqf obiekty Chartobject z arkusza, rnotna wykomystac rnetodp Delete kolekcji
ChartD3;ects:
ActiveSheet.OlartObjects.Delete

Aby usunqf wszystkie arkusze wykre-sbw z aktywnego skoroszytu, motna wykoqstaC


nasepujqq instrukcjq:

Zwyklc usuwanie arkusza powoduje wySwietlmie o s m n i a podobnego do pokazanego


na rysunku 18.3. Aby makro kontynuowato dzialanie, utytkownik musi odpowiedzied
na wyfwietlone pytanie. JeSli muwasz wykres za pornocq maha, rnotesz nezygnowac!
z wygwietlania tego ostrze2enia. Aby je wyeliminowak, nalety utyC nasypujqcego ciw
instrukcji:
Rysunek 18.3.
Prdba usuniecla
jednego lub kilku I
&y~wietlenietakiego
komunikatu

Ppplication.0isplayAlerts - False
Act~veWorkbwk.Charts .Delete
Application.DisplayA1erts - True

Forrnatowanie wykres6w za pomocq VBA


Do typowych dzialari z wykrcsarni, ktore sq wykonywane za pomocq makr, nalety ich
formatowanie. W poni2sym pnykhdzie zastosowano kilka rdtnych elementbw forma-
towania aktywnego wykresu:
Sub Ulartnodslo
If Activechart Is NOthing Then
Msgbx "Zaznacz wykres'
Exir Sub
End I f

-
With Activechart
.Type xlArea
.ChartArea.Font.Name - -
"Arial"

.QlartArea.Font.Size 9 -
.ChartArea.Font.FontStyle "Regular'

.PlotArea. 1nterior.ColorIndex - -
xlNone
.Axes(xlValue).TickLabels.Font.Bold
- - -Tme
.Axes(xlCategory) .TickLabels .Font .Bold True
If .HasLegend True Then .Legend .Position x l s o t t m
End With
End Sub

Procedm rorpoczyna sip od sprawdzenia, c y zamacrono wykres. Jeteli go nie rapla-


czono, w w i e t l a siq komunikat i pmcedura k o k y dziatanie. Dmga insuukcja If spraw-
dza, czy wykrcs zawiera legendq. Celem tego sprawdzenia jest uniknipzie Mdu. ktory
powstatby p n y pr6bie ustawienia wiakiwosci Position obiektu Lsend dla wykresu
nieposiadajqcego lcgendy.
Ten pnykladjest dostepny na plycie CD-ROM dolqczonej do ksiq2kl.

Ponitej majduje sip inna wmja pmcedury ChartMs. W tym pnypadku dziala ona dla
konkretnego wykresu: sktadowej obicktu Chartobject o namie Wykresl,umieszcmnej
w arkuszu Arkuszl. Wykres nic jest uaktywniany.
Sub Chartnods20
-
With Sheets("Arkusz1') .(hart0bjects( Yykresl') .Chart
.Type xl Area
.Charthrea.Font.Name - -
"Arial"

.ChartArea.Font.STze - -
.ChartArea .Font.FontStyle
9
'Regular'

.PlooArea. Interlor.tolorIndex xlNone


1
494 CzgJC V Zoawansowane techniki programowania

--
.Axes(xlValue) .TlckLabels. Font.5old True

I f .HasLwnd
End With
-
.Axes(xlCategory) .TlckLabels.Fmt.Bold
True Then .Legend.Posltion-
True
xlbttm

End Sub

Przetwananle wszystkich wykres6w w pqtli


W niektdrych przypadkach naleiy wykonaC operacje na wszystkich wykresach. W po.
nitszym przykladzie mieniono typ wykresu dla wszystkich wbudowanych wykredw
aktywnego arkusza. W proccdurze zastosowano pttlq For . . . Next w celu wybierania
poszczeg6lnych element6w kolekcji ChartObjects, a nastepnie modyfikowania wlalci.
woSci ChartType dla wybranego obiektu Chart. Typ wykresu jest modyfikowany na
wantwowy za pomocq predefiniowanej staiej xlArea. Inforrnacje o innych stalych opi-
sujqcych typy wykresdw motna maleft w pomocy online.
Sub ChangeChartType(
D i m chtobj as ChartObject

-
For Each chtobj I n ActiveSheet.ChartDbjects
chtobj.Chart .U~artType xlArea
Next chtobj
End Sub

Ponitsze makro wykonuje to samo dzialanie, co poprzednie, ale dziala dla wszystkich
arkuszy wykres6w w aktywnym skoroszycie:
Sub ChangeChartTypeZ(
Dim cht as Chart

cht.ChartType
Next cht
-
For Each cht I n ktfveUorkbook.Chart5
x l Area

End Sub

Kolejny przyklad mody-tikuje ncionkq legendy dla mzystkich wykresbw w aktywnym


arkuszu. Wykorzystano w nim mtlp For . . . Next w celu przetwonmia wszystkich
obiektdw kolekcji ChartObject:
Sub Legendnod(
Dim chtobj as ChartDbject
For Each chtobj I n ktiveSheet.ChartObjects

- -
M i t h chtobj .Chart .Legend.Font
.Name " A r i a l "

-
.Fontstyle
.Size 12
End With
"Bold'

.Next chtobj
End Sub

Zrniana romiar6w I wyr6wnywanle obiekt6w ChartObject


Objekt ChartObject posiada standardowe wMciwoSci pozycji i romiaru, do kr61ych
motna uzyskat d m z poziomu kodu VBA. Kod mprezentowany w poni- pny-
k e e tak mienia rouniar wszystkich obiekt6w ChartObject w arkuszu, aby by@ takic
same jak wymiary aktywnego wykresu. Dodatkowo mienia uldad obiekt6w ChartObject
w taki spos6b. 2e sqone wylwietlane jeden pod drugim po iewej stronie arkusza.
Rozddof 18.4 Wykresy 495

<

Wykreay przestawne
W Excelu 2000 wprowadmno nowq WaSclwoSt: wykresy przestawne. Dziqki niej m o h a t w o w
dynarniczne wykresy powlqzane z tabelami pnestawnymi. Wykres przestawny wyfwietla bieiqcg
zawartofc?tabell pnestawnej w formle graficznej. lstnieje motliwo56 utworzenla albo sarnej tabeli
przestawnej, albo W r e s u przestawnego, kt6ry dodatkowo zawiera powiqzanq z nirn tabel? prze-
stawng. Aby utwonyd wykres przestawny na podstawie tabeli, nalej jq uakt)umie i klikng przycisk
Kreator wykresdw. Wykres zostanie utworzony w nowyrn arkuszu. Domyllnie nowy wykres prze-
stawny zawsze jest tworzony w osobnym arkuszu (rysunek poniiej). Moina jednak przeksztatciC
go na wykres wbudowany za pornocq polecenia ~fes/Lokalizacja.

Microsoft m o ~ k o w amodel
l cbiektovry w taki spos6b, aby umotliwiC obsluge tej nowej wtaici-
wosci Excela za pornocq kodu VBA. Dla ykresdw pzestawnych wpmwadzono obiekt PivotLayout
wewnsrz obiektu Chzrt. Najlepuym sposobem zapomanla st9 z tym oblektern jest zarejestrowanie
dziatari rnodyfikowanla wykresu przestawnego, a nastppnie przeanalizawanie wygenemwanego kodu.
Aby uzyskat wivej inforrnacji na ternat obiektdw, wtaSciwoSci i rnetod, rnotna rhvniel skotzystac?
z pornocy online.

Sub SizeAnd41ignCharts( 1
Dim W As Long. H As Long
D l m TopPosition As Long. LeftPosition As Long
Dim ChtObj As ChartObject
I f k t i v e C h a r t 1s Nothlng Then E x i t Sub
'
--
Pabranie rozmiarh aktywnego wykresu
W ActivdXart.Parent.kidth

TopPosition 1
LeftPosition 1
--
H Activechart .Pzrent .Height

Chtc4j.Wldth --
For Each NCbj In ktlveSheet.thartObjec:s
W
ChtCbj.Height
-- H
ChtObj .TOP TopPosi t i o n
ChtOhj.Left
- LeftPosition
TopPosition TopPosition
Next ChtCbj
ChtObj.Feight

End Sub
496 CzeSk V + Zaawansowane techniki oroaramowania

Zmienna TopPosition zawiera informacje o pdoteniu w pionie kolejnego wykresu.


W katdej iteracji ~ t l mienna
i jest nviqkszana o wan096 H (wysok09C bieacego
obiektu Chartobject).

,e
G 3
;.n;m;m
Ten m i a d jest dostgpny na plycie CDROM doiqczonej do ksiqfki.

lnne techniki przetwarzania wykresdw


W tym podrozdziale opiszp dodatkowe techniki przetwanania wykresbw. Zaprezentujq
dwa ptzykjady, w kt6rych p o k e , jak za pomocq kodu VBA m o h a modyfikowat dane
wykorzystywane pnez wykres.

Zastosowanie nazw w formule SERIE


Jak wiadomo, wykns mote sip skhdak z dowolnej liczby serii, a dane wykorzystane
w katdej serii sq zdefiniowane przez odwolanie do zakresu w forrnule SERIE (wipcej in-
formacji na ten temat majduje sip w ramce ,,Formula SERIF'). W niektbrych przypadkach
zastosowanie nanv zakres6w w formutach SERIE macmie upraszcza zadanie polegajqce
na rnodytikacji frbdlowych danych wykresu za pomocq kodu VBA. Dla przykiadu
przeanalizujmy nastqpujqcqformule SERIE:

W tym przypadku motna nadat nazwy dwbm zakresom (np. Kategorie i Dane), a na-
stqpnie zmodyfikowac fonnutq SERIE w taki spodb, aby zarniast odwoian do z a h s d w
wykorzystywano ich nazwy. Formula po edycji b&ie miala nastppujqcqpostaC:
-SERIE( .Arkuszl! Kategorle.Arkuszl!Dane.l)

Po zdefiniowaniu nazw i zrnodvfkowaniu formub SERIE. w kodzie VBA motna.pash-


giwaC sip nazwami, a m i a n y zistanq uwzglpdnio"e na wykresie. N a pnyklad p o n i ~ z a
instrukcja spowoduje modyfikacjp definicji zakmu Dane:

Po wykonaniu tej instrukcji wykres uaktualni sip, uwzglpdniajqc nowq definicjp zakresu
3ane.
Za pomocq metody Resize obiektu motna zmodyfikowat mmlar zakresu
ldsntyflkoranego przez n a y . Na pnyklad ponitszy kod r ~ o d u j rozszenenie
a
zakresu Dane o dodatkowy wiersz:
M it h

End
Range("DaneW)
.Resize(.Rows.Coont
Yith
+ 1. l).Name - "Dane"

W Excelu 2003 wpmwadzono ~ ~ i w o 9 kCt ,h M a wykonywanie dzialafi


, na wykresach z mzszenajqcyml sie zakresaml danych. Wystarcry okreSliC zakres
danych jako list? papmr wybranie polecenia Dane/Lista/Utwbn liste. Po wykonaniu
tej czynnofci m t n a wpravadzad nowe dane na dole llsty, a wykres uwzgl@ni je,
uaktualniajw sig automatycznie.
Rozdziat 18. + Wykresy 497

F m u t a SERIE
Dane wykorzystane w kaMej d l wykresu okreSla formula SERIE. WySwletla slg ona w pasku
formuly po zamaczeniu serii danydr na wykresie. Nie jest to form& w petnym tego stowa maczeniu:
mdwiqc inaczej, nie motna utyC jej w komdrce, a takte w formule SERIE nie motna wykorzystat
funkcjl arkusza. M o h a jednak rnodyfikowaejej argumenty.
Formula SERIE ma nastgpu)qcq sktadnig:
-SERIE(nazwa-seri i , etykiety-kategorif , wartoici. kolejnoft. romiary)
Argumenty, kt6re motna zastosowaf w formule SERIE, oplsano ponltej.
B nazwa serl i (opcjonalny)- W a n i e do kom6rki zawlera&e] nazwg s d i do wykorzystania
w leg&ndzle. Jeiell wykres sklada sle tylko zjednej serii danych, argument ten jest
wykorzystywany jako tytut. Moha go t a w pod& jako tekst ujety w cudzysMw. Jetell argument
zostanie pominiqty, Excel utworzy domyllnq name serli (np. Serla 1).
-
etykiety-kategori i (opcjonalny) odwotanie do zakresu zawlerajpcego etyklety dla osi
kategorli. Jetell argument zostanle.pominlety, Excel zastosuje koiejne liczby catkowite
poczqwszy od 1. Dla wykresdw XY ten argument deflnluje etyklety dla osi X. Poprawne jest
takie odwotanie do nieciqgtego zakresu, W takim przypadku adresy zakresdw powinny byC
oddzielone przecinkami i ujete w nawiasy. Agurnent moha tam zdeflniowat w postaci tablicy
wartoki oddzielonych pminkami (lub tekst6w w cudzysbwach) ujetych w nawiasy klarnrowe.
B wartoici (wymagany) - odwotanie do zakresu zawlerajzpego wartohi dla serii. Dla wykresdw
XI ten argument deflniuje wartoSci dla osi Y. Poprawne jest takie odwdanie do nieciqgtego
zakresu. W takim pnypadku adresy zakres6w powlnny by6 oddzlelone pnecinkami i ujete
w nawiasy. Argument motna takze zdefinlowd w pastaci tabllcy wartohi oddzielonych
przeclnkaml ujetych w nawiasy klarnrowe.
-
kolejno<C (wymagany) liczba catkowita okreflajqca kolejnog wykreflania serii.
Ten argument ma znaczenie tylko wtedy. gdy wykres sktada slg z wlwej nlt jedne] serii.
Zastosowanle odwotanla do komdrki nie jest dozwolone.
-
roaniary (tylko dla wykresdw bqbelkowych) odwotanie do zaknsu zawlerajqcego wartoSci
mzmlardw bqbelk6w w wykresech bqbelkowych. P o p r a m jest takfe odmhnie do n4eciqega
zakresu. W takim przypadku adresy zakresh powlnny by2 oddzielone przeclnkami I ujete
w nawiasy. Argument mozna tak2e zdefiniowat w postaci tabllcy wartohi ujetych w nawiasy
klarnrave.
Ochwtania do zakresdw w formule SERIE zawsze sq bemq$@ne I zawsze zawierajq na* arkusza.
Oto przyktad:
-SERIE(Arkusrl!SBSl. .Arkuszl!1812:SBS7.1)
Odwoknie do zakresu mote okreeSlaC nieciqgty obuar. W takim przypadku poszczeg6lne zakresy
skkdowe naleiy oddzielid przecinkami i ujqd argument w nawlasy. W ponitszym pnyktadrie form*
SERIE wartogcl naletq do zakresu 82:83 waz 6537:
-SERIE(. .IArkuszl!SBS2:IBS3.A~usz1!SBS5:S817).1)
JeSE zamiast adres6w rakresdw zoJtanq we Ich namy, Excel m k u j e odwotanla, wprowadzajrtc
w formule SERIE n a w skoroszytu. Oto m t a d :
-SERIE(A~uszl!SBSX. .budtet.xlslWje0ane. 11

II
Zastosowanie jezyka VBA
w celu okreslenia danych wykorrystywanych na wykresie
Prrykhdy z tego punk opiwjq tcchrulci jpzyka VBA umotliwiajp rnodyfikacjjedanych
wykresu.
498 Czefk V + Zaawonsowane techniki prograrnowania

Modyfikacja danych wykresu na podstawle aktywnej korn6rki


Na rysunku 18.4. pakazano wylues utworzony na podstawie danych z wiersza aktywnej
komdrki. Kiedy utyikownik ptzemieici wskahik kom6rki, wykres uaktualni sie auto-
matycmie.

Rysunek 18.4.
Ten rvykres zawsze
wy3wietla dane
na podstawie
wiersza
odpowiadajqcego
akiywnej komdrce

W pnykladzie w o procedury obshgi z d a m i a dla obiektu worksheet. Kiedy W o w n i k


mieni zaznaczenie, prtenosqc wskafnik kom6rki, zachodzi z d m i e Selectionchange.
Procedura obstugi tego zdarzenia (umieszczona w module kodu obiektu Arkuszl) jest
nast~pujqca:
Private Sub WoRsheet-Selectlo~nge(ByVa1 Target As Excel .Range)
Call UpdateCsart
End Sub

Za W y m razem, kiedy q k o w n i k pmmiefci wskafnik do innej kornbrki, wykooywana


jest procedura Worksheet .SelectlonChange. Procedura ta wywoluje pr0cedul.e Update-
Chart, kt6qzapretentowano ponitej:
Sub Updatechart(
D i m TheChartObj As Chartobject
D i m TheChart As Chart
D i m UserRow As Long
Dim CatTitles As Range
D1m SrcRange As Range
D i m W n e D a t a As Range

- -
1f Sheets("~rkuszl').Checkbxl Then
Set TheChartObj ActtveSheet.01artObjects(l)

-
Set TheC3art TheChartObj .Chart
UserRow Activecell .Rw

-
I f UserRow c 3 Or IsEmpty(Cells(UserR0~~1 1 Then
TheChartObJ.Vlslble False
---
Else
Set CatTitles Range('A2:FZ")
S e t SrcRange Range!Cel ls(UserRow. 1). Cells(UserRow. 6))
Set SaurceData Union(CatTtt1es. SrcRange)
Thechart. SetSourceData -
Source:-SourceData . PlotBy :-xlRws
-
TheChartObj . V i s i b l e True
End If
End If
End Sub

Najpienv procedura sprawdza, czy zamaczono pole wyboru Automafycna aktualizacjo


wykresu. Jekli nic zosdo zamaczone, nie bpdq wykonywane tadne dziaiania. Zmienna
UserRow zawiera numer wiersza aktywnej kom6rki. Instrukcja If sprawdza. czy aktywna
kombrka majduje siq w wierszu z danymi (dane rozpoczynajq siq od wiersza 3). Jeteli
wskainik kombrki znajduje sic w wierszu, ktory nie zawiera danych, obiekt i h a r t 0 3 j e c t
zostanie ukryty.

W innym przypadku kod utworzy obiekt Range (CatTitle) zawierajqcy tytuty kategorii
oraz inny obiekt Range QrcRange) zawierajqcy dane wiersza. Te dwa obiekty Range sa.
kczone za pomoq funkcji VBA Union i przypisywane do obiektu Range o nazwie Sour -
ceData. Na koniec zakres SoutceOata jest przypisywany do wykresu za pornocq metody
SetSourceData obiektu Chart.

Modyfikacja danych wykresu z wykorzystaniern p61 kombi


W kolejnyrn pnykhdzie zastosowano kontrolkp ComboBox (pole kombi) w wykresie
umieszczonyrn w osobnym arkuszu, w celu urnotliwienia u~tkownikowiwyboru wy-
hesu. Wyglqd interfejsu pokazano na rysunku 18.5.

Rysunek 18.5.
k$imnie pozjcji
z p ~ I akombi
modflkuje dane
frddtowe wykresu

Pole kambi utyte w tym pnyktadzia pochodd z paska narrpdd Fornulane,


c
e
-
'
a "is z P@ofri.h fomantbw. Z jaldchl povod6u r Excelti nie m i n e stormvat
kontrolek .4ctiveX na arkuszach wykresdw.
Ten prryktad Jest dostqpny na plycie CDROM do@cmnej do ksiqzki.
500 CzefC V + Z a a w a n s o w a n e techniki progromowania

Pole kombi obsluguje makm Drcphml-Change. Kiedy m o w n i k w y b i a e poycjg z pola


kombi, wykonywana jest nastgpujqca procedura:
Sub DropOownl-Change( 1

-
D i m ListIndex A5 I n t e g ~ r
L i stlndex ActrveChart .DropDoms(l). Value
Call UpdateChart(List11dex)
End Sub

Procedura ta wywohje procedm UpdateChart i pmkazuje do niej liczty calkowitq repre-


zentujqcq wybor dokonany przez m k o w n i k a . Ponitej majduje sip listing procedury
UpdateChart. Jest ona bardzo podobna do procedury UpdateChart z poprzedniego pod-
punktu.
Sub UpdateChart(Item1
a
Uaktualnia wykres na podstawe elmentu vybranego z rozwijanego menu
Dim rheChart As Chart
Dim Datasheet As Worksheet
Dim CatTltles As Range. SrcRange As Range
D i m SourceOata As Range

Set M a r t
Set Datasheet
--
Sheets("Wykres1')
Sheets:"Arkuszl")

--
i r i t h Datasheet
Set CatTitles .Rdnge("AZ:FZ")
Set SrcRange .Rarge( .Cell s( Item + 2. 1). -
.Cells(l:em + 2. 5))
End With
-
Set SourceData Union:CacTitles. SrcRange)

With TheChart
.SetSourceOata Swrce:-SourceData. PlotBy :-xlRows
.ChartTitle.Left
.Deselect
-
TheChart .ChartArea .Left

End U i t h
End Sub

Zastosowanie jqzyka VBA w celu okreilenia zakresu danych


wykorzysfywanych na wylaesie
W niektbrych pnypadkach w maknc VBA potmbny jest dosw do informacji o z h e s a c h
wykonystanych przez poszczeg6lne serie danych na wykresie. Czasami na przykhd
trzeba zwiekszyC serip danych poprzez dodanie nowej kom6rki. Poni&j ejieszczono
opis tnech wlasciwoSci, ktke bedqpomebne do wykonania tego zadania.
-
WMciwoS6 Formula zwraca lub ustawia formuic SERIE dla serii danych.
Po amaczeniu serii danych na wyhesie, w p a s h formuly wySwietia sle formula
SERIE. WMciwofd Foml a m t a tp fonnuk jako Mcuch makow.
r WidciwoX Values -m c a lub ustawia kplekcjp wuystkich wartohi w serii.
Moma jq podaf jako &res danych w arkuszu lub tabliq stalych, ale nie moma
u t y C kombinacji obu tych sposobbw.
Rozdziat IS. + Wykresy 50 1

WIaSciwdC XValues - m c a lub ustawia tablice warto9ci X dla serii danych


wykresu. WMciwoSf XValues m o h a podaC jako zakres danych w arkuszu
lub tablice stalych, ale nie m o h a utye kombinacji obu tych sposobbw.
WMciwoSC XValues mote t a k e byt pusta.

WydawaC by sic mogh, k h s danych wykorystywany przez wybranq serie danych


na wykresie, potrzebny w makrn VBA, rnoha uzyskat na podaawie w ~ c i w o ~Vac 1i ues
obiektu S e r i e s . Wydaje sip r6wniet t e .wartoSci X (etykiety kategorii) motna uzyskac
z whlciwoSci XValues. Teoretycmie takie myilenie jest prawidlowe. W praktyce jednak
tak nie jest. Kiedy ustawia sip w+aSciwolf V a l u e s obiektu S e r i e s , m o h a wpmwadzit
obiekt Range lub tabliq. Jednak podczas odczytywania tej wlaSciwdci zawsze uzyskamy
tablice. Niestety model obiektbw nie mpewnia sposobu uzyskania obiektu Range wyko-
nystywanego przez obiekt S e r i e s .

Jednym ze sposob6w r o z w i ~ n i atego pmblemu jest napisanic kodu, ktbry analizuje


formutt SERIE i wydobywa z niej adresy zakrrs6w. W neczywistoki jest to budne zadanie,
ze wzgledu na zlotonoSf fomuly SERIE. Ponitej podano kilka pnykhd6w poprawnych
fomul SERIE:
-SERIE(Arkuszl!SBSl .Arkuszl!SAS2:SAS4 .Prkuszl!S812:1814.1)
+ERIE(. .Arkuszl! 1852:S0S4.1)
+ERIE( .Arkuszl!SASZ:SA14.ArCuszl!SBS2:1BU.l~
-SERIE('Podsuminie sprzedaty'. .Arkuszl!$812: 1814.1)
-SERIE( .{-Sty". "Lutm."Mar"]. Arkusrl! s812:sBSd,l)
-SERIE(. IArkuszl! SASZ,Arkuszl!SAS4). (Arkuszl ! 1812,Arkuszl!SBS41.1)
-SERIE(Arkuszl! SBS 1 .Arkuszl!SA12:SAS4.Arkuszl! 1812:SBU. l.Arkuszl! SCS2:SCS4)

W fonnule SERIE nie m z e pojawiajq sip wszydcje argumenty, poza tym jcdne wystppujq
w postaci tablic, a ime q adresami nicciqglych zakresdw. &by b y b jeszcze trudniej,
dla wykredw bqbclkowych istnieje dodatkowy argument (np, w onatniej forrnule SERIE
na popnedniej lilcie). Pr6ba przeanalizowania argumentdw z pewnogciq nic jest tty-
wialnym zadaniem pmgramistycznym.

Ten problem nurtowat mnie p n c z kilka lat, a2 m e u c i e udaio mi sip maletd r o n v i p -


nie. Sposdb polega ria anal& formuly SERIE za p o m o q M c j i pomocnictej, ktbra
przyjmuje argumenty fomuly SERIE i m c a tablig elementdw o wymiarach 2 x 5 za-
wierajqcq wszystkie informacje o formulc. Pdhiej uproScibrn to r n n v i ~ n i e tworzqc
,
cztery funkcje VBA, z ktdrych W a pnyjmwje jeden argument (odwohie do o b i e h
S e n e s ) i m c a tablicp dwuelemrntowq Sq to nasttpujqce funkcjt:
SERIESNAHE-FROH-SERIES -
p i e ~ r s z yelement tablicy zawiera h c u c h opisujqcy
typ danych pierwszego argumentu formuly SERIE (Range, h p t y lub String),
natomiast dmgi element zawiera adrcs zakresu, pusty hhcuch makbw lub bricuch
znak6w;
XVALUES-FROM-SERIES -pierwszy element tawicra lalicuch opisujacy typ danych
drugiego nrgumentu formuly SERIE (Range, Array, Empty lub S t n r q ) , natomiasr
drugi -dm zakrrsu, tabliq, pusty lahcuch m k d w lub iaficuch znakbw.
VALUES-FROM-SERI ES -pierwszy element zawiera hicuch opisujqcy ryp danych
m i e g o argumentu forrnuly SERIE [Range lub Array), natorniast drugi - adres
zakresu lub tablig.
502 Czqg V 4 Zoowansowane technlkl programowania

BLWBLESIZE-FROM-SERIES -p i m z y element tablicy zawiera hhcuch o p i s u j ~ y


typ danych piqtego argumentu f o r n u b SERIE (Range, Array lub Enrpty), natomiast
dmgi -adres z a h s u . tablicg lub pusty G c u c h makdw. Ta funkcja dziah tylko
dla wykres6w bqbelkowych.
Warto nvr6cif uwagq, te nie ma fimkcji pobierajqcej czwarty argument f o r n u b SERIE
(kolejnoSC wykredlania). Ten argument rnotna uzyskaC bezpofrednio za pomocq wla-
fciwodci Plotorder obiektu Series.
Kod VBA wymlenlonyeh funkc]] jest zbyt obszemy, aby go zamiedclc? w kslqlce,
ale znajduje sI. na dot@czonej piycie C D R O M Kod jest uczeg6towo udobmenfowany.
co umotliwla I- przystosowanle go do wlasnych potrzeb.
Dzialanie funkcji zademonstrowano w ponitszyrn pnykkdzie, kt@ wyfwietla adres
zakresu wartohi dla picnvszej serii danych aktywnego wykresu:
Sub ShowValueRange( )
Dim Ser As Series

- --
Dim x AS V a n d n t
Set Ser ActlveChart.SeriesCollection(~)
x VALUES-FROH-SERIES(Ser1
I f x(1) 'Range" Then
HsgBox Range(x(2)) .Address
End If
End Sub

Zmientq x zdetiniowano jako Variant. Zmienna ta sh2y do tapisania dwuelementowej


tab1icy nvrbeonej przez funkcjp VALUES-FRM-SERIES. Pierwszy element tablicy x zawiera
laircuch makdw opisujqcy typ danych. W przypadku, gdy jest to lahcuch "Range", w oknie
infomacyjnym wySwietli sie adres vlkresu zawartego w drugim elemencie tablicy x.

Na rysunku 18.6 zaprezentowano inny pnykhd. Wykres zawiera trzy serie danych.
Przyciski w arkuszu powodujq wykonywanie makr, ktdre rozszerzajq i nwptajq po-
uczegdlne Eaknsy danych.

Rytunek 18.6.
W tym skoroszycie
pokazano,
w jaki sposbb
rozszerryE
lub ScieSnit
serie danych
za pomocq makr
napisanych
w lezyku VB.4
Rozdzictl 18. + Wy kresy 503

Procedure ContractAllSeries zamieszcmno poni2ej. Jej dzialanie polega na przetwa-


rzaniu w p@li kolekcji SeriesCollection i obliczaniu zakresbw danych za pomocq
funkcji XVALUE-FROM-SERIES oraz VALUES-FROM-SERIES. Nastqpnie zakresy sq mniejszane
za pomocq metody Resize.
Sub tontractA1 ]Series( 1
Dim s As Series
D i m Result As Variant
D i m DRange As Range

- -
For Each s I n ActiveSheet.ChartObjectstl) Chart.Seriestallect;on
Result XVALUES-FRCN-SERIES( 5 )

-
i f Result(l! "Range" The?
Set DRaqe RangetResult(2:
I f DRange.Ras.C~unt ,1 Then

--
Set DRange 5Range. i e s l ze(CRange. Rows .Count -' 1:
s .XVa 1 ues DRange
End If

- -
End I f
Result VALUES-%OH-SER1ES:s)

-
I f Result(1) "Range" Then
Set mange RangelResu; t ( 2 3 )

--
If 0 R a n g e . M ~.Count > 1 Then
Set DRang DRange. Res- ze(9Range .Rws . r a n t - I1
s .Values DRange
End I f
Ene If
Next s
End Sub

Proccdura ExpandAl 1 Series jest bardzo podobna. Jej wykonanie powoduje rozszerzenie
wszystkich zakredw o jednq komorkq.

Wykorzystanie VBA
do wyiwietlania dowolnych etykiet danych na wykresie
U@tkownicy Excela cqsto narzekajq na male mo~iwofcimodyfikacji etykiet na wykre-
sach. Dla przykladu przeanalizujmy wykres XY pokazany na rysunku 18.7. Prydataby
sip motliwolt wydwiettenia n a m y dla ka2dego punktu na wykresie. Na prbtno jednak
by szukat polecenia Excela. za pomocq ktdrego motna by wykonak tq operacjq autorna-
tycznie (wskazdwka: takie potecenie nie istnieje). Etykictami motna o m a c q k tylko
wartoici ... chyba t e zdecydujemy sip na Rcmq edycjp katdej etykiety danych, aby za-
stwit jq dowolnym tekstem.

Listing 18.2. greaentuje p s Q procedw, k t h dzi& dla pierwszego wykmu w aktywnym


arkurn. Wyiwietla W n i e o zakres, a nastepnie pnetwarza w Wli kolekcjq Points i mody-
Nolje wMcjwoSL: Text kakdego obiektu naleactgo do kolekcji na wartoici z zakresu.

Listing 182. Pobieranie etyMet prnktdw danycb na podstaw'e nazw !J~J arkusza
Sob DataLabel sFronRavqe( I
D i m DLRarge Rs Range
Dim Cht As Char.
Dim i As Integer
504 CzeSC V + Zaawansowane techniki programowania

Rysunek 18.7.
W k r e s XY
be.? etykiet danych

'
-
Otre9lenie wykresu
Set Cht Activesheet .ChartWjects(l) .Chart

'dyiwietlenie gytania o zak-es

-
G? Error Resume Next
Set DLRange A P P ~tcatton. I n p u t b x -
(prmpe:-"Zakres zarlerajqcy etykiety danych?". Type:-8)
I f DLRange Is Nothlnc] P e n E x i t Sub
On Error Golo O

Dodanle e t y k i e t danyc*
Cht .SeriesCol l e c t l m ! 11 .@plyCata LaDel s -
Type:-xlDataLabe1 sShmVa1ue. -
Autoiext :-True. -
LegendKey :-Fa1 se

--
Przetnarzante w pet11 t a l e t c j i P o ~ n t s1 ustawlanie e t y k i e t danych
Pts Cht.SeriesCollect~on(:).Points.~~mt
For i 1 To Pts
-
Cht.SeriesCo1 l e c t i o n i l ) .

Next i
-
Points(1) .Datalaw1 .Text DLRange.(l)

End Sub

Ten pnykladjest dostepny na ptycie CDROM dctqczonej do ksiqiki.

N a rysunku 18.8. pokazano wykres po uruchomieniu procedury DataLabelsFronRange


i wprowadzeniu A 2 : A9 jako zakresu etykiet.

g$$%* Poprzednia procdura nie jest dopracowana i nle zawlera razbudowanej obstugi W6w.
Poza tym dziala tylko dla pierwrzego oblektu Series. Paklet Power Utilfty Pak zawiera
m-ie bardziej ztoione n a m e pzemacmne do modyfikowania etykiet na ~ y k i e s ~ .
Rozdziat 18. + Wykresy 505

Rysunek 18.8.
L4fh-e~XY
zawleraJqcy
etykiety danych
dzieki rastosowaniu
procedury VBA

Wyjwietlanie wykresu w oknie UserForm


W rozdziale 15. opisano spos6b wyhvietlania wykresu w oknie UserFonn W tamtej tech-
nice zapisywalifmy wylves do pliku GIF, a namqpnie Mowalifrny ten plik do kontrolki
Image w oknie UserFom.
W pizykiadzie pokazanym w tym punkcie tastowwano &sawtcchnikq, ale wprowadzono
dodatkowy element: wyhes jest twoaony ,w locie", na podstawie danych z wienza.
w k t o r y majduje sic aktywna komdrka. Efekt dzidania przykladowego kodu pokazano
na rysunku 18.9.

Rysunek 18.9.
w k r e s w tym
okde UserFonn
zostai uhvor7ony
.w rode.
na podstawie danych
z bidqcego wiersza

Okno UserFon wykonystane dla potrzeb tcgo przyktadu jest bard20 p m t e . Zawiera
konnolke Imge (obraz) oraz pnycisk Zamknij. W arkuszu z danymi majduje sie prq-
cisk, ktbrego wciSniecie powoduje wykonanie nastqpujqcej proctdury:
506 e + Zaawansowane techniki programowania
Cz~fV

Sub M h a r t O

-
Dim UserRow As Long
UserRow Activecell .Row
IfUserRw < 3 O r IsEmpty(Cells(UserRow. D l Then
MsgBox "PrzemiefC kursor do wlersza zaulerajacego dane."
E x i t Sub
End I f
CreateChart UserRow
UserFonl .Show
End Sub

Wykres jest tworzbny na padstawie danych z wiersza, w ktdrym znajduje sic aktywna
kom6rka. JeSli wskainik kom6rki majduje sic w nieodpowiednim wierszu, procedura
wySwietla ostrze2enie. W innym przypadku procedura Showchart wywduje procedure
CreateChart w celu utworzenia wykresu, a nast~pniewytwietla go w oknie UserFom.

Procedura CreateChart z listingu 18.3 pobiera jeden argument reprezentujqcy wiersz


z aktyulnq korn6rkg Jest to usprawniony kod zarejestrowany ptzez rejestrator rnakr.
Llsnng 18.3. Automatyune genemwenle wykresu bez Intemkcji z utytkownlkiem
Sub Createmart( r)
Dim TerrpChart As Chart
D i m CatTitles As Range
Dim SrcRange As Range. SwrceData As Range

Apol i c a t i o n .ScreenUpdati ng - False

---
Set CatTItles ActiveYleet.Range('AZ:F2"1
Set SrcRange ActiveYleet.Range(Cells(r. 11. Cells(r. 5 ) )
Set SourceData Unton(CatT1 t l e s . SrcRangel

Oodante wykresu
-
Set T m C h a r t Charts.Add

Kon figuracla wykresu


With TRnpChart
-
.ChartType xlColunnClustered
.
.HasLegend False
.
-
SetScurceData Source:-ScurceOata. PlotBy :-xl Rows

.PlotArea 1nterior.ColorIndex - xlNone


.Axes(xlValue) .Ha j o f f i r i d l ines .Delete

--
.PpplyDataLabels Type:-xlDataLabelsShowValw. LegendKey:-False
.ChartTitle.Font.Size 14
.ChartTitle.Font. Bold True
Axes(xlValw).MaxtmanScale 0.6 -
.Axes(xlCategory).TlckLabels.Font.Size 10 --
.Axes(xlCategory) .TlckLabels.Orlentatlon xlHorlzonta1
.Location 'Ahere:-xlLaationAsObfect. Name :-"Arkuszl"
End Wlth

Skorygowanie ronniaru obiektu Chartobject

--
Wlth bctiveSheet.Chart0bJects(l)
.Width 300
.Height
.Visible
End W t h
150
-
False

End Sub
Gdy procedura Createchart zostanie zako~iczona,w arkuszu zostanie urnieucwny obiekt
ChartObject zawierajqcy wykres utworzony na podstawie danych z wiersza aktywnej
kom6rki. Obiekt ChartObject nie bedzie jednak widoczny, poniewat wlaiciwoit Scre-
enupdatl ng wyiqczono oraz ustawiono wartoit wlaiciwo5ci V i s i b l e wykresu na Fa1 se.

Ostainia instrukcja procedury ShowChart powoduje zaladowanie okna UserForrn. Ponitej


zarnieszczono listing procedury UserForm I n i ti a1 i z e . Jej dziaianie polega na zapisaniu
wykresu w postaci pliku GIF, usunieciu obiektu ChartObject i zatadowaniu pliku GIF
do kontrolki Image.
Private Sub Userform-Initialize0
Dim CurrentChart As Chart
D i m Fname As Strinp

Set CurrentChart = Activesheet .ChartObjects(l) .Chart


'
-
Zapisanie wykresu w formacie GIF
Fnane ThisWorkbook.Path A App1ication.PathSeparator A " t e m p g i f
CurrentChart .Export Fi 1eName:-Fnane. Fi 1 terName:-"GIF"
Activesheet .ChartObjects!l) .De7ete

'
-
Wyfwietlenie wykresu

-
1magel.Picture LoadPfcture(Fneme1
Appl icatton. Screenupdating True
End Sub

Ten przyktad jest dostepny na W i e CD-ROM dotqczonej do ksiqiki.

Zdarzenia zwiqzane z wykresami


Excel obsluguje kilka z d a n zwiqzmych z wykresami. Na pnyktad w mornencie uak-
tywniania wykresu gcnerowane jest zdarzenie Activate. Zdanenie Cal clrlate zachodzi
wtedy, kiedy do wybesu zostanqprzeshne nowe lub zrnodyfjkowane dane. Oczywiscie
istnieje motljwof&n a p i ~ n i akodu VBA wykonywanego w momencie zajScia okreilo-
nego zdarrenia.
Oodatkowe informacje na ternat zdarzefi malna znaleft w rozdziale 19.

W tabeli 18.1 astawiono wszystkie zdarrenia z w i p n e z wykresami obshgiwane w Ex-


c e l 97
~ i wersjach pbhiejszych.

Prxyklad wykorzystania zdarzeh zwiqzanych z wykresami


Aby zapmgramowat procedure obslugi zdarzenia dbycqcego arkusza wykmu, kad VBA
musi sic majdowat w module kodu obiektu Chart. Aby uaktywnic ten modul kodu, na-
le% dwuhotnie kliknqk pozycje wykresu w oknie projektu. Nastwnie w module kodu.
z r o k j a n e j listy Object po lewej monie tneba wybrac pozycjc Chwt, a z rozwijanej
listy Procedure po prawcj suonie (rysunek 18.10) odpowiednie zdarzenie.
504 CzgjC V + Zoowonsowane technild programowania

Rysunek 18.7.
W)+ves XY
bez etykiet danych

-
Okref lenie wykresu
Set Cht ActlveSheet.ChartObjects:l).Olart

'4ydwietlenie pytania o zakres


Gn Error Resume Next
Set DLRange * Application. I n o u t b x
(prwnpt :--2akres zawlera jqcy etykiety danych?'. Type:-8)
If&Range Is Nothlng Then E x i t Sub
On Error GoTo C

Wdanie etyklet danych


t h t .SeriesCoilecticn(ll .hoplyCata Lacel s -
Type:-xlDataLabelsShmVal ue. -
PutoText :-True.
LegendYey :-Fa1 se-

--
2rzetwalrzanie w pet11 k o l e k c j l Points 1 ustawianie e t y k l e t danych
Pts Cht . S e r i e s b l lection(1). Points .Count
For I 1 To Pts

Next i
Cht.SeriesCollectlon(1).
Points(i).DataLabel .T& - DLRaw(i)

End S L ~

d dostepny na p!ycle CD-ROM ddqcmnej do ksiqtki.


Ten ~ k t a jest

N a rysunku 18.8. pokazano wykres po uruchomieniu procedury OataLabelsFromRange


i wprowadzeniu A2 :F9jako zakresu etykiet.

Poprzednia procedura nie lest dopracowana i nie zawiera mzbudowanej obslugl b@d6w.
g
&j" Poza tym dziala tylko dla pierwszego obiektu Series. Pakiet Power UtiIIty Pak zawiera
znacmie barddej zhione nan@zie p r r e z n a c m do modyflkowanla etykiet na Wesach.
Rysunek 18.8.
w r e s XY
zawierajqcy
etykiety danych
dn'qki zastosowaniu
procedury WA

Wyiwletlanie wykresu w oknie UserForm


W mzdziale 15. opisano spodb wyhvictlania wykresu w oknie UserForm W tamtej tech-
nice zapisywaliSmy wykres do pliku GIF, a nast~pnieladowalifmy ten plik do kontrolki
Imge w oknie UserForm.
W pnykladde pokazanym w tym punkcie zastosowano t t sarnq tcchnike, ale wprowadzono
dodatkowy element: wykres jest tworzony ,,w locie". na podstawie danych z wienza.
w ktdrym majduje sic aktywna komdrka Efekt dzialania przyktadowego kodu pokazano
na rysunku 18.9.

Rysunek 18.9.
v@kfes w tym
oknie UserForm
zostat utwonony
,w locle "
na podstawie danych Wynlkl anklaty kllentbw
z bie2wego wiersza

Okno UserFann wykonystane dla potrzeb tego p n y k M u jest bardm proste. Zawiera
kontrolkq Image (obraz) oraz w i s k Zomhij. W arkuszu z danyrni majduje s i pny-
~
cisk, ktdrego wciSnivie powoduje wykonanie nastepujqcej pmccdury:
506 CzdC V Zaawansowane techniki prograrnowania

Sub ShowChart(

-
Dim UserRm As Long
UserRw Activecell .Am
If UserRaw < 3 Or IsEmpty(Cells(UserRow. 01 Then
MsgBox "Przemieft kursor do wiersza zawierajacego dane."
E x i t Sub
End I f
CreateUIart UserRon
UserFonl .Show
End Sub

Wykres jest twomny na podstawie danych z wiersza, w ktbrym majduje sip aktywna
kornbrka. JeSli wskatnik kornbrki majduje sip w nieodpowiednim wienzu. procedura
wyfwietla ostrzetenie. W innym przypadku procedura Showchart wywoluje procedure
Createchart w celu uhvonenia wykresu, a nastppnie wyfwietla go w oknie UserFom.

Procedura Createchart z listingu 18.3 pobiera jeden argument reprezentujqcy wiersz


z aktywnq komorkg Jest to usprawniony kod mejestrowany przez rejestrator makr.

Listing 18.3. AutomaQune g e m w a n l e ykmsu bez lnterakcjl z utytkownlklern


*
Sub CreateChart(r)
Dim Tempchart As Chart
Dim CdtTitles k Range
D i m SrcRange As Range. SwrceData As Range

Application. ScreenUpdati ng - Fa 1se

-- -
Set CatTl t l e s Activesheet .Rangel 'A2:FZ")
Set SrcRange ktiveSheet.Range(Cellstr. 11. G?lls(r. 611
Set SourceOata Union(CatTit1es. SrcRange)

DPdanie wykresu
-
Set Tempchart Charts.Add

Xon figuracja wykresu


With TmpChart
-
.ChartType xlColunnClustered

-
.SetSourceData Source:-ScurceData. Plot8y : - x l h s
.HasLegend False
.PlotArea. 1nterior.ColorIndex -
xlNone
Axes(xlValue1.HajorGridlines.Delete
.ChartTltle.Font.Size --
.AoplyDataLabels Type:-xlDataLabelsShowValue. LegendKey:-False
14
.ChartTitle.Font.Bold
Axes(xlValw).Maxi&le
True
-
Axes~xlCategory).TickLabels.Font.Size
0.6
--10
Axes(x1Category) .TictLabels.Orientation xlHorizonta1
.Location Where:-xlLocationAsObject. flame:-"Arkuszl'
End With

' Skorygwanie r o m i a r u cbiektu Chartobject

--
Uith ActiveSheet.ChartObjects(1)
.Width 300

-
.Height 150
.Visible False
End With
End Sub
*
Rozdziat 18. + Wykresy 9 7

Gdy procedura CreateChart zwtanie rakonczona, w arkuszu zostanie umieszczony obiekt


ChartObject zawierajqcy wykres utworzony na podstawie danych z wiersza aktywnej
kom6rki. Obiekt ChartObject nie bgdzie jednak widoczny, poniewat wlaiciwoSc Scre-
enUpdat i ng wyfqczono oraz ustawiono wartoit wlaSciwoSci V i s i b l e wykresu na Fa1 se.

Ostamia instrukcja procedury Shadhart powoduje zaladowanie okna UserForm. Ponikj


zamieszczono listing procedury UserForm I n i t i a1 ize. Jej dziaianie polega na zapisaniu
wykresu w postaci pliku GIF,usunieciu obiektu ChartObject i zaladowaniu pliku GIF
do kontrolki Image.
Private Sub UserForrn-1nit:all ze(?
Dim Currentchart As Chart
Dim Fname As String

Set CurrentChart - Activesheet. Ch~rt0bjects:l).Chart

-
Zapisanie wykresu w fomacle GIF
Fnarne ThisWOrkbmk .Path & App!lcatlm .Pathseparator & "temp. ~1 f
CurrentChart .Export Fi1eName:-Fname. F i 1terNane:-"GIG'
ActiveSheet .Chartobjects (1).Delete

* Wy9wietlente wykresu
1magel.Picture LoadPicture(Fnane)
Application.kreenUpdating True
End Sub
-
*
, Ten m t a d jest dostepny na Wcie CD-ROM dolqczonej do ksiqtkl.

Zdarzenia zwiqzane z wykresami


Excel obsluguje kika z d m n zwi&zanych z wykresami. Na pnyklad w momencie uak-
tywniania wykresu generowane jest zdartenie Activate. Zdarzenie Calculate zachodzi
wtedy, kiedy do wykresu zostanq pneslane nowe lub zmodyfikowane dane. Oczywiicie
istnieje motliwo9C napisanja kodu VBA wykonywanego w momencie zaj9cia okreslo-
nego zdarzenia.

-4
(8,
lhdatkowe lnfonacje na temat zdarren mozna maleB w rozdziale 19.

W tabeli 18.1 zestawiono wszystkie zdarzenia z w i p n e z wykresarni obshgiwane w Ex-


c e l 97
~ i wenjach pbtniejszych.

Pnyklad wykonystania zdaneA zwigzanych z wykresami


Aby zapmgmmowat proadurq obsiugi zdarzenia dotyczqcego arkusza wykresu, kod VBA
musi sic majdowaC w module kodu obiektu Chzrt. Aby uaktywnic ten rnodui kodu, na-
lety dwuhotnie klihqk poycje wykresu w oknie projektu. Nasepnie w module kodu.
z ronvijanej lisp Object po Iewej stronie tneba wybrad pozycjq Chart, a z mzwijanej
listy Procedure po prawej stronie (rysunek 18.10) odpowiednie zdnrzenie.
Tabela '18.1. Zdamnla dotyczqce oblektu Chart
Zdarzenie hialania, ktdre powodujq wygenerowanie zdarzenia
Ac:i>/?te Uaktywnicnic arkusza wykresu lub wykmu wbudowancgo
SeforeDcubleCl ick Dwukrolne klikni~ciew y h u wbudowanego. To zdanenie zachodzi pned domyilnym
dzialaniem wykonywmym w pqpadku dwukromego klikniccia
BeforeRightCl ick K l i b i v i e w y k s u wbudowanego piawym pnyciskiem myszy. To zdarzenie zachodzi
przed domyilnym dzialanicrn wykonywanym w przypadku kkkniqcia prawym
pnyciskicm myszy.
9l:~iai.e WykrcJlcnie nowych lub zmodytikowanych danych

:ragJver Przcciqgniqcie zakresu kombrek nad wykrcscm


3ragPlac Przccirlgniqcie zakresu komorek i upumzenie go na wykresic
PouseC~wfl Przycifnivie przycisku myszy w czasie, kiedy wskatnik rnyny majdujc siq
nad wykresem
~cuseWtre Zmimr pozycji wskainika myszy majdujqccgo siq nad wykrcsem
KOUS~UD Zwolnienie przycisku myszy w czasie. kiedy w s k i h i k rnyszy majduje siq
nad wykrexm
Res~ze Zmiann romiaru wykresu
Select Zaznaaenie elernenlu na wykresie
Sen : s t h a r p Modyfihcja wartoQi punkm danych nalctqcego do w k m

4 - ' -.-.) i D I **-.El. I-

*ll"r. IU E.II-b-I*.E.O
D Y
"q . A. *,.,a.
-%-
. I.. ",.1" ..* -.-
.yl I. Y S l * W
3.1-1
Cl.
..c.
C U I,-:*
XLAaIn: l d
iLhl.llll.i
. . 'UV
ill -YL.IIIY.
C . w .LF.Y.*". 1.. .CIUCII".
C u m zLCIYcIxLL.I
.- Id ' -PltT1..1*.
.C
.. .LC.rn...,
C u m .LAI.\.I.Lx
C U . slD.L.%l.~
C U . .,m.nu.,
Id
U
I8
I..
-
-cmlrr..
-I-.
*I-T-h.
B.6.I.r..

Rysunek 18.10. n + M r zdarzenia w modufekodu oblektv Chart


Rozdziol 18. * Wykresy 509

Ponlewat dla wykresdw wbwdowanyeh nle ma modulu kodu. pmcedura przedstawlona


iG! w tym podrozdzlale d z l h tylko dla wykres6w urnlesrczonych w osobnym arkuszu.
Dla wykres6w wbudowanych takie molna obslugiwaC zdarzenia, ale w tym celu nalety
pzepawadzlC wstepne czynnoki konfiguracyjne obejmujqce utwamnle moduh klasy.
Zagadnlenie to zostab oplsane w dalsze] czeScl rozdzlatu w punkcie .Obsluga
zdarzeri dla wykresdw wbudowanych".

Pokazany ponitej przyklad powoduje @wietlenie komunikatu w rnomencie. kiedy


kownik uakrywni arkusz wylarsu lub wybierze dowolny element na wykresie. Najpienv
utwonyiem skoroszyt zawierajqcy wykres w osobnym arkuszu. a nastqpnie napisalern
tny procedury obshgi zdarzen:
Chart-Activate -wykonywanq w chwili uaktywnienia wykresu,
w Chzrt-Deactivate -wykonywanq w chwili deaktywacji wyknsu.
-
Chart Select -wykonywanq w momencie zaznaczenia elementu na wykresie.

TreSC procedury Chart-Activate majduje sit ponitej:


Prlvate Sub Chart-AetivareO
D i m mg As String
-
--
msg "Mi t a j " & Application.UserName & vbCrLf & vbCrlf
msg msg & "llfafnie prregllasz szekiantesleczne podsununame "

-
msg msg & "sprzedaty produkth 1-3." 8 vbCrLf d vbCrCf
msg msg & "Kl iknl j pozycje na wykresle, aby dorriedzlet sic. crego aotgczy."
MsgBOx msg, vbInfonnation. ActiveUorkbook. Ham
End Sub

Procedura powoduje wy4wietlenie kornunfkatu podczas kadtgo uaktywnienia wykrcsu.


Zaprezentowano go na rysunku 18.1 1.

Rysunek 18.1 1 .
UaMywnienie rcykresu
powoduje
umchomienie
procedury
Chart-AcNvate
I
i wySwietlenie
pokazanego
komunikatu
510 CzqdC V + Zoowonsowane techniki programowonia

Procedura Chart-Deactivate, kt6ra majduje sic ponitej, t a k e wyiwietla komunikat, tym


razem w pnypadku deaktywacji wykresu:
Private Sub Chart-Deactivate0

-
Dim m g As String
msg 'Dziekujemy za przejrzenie wykreru."
.
Msgbx msg. k t 1veWork book.Name
End Sub

Kolejna procedura Chart-Sel ect jest wykonywana za katdym razem, kiedy na wykresie
zostanie zamaczony element:
Private Sub Chart-Select(ByVa1 ElementID As Long. -
ByVal Argl As Long. ByVal ArgZ As Long)

O i m i d AS Strfng
Select Case E l m t I O
- -
Case xlAxis: Id "Axis"

-
Case xlAxisTi t l e : I d ' A x i s l i t l e "

- --
Case xlChartArea: I d "ChartAna"
Case xlChartTi t l e : I d "ChartTitle'
Case xlcorners: I d "Corners'

--
Case xlDataLabe1: I d "DataLabel"
Case xlDataTable: I d 'OataTable"

--
Case xlDownBars: I d 'DounBars'
Case xl0rapLines: I d "DropLines'

-
Case xlErmr0ars: I d 'ErrorBars"

- --
Case x l F l w r : I d "Floor"
Case xlHiLoLines: I d "HiLoLines*
Case xlLegend: I d "Legend"
Case xlLegendEntry : I d "LegendEntry"
- -
Case xlLegendKey: I d 'LegendKey"

-- -
Case xlMajoffiridlines~: I d "MajorGridLines"
Case xlMinoffiridIines: I d "MinorGrldLines"
tase xlNothing: I d 'Nothing"

- - -
Case xlPlotArea: I d *PlotArea'
Case xlRadarAxisLabels: I d 'RadarAxlsLabels"
Case xlSeries: I d 'Series'

- -
Case xlSeriesLines: I d 'SeriesLines"
Case xlShape: I d 'Shape'

-- -
Case xlTrendl ine: I d "Trend1 lne'
Case xlUpBars: I d "UpBars"
Case xiwall s: I d "Wall s"

- -
Case x7XErrorBars: Id "XErmrBarr"
Case xlYErrorBars: I d "YErrorBars"
Case Else:: I d 'Nieznsny element"
End Select
Hsgbx "Typ ybrancgo elenentu: ' I I d
End Sub

Pmcbdura wyhvietk okno informacyjne zawierajqce typ wybranego clementu. Kiedy zaj-
- .-
dzie zdarzenie Select.,areument ElenwrtID bedzie zawieral liczbe ca4kowita odwwiadaim-
elernentowi, Wry mstat zazrtaczony. Argumenty Argl i Arg2 &erajlldo&tkoh.e informa-
cje o wybranyrn elemencie (wivej informacji znajduje sit w pomocy online). Procedm
Select Case zamienia wbudowane staie na Mcuchy mak6w.
Nie jest to pdna lista element6w, kt6re moge wystepowd w oblekcie Chart
-nie H e r . na przyklad obiekt6w spcgflcmyrh dla wykrea6w gmslawnych.
Wiagnle dlatego utyto instrukcji Case Else.

Obsluga zdarzeh dla wykres6w wbudowanych


Jak wspomnialem w popnednirn punkcie, zdarzenia dotycqce obiektu Chart q auto-
matycmie wlqczane dla wykresbw w osobnych arkuszach, ale nie dla wykresbw wbu-
dowanych. Aby wykorzystat zdarzenia dla wykresdw wbudowanych, nale2y wykanat
opisane ponitej czynnofci.

Utworzenie modutu klasy


W edytorze Visual Basic nale2y zaznaczyd projekt w oknie Project, a nasqpnie wybraf
polecenie Insert/CIuss Module. Spowoduje to dodanie nowego (pustego) rnodulu klasy
do projektu. Nastqpnie nalety wprowadzic opisowq nazwq modulu w oknie Properlies
(np, cl Chart). Zmiana n a y modutu klasy nie jest koniecma, ale jest to dobra praktjta.

Zadeklarowanie publicznego obiektu Chart


Teraz trzeba zadeklarowad zmiennq publlicmq, ktdra bcdzie reprezentowac wykres.
Zmienna powinna byC typu Chart i nale2y jq zadeklamwac w module klasy za pomoca.
slowa kluczowego WithEvents. Jeili s l o w kluczowe WithEvents zostanie pominiete.
obiekt nie b a e odpowiadaf na zdmenia. Poni2ej majduje sip przyktad takiej deklaracji:
Public WithEvents cl sChart As Chart

Powiqzanie zadeklarowanego obiektu z wykresem


Aby procedury obshrgi zdarzeh z a c w dzialat. nalety powi@ zadeklarowany obiekr
w module klasy z wbudowanym wykresem. Wykonuje sip to, deklarujac obiek! typu
clsChart (nazwa typu musi byt zgodna z n;lzwqmodu+uklasy). Powinna to by6 mienna
o b i e b w a poziomu modutu zadeklarowana w module VBA (a nie w module klasyi.
Oto przyklad:
01m HyChart As New clsChart

Nast~pnienalety napisat kod, ktdry powiqe obiekt clsCbart z okreSlonym wykresem.

-
Czynnolt tq wykonuje ponitsza instrukcja::
Se: MyChart.clsChart PstiveSheet .ChartObjects(l).Ch~rt

PO wykonaniu instmkcji obiekt Chart w module k l q w e wskazyival pierwszy wbu-


dowany wykres w aktywnym arkuszu. W rezultacie, kiedy zajdq okndlone zdarzenia.
zostanq wykonane odpowiednie procedury obstugi zapisane w module klasy.

Napfsanie procedur obstugi zdurzeh dla klasy Chart


W tym podpunkcie opisze, jak nalety pisaf procedury obstugi zdaneb w module klasp.
Jak pamictarny, w module klasy musi majdowak sic deklaracja postaci:
Public WithEvwrts clsthart As &apt
51 2 CzgiC V Zaawansowane techniki programowania
-

Nowy obiekt, zadeklarowany z utyciem sbwa kluczawcgo W i thEvents, zostanie wyiwie-


tlony na rozwijanej liicie Object w module klasy. Wybranie obiektu na lifcie Object
spowoduje wyswietlenie zdarzen wtaiciwych dla tego obiektu na liicie Procedure maj-
dujqcej s i po
~ prawej h o n i e ekranu (rysunek 18.12).

Rysunek 1 8.12. Na ligcie Procedure W w i e t l a n e sq zdanenia poprawne dla nowego obiekau

W kolejnym ptzykladzie pokazano prostq proceduq obshgi &rz& wykonywanq w mo-


mencie uaktywnienia wbudowanego wykresu. Procedura powoduje wyfwietlenie okna
informacyjnego z nazwq nadrzqdnego obiektu dla obiektu Chart (jest nim obiekt Char-
tgbject):
Private Sub clschart-Activate( 1
MsgBox 'Uaktywnlorw wykres " & ~1sChart.Pare'tt.Name
End sub

Na ' h c i e CD-ROM dolqczonej do kslqtki majduje sic skoroszyt. Mdry demonstruje


i mncepje opisane w tym punkcie.

Zastosowanie zdaneri dla wykres6w wbudowanych


Przyktad zaprezentowany w tym punkcie jest praktycznq ilusmcjq zagadnien opisanych
w punkcie popmdnim. Skoroszyt kr6rem efkkt dziatania pokazano na rysunku 18.13. za-
wiira wbudowany w y h dzidajGy jak mapa obrazkowa, &li obiekt grificmy pow&anY
z~ c z a m ikt6rych
, kliiiqcie powoduje wykonanie olcreSlonych dziaM. Kliknigcie kolumny
na wykresie uakrywnia arkusz wySwietlajqcy szczeg64owe dane o wskazanym regionie.
Rysunek 18.13.
Ten wykres dziafa
jak mapa obrazkowa

Skoroszyt sklada siq z czterech a r k u q . Arkusz o nazwie G1dwny zawiera wbudowany


wykres Pozostaie arkusze m Pblnoc, P&dnie i Zochdd. Formuty zapisane w zakresie 81 :84
podsumowujq dane w odpowiednich arkuszach i te sumarycme dane sq wykreilane na
wykresie. Kliknivie kolumny na wykresie powoduje wygenerowanie zdarzenia. a pm-
cedura obshgi tego zdanenia uaktywnia odpowiedni arkusz, w ktdrym sq wy3wietlane
szczeg6lowe inforrnacje o wybranym regionie.
Skoroszyt zawiera zar6wno modul klasy EmbChartClass, jak r6wniet w k 3 , rnodut
VBA Modul el. Dla celdw demonstracyjnych w arkuszu Gldwny umieszczono dwa przy-
ciski: jeden z nich powoduje wykonanie procedury EnableChartEvents, natomiast drugi
- procedury D i sableChartEvents (obydwie procedury rnajdujqsip w module Module:).
Dodatkowo w k&dyrn arkuszu znajduje sip przycisk pawoduj4cy wykonanie makra Re-
turntoMain, k-tbre ponownie uaktywnia arkusz Gfdwny.
Pehy listing m o d h Module1 tamicszcmno poni&j:
D i m SumnaryC%art As New MChartClass

Sub EnableChartEventsO
'
Procedura wywolyana przez przycisk r arkuszu
Range( 'Aln>.Select
Set SmaryUlart.myChartClass -
Uorksheets(l1.thart~bjects(lj.~hart
End Sub

Sub OlsableChartEvents()
-
Procedura wywljwana przez przyci sk w arkusru
Set SumsaryCMrt .aryChartClass Not9ing
Range( 'Al') .Select
End Sub

Sub ReturnToHalnt)
Procedura vyw~lywanaprzez przyclsk w arkuszu
Sheets("G?*').ktivate
End Sub
51 4 Cz$IC V + Zaawansowane techniki programowonio

Pienvsza instrukcja jest deklaracjq nowej zmiennej obiektowej SumryChart typu Emb- f
-
Chartclass, co -jak pamietamy jest nazwq modutu klasy. Kiedy utytkownik kliknie
przycisk W l q a obsluge zdarzeri wykreru, wbudowany wykres zostanie przypisany do
obiektu, co w rezultacie spowoduje uaktywnienie obshgi zdaneri dla wykresu. Modul
klasy ErnbChartClass pokazuje listing 18.4.
I
Listing 18.4. Obsluga kliknlpla k,olumny
Public WithEvents mychartclass As Chart
Private Sub ayChartClass-HouseOown(ByVa1 Button As Long. -
ByVal Shift As Long. ByVal X As Long. ByVal Y As Long)
D i m IDnum As Long
Dim a As long. b As.Long

a Nastepnd instrukcja zwraca warto$cl IDNun. a i b


myChartC?ass.GetChartElement X . Y. IOnum, a . 3

-
Czy kliknreto serie danych?
If [Dnm xlSeries Then
Select Case 5
Case 1
Sheets("P6lnoc") .Activate
Case 2
Sheetst"Po1udnle") .Activate
Case 3
Sheets( "Zach&*l .Act1vate
End Select
End If
Range('Al"1 .Select
End Sub

Kliknivie wykresu generuje zdarzenie HouseDokn, ktore powoduje wykonanie pmcedury


mychart Class-MouseOw. Procedum wykonystuje met49 EetChar:El a n t w celu okrdle-
nia, ktbry element wykresu klikniqto. Metoda GftChartElement nvraca infomacje na
ternat elementu wykresu w postaci wspbkz~dnychX i Y (informacje re 52\ dostqpne za
poirednictwem argumentdw procedury myChartCl ass-MouseDonn).
Ten przykiad jest dostepny na plycie CDROM dolqczonej do ksleki.

Jak ulatwiC sobie pracq z wykresami?


W tym podrozdziale opisdem niekt6re interesujqu c e z w i ~ i akt6re
, wymySlilem w czasie
pracy z Excelem. Jedne mogq sic pnyda-2 w aplikacjach, natomiast inne sq wylqcznie
ciekawostka, Pmstudiowanie ich z pewnokiq umoHiwia inne s p o j m i e na model obiek-
t6w zwiqzanych z wykresarni.
Rozdziol 18. + Wykresy 515

Drukowanie wbudowanych wykres6w


Po za~laczeniuwbudowanego wykmu m o h a go wydrukowa~?poprzez wybranie polecenia
PliHDrukuj. Wbudowany wykres zostanie wydrukowany na pehej stronie (dokladnie tak,
w
jak w pm$adku wykres6wurnieszczonych osobnym ark&zu). Poniaze rnakro powo-
duje wydrukowanie wszystkich wbudowanych wyk~esdwaktywnego arkusza. Kazdy z nich
bedzie wydrukowany na pehej stronie:
Sub P r i ntEmbeddedCharts()
For Each chtCbj I n k t i v e S h e e t .ChzrrObjects
cht0bj .Chart . P r i n t k t
Next chtObJ
End Sub

Tworzenie ,,martwych" wykres.6~


W normalnych w a ~ n k a c hwykres Excela wykorzystuje dane zapisane wewnqtn zakresu.
Modyfikacja danych w zaknsie powoduje automatycme uaktualnienie wykresu. Crasami
jednak trzeba odtqczyt wykres od zakresu danych i utworzyc ,,martwy" wykres (taki,
ktory nigdy siq nie zmienia), jak chocby w przypadku wykre3lania danych generowa-
nych dla rdtnych scenariuszy typu co-jdli, kiedy niektdre wykresy warto zapisat jako
punkty odniesienia, dla porbwnania z imymi scenariusmi. Sq tny sposoby utwonenia
takich wykredw: skopiowanie wykrcsu i wklejenie go jako obrazu, konwersja odwohn
do z a h s u na tablice oraz skorzystanie z instrukcji jezyka VBA.
Skopiowanie wybesu i wklejenie go j a b obrazu. Nale2y uaktywniC wykres, ?bra5
polecenie E&cjaJKopiuj, wcisnqk klawisz Ship i wybrak polecenie E&cja/Wklej
obrm (polecenie Wklej obra. jex dostepne tylko wtedy, kiedy wciinie sic klawisz
Shift przed wybraniem menu E&cja). W efekcie uzyskamy obraz skopiowanego
wykresu. Altematywnie rnoma wcisnqt Shifr i wybrad polecenie E&cja/Kopiuj
obraz, co spowoduje wyiwietlenie okna dialogowego Kopiowanie o b r m (zawien
kilka opcji kopiowania). Nastepnie wystarczy utyC polecenia Ea'ycjaiWklej.
aby wkleiC obraz.
8 Komersjo ohuo!ah do zakresu no tablice. NaIety kliknqt s e r i ~danych wykresu.
a nastepnie pasek formufy. WciJni~cieF9 spowduje konwersjq zakresbw
na tablicq. CqnnoSC tq nalety powthzy6 dla wszystkich serii danych na wkresie.
Zartosowanierocedu w j w h VBA w ce1upr;ypkmia rablig zamiaxr zakresrr
do wldciwos'ci XYalues lub '/a!ues obiektu Series.
w r e s y w pliku xI8galry.xls [AE]sq .marWea. Jest to scecjalny skoroszyt
is2 wykorrystywany przez Excel do zapisywania fonnat6w wykresu uiytkownika.
W skoroszycie tym zapisano 20 arkusyykresbw. Z kaidyrn wykresem sq zwi~zane
fikcyjne dane. M6r)ch Ir6dIern sq tablice, a nie zakresy.

Procedura zapreantowma p o n b j tworry obraz m e g o wykresu bezpdrednio na


wyluesie oryginalnym (oryginalny wykns nie jest usuwany). Procedura dziata zar6wno
dla wykresbw wbudowanych, jak dla wykres6w zapisanych w osobnych arkuszach.
Sub ConvertOlartToPidure( I
D i m Thechart As Chart
[ f A c t i v K h a r t Is Nothing Then
MsgEox "Uaktpni j wykres." . v b i r , f o m t i c n
51 6 C r e e V + Zoawonsowane techniki progromowonia

E x i t Sub
End I f
-
Sec TheCbart k t l v e t h a r i
fipplication.ScreenUpdating False -
-hechart .CopyPic:ure Appearance: -xi Printer. -
Si ze:-xlScreen. Fomat :-xlPicture
I f TypeName(Pctlve5heet)
Acti veulart . Paste
-
"Char:" Then

Else

--
PctiveSheet .Paste
Selection.Left, TheChart.Parent.Left
Selection .Top Thechart. Paren: .TOP
End If
Thechart. Parent .Delete
npplicatlon.ScrmUpdat7ng
End Sub
h e -
Ten przyktad jest dostepny na ptycle CDROM ddqczonej do ksiqtki.

Kolcjna procedura tworzy wykres na podstawic tablicy (rysunek 18.14). Dane nie sq
zrrpisane w arkuszu. Jak motna s i przekonaf,
~ formula SERIE zawicra tablice tamiast
odwolan do zakres6w.

Rysvnek 18.14.
Ten wykres
utwonono
na podstawle danych
z rablic
(a nie z arkusza)

Sub CreatePDeadChartO
.Darts.Add
k t l v e U ~ a r t . L a a t i o n-
*ere:-xlLocationAsObjeCt. Nam:-"Arkuszl"
U i t h Activechart

--
.SeriesCol1ection.NewSeries
.SeriesCol lection(1) .%Values Array('Sty'. "Lut'. "Mar")
.SerielC~llection(l).Yalues Array(l25. t65. 189)
.HasLegend = Fa1se
.Deselect
End With
End Sub

Ten pnyklad jest dostgpny na M i e CD-ROM dotqczonej do kslqtki.

Poniewa2 ismieje ograniczenie dlugoici fonnuly SERIE dla wykresu. technike te rnotna
stosowat tylko dla relatywnie malych zbiorbw danych.

Wykorzystanie zdanenia Mouseover do wyjwietlania tekstu


Znanyrn problemern jest modyfikowanie porad ekranowych dotyczqcych wykres6w. Porady
ekranowe to niewielkie komunikaty pojawiajqx sip obok wskatnika myszy w pnypadku
wskazania wykrcsu. W poradzie wySwietla s i ~nazwa
: elementu wykmu oraz (w przy-
padku serii danych) wartog punktu danych. W modelu obiektu Chart nit ismieje dostep
do porad, a zatem nie ma sposobu ich modyfikowania.
Aby wlqczp5 lub w y l w wySwietlanle porad, nalety wybd pdecenie Narz@zia/Op$e.
kllknqt zakladkq w e s 1 zaznacqf lub anvlowat zsznaczenle dwdh p61 wyboru
w sekcjl Porady dotyzqce wykresdw.

Na rysunku 18.15 p o h o w y h kolumnowy, dla kt6rego wykonystano zdarzenie


Houseover. Kiedy wskahik m y s y majdzie sip nad kolumnq, w lewym g6mym mgu
wygwietli sip pole tekstowe (obiekt Shape) z informacjq na temat punktu danych. Infor-
macje sq zapisane w zakrcsie i m o m byt dowolnie formutowane.

Rysuncik 18.15.
Pole tekstuwe
Mwietfajqce
infomacje na temat
ponh-tu danych
wskazyvanego
pnez mysz

Zaprezentowanq ponitej procedurq obshgi zdarzenia nalety umi&i6 w module kodu


arkusza zawicrajwego w y h :
P r i v a t e Sub Bart-MousemvetByVal Button As LUKJ. ByVal 9lft As L m .
ByVal X As Long. ByVal X k Long)
2~.~
t; D i m El~nentlDAs Long
!L
51 8 Czelt V + Zoowonsowone techniki progromowonio 1

Dim a r g l As Long, arg2 As Long


Dim W T e x t As String
On Error Resume Next
ktlvethart.GetChartElement X. Y. E l m n t I O , a r ~ l .arg2
--
I f E l m n t I d xlSeries Then
NwText Sheets("Arkusz1") .Range("Kaentarze") .Offset(argZ. a r g l )
Else
-
HewText ""
-
ActlveChart .Shapes( 11.Vlsl ble Fa1 se
End If

- -
If NewText 0 Activechart .Shapes[l) .TextFrane.Text lhen
Activechart .Shapes0 1) .TextFrafre.Text NewText.
nctrvethart .Shapes(l) . V i s i b l e True
End I f
End Sub

Procedura monitomjc wszystkie mchy myszq na arkuszu wykresu. Wsp6hzcdne myszy


sq zapisane w zmiennych X i Y przekazywanych do procedury. Argumenty Button i S h l f t
nie s;l w tej procedurze ukywane. NajwaZniejszym elementem tej procedury jest mctoda
GetChartEl ement. WartoX xl Series miennej E l m n t Id omacza, 2e w s k a i n i k myszy
znajduje sip nad seriq danych. Nastppnie zmienna NewText jest pnypisywana do tekstu
w okreilonej kom6rce. Ten tekst zawiera opisowe infomacje na ternat punktu danych
(rysunck 18.16). Je2eli wskahik myszy nie wskazuje serii danych, pole tekstowe jest
ukryte. W innym pnypadku wyfwietla zawartoSf argumenu NewText.

Rysunek 18.1 6.
Zakres B7:C9
zawlera 1nfomrac)e
o punktach danych
wy6wielIanflh
w polu tekstowym
wykresu

Tm przyWad skantlgurcnvany dla wyknsu wbudowanego oraz arkusza wykresu


majduje rlp na M i e CDROM cfolqczone] do ksi@i.

Wykresy animowane
Za pornocq Excela motna animowat figury i wylaesy. Rzeanalizujrny wylcres XY po-
kazany na rysunku 18.1 7.
Rozdziai 18. + Wykresy 519

Rysunek 18.1 7.
Pmsta procedura
w ieIvku
VBA przeksztafci
ten wykres
w interesujqca
animacje

WartoSci X (kolumna A) zaletq od wartoeci w komorce Al. Wartoit w katdyrn kolejnym


wierszu jest obliczanajako suma wartoici z popnedniego wiersza i wanoki w korn6rce A!.
Kolumna 8 zawiera formuly obliczajqce funkcj~sinus dla wartoSci z kolurnny A. PoniBza
prosta procedura twomy interesujqcqanimacj~,modyfikujqc warto5c w kom6rce A!, co
powoduje zmianp wartoici dla zakresow X i Y:
Sub MimateChartO

- - -
D i m i As Integer
Range("Al.1 0
Far i 1 To 150
Range('Al"! Range("Al"1 + 0.035
Next 1
-
Range('A1")
End Sub
C

Na ptycie CDROM dotqczonej do ksiqiki znajduje sie skorosryt zawierajacy


ten anirnowanywykres oraz kilka innych przykladc5w anirnacji.

Tworzenie wykresu krzywych hipocyklaidalnych


Nawet tym, ktdrzy nie lubili trygonornetrii w szkole, prawdapodobnie spodoba sic pnyktad
zaprezentowany w tym punkcie, ktbry opiera siq g h n i e na wykotzystaniu firnkcji vgo-
nornetrycmych. Skorwzyt pokazany na rysunku 18. i 8 wySwietla krzywe hipocykloidahe.
K n y w a hipocykloidalna to Scieika,jakq krefli punkt naletqcy do okregu porus~ajqcego
sip wewnqtrz innego obqgu. Jest to ta sarna technika, ktorq wykorzystywano w popu-
lamej zabawce Spirograph f i m y Hasbro.
Ten przyktadjest dostepmy na plycie CDROM dc4qczonej do ksiqiki. Na ptycle
znajduje SIC takle jego znacznie bardztej iiolona r r s j a urnatliwlajqca mian?
kolor6w I sterowanie anirnacjq.
520 Cz&C V + Zaawansowane techniki programowania

Rysunek 18.18.
Skoroszyt
genenrjqcy knywe
hipocykloidalne

W przyktadzie wykorzystano wykres XY. Dane dla osi X i Y sq generowane przy uty-
ciu forrnul n ~ i s a n v c hw kolurnnach A i 0. Paski ~ m w i i a n i aw gbrnei cze9ci okna
umo2liwiajq modyfikacjc tnech panrnerr6w sterujicych kglqdem wykes". Sq one
powiwme z komdrkami 81.82 i 83.Nie sa to kontrolki ActiveX. lecz kontrolki z paska
narzedzi Forntrrlorre. ~ o d z ~ t k o wnao wykksie znajduje sic pnycisk Losowo, kt& ge-
neruje losowe wartosci dla trzech parametrbw.

Skoroszyt zawiera tylko jedno makro (zarnieszczono je ponitej), ktdrejest wykonywane


w przypadku kliknipcia przycisku Losowo. Makro generuje tny losowe liczby z zakresu
od I do 250 i wstawia je do arkusor.
Sub Ranbcm-Cl t ck (
Randomize
--
Ran~e("Bl"1 Int(Rnd 2501
* 250)
Ran~e("82'1
- Int(Rnd
Rance("93"l Int(Rnd
End 5l.5
* 250)

Twonenie wykresu-zegam
Na rysunku 18.19 pokazano wykres XY, kt6ry skonfigurowano w taki sposbb, aby
pnypomind z e p r i dziatal jak zegar. Nie przychodzi mi na my61 zadna konkretna sytu-
acja, w ktbrej rnotna by wykorzysaaf taki zegaa w arkuszu, ale jego utwonenie bylo dla
mnie wyzwaniem. Poza tym tworqc taki wykrcs, rnotna sie wiele naucqf.
Ten pnyklad jest dostgpny na ptycie CD-ROM dolqczonej do ksiqiki.
Ryrunek 18.1 9.
Ten dzlafajqcy zegar
jest w neczvwlstoScl

Poza wykresem-zegarem skorosq't zawiera pole tekstowe,, w ktbrym czas jest wyfwie-
tlany w postaci nvyktego tarlcucha makbw. jak pokazano na rysunku 18.20. Domyslnie
to pole jest ukryte. ale motna je wytwietlit. anulujqc zaznaczenie pola wyboru Zegar
analogony.

Rysunek 18.20.
kt+3wietlanie zegara
w postaci cyfmwej
jest znacznie lahviejsze,
ale i efektjest rnniej
interesujqcy

m o m siq prrydat pod-


Ponitej maj~dujesic kilka infmacji, ktkt6re analizowania kodu
tego prykladu, majdujqcego siq w skoroszycie na plycie CD-ROM.
m Zmiennej obiektowej typu Chartobject nadano nazwp ClockChart. Obejmuje ona
zakres Digitalclack. wykorzystywany do wy4wictlania czasu w p t a c i cyfrawej.
Dwa przyciski wykorzys!ane w arkusm pochodqz pnska narzpdzi Formulme.
Z ka2dym z nich jest powi-e makro (StartClock orax StopCl3ck).
Pole wyboru (0 nanvie cbClackType) w ar!aszu pochodzi r6wnie2 z paska
narqdzi F o r d m e , a nie z paska Pnybornik formanrdw. Kliknivie obiektu
powoduje wykonanie praccdury cMl ockTypeypeCl ick, Idbra p d q c z a wart056
wh6ciwo6ci Visible obiektu Chartmject. Kicdy ten obiekt jest nitwidmmy,
Wwietlany jest zegar w postaci c y h w e j .
W przyldadzie wyk~nystanowykxcs XY t cztmma obiektami Series. Serie
reprezentujq wskazbwkq goddn, minut, sekund o m 12 liczb.
Kliknivie przycisku U r u c b zegm powadujc wykonanie pmedury UpdateCl xk.
Proccdura sprawdza, kt6ry =gar jest widocmy, i odpowiednjo go aktualizuje.
522 Cz#C V Zoowansowane techniki programowania

8 W p r o c e d m VpdateClock wykorzystano metodp OnTime obiektu Application.


Metoda ta urnotliwia wykonanie procedury o okrellonej godzinie. Przed
zakohczeniem dzialania procedury Updateclock nastcpuje skonfigurowanie
nowego z d a m i a OnTime, kt6re wydany siq za sekundp. Mbwiqc inaczej,
procedura UpdateCl ock jest w y w o w a n a co sekundp.
W procedune Updateclock wykoqstano prcwte ptzebztakenia iqgonometrycme
w celu obliczenia kqtbw, pod jakimi majq by6 wyiwietlane wskazbwki zegan.
W odr6tnieniu od witkszoki wykresbw, w tym przypadku nie wykorzystano
danych z arkusza do jego wykndlenia. Zarniast tego warto6ci sq obliczane w kodzie
VBA i przenoszone bezpo6rednio do wla4ciwofci Val ues i XVal ues obiektu
Set1es wykresu.
Choclai ten zegar jest interesujqq clekawostkq, wy-Swletlanle w arkuszu ciqgle
uaktualnlalqcego sie zegara nie o m c a do. Makro VBA rnuslaloby dzlalad w fle p m z
aaty czas, a to z pewno5ciq pneszkadzabby dzlataniu lnnych makr i ujemnie wplywalo
na ogblnq wydajnost aplikacji.

Co mozna zrobie z wykresami bez uiycia makr?


W tym podrozdziale opisatem kilka ciekawostek dotyczqcych wykres6w, w ktbrych nie
wykonystuje siq makr. Wielu czytelnikbw zapewne ulziwi sic, widqc, ile efektow m o m
uzyskak w Excelu bez utywania kodu VBA.

Sterowanie serlaml danych ra pomocq automafycznego filtrowania


Na rysunku 18.21 zaprezcntowano w y k m wyfwietlajqcy dane dla 365 dni. Co m b i f , jdli
inaeresujq nas dane tylko dla lutego? ~ o t n oczywiicie
a modyfikowac definicjp zakresu
danych wykresu. Innyrn ronviqzaniem jest skorzystanie z polecenia Autojilrr Excela.

Rysumk 18.21.
Za parnacq
w~~&,/wo~c/
Autofffir Excela
moina wykreSIfd
VIko podzbidr danych

DomySlnie ha w y h i e nie q Wwietlane dane ukryte. Poniem wMciwoiC Autofiw


Excela dziala na zasadzie uluywania wierszy niespetniajqcych podanych kryteriirw, jest
to r o n v i p n i e bardm proste.
Aby wbczyC byb autofilm, naley wybraC polecenie DanJFiI~r/Aut~f'?ffr. Katdy na-
gldwek wiersza na odfiltrowanej IiScie wySwietla strzalke, wskazujaq rnotliwoJf rozwi-
niqcia listy. Nalcty j q kliknqt i z listy wybraC pozycjp Niestandardcwy. Nastqpnie naleq
wprowadzif kryteria filtrowania dla danych, ktbre chcemy umiegcif na wykresie. Na
prryktad w przypadku ustawiefi pokazanych na rysunku 18.22 zostanq ukryte wszystkie
wiersze z wyjqtkiern wienza z danymi dotycqcyrni lutego.

Rysunek 18.22.
Zastosowanie
okna dialogowego
Autofiltr
niestanderdcwyw celu
filtrowania listy

Ten prrylctadjest dost$pny na plycie CD-ROM dotqczonej do ksiqiki.

Uzyskany w y h s pokazano na rysunku 18.23.

Jeieli okate sig. Le ta technika nie dziala, nalety zrnlenit ustawienia dla wykresu.
W tym celu trzeba uaktpniC wykres, wybraC pozycje Na~dzfa/Opcje,kliknqd
zaktadke W)4cre+ I zamaczy6 pole KmSl tylko widmne komdrki. Aby wykres nie znikf.
jeSli wszystkie wfersze, M6re go dotyczq. zostanq ukryte, naleiy zamaczyd opcjqa'
Nie menod ant nie zmieniaj romiaru z komdfkamiw zaktadce WIagciwo5ci okna
dialogowego Formatavanie obszaru wykresu dostepnym po W r a n i u poieceria
Format/Zaznaczony obszw wykresu.

Zapisywanle wielu wykres6w w arkuszu-wykresie


W w i ~ k s m i cpnypadk6w
i rwierdzenie, te w wkusm wykresu rnokna zapisaf tylko je-
den w y h s , jest prawdziwe. Jednak zapisywanie wielu wykres6w w pojedynczym zr-
k u m wykresu talde jest motliwe. M o h a to n o b i f bez u w i a dodatkowego kodu. Po
524 CzeiC V Zaawansowane techniki programowania

uaktywnieniu wbudowanego wykresu i wybraniu polecenia WykrtdLokaiizacja Excel


wyiwietli okno dialogowe Pdozenie wykreru. Jeili utytkownik wybierze opcjp Jako
nowy arkusr i poda istniejacy arkusz wvykresu jako lokalizacjg, wykres pojawi sip na
szcycie wykres6w w arkuszu wwkresu.

Najczqiciej dodajemy ark= wbudowane do pusrych arkusy wykresbw. Aby utwortyf


pusty arkusz wykresu, wystarczy zamaczyC pojedyncq pusq komdrke i wcisnqe F I I .
Na rysunku 18.24 pokazano pnykhd arkusza wykresu. kt6ry zawiera szefC wbudowa-
nych wykresdw.

Rysunek 18.24.
Arkusz-wykres
z szeJcioma
wbudowanymi
wykresami

- Ten ptzyktad jest dostepny na pfycle CD-ROM dolgzonej do ksiqtkl. Skoroszyt


zswlera tahle pmste rnakro urmtliwiejzjce zrniane mzrniaru I wyn5manla wylwsdw.

Twonenie samorouzenajqcego slq wykresu


Jedno z najczqiciej zadawanych pytah zwiqzanych z tworzeniem w y M w brzmi: ,W jaki
spos6b utworzyf wykm, kt6ry hdzic siq rozszerzat automatycznie po dodaniu nowych
danych w arkuszu?"

Aby lepiej wzumieC ten problem, spdjrzmy na rysunek 18.25, na ktbryrn zaprezento-
wano wyhs dotycqcy dziennej sprzedaky. Jest on uaktualniany codziennie i dotyczy
wszystkich danych w arkusw. Wprowadzenie nowych danych powoduje koniecmoSf
dodania nowych serii danych, w celu uwzglqdnienia nowych informacji. Z kolei w pny-
pdku usuniccia danych serie m u s q zostat usunicte. Jest to cakowicie realne, wystarczy
tylko wykonaf kilka czynnoici przygotowawczych.
Rozdziat 18. Wvkresv 525

Rysunek 18.25.
Samorozuenajacy
sic wykres aktuallz~~je
sie autom8Qcznie
w miare
wprowadzanla
nowych danych

Jetell konystamy z Excela 2003, stosowanle sztuczkl prezentowanej w tym punkcie


nie jest koniecme. Wystarcry wyb& polecenie Dane/Usta/Utwdrr /is*, aby oznaczyC
dane jako listq. Kiedy utwotzyrny wykres na podstawie danych z listy, yrkres mzszeny
sie autornatycznle, po dodanlu nowych danych.
Jednym z mzwiqzah jest zdefiniowanie dla serii danych zakrcsu wiqkszego, nit jest
wyrnagany. ale w6wcza.s procedura pnctwarza puste kom6rki i w efekcie uzyskujemy
wykres, na kt6rym jest bardzo duto pusrego miejsca. W wi&szoki syruacji takie roz-
w i q n i e jest niezadowalajqce.

Poniewat anedstawiona tu technika iest doSC skom~likowanazaDrrzentowan0 i 4 jako


&k po h k u . Najpiww utw&ymy standardouy wyk&, nastqpnie w y c o ~ m ~
koniecme modyfikacie, aby mzszcnal sic automatycznie po dodaniu nowych danych,
iub zawqtat, j e i ~ id&i z o A q ~ u n i ~ t e przykkidzie
.'~ wykorzystano p ~ s t yarkusz,
w kt6rym zapisano daty w kolumnie A o m kwoty s p n e d w w kolumnie B. Zalotono.
te nowa data i informacje o wielkoki spnedaty sq wprowadram codziemie, a na wy-
kresie bpi4 wyiwietlane wsystkie dam.

P i ~ u y n n o S c i q j e sutworzmie
t standardowego w y h u , M r y wyk-je istniejp
dane. Na rysunku 1815 zapmentawsno iut dane oraz wykrcs kolumnowy utworzony
na ich d t a w i e . W y h A w i m jednq skie danych. ~ o & u l aSERIE odpo&adajqca tej
serii danych ma nastqpujqcqpostat:
-SERIE(Arkuszl! SBS1 .Arkuszl! SAS2:SPJll.Arku~zl: !1812:SBSll.1)
Na jej podstawie mo2na wywnioskow&, tk:
n m serii danych zapisano w kom6rce 81,
W etykiety kategarii zapisano w ralrnsie A2:All,
wartoki zapisano w zakresie B2: 011.

Datyehczas jest to nwykly wykres. Jeteli w arkwzu wprowadziiy nowq dag, na yf-
krcsie nie zostanqwql~dnionenowe dam. W t o e si! tym zajmiemy.
526 CzgfC V + Zoawansowane techniki programowonio

Tworzenie fonnu).~namami
Teraz utworrymy dwie formuly, ktckym nadamy nazwy. Nazwy te posh* jako argumenty
w formule SERIE. Pojpcie formu1 z nazwami om6wip w dalszej czpfci tego p u n h . Aby
utworzyt fonnuly z nazwarni, wykonaj nastppujqce czynnosci:
1. Wybierz polecenie Wstmv/NazwalDefiniuj.Na ekranie wySwietli sip okno
dialogowe Definiowanie nmw.
2. W polu Nanvy w skoroszycie wprowadt nazwe Data. W polu Odwoluje sic
do wprowailt p o n i b q formute:
-PRZESUNIEC1E(Arkuszl!SAS2.0.O. ILE.NIEPUTTYOI(Arkuszl! SA:SAl-1.1)
3. Kliknij Dodaj, aby utwonyC fonnulp o nazwie Data. Zwr6C uwage, t e funkcja
PRZESUNIECIE odwduje sit do picrwszej etykiety kategorii (komdrka A2)
i wykortystuje funkcjp ILE.NIEPUSTYCH w celu okreilenia liczby etykiet
w koiumnie. Poniewat w wienzu 1majdujqsip nagl6wki, od uzyskanej
licby odejrnowanajestjedynka.
4. Wpolu N a m y w skomszycie wprowadt n a m e Sprzedat. W polu Odwoluje sic
do wprowadt ponitsq formu+q:

W tym przypadku finkcja PRZESUNIECIE odwduje siq do pierwszego punktu


danych (kom6rka 82). Podobnie jak popmdnio, hnkcja 1LE.NIEPUSTYCH
wykorzystywana jest do uzyskania liczby punkt6w danych i jest modyfikowana
w celu uwzgldnienia etykiety w komdrce 81.
5. Kliknij Dodaj, aby utworyC formutq o namie Sprzedat.
6. Kliknij Zomknij, aby zamknqC okno dialogowe Definiowanie narw.

Wykonanie tych cqnnogci spowoduje dodanie do skoroszytu dw6ch nazw: Data oraz
Sprzedat.

Modyfikowanle serfi danych


Ostatni lank polega na takim madyfikowaniu w y h u , aby byly wykonystywane nanvy,
kt6re zdefiniowaliSmy przed chwilg zamiast zakodowanych ,,na sztymo" odwobn do
zakresbw. W tym celu wykonaj nastqujqcc czynnoici:
1. Uaktywnij w y b s iwybim polecenie WykedDrute irddlowe. WySwietli sip
okno dialogowe Dane trddfawe.Wybien zakkdkp Serie.
2. W polu WmtoSci wprowadi! Arkuszl!Sprzeda2.
3. W polu Eykiety mi kategorii pJ wprowadtArkusz1 !Data.
4. Sprawd2, c y okno dialogowe wyglqda rak,jak pokazano na rysunku 18.26.
Jeteli talc, kliknij OK.
Rysunek 1826.
Wprowadzanie
nazwanych formul
w oknie dialogowym
Dane irddbwe

Nanvy podawane w h k a c h 2. i 3. sqpoprzedmne n a m q arkusza i mkiern wykizyknika


Poniewat zasiegiem nazwanych formul jest skorouyt (a nie arkusz), wprowadzajqc name,
powinienei podaf nazwq skorosrytu. Excel potrafi jednak odpowiednio interpretowad
wprowadzone dane i automatycmie wykonuje potrzebne zmiany. JeMi ponownie otwo-
rrymy okno dialogowe Dane frddlowe, zamiast wprowadzonej n a m y arkusza pojawi
siq nazwa skoroszytu:

Jak powinno 5yC? W pnypadku wykorzystania nazwanych formul, naMry formu1 nalet);
poprzedzif nanvq arkusza lub skomsytu (wedlug mnie tatwiej postugiwad siq nazwa.
skoroszytu). Trzeba jednak pamiqtad, t e jeSli nazwa arkusza lub skoroszytu zawiera
spacjq, n a m e @ nale2y ujqt w apostrofy tak. jak pokazano ponitej:
-'dzienna sprzedat.x l s ' !Sprzedat

lub
'dane sprredab' !sprzedai
Wivej informacji na temat nazw mokna maleif w rarnce ,,Jak Excel obshguje nazwy".
Zarniast korzystd z okna dialogowego Dane frddtowe, motna bezpo5rednio edylowad

Testowanie samorozszenajqcego siq wykresu


Aby pnetestowd remltaty dotychczasowych dziahri, naley wprowadzic nowe dane
w kolurnnach A i B albo u s m f dane z tych kolurnn. Jeteti poprzednio opisane cynnosci
mstnfywykonane poprawnie, wykres uaktualni siq automatycmie. J e e l i wyiwietli sic
kornunikat o Mednc lub jeSli wykres nie uaktualni siq, nalet). uwatnie przeanalizowac
poprzednie czynnoki. Opisana metoda z pe\vnoSciq dzida!
--

528 Cz&C V Zaownsowane techniki prograrnowania

Jak Excel obsluIEuje namy


Excel obstuguje dwa rodzaje n a m na podornie skorouytu oraz na poziornie arkusza. Zasiaern
nazw poziomu skoroszytu jest caty skoroszyt. JeFeli crtworzymy net- kom6rki lub zakresu, dc-
rnySlnie obowlqzuje ona we wszystkich arkuszach.
Motna takte uhwxyt naMy podomu arkusza. CqSciq ncwry podornu arkusza jest nazwa arkusza.
Na przyktad Artuszl!Oane to nazwa poziomu arkusza. Moina jej uiywa6 w arkuszu Arkuszl bez
konieczno5ci wprowadzania n a y arkusza, na przyktad:
-Cane*4
a

Je51i jednak wprowadzimy te form* w innym arkuszu. Excel nle mzpozna nazwy. ch@a i e okreSlirny
nazw arkusza:
-Arkuszl! Danen4
Nazwy poziornu arkusza sq prrydatne, poniewai urnoiliwiajq uwanie tych sarnych nazw w r6inych
arkuszach. Na przyktad moina wprowadzif namy pozlomu arkusza postaci Artusrl!C3scrk!. A r -
tusz2lOdsetki oraz irrkusz3!06setkl. Kaida nazwa odwoluje sle do komdrki w lnnym ar)cuszu.
Formula. w ktdrej uFyto nazwy Odsetki. wykorzystuje definicje teJ namy dla Wasnego arkusza.
Nazwane formuly viykorzystane w tym rozdziale sg nazwami poziornu skoroszytu, poniewa2 nie
sq poprzedzone namq arkusza. Jeteli jednak wpmwadzarny n a w w polu okna dialogowego
Dane irddbwe, Excel (z pewnych powod6w) wymaga podania namy z namq arkusza lub z namq
skoroszytu.

Jak dziclla samorozszerzajqcy siq wykres


Wielu utytkownikbw korzysta z opisanej tu techniki samorozszerzajqcego sip wykresu.
nie do korica rozumiejqc, jak dziala. Oczywiicie nie ma w tym nic zkgo. Utytkownicy.
ktbrzy wykonajq to twiczenie, z pewnoiciq poradq sobie z dostosowaniem procedur do
wlasnych celaw. Jednak nozumienie zasad pozwoli na tworzenie dynamicznych wy-
kresdw o macznie szerszych motliwofciach.

Nazwane formuty w samorozszerzajqcyeh siq wykresach


Opisany w tym punkcie sarnoro~rrajqcysip wykm wykonystuje wMciwofci na-
zwanych formut. w kt6rvch drzernia wiekie motliwoSci. WiekszoJC utvtkownikbw
prawdop~d~bnie m a pojEcie newonych komdrek i z&esdw. Niewielu Gdnak rdaje
sobie sprawp, te nazwane komdrki lub zakresy to okreilenia nieicisle. Kiedy tworzylny
namp zakresu, w rzeczywistoSci tworzymy nazwanq formue.

Pole Odwohje sig do z okna dialogowego D&niowanie nanv zawiera fomulq, natorniast
pole N Q H ~w~skoroszycie zawiera natwp fornub. &wart& pola Oddqie sic do zawsze
rozpoczyna sip od maku r6wnoSci -jest to wskahik, te mamy do czynienia z form*.

W odrdtnieniu od mykIej formuly, nazwane formuly nie sq zapisywane w kombrkach.


~ w pamiqci Excela i nie sq identyfiiowane pmez adres komdrki. Dostep do
l s h i e j one
wynikow nanvanej fonnuly rnohajednak uzyskad poprzez odwdanie do jej nazwy za-
r6wno w standardowej formule, jak w fomule SERIE wykreou.
Po zdefiniowaniu dw6ch nazwanych formui Excel oblicza ich wartoSci przy kaMym
przeliczeniu danych arkusza. JeBli jednak formuty te nie sq utywane w tadnej kombrce,
nie bqdnie widocmych efektdw ich utwonenia.
Aby lepiej zrozumiek dzialanie nazwanych fortnut, w oknie dialogowym Dejiniowanie
n m w wprowadtmy podanq ponitej fomulp i nadamy jej n a m e SumolZKomdrek:

Po utworzenilu nazwanej formu@ wprowadtmy podanq ponizej fomulq w dowolnej


komdrce:
-SwalZKmk5rek
I
Formula zwrdci sump komdrek z zakresu A1 :A12.

Funkcja PRZESUNICCIE w samorazszerzajqcych sig wykresach


Kluczem do mozumienia zasady dziahnia samorozszerzajqcych sic wykredw jest n o -
zumienie dzialania funkcii PRZESUNIECI E. Funkcia zwraca zskres, ktdry stanowi przesu-
niqcie w stosunku do pddanej korn6rki odniesknia. Argumenty funkcji PRZESUNIECIE
ponvalajq na wprowadzenie odleg+o4ciod komdrki odniesienie oraz rozmiardw zakresu
(liczby wierszy i kolumn). Funkcja PRZESUNICCIE ma pi& argumentdw:
odniesienie -komdrka rakotwiczenia wykorzystywana przez drugi i trzeci
argument;
przes-wierszy - okrrS1a l i c z b ~wienzy, o jakqjest przesunipty p m q t e k zakresu
wzglflem adresu odniesienia;
przes kolum -oknila l i c z h kolumn. o jakqjest prtesunicly pocqtek zakresu
wzglaern adresu odniesienia:

i m wysokoSt -okreSla lie* wierszy w zakrcsie;


szerokoSC -okrcfla liczbp kolumn w zaluesie.
I
/! Sfl
'm
Jetell kolumny wykazystane jako Wdto danych nazwanej formuly zawierajq zapisy.
kt6m nie sq danyml wykresu. funkcja I l . E . U I E W m O l zw.5ci niepopramq warto5t.
Dla zachowania prostoty romiqzania nalety uniksC wpmwadzania w kolumnie innych
danych nit dane fr6dbwe wykresu. leteli kolumna zawiera dodatkowe informacje,
iI naleiy odpowiednio dostosowad argument wysokoit funkcji ILE .UIEPUSTYCH.
I
Jak pami@amy, fonnulp o nazwie Sprzedat zdefiniowano w nast~pujacyspos6b:
-PRZESUHI~CIE(A~uszl!5Bs2.0,0.ILE.NIEPUSPICH(Arkuszl! 5B:SB) - 1.11
Jeteli w kolumnie B majduje sip 11 zapidw, funkcja 1LE.NIEPUSNCH nmbci wartoic!
11. Ten wynik jest zmniejszany o jeden w celu pominiqcia naglbwka kolumny. Tak
w i v nazwanq fonnufp m o a a wyradc!jako:

W tej fonnule u@to korn6rki 02 jako kom6rki odniesimia Formula zwraca zakres, ktbry:
I
jest pnesuniqty w stosunku do kom6rki 82 o 0 wierszy (drugi argument
przes-wt erszy);
5313 CzedC V Zaawansowane techniki programowonia

jest przesuniqty w stosunku do korndrki 82 o 0 kolumn (trzeci argument


przes-kol urn);
ma wysokoft dziesipciu kom6nk (cnvarty argument wysokoSt);
ma szemkok! jednej kom6rki (piqty argument szerokoSC).

M6wiqc inanej, funkcja PRZESUNIECIE nvraca odwdanie do h s u 82:811 i to jest za-


kres wykonystywany przez serie danych wykresu. Po dodaniu nowego punktu danych
funkcja PRZESUNIECIE zwrbci odwohnie do zakresu B2:BlZ.

W kolejnym przykladzie zaprezentowanym w tym mzdziale wykorzystano te same po-


jpcia podstawowe, ale do finkcji PRZESUNIECIE przekazano inne argumenty.
Dla uprosmzenla w tym pnykladde wykorzystano jednq serie danych. Technikl te
motna Jednak zastosowsC dla wykresdw zawleraJqcych dowolng llczbe serii danych.
hprowadzenie dodatkowych seril wymaga Iednak pewnych korekt.

Twonenie lnteraktywnego wykresu


Ostami prryklad, ktdmgo dzialanie zapnantowano na rysunku 18.27, jest utytecznq
aplikacjq umotliwiaj~cqutytkownikowi wybranie dw6ch miast (z lisly 234) i przeglq-
danie wykresu, na ktbrym porbwnano miasta w poszczeg6lnych miesiqcach w katdej
z nasepujgych kategorii: Srednia wartoSt opadbw, Srednia temperatura, procent dni
slonecznych oraz Srednia prqdkoif wiatru'.

Rysunek 18.27.
W tej apllkacjl
nykorzystano Wlka
technik w celu
wykredlenla
miesiecmycf, danydr
doryczqcych klirnatu
dwdch wybmnyl:h
miast

-
InteraMywM19t zapewniajq wbudowane wlaSEiwoSci Excela nie sq potrzebne makra.
Miasta q wybiemne z rozwijanej listy za p o m q wtakiwoki sprawdzania poprawnoSci
danych Exeela, a opj e danych za pomocqcztcrcch pnel~cznik6w.Elementy te sq z sob&
p o w i p n e la pomocq zaledwie kilku forrnul.

' Przcdstawione dane qfikcyjne --. red


Ten pnyklad pokazuje, t e motna utworzyt rozbudowanq i interaktywnq aplikacje bez
koniecznofci stosowania makr.

Ii iiis- Ten przyktad jest dostepny na ptycie CDROM dotqczonej do ksiqikl.

W ponitszych podpunktach opisano czynnofci wykonane w celu utwonenia aplikacji.

Uzyskanie danych do utworzenia i n t e r a w n e g o wykresu


Niezkdne dane wkleikrn do arkusza Excela i troche uporiqdkowakrn. W efekcie ury-
skalem caery tabele zawierajqce dane w 13 kolurnnach, kt6re nazwalem odpowiednio
OaneOpady, DaneTern~eratury,DaneNaslanecznienie oraz DaieWietry. Dla zachowania
przejrzystoSci interfejsu umiefcikm je w osobnym arkuszu (a nanvie Dane).

Utwonenie przyciskbw opcji dla interaktywnego wykresu


Aby zapewnit utytkownikowi motliwoSC wybierania danych do zaprezentowania na
wykresie, wykonystatem przyciski opcji z paska narzqdzi Formulurre. Poniewat dla
przyciskbw opcji tworzy sie grupy, cztery przyciski opcji powiqzano z tqsarnq korndrkq
(kom6rka 03). Kombrka 03 zanviera wartoit z a e s u 1 - 4, w zalehofci od wybranego
pnycisku opcji.

W celu uzyskania nazwy tabeli danych m podstawie wartogci liczbowej zapisanej w ko-
m6rce 03 napiszemy fomulq (w kom6rce 04) wykonystujqcq funkcj~Excela WYBIERZ:

Tak wiw w korndrce 04 maj'duje sip nazwa jednej z czterech nazwanych tabel danych.
Nast~pniewpmwadzimy pewne elernenty formatowania dla przyciskow opcji, aby uatrak-
cyjniC ich wygld.

Twonenie listy miast dla interaktywnego wykresu


NasRpnq c z y n n d ~ i ~ j eskonfigurowanie
st aplikacji: unnronenie rozwijanych list w celu
urnokliwienia t@?kownikowi wyboru rniast do podmania na wyhesie. Dzkki wlakiw*
Sci sprawdzania poprawnoki danych Excela utworzenie rozwijanej listy w kom6rce jest
bardro tatwe. Najpiew scaliny kilka korn6rek w celu rotsmenia pola. Scalimy kornorki
J11:MLl i umieicimy tam liste wyboru pierwszego por6wnywancgo miasta. Obszarowi
nadamy nazwp Miastoi. Nastppnie scalimy kombrki J13:fl13 i umieScirny list$ viybom
dmgiego por6wnywanego miasta. Powstalemu obszarowi nadamy n a m e H i asto2.

Aby ulatwiC dzialania z listq rniast, utworzymy zakres o m i e ListaHiast, kt6ry od-
wohje sip do pienvszej kolumny w tabeli DaneOpady. W celu utworzenia rozwijanych
list wykonaj nastqpujqce czynnoici:
1. Zamacz obszar J l l :MI1 (pamiqtaj, ae sq to komdrki scalene).
2. Wybierz polecenie D a n d S p r ~ d i u n i epoprawnoSd. WySwietli siq okno
dialogowe Sprmdzanie popruwnoici danych.
532 Czg!.C V 6 Zaawansowane techniki prograrnowania

3. W oknie dialogowym Spruwdzanie poprmcnoici danych wybicrz zaktadke


Ustawienia.
4. W polu Domolone wybierz wartosC Lista.
5. W polu frcidfo w wprowadt formulq -Li staHiast.
6. Kliknij OK.
7. Skopiuj obszar J11:Mll do obsuru J?3:M13. Spowoduje to zdublowanie ustawieri
sprawdzania poprawnoici danych dla drugiego miasra.
Efekty zaprezentowano na rysunku 18.18.

Rysunek 18.28.
Do W i e r a n i a miasta
wykonystamy
romljanq
liste wtaSciwoJci
Sprawdzanie
poprawnoBci danych

Tworzenie zakresdw danych dla interaktywnego wykresu


Kluczowq zasadq tej aplikacji jest wykorzystywanie pmez wykres danych z oknSlonego
zakresu. Dane pobierane sq z odpowiedniej tabeli danych za pomoca formuly, w ktdrej
wykorzystano funkcje WYSZUKAJ . PIONOdO. Zakres danych wykonystany na wykresie po-
kazano na rysunku 18.29.

Rysunek 18.29.
Na wykresie
wykonystano dane
pobrane pcez forrnuly
zapisane w zakresie
A22:M24

Formula w korn6rce A23, wyszukujqca dane na podstawie z a m S c i zakresu M i a s t o l ,


ma n a s t p j q c q postat: -
-WYSZUKAI.PIONOWO(Miastol.~R. F U ~ R I . N R . K O L L ~ ~ I . F A S Z )
Formuia w komdrce A24 jest taka sama, ale wyszukuje dane na podstawie zawartoici
zakresu M i asto2:
.
-UfSZllKAI. PIONOWO(Hlasto1.MR.PO$R). NR. KOLUMNY ( FACSZ)

Fornub te nalety skopiowat do nast~pnychI 2 kolumn.

I3
"& Niektdrych czytelnlk6w z pewnokla zainteresowak uiycle funkcjl NR. KOLUMNY
a ,* dla trzeciego argumntu funkcjl WSZUW .PIONMU. Funkcla mraca nurner kolurnny
korn6rkl zawlerajqcej formute. Jest to wygodny sposdb pozwalajqcy na uniknlqcle
kodowania .na twardo' kolumny do pobranla. Dzlekl temu dla wszystklch kolurnn
rnoina zastosowat tg sarnq formuk.

Etykietq powytszej listy miesiqcy generuje formula odwolujrlca sic do kom6rki Ta be1 a -
Danych, kt6ra twomy na tej podstawie opisowy tytul. Formuta ma nastqpujqcqpostac:

Utworzenie interaktywnego wykresu


-
Ostatnia czynnogt -utworzenie wlaiciwego wykresu jest bardw prosta. Wykres li-
niowy zawiera dwie serie danych i wykorqstxje dane z zakresu A22:M24. Tyhll wyknsu
jest powizgany z kombrlq A21. Dane wewnqtn zakresu A22:M24 zmieniajq siq w przy-
padku wybrania wartofci przycisku opcji lub miasta z dowolnej listy.
Rozdziat 19.
Obsluga zdarzefi
Z m m i e n i e systemu obshgi zd& ponvala tworzyt aplikacje o wiekszych motli-
woliach. W kilku poprzednich rozdziaiach prezentowalern procedury obshgi zdarzen
w jpzyku VBA. c g l i procedury o specjalnych nazwach wykonywane w rnomencie wy-
st~ieruiaokreilonych warunk6w. ProsQm przyktadem jest procedura C o m n d B u t t o r l -
Click wykonywana po klikniqciu pnycisku umieszcwnego w forrnularzu UserFom lub
na wylkresie. Excel umotliwia monitorowanie r6mych zdarzen i wykonywanie kodu
VBA, kedy zajdq okreilone zdarzenia. Ponitej zostaly wymienione niektore zdarzenia
obslugiwane w Excelu:
otwarcie lub zamknipie skoroszytu,
uaktywnienie o h a ,
uaktywnienie lub dezalctywacja arkusza.
wprowadzenie danych w korndrce lub jej edycja,
zmpisanie skoroszytu,
przeliczenie arkusza,
kliknivie obicktu,
aktualizacja danych na wykresie,
wcifniqcie klawjsza lub kombinacji klawiszy,
dwukrotne klikniqcie komdrki,
okreSlona para dnia.

Typy zdarzeir, kt6re mozna monitorowaC w Excelu


Zdanania, kt& m o h monitomwat w Excelu, dotycq s k o m ~ 6 warkuszy,
, wylops6w>
aplibcji lub formulamy UserFonn.
Zdurzenia dotyczqce skoroszytw wystppujq w kmtek3cie okre4lonego
skomszvtu. Pmkhclarni sa men [skoroszyt zostat otwarty lub utworzony),
536 CzgSC V + Zoowansowane techniki prograrnowonia

Zdarzenia dotyaqce arkur-y wystepujq w konteucie okdlonego arkusza.


Przykladami s;lChange (nienila siq zawartoSC kom6rki w arkuszu),
Selectionchange (utytkownik pnemiescil wskainik kombrki) oraz Calccrlate
(przeliczenie arkusza).
Zdacenia d o w q c e wykresdw wystcpujq w kontekgcie okreiloncgo wykresu.
N a l e a d o nich na przyklad Select (wznaczono obiekt na wykresie)
o m Seri esChange (nodyfikowano wartoit punktu danych w scrii danych).
W celu rnonitorowania zdarzeli dla rwkresu wbudowanego nalety wykorzysrac
modut klasy tak. jak zaprezentowano w rozdziale 18.
Zdanenia dopcqce uplikrrqji wystepujq w kontektcie okreflonej aplikacji Excela
Naleq do nich NerAiort2cok (utworzono n o w skoroszyt), %crkbookBef~~*?Close
(prbba z a m k n i ~ i akt6regoS skoroszytu) oraz-sheetchange (zmodyfikowano
zawarto5t komdrki w dowolnym z otwartych skoroszytbw). W celu monitorowania
zdarzeh dotyczqcych aplikacji nalcty wykonystat modut klasy.
Zdarenia dotyaqceformular,y UserFom wystqpujq w kontekfcie okreilonego
formularza UserForm lub obiekru zawartego w formularzu UserForm. Na przyktad
z formularrem UserFon jest zwiapne zdanenie Initiai ize (przed wyswietleniern
formularza UserFonn), natomiast z przyciskiern w fomularm UserFon jest z w i p n e
zdanenie Cl lck (kliknivie pnycisku).
-
Zdatzenia nie-?viqiane r obieklami ostamia kategoria dotyczy dw6ch
przydatnych zdarren poziomu aplikacji: OnTime oraz OnKey. Zdarzenia te dzialajq
catkowicie inaczej nit pozostale.

Ten rozdzial zorganizowano wedtug wymienionej wytej listy. W katdyrn podrozdziale


prezentujc prtyklady, kt6re dmonsrmjq paszczegblne zdarzenia.

Najwainiejsze informacje o zdarzeniach


W tym pcdrozdziale zawarto najwatniejsze informacje dotyczqce zdarni i pisania procedur
ich obstugi.

Sekwencje zdaneh
Niektbn'dziahnia powodujq powstanie wielu zdanel5. Gdy na przykhd nowy nrkusz
jest wtawiany do skoroszytu, zachodqb-zy zdanenia poziomu aplikacji:
WorkbookNewSheet, ktbre zachdzi podczas dodawania nowego arkusza,
SheetDeactlvate, kt6m zachodzi podczas deaktywacji aktywnego arkusza,
SheetActivate, ktbre zachodzi podczas uaktywniania dodanego arkusza.

Sekwencje zdarzefi sq nieco bardzlej ztohne, nit m@by sle wydawd. Wymienlone
(
=
$?
** powytej zdarzenia zachodq na pon'ornie aplikacji. Podczas dodawania nowego arkuSZa
zachodzq dodatkowe zdanenie na poziornie skoroszytu i arkusza.
I Rozdziat 19. ObsIuga zdarzeh 537

Na tym etapie wystarczy zapamiptak, te zdarzenia zachodq w okrcJlonej kolejnoici,


a wiedza o tyrn, jaka jest to kolcjnoiC, ma kluczowc znaczenie podczas pisania procedur
obslugi. W dalszej c z ~ krozdziaiu
i wyjdniq, jak uzyskaC informacje o kolejnwki zdarzen
dla okreSlonego dziaiania (zobacz punkt ,,Monitorowanie zdarzeh poziomu aplikacji").

Gdzie naleiy umieicii procedury obs!ugl zdaneh?


Nowicjusze w prograrnowaniu w VBA cqsto zastanawiajqsiq, dlaczego napisane przez
nich procedury obshrgi zdarzeh nie wykonujq siq, mimo it zdarzenie wystclpilo. Niemal
zawsze pnyczynqjest urnieszcaie procedur w niewMciwym miejscu. W edytom Visual
Busic wszystkie projekty sq wyszczegolnione w oknie Project. Komponenty projektu
tworzq hierarchicznq listq, takqjak pokazana na rysunku 19.1.

Rysunek 19.1.
Komponenty wsqstklch
projeM6w VBA
sq wyszczeg6lnione
w oknie Project

O b d u p zdand w starszych wmjach Excela


Wersje Excela poprzedzajgce wydanie pakletu OtTo? 97 takte obstuglwaly zdarzenia, ale techniki
programistycme wymagane do skorzystanla z nlch r6hlly s i ~ od tych. M6re zostaly opisane
w niniejuym rordziale. JeSli na &lad zdefiniujenny procedurq Auto-Open Izapisremy jq w myktyrn
module VBA, uruchomi sig ona podczas otwierania skoroszytu. Pocz;lwszy cd Excela 97, obok
proocedury Auto-Open wprowadzono prooedure obstugl zdarred Vorkbaok-@el, zapisang w module
kodu oblektu ThlsUorkbook i i o n y w a n q pned procedurq Auto-Open.
Ptzed wydaniem Excela 97 c~gstoistniah konlecmoSE o
-r definlowanta Ma&. Na prykbd
aby wykonaC pocedure za katdym razem, kiedy w korn6rce byty wptuwadzane dane, naletalo
wykonaC nastqpujqcq lnstrukcje:
Sheetst'A~uszl").OnEntry - 'Validatebtry'
Ta instnrkcja powoduje, 2e Excd wykons ValidateEnty jegi do komdrki zostand
wpfowadzone dane. W Excelu 97 1 wersjach p6fntejsrych wystarcry uWx& procedure kbrksheet-
Change I zapisat jq w moduk kodu oblektu Arkusrl.
Dla zachowania zgodnoSci ze stanrymi wersjami w Excelu 97 i wrersjach mmnrych u dalsrym
cim o b s m jest stanry m c h a n l a (chod nie jest on tiddm'wnt~wanyw systemie pom0Cy).
Jezeli tworzymy aplikacje. kt6re mqw y k m a n e wylqcmle w Exmlu 97 lub w wersjach
p6fniejszych, z c&q pewno5ciq pawinnilmy stosowd techniki, ktdre oplsaiem w tym rozdziale.
538 Cz@C V + Zoowansowane techniki programowania

Wtasny moduf kodu posiadajq:


obiekty typu Sheet (np. Arkuszl, ArkuszZ itd.),
obiekty typu Chart (tm.arkusze wykresbw),
obiekt ThisWorkbook.
D moduly VBA ogblnego przeznaczenia (procedur obslugi z d d nigdy nie nalety
- - pnemaczenia, a wiec w takich, ktbre nie sq
umieszczat w rnodulach 0gblne~0
zwiqzane z obiektami),
moduly klas.
Chociat procedury obslugi zdarzefi m u s q byt umieszczone w odpowicdnich modulach.
m o h a w nich wyworyWaC standardowe procedury zapisane w innych modulach. Na przy-
klad w zaprezentowanej ponizej prmedurze obslugi zdarzenia, umieszczonej w module
obiektu, wywoiywana jest procedura Workbooksetup, ktbra mote byf zapisana w stan-
dardowym module VBA:
P r i v a t e Sub Workbook-Open()
Call WorkbookSetup
End Sub

Wylqczanie obslugi zdarzeri


Domyilnie wszystkie zdarzenia sq wtqczone. Aby wylqczyt wszystkie zdanenia, n a l e b
wykonat ponitsiq instrukcje VBA:
nppl icatlon. EnableEvents - Fa1 se

Aby ponownie whczyt obshgq zdarzeh, nalety wykonaf instrukcjq:


Appltcation.EnableEvents - True

Wytqczenie obslugl zdaneri nle ma wplywu na zdarzenla generowane przez kontrolkl


a+- ,
i ! -
tomulamy UserFon na pnyklad na zdanenie Click wygenerowane pprzez
klikniecie pzycisku w formulam UserForm.
Wylqczanie obslugi ldarzed qmbiega powstawaniu nieskohczonych p@li kaskadowych
zdaneh.Zal&ny, te w komdree A 1 arkusza zawsze musi znajdowad siq liczba o wartohi
mniejszej lub r6wnej 12. Aby obsiutyt Q sytuacjq. rnotna napisad kod sprawdzajqcy
popmwnoSC danych za ka2dym razem, kiedy w komdrce && wprowadzane dane. W tym
prrypadku naleky monitorow& zdarzenie Change obiektu Worksheet za pommq procedury
o nazwie Worksheet-Change. Pmcedura sprawdzi dane wprowadzone przez u2ytkownika
i jeSli wartoSt wprowadwna w kom6rce nie bpdzie mniejsza lub r6wna 12, wySwietli
komunikat i wyzeruje wpromdzmq W t . Problem polega na tym. 2e m w a n i e zapisu
za pomocq kodu VBA generuje nowe zdanenie Change, co powoduje ponowne wykonanie
procedury obslugi zdanenia. Takie dziatanie jest niepoQdane, a zatem p d wyzero-
waniem kmdrki nalety wylqczyt zdarzenia, a n m p n i e ponownie je wfqciy2, aby rnolna
byfo monitorowat nastepnq operacjq wpmwadzania danych.
Innym sposobem zabezpieczenia sip prztd nieskoriczonymi petlami kaskadowych zdarzeh
jest zadeklarowanie n i e n n e j statycmej typu Boolean na pocqtku procedury obstugi
zdarzeh:
Static A b r t P r o c As Boolean

Kiedy procedura ma wykonat zmiany, nalety ustawit zrniennq AbortProc na wartosc


True (w innym pnypadku naleky siq upewnit, czy jest ustawiona na wartoit Fa1se). Na
pocqtku procedury nalety wstawid nastqpujqcy kod:
I f AbortProc Then
AbortProc
E x i t Sub
-
False

End i f

N-i ponowne wykonanie procedury obstugi zdarzeti. ale dzicki wanoici True niennej
AbortProc procedura natychrniast zakoficzy dziatanie. Dodatkowo zrnienna Abortpro:
zostanie ponownie ustawiona na wartoit ~ a - .se.
Praktycmy plzyktad spawdzania poprawnoSci danych zaprezentowano w punkcie
.Monltorowanie zakresu w celu sprawdzenia poprawnoSci danych" w dalszej czqdci
nlnlejszego rozdziatu.
Wyfqczenle rdaneri w Excelu dotyczy wstystkich skoroszyt6w. Na przyklad jeieli
wytqczyrny zdarzenla w procedurze, a nastepnie otwotzymy lnny skoroszyt, w kt6rym
zdefiniowano procedure Mortbook-Open, procedvra ta nie zostanie wykonana.

Wprowadzanie kodu procedury obslugi zdarzeh


Katda proccdura obstugi zdarzeri posiada nazwp, kt6ra jest z.g6ry okreSLona. Ponitej
podano kilka przyklad6w n m procedur obstugi zdarzen:
Worksheet-Sel ectlonthange.
Workbook-Open,
m Chart-Activate,
Class-Initlalize.

Procedurp rno2na zadcklarowad, wpisujqc jjq rqcznie, ale macznie lepsze jest wykorzy-
stanie w tym celu edytora Visual Basic.

Na rysunku 19.2 pokazano modut kodu dla obiektu Thisworkbook. Aby wstawic deklaracje
procedury, naleZy wybrad skoroszyt z listy obiekt6w po lewej stronie oraz zdarmnie
z listy procedur po prawej swonie. Wykonanie v c h czynnosci spowoduje utwonenie
szkielehl procedury, kt6ry zawiera wiersz deklaracji procedury oraz instrukcjq En3 Si~b.

Jeteli na pnykhd wybierzerny Workbdok z listy obiektdw i Open z listy procedur. edytor
Visual Basic wstawi nast~pujqcq(pus@ procedup:
P r i v a t e Sub Uorkbwk-@en [ )
End Sub

WWciwy kod powinien onywiicie zawierak wiqej nit tylko te dwie instrukcje.
540 Czeit V + Zaawansowane fechniki progromowania

Rysunek 19.2.
Naj1epszj-m
sposobem ulwonenla
procedury obslugi
~da~eflialest
wykonystanie edytora
Visual Basic

Procedury obstugi zdarzeti z argumentami


W niekt6rych procedurach obshtgi zdarzeh wykonystuje sip argumenty. Na ptzykkd m o h a
utworryf procedue obskgi zdanen w celu monitomwania zdarzenia SheetActivate dla
skorosqtu. Jeteli skorzystarny z techniki opisanej w poprzednim punkcie, edytor Visrcol
Basic utwony nastqpujqcqproceduq:
Privzce Sub Workbook-SheetActivatetByVal Sb As Cbject)
End Sub

W tej procadurze wykorzystano jeden argument (Sh), kt6ry reprezentuje uaktywniony


arkusz. W tym przypadku argument Sh zadeklarowano jako danqtypu Object, a nic v p u
Worksheet. Wynika to z faktu, 2e uaktywniany arkusz mote byC t a b arkuszem wykresu
(typu Chart).

W kodzie motna oczywiicie wykonystywat dane przekazane jako argumenty. Ponitsza


procedura jest wykonywana podczas W e g o uaktywnienia arhza. Wyswietla typ i name
uaktywnianego arkusm dzitki wykonystaniu funkcji VBA TypeName oraz wla6ciwosci
Name obiektu pnekazanego w postaci argumentu:
srivate Sub Workboot-SheetActivate(Wa1 Sh As abject)
MsgBox TypeName(Sh) & vbCrLf & Sh.Name
End Sub

W nickt6rych procedrwch obslugi wykomptuje 9% argument Cancel typu Boolean-


Na pnyklad deklaracja zdarzenia skoroszytu BeforePri n t jest nast~pujplca:

-
P r i v a t e Sub Workbook-BeforePrint(Cance1 k Boolea?>

WartoX argumentu Cancel pmkazanego do procedury wynosi Fa1se. W kodzie nastppuje


jednak unawienie wartoJci C a ~ e lna True, co powoduje anulowanie drukowania. Po-
kazano to w poni2sq-m pnykiadzie:
--
Private Sub Workbook-BeforePrint(Gnce1 As Boolean)
Msg "Czy zaladowaleS wlaSciwy arkusz?"

- -
Pns HsgBox(Msg, vbYeaNo. "Drukowanie.. . " )
If Ans vbNo Then Cancel True
End Sub

Procedura Workbook BeforePrint jest wykonywana przed wydrukowaniem skoroszytu.


Zaprezentowana po-wej pmcedura powoduje wygwietlenie komunikatu pokazanego
na rysunku 19.3. Jeteli utytkownik kliknie pnycisk Nie, argument Cancel zostanie
ustawiony na wartoit True i operacja drukowania zostanie przerwana.

Rysunek 19.3.
Operacjp drvkowanla
mama anulowa6,
rnaWkwec
argument Cancel

Zdarzenie BeforePrint zachodzi takte wtedy, kiedy utytkownik pneglqda arkusz


na podglqdzle wydruku.

Niestety w Excelu nie ma tdanenia BeforePrlnt na poziornie arkusza. Z tego powodu


w kodzie nie motna sprawdzit, jaki arkusz Ictytkownik chce wydrukowat.

Zdarzenia poziornu skoroszytu


Zdarzenia poziornu skomzytu zachodq w kontekScie oknzllonego skoroszytu. Procedury
ich obshrgi sq zapisywane w module kodu obiektu ThisWorkbook. W tabeli 19.1 wy-
szczeg6lniono zdanenia dotycqce skomszytu wmz z kr6tkim opisem katdego z nich.

Aby rnonltorowaC tdanenia we wszystkich skoroszytach, nalety wykorzystaC zdarzenia


is?? podomu apllkacJl (wlgcej Informacji znajduje slew podrordzlale .Zdarzenia dotyczqce
aplikacji' w dalsze] czpSci rozdziaiu). W porostak] czqfci tego podrozdzlatu
zaprezentowano przyktady zastosowania zdarzet? pozlamu skaroszytu. Wszystkie
procedury nalety umie3clf w module kadu obiem Thi ~Wrkboot.Jeieli umiefci Sic je
w innym module kodu. nie bqdq dzlaM.

Zdarzenie Open
Jednym z najcqdciej monitorowanych zdarze6 paziomu skoroszytu jest zdamnie Open.
ktbre nastCpuie w momencie otwarcia skoroszytu- (tub
- dodatku). Wystzwicnie zdanenia
powoduje;;;konanie proctdwy Workbook Open. Procedura ta mote h k o n a t najrdaiej-
sze zadania, najcqiciej sq to nasttpujqce operacjc:
mwietlanie komunikat6w powitalnych,
otwieranie innych skomzyt6w,
konfigurowanie menu lub paskbw n q d z i utytkownika,
e uaktywnianie oheSlonego a&ua lub kombrki,
542 CzgSe V + Z a a w o n s o w a n e tachnikl p r o g a m o w a n i a

Tabela 19.1. Zdanenla pozlornu skoroqfu


Zdarzenic Dzialania, kt6n powodujq wygenerowanie zdanenia
Activate Uaktywnienie skorosyru
Addinlnstall Zainstalowanie skoronytu jnko dodatku
AddinUninstall Odinstalowrnie skorouytu jako dodatku
AfterXMLExport* Wyeksponowanie pliku XML
AfterXHLImport* Zaimporfowanis pliku XML lub odJwictenie pol@xenia z dmymi XML
BeforeCl ose Pr6ba zarnknbcia skoroszytu
BeforePnnt Pr6ba wydrukowania albo praglqdania na podglqdzie wydruku skoroszytu
lub dowolncgo fragrnentu, kt6ry do niego nalety
Beforesave Pr6ba zapisania skoroszytu
BeforeXMLExport** Pr6ba wydcrportowania pliku XML lub odgwietenia polqczenia z danymi XML
BeforeXMLIwrt* Pr6ba zaimportowania pliku XML
Deactivate Dzzaktywacjn skoroszytu
NewSheet Utworztnic nowego arkusza w skoroszycie
O
W Otwarcic skorosrytu
P i votTableCloseCwlnection* Zamknipcie polqczcnia z uwn~rznym
Zr6dlem danych dla tabeli przestawncj
Pi votTableOpenConnection* Orwarcie polr\mnia z zcwnptnnym Wdlm danych dla tabeli pnestawnej
Sheetkt ivate Uaktywnienie dowolnego arkusza
SheetBeforebubleCl ick Dwukrotnc kliknivie dowlmgo arkusza. To zdarzenic zachodzi pncd
dornySlnym dzialaniem wykonymyrn w przypadku dwukrotncgo klikniccia
SheetBeforeRightCllck Kliknipcie dowolnego arkusza prawym przyciskiem myszy. To zdanenic
zachodzi przcd domySlnym dzialaniem wykonywanyrn w pnypadku
kliknivia prawym prryciskiern rnyszy.
Sheetcalculate Przeliczmie dowolnego arkusza
Sheetchange Modyfikncja dowolncgo orkusza p m z utytkownika lub zewn-e lqcze
5heetOeactiva:e Dtzaktywacja dowolnego arkusza
SheetFollDkCly~erlink Kliknipcie hipertqcza w nrkuszu
SneetPivotTableUpdateC Uaktualnicnie tabeli przcstawncj polegajp na wprowadzcniu nowych danych
SwetSelexionChange Modyfikacja zaznaczenia w dowolnym arkuszu
Syncf* Synchronizacja skoroszytu z kopiqz sewera. jeSli skoroszyt jest cq9ciq
prnstneni roboerej dokumcnt6w
WindmActivate Ualrtywnienie dowalncgo okna s k m z y t u
WlndmCeactivate Dezaktywacja dowolncgo okna skoroszyru
WindawReslze Zmiana rozminru dowolnego okna skorosrytu
* Zdmzeni~wpnnm&m w wer#l Excel 2002. Nle sq OMrrgiwone p e z wersje iuaefniejm.
** Zdarrenio z a c m Mko w k I u 2003 w wcr@ PmJ2ssionol i nie SQ obshghrune pnez iverqie wczefniejsre
lub inne +in h f a 2003.
Rozdziat 19. + Obstuga zdarzeh 543

sprawdzanie, czy zostaly spetnione okreSlone warunki, na pryktad czy


zainstalowano okreilony dodatek,
-
konfigumwanie okreSlonych wldciwo9ci automatycmych na pnyklad rnoina
zdefiniowat kombinacje klawiszy (wiqcej informacji majduje sic w punkcie
Jdanenie OnKey" w dalszej c z ~ f crozdziah),
i
ustawianie wlaiciwofci Scroll Area arkusza (ktora nie jest zapisana w skoroszycie).
r ustawicnie zabezpicczenia User Interfaceonly dla arkuszy w taki sposbb, aby kod
m6gt dzialat dla abezpieczonych arkuszy (to ustawienie jest argumentem
metody Protect i nie jest zapisane w skoroszycie).

,s-fU Jeieli utytkownik przytrzyma klawisz Shift podczas otwlerania skoroszytu, procedura
Workbook Open nie wykona sig. Procedura nle wykona st? r6wnlez w przypadku
otwlerania arkusza z wytyczonq obstugq rnakr.

Ponitej zamieszczono prosty przykhd procedury Workbook-Open. Wykorzystano w niej


funkcip VBA Weekday w celu okreilenia dnia tygodnia.
.- Je2eli iest to piatek, wySwietli
sic komunikat przypominajqcy ~Zytkownikowio wykonaniu &godni&vej ko6i zapa-
sowej plik6w. Dla pozostalych dni tygodnia nie sq wykonywane tadne dziaiania.

-- -
Private Sub Uorkbook-Open0
If Weekday(Nw1 vbFriday Then
Msg "QziS jest piqtek. Panietaj. aby '
Msg Msg 1 "wykonat tygodniowa kooie zapasowa!"
Msgeox Psg, v b I n f o m t i o n
End If
Era Sub

Zdarzenie Activate
Ponitsza procedura wykonywana jest katdorazowo podczas uaktywniania skoroszytu:
Private Sub Uorkbwk-Activate0
-
ActiveWindow. Windowstate xlMaxi7ized
End Sub

Jej dziakinie polega na maksytnalizacji aktywnego okna.

Zdarzenie SheetActlvate
Kolejna procedura jest wykonywana, kiedy utytkownik uaktywni dowolny arkvsz
w skoroszycie. W pnypadku zwykfego arkusza kod wybiera kombrk~A l . W przypadku
arkusza bedqcego wykresem nic sip nie dzieje. W procedurze wykorzystano funkcjq VBA
TypeNam w celu sprawdzenia, ay uaktywniany arkuszjest myktyrn arkuszern (w odrbtnie-
niu od arkuszy-wykredw).

I f TypeNam(Sh)-
Private Sub Wortbook-ShwtActivate[ByVal Sh A
"Worksheet" ihen -
Rangei'A!').Select
s 3bjecti

End Sub
544 Czgde V + Zaowansowane techniki programowania

Altematywna metodq postqpowania w przypadku pr6by zaznacnnia komdrki w arkuszu


wykresu jest zignorowanie btqdu:
Private Sub Warkbcok-SheetAct:vate(ayVal Sh As Object)
Or Error Resume Next
Rznge('Al"1 .Select
End Sub

Zdanenfe NewSheet
Ponihza procedurajest wykonywana, kiedy do skoroszytu dodawany jest nowy arkusz.
Arkusz jest przekazywany do procedury jako argument. Poniewat nowy arkusz mote
byc zwyklym arkuszem albo arkuszem wykresu, procedura spmwdza jego typ, Jeteli jest
to zwykly arkusz, kod wstawia datq i macznik czasowy w komdrce A 1 nowego arkusza.
P r Y r ? t eSub Workbcck-NmS'r.sel!3yqJal Zh As Objecti
!i TypeNarrel Shi--
Sh.Range("Aia)
'n'orrsheet" T ~ e n
"Arkust codano-' & NawO
ir!: Sub

Zdarzenie BeforeSave
Zdarnnie BeforeSave zachodzi, zanim skmszyt zostanie zapisany. Jak wiadomo. wybranie
polecenia PlihZupis= czasami powoduje wyiwietlenie okna dialogowego Zapisywanie
jako. Taka sytuacja wystqpuje w przypadku, gdy skoroszyt nigdy wczeiniej nie by1 za-
pisywany lub j e S l i otwarto go w p b i e cylko do odczytu.

Procedura Workbook BeforeSave otrzymuje argument SaveAsUI, kt6ry pozwala okrcili6


czy ma sic wyiwietk okno dialo~owe
- Zapisywonie
. . jako. Utycie tego
- argumentu poka-
tan0 w poni&zym przykhdzie:
Private Sub Workbook-BeforeSave(ByVa1 hveAsUI As Boolean. Cancel As Boolean)
[ f SaveAsUl Then
Hsqeax 'Sprawdi. czy zapisujesz ten p l i k ne dysku J . "
End I f
End 5ub

Jeteli utytkownik spr6buje zapisat skoroszyt, wykona siq proctdura Workbook-BeforeSave.


Jeteli ma sip wySwietlif o h o dialogowe Zapjrwaniejako, zmienna SaveAsUI w e mida
wanoSC True. Pmedura zaprezentowana powytej sprawdza zmiennq i+wietla kornuniht
tylko wtedy, j t t e l i ma sic wySwietliC okno dialogowe Zapiryruanie jako. Jeteli w proce-
dune argument Cancel zostanie ustawiony na wart066 True, plik nie zostanie zapisany.

Zdarzenie Deactivate
W wrn pnykladzie zadernonstrowano zdarzenie Deactivate. Procedura obshgi tego
zdarzmia zaprezentowana poni*j jest wykonywana przy kazdej prdbie deaktywacji
skomqtu. Jej dziatanie polega na uniemotliwieniu deaktywacji. Kiedy wystagi zda-
rzenie Deactivate, kod ponownie uaktywni skomszyt i wyiwietli kornunikat.
P r i v a t e Sub Workbook-Deactivate0
He.ktlvate
H s e x "Niestety. n l e mzesz opugcit tego skoroszytu."
-End Su3
Nle polecam stosowanla procedur, M6re pr6buJq pz~Jq6 kontrole n s d Excelem. Moie
to b# bardzo frustrujqce I mylqce dla uiytkownihs Zamiast stosowaC takie p m c e d u ~ ,
lepiej nauczyC uiytkownlkdw poprawnego korzystania z apllkacji.
Ten prosty przyktad pokaruje. jak watna jest wiedz. na temat kolejnolci zdarzeri. Jeteli
wypr6bujemy tq proceduv, zauwatymy, tc dziata pprawnie podczas prdby uaktyw-
nienia innego skoroszytu. Nalezy jednak pami~tat,2e zdarzenie poziomu skoroszytu
Deactivate jest generowane t a b w wyniku:

H pr6by otwarcia nowego skorostytu,


H pr6by minimalizacji skoroszytu.

W twiqzku z tym procedura mote dzialaf inaczej, n i t zamierzaliimy. Co prawda, za-


bezpiecza przed bezpairednim uaktywnienicm innego skoroszytu, ale utytkownik mote
zamknqt skoroszyt, minimalizowat go lub otworzyt nowy. Komunikat wyfwietli siq
na ekranie, ale dziatania i tak zostanq wykonane.

Zdarrenie BeforePrint
Zdarrenie 6eforePrlnt wy*puje podczas edania wydrukowania arkusza (wyfwietle-
nia go na podglqdzie wydruku), ale przed faktycmym wydrukowaniem (wyiwietleniem
podglMu). W procedurze obshgi zdarrenia wykorrystywany j a t argument Cancel, kt6ry
pozwala na anulowanie drukowania lub wyfwietlenia pdglqdu. j&li nada siq mu wartoit
True. Niestety nie ma sposobu sprawdzeniq cry zdanenie BeforePrint tostalo wygene-
rowane w wyniku Wania wydmku, czy tet w wyniku pr6by wyiwietlenia arkusza
w podglqdzie wydruku.

Prnd wydaniem Excela 2002 utytkownicy c q s t o nanekali na brak mo2liwolci wydru-


kowania p h e j Scietki dostqpu do skoroszytu w nagldwku lub stopce strony. W Excelu
2002 ronvi@zano ten problem, wprowadzajqc nowe opcje w oknie dialogowym Nug/dweW
sropku (dostepnyrn z o h dialogowego Ustawienia st~ony).Jedynym mzwiqmiern dla
u2ytkownik6w starsych wersji Excela jest napisanie kodu wstawisjqcego Bcietkq do-
s$pu do skorosytu w nagldwku lub stopce. Do tego celu Swietnie nadaje sip zdarzenie
-
Workbook Beforeprint. Pokazano to w p0ni-m pnykhdzie:
Private Sub Workbook-BeforePrint(Cme1 k Bwlean)
sht .Pagesetup. LeftFooter -
For Each sht In ThisWPt%W.Sheets

'80' 1 ThlsWortbook .Ful l ~ a 6


kb S h t
End Sub

hocedura przehvana w petli wsystkic arkusze skorosrytu i ustawia whfciwoit Left-


Footer obiektu Pagesetup na w$SciwoSC Ful lName skoroszytu (w tej MciwoSci mpisana
jest nanva pliku wraz ze fcietkqdostqpu). Procedura ustawia t&e rozmiar czcionki na
8 p~mktdw.
546 CwlC V + Zaowansowane techniki programowania

W tym ptzyktadzle motna zaobsemavaC nlesp6jnoSci w modelu oblektowym Excele.


Aby zmienlC mzmlar czclonkl tekstu nagl6wka lub stopkl. trzeba wykorzystaC clqg
znak6w zavderajgy specjalny kod forrnatowanla. W pokaanym m e ] p ~ l s d z l e
68 omacza kod dla czcionki o rozmiarze 8 punkt6w. W ldealnej sytuacji powinien byC
dostepny oblekt Font dla nagKjwk6w I stopek. Wivej infomacjl na ternat kod6w
forrnatowanla znajduje sle w pomocy onllne (moina t e i zarejestrowat makro podczas
ustawiania formatowania w oknle dialogowyrn Ustawlenia strony).

Podczas testowanla pracedur obstugl zdarzenia Beforeprint zao~zcz~dzirny czas


(i papier),)elli skorzystamy z podglqdu wydruku, a nle z wlabciwego drukowania.

Zdarzenie BeforeClose
Zdarzenie BeforeClose zachodzi pned zamkni~ciemskoroszytu. Czpsto utywa sip go
w m c z e n i u z proceduq obslugi zdarzenia Workbook-open. N a przyklad procedure
Workbook-Open motna wykorzystaC do utwonenia menu utytkownika, a nastppnie za
pornoq procedury Workbook-BeforeClose u s u w menu W k o w n i k a przed zarnknipciern
skoroszytu. W ten sposdb menu ukytkownika bqdzie dostppne tylko wtedy, gdy skoro-
szyt bcdzie otwarty.

Podczas pr6by zamkniqcia skoroszytu, M6ry nie byf wczeSniej zapisany, Excel wyiwietla
pytanie o to, czy zapisat skoroszyt przed zarnknipiem tak, jak pokazano na rysunku 19.4.

Rysunek 19.4.
Pojawienre sic tego
komunlkatu omacza,
t e rostala kykonana
procedura
Workbook-BeforeClose

a- Wy4vdetlenle zaprezantowanepo we]kornunlkatu omacza, ie nastqpilo zdarzenie


BeforeClose. a zatem pmcedura jut sig wykonata.

Rozwatmy nastppujy q sytuacjp: chcemy wySwietliC menu utytkownika, kicdy otworzy


sip okreSlony skomszyt. Do utwonenia menu w mommcie otwierania skoroszytu wy-
korzystamy procedurp Workbook-wen, a nastqpnie zastosujerny procedure iJcrkbook-
BeforeClose w celu usunipcia menu w momencie zarnykania skoroszytu. Te dwie pro-
cedury obslugi zdarzai znajdujq sip ponizej. Obie wywohjq h e procedury, ktdryeh tu
nie zamieszcwno.
P r i v a t e Sub Warkbook-Open()
C a l l CreateMenu
End Sub

P r l v a t e Sub Workbwk-BeforeClose (Cancel As Boolean)


C a l l Rlet&nu
End Sub

Jak zmacqiem, pytanie Excela Cv zquisud zmiany w... wygwietla sip po wykonianiu
procedury Workbook-Befareclose. Zatem jeSli W o w n i k k l i h i e Arzufuj. skomszyt pozo-
stanie otwarty, ale miknie menu uzytkownika, kt6re zosealo usunipte wczefniej! Jednym
I
I! Rozdzid 19. + Obsluga zdorreh 547

z romiqzah tego problemu jest pominiecie pytania wyiwidlanego przez Excel i napisanie
wbnego kodu pmcedury Workbook-BeforeClose. Przykladowq procedq zaprezentowano
ponitej:
Private Sub Workbook-0eforeClose(Cancel As Boolean1

-- -
D i m Msg As String
I I f Me.Saved False Then
Msg "Czy zaplsat zmiany w "

-
Msg Msg 6 He.Name B '?"
Ans Msgbx(Msg. vb0uestion + vbYesHoCancel1
Select Case Ans
Case vbYes
Me.Save

-
Case vbtancel
Cancel True
E x i t Sub
End Select
End I f

-
Call DeleteMenu
Me. Saved True
End Sub

W procedum wykorystano wlaSciwofC Saved obiektu Workbook w celu sprawdzenia.


czy skoroszyt zostal zapisany. Jeteli tak w6wczas po wykonaniu procedury OeleteMeou
skvroszyt zostanie zamkniqty. Jeteli jednak skoroszyt nie zostal jeszcze zapisany, pro-
cedura wyfwietli okno inforrnacyjne takie, jak to, ktbre wy2wietla Excel. Gdy urytkownk
kliknie Tak, skoroszyt zostanie zapisany, menu usunipte, a skoroszyt zamkniqty. Gdy
urtytkownik kliknie Nie, kod ustawi w+aJciwoff Saved obiektu Workbook na wartoit T r ~ f
(ale nie zapisze pliku). usunie menu i plik zostanie zarnknipty. Gdy utytkownik kliknie
Anuluj, nastvi wyjkie z procedury obslugi zdarzenia Beforeclose bez usuwania menu.

Zdarzenia poziomu arkusza


Zdarzenia zwiqzane z obiektem Worksheet naletq do najutytecmiejszych. Jak sic prze-
konamy, dzieki ich monitorowaniu mokna zaimplementowat unikatowe wldciwoSci.
W tabeli 19.2 wyszczeg6lniono zdanenia dotycqce arkuszy wraz z kr6tkim opisem
katdego z nich.

Kod procedur obslugi zdarzen poziomu arkusza musi byC zapisany w module k d u dla
okreilonego a r h z a .
Aby szybko uaktywniE rnodut kodu arkusza, ttzeba kllknqd prawyrn prryciskiern mysry
zakladke arkusza. a nastcpnie wybrad p l e c e n i l k?,dwietl kod

Zdarzenie Change
Zdarzenie Ch,arge nastepuje w prrypadku modyfikacji dowolnej komirrki arkusza przez
utytkownika lub procedure VBA. Zdanenie to nie naswi, jeteli w wyniku obliczen
zmieni sip wart066 formuly Iub kiedy do arkusza zostanie dodany obiekt.
548 CzeSt V Zaawansowane techniki programowania

Ta bela 19.2. Zdanenia porlomu skomsZytu

Zdamnie Dzirlania. kt6re powodujq wygenerowanie zdanenia


Activate Uaktywnienic arkusza
BeforeDoubleCl ick Dwukrome klikniqcie arkusza
Bef~reRignttl
ick Klikniwie arkusza prarvyrn przyciskiem rnyszy
Calculate Pmliczenic mkuua
Change Madyfikacjh komhrki arkusn dokonann przez utytkownika lub mvn~trmetqcze
Deactivate Dezaktywacja arkusza
Fol l o d y p e r l i n k Klikni~ciehipcrlqcza na erkuszu

Proccdua Worksheet Change pobiea obiekt typu Range jako argument Target. Obiekt
ten reprczentuje zmc&tikowanq kom6rkq lub zakres, ktdre spowodowaly wyswienie
zdanenia. Ponitsm procedura zostanie wykonma, kiedy zmieni sic zawartoft arkusza.
Jej dzialanie polega na wyJwietleniu okna informacyjnego z adrcsem zakresu Target:
Prt vate Sub Worksheet-Olange(ByVa1 Target As Excel .Range)
Fsm x "Zakres ' L T a v t . A d d r e s s & ' zfrcdyfi tmiana."
End Sub

Aby lepicj nozwnied rodraje dzialah, kt6re gmemjq rdanenie Change dla arkusw.
wprowadhy p o p d n i proccduq
~ w module kodu obiektu Worksheet. Nasypnie uaktyw-
nijmy Exccla i wykonajmy kilka rnodyfikacji za pomocq r6tnych technik. Za k d y m
razem. kiedy nastapi zdanenie Change, wyhvietli siq komunikat zawierajqcy a h zakresu.
kt6ry zostal zmodyfikowony.
Po uruchornieniu procedury odkryfern kilka intmsujqcych wtaSciwoSci. Niekr6re Qiahnia
nie pnerowab zdarzen, choC powinny, natomiast inne, kt6n pozornie nie powimy tego
robit, generowaly je!
Modyfikacja korndrki nie wyzwala zdarzenia Change (chocial wydaje sic,
t e powinna), natomiast wybranie poiecenia E&cjdWyczys'~Formaty wyzwala

r Wprowadzanie, edycja lub usuniqcie komentana w kom6rce nie wymala


zdarnnia Change.
u Wcigniecie klawisza Del ete gmtmje zdarzcnie nawet, j-li komdrka byla pusta.
w Modyfikacja kombrek za pomoq poleceh Exccla c m m i wyzwala alarzenie
Change. a czasarni nie. Na przyktad polecenia Dane/Fonnulan or= DandSorwj
nie wytwalajq zdanenia, natomiast polecenie Nang&idSpraw&anie b!fd&
oraz EdycjdZamieri wynvalajq zdarrenie Change.
I Modyfikacja kom6rki za pomocqkodu VBA wyzwala zdamnie Change.
I
Rozdziat 19. + Obsluga zdaneh 549
I .
Jak widaf na podstawie tej listy, w pnypadku watnych aplikacji nie motna polegaf na
zdaneniu Change jako wskatniku modyfikacji dokonanych w komdrkach.
Na domiar &go sytuacle, w Mdrych jest wyzwalane zdarnnle Change, sq r6tne
zakresu za pornocq polecenia Edyc]a/Ll$p&ln~ nie generowab zdamnia Change.
Nie generule go r6wnlei polecenie Edycja/Usuh utyte w celu usuniecia kombrek.

Monitorowanie modyfikacji w wybranym zakresie kom6rek


Zdarzenie Change wysqpuje w przypadku modyfikacji dowolnej k o d r k i arkusza Jednak
w wipkszoici przypadk6w interesujq nas modyfikacje okreflonei komdrki lub zakresu.
g e argument. Obiekt ten re-
Pmcedura ~or'ksheet-change pobie-ra obiekt &u ~ ~ n jako
prezentuje komdt-@ lub kom6rki, kt6n ulegly modyfikacji.

*
Z a l d h y , w arkwu zdefiniowano zakres danych wejlciowych InputRange i intere-
sujq nas wyhcznie modyfikacje wykonane w tym taknsie. Obiekt Range nic obslugujc
zdarzenia Change, ale z htwoSciq m o a a wykonaf odpowiednie sprawdzenie wewnqtn
procedury Worksheet-Change. Czynnoff t~ zademonstrowano ponitej:
Private Sub Worksheet-Change(ByVa1 Target As Excel .Range)

-
Dim VRange As Range
Set VRange Range("1nputRange')
I f Not Intersect(Taqet. VRange) 1.5 Nothing Then -
Ms&x ' h d y f l kouana km5rka majduje s i e n zakresle danych wejbciaqch. "
End Sub

W tym pcykklzie wykorrystano n i c n n q obiektowq typu Range o nazwie VRange. ktdra


reprezentuje monitorowany A m s w arkuszu. W procedum wykorzystano knkcjq VBA
Intersect w cclu sprawdzenia, ny zakres Target (przekazany do procedury jako argu-
ment) przecina sip z zakresem YRange. Funkcja Intersect zwraca obiekt skladajqcy sip
- z wszystkich wspblnych kom6rek obu argument6w. Zwr6cenit ptzcz funkcjq wartoSci
Nothl ng o7nacza, te oba zalorsy nie majq wspblnych kombrck W procedunc wykorzystano
operator Not, a zatem wyratenie m o c i wartoS6 True, je2eii zakresy majq co najrnniej
jednq wspdlnq komdrkp. Tak w i ~ jetelic nnodyfikowany zakres posiada co najrnniej
jednq wsp61nq kom6rkq z zakresem InputRange, wygwietli sip kmunikat. W innym
pnypadku proccdura zakohczy dzialanie.

Monitorowanie zakresu
w celu pogrubienia zawartofcf kom6rek zawierajqcych formuty
Ponitej zaprezrntormno przyklad monitorowania zakreou w celu pogrubienia komdrek
zawierajqcych fonnuly.
Ten pnykkdjest dostepny na plycle CDROM dok)emnej do ksiqtkl.
mam
Private Sub Uorksheet-Change(8yVal Target As Excel Range)
Dim c e l l As Range
For Each cell In Target
550 CzgSt V + Zaawansowane technlki programowanla

-
cell. Font .@old cell .HasFormula
Next cell
End Sub

Poniewat obiekt przekazany do procsdury Uorksheet-Change mote sip skhdat z wieloko-


mdrkowego zakresu, procedura pzetwarze w pqli wszystkie komdrki zakresu Target.
ZawartoSC kom6rtk zawierajllcych formuly wySwietla sip pogrubionq czcionka W innym
pnypadku wh4ciwoSC Bold jest ustawiana na m o J C Fa1 se.

Monitorowante zakresu w celu rprawdzenla poprawnoScl danych


WWiwo$d weryfikacji poprawnoki danych Exceia jest berdzo przydatnym n ~ d z i e m ,
ale posiada i s t o m wadp, W prypadku wklejenia danych do komdrki, dla Mdrcj zastoso-
wano t t wtaSciwoSE, wklejana wartoSC nie tylko nie bqdzie sprawdzonq ale taktc zostanq
usunipse rcguly poprawnoSci danych powiqzane z kom6rkq! Z tego powodu wldciwoic
weryfikacji poprawnoici danych staje sic praktycmie bezu2ytecma w powatnych za-
stosowaniach. W niniejszym ptmkcie zadernonstrujp sposdb wykonystania zdarzenia
Change arkusza do zdefiniowania wlasnej procedury sprawdzenia poprawnoici danych.

infomacjl zrlajduje sig w punkcie .Wyt;lczanie obstugi zdarzeh" we wczesniejszej


cze5cl niniejszego rozdziatu).

Listing 19.1 pmentuje proceduq wykonywanq w przypadku modyfikacji komdrki p m z


uzytkownika. Sprawdzcnie poprawnoki ogranicza siq do zakresu Input Range. WartoSci
wprowadzane w tym zakrcsie muszq by6 liczbami catkowitymi o wartoSciach pomiflzy
1 a 12.

Listing 10.1. Spnmdzenle, czy zmrtaS6 komdrM ma byE poddana wetyfJkaq/IpaprawnoSc1 danych
Private Sub Worksheet-Change(ByVa1 Target As Excel .Range)
Dsm Wange As Range, cell As Range
D i m Msg As Strlng
Oin Val idatecode As Variant
-
Set VRange Range('InputRangem)
If Intersect(VRange. Target) Is Nothing Then Exit Sub

-
For Each cell I n Intersect(VRange. Target)

-
Validateme EntryIsValid[cell)
--
If TypeNane(Va1ldateCode) 'String" Then
Msg 'Cell " L cell .AddresS(False. False) h ':'
Msg Hsg & vbCrLf & v t C r t f h ValidateCode

-
MsgMx Hsg. vbCritica1. "Ntw?a$ciwa zawartoif k ~ r k" l
Application.Enab1eEvents False
cell .Clearcontents
cell .ktivate
-
PpplIcation.EnableEvents True
End I f
Next cell
End Sub
Procedura Wo&sheet-Change tworzy obiekt Range o namie VRange reprezentujqcy mkres
arkusza, dla kt6rego sprawdzana jest poprawnoif. Nastepnie przemara w petli wszystkie
komorki zakresu okredlonego argumentem Target, ktdry reprezentuje zmodyfikowanq
kom6rke lub komdrki. Nastgpuje sprawdzenie, c y poszczeg6lne komdrki mieszczq sic
w za!uesie, dla kt6rego ma byc wykonana weryfilwja poprawno5ci. Jeteli tak jest, komdrka
jest przekazywana jako argument do funkcji urtytkownika EntrylsValld, mracajqcej
wartoX True,je&li dane w komdrce sq prawidlowe.

Jeteli wart096 w kom6rce nie jest poprawna, funkcja nvr6ci ciqg mak6w opisujqcy
problem, a utytkownik uzyska informacje za pomocq okna informacyjnego (rysunek 19.5).
Po zamknipciu okna niepoprawny zapis jest usuwany, a komdrka uaktywniana. Warto
nvr6cif uwagc, t e p m d wyzerowaniem komdrki obsluga ularzeri jest wylqczana. Gdyby
zdarzenia nie byly wyhczone, zerowanie kom6rki wygenerowaloby zdanenie Change
i w efekcie powstalaby pgtla nieskohczona

Rysunek 19.5.
Okno informaq'ne
wySwietla komunikat,
]eS// u?ytkownik
wprowadzi
niepoprawne dane

Procedwp EntryIsValtd prezentuje listing 19.2.

Listing 19.2. Werytikacj8 popfawnofct ZaplSU w monitomwanym zakresie


Private Function EntryIsValid(cel1) As Vanant
a
Zwraca wartaft True, j e t e l i kawjrka jesr 1 i c z h calkowita pamiedry ! a 12.
'
k' innym przypadku zwraca lahcuch oplsujacy orcblem

Czy wprowadzono l i c m ?

-
a

IfNot UorksheetF~Ktion.IsNunber~ce11) Then


EntryIsValid "Nalety wprcwadzif l i c z t e . "
Ext t Function
End If
'
Czy j e s t t o 1iczba calkowita?

-
IfC I n t l c e l l ) <> c e l l Then
EntryIsValid "Nalety w p r h a d z l f l i c z k calkcwit*."
E x i t Function
End I f
Czy l i c t b a mleSc1 sre w zakresie p m e d z y 1 a 12?

-
I f c e l l < 1 Or c e l l > 12 Then
EntryIsValid "Nalety wprcwadzic l i t z k o wartofc: p o n i d z y 1 a 12."
Ex1t Function
End I f
'

-
Wszystkie testy zakcuiczyly s i e sukcesem
EntryIsValid True
End Function

Zdarzenie Selectionchange
W ponhzym przyktadzie zademomowano zastosowanie zdanenia Sel ectionchange.
Procedwa jest qkonywana, kiedy uiytkownik zaznaczy nowy obszar w arkuszu.
552 Czei.6 V + Zaawansowane techniki programowonio

Cel1s.Interior.ColorInUex xlNone -
Private Sub Wortsheet-Sel&:ionChange(9yVal Target As Exce: .Range)

511th Activecell
--
. EntireRw. I n t e r i o r . ColorIndex 36
. E n t i r K o l u m . !nter?or . C o l ~ r I n b e x 36
End With
End Sub

Procedura powoduje pokolorowanie na t d t o wienza i kolurnny odpowiadajqcych ak-


tywnej kombrce, co uhtwia jej idencytikacjq. Pierwsza insmkcja usuwa kolor tla dla
wszystkich komdrek arkoSza. Nastqpnie c a b wiersz i kolumna sq cieniowane kolorem
jasnotdkyrn. Efekt zaprezenrowano na rysunku 19.6.

Rysunek 19.6.
Koiurnna i wiersz,
w Mdrej znajdule sip
aktywna komdrka sg
pakolorowane ~3 DII >Y m m
3695 I s 9 721
na ,?&to

p r t m
331
S l
us
3%%,
1*I
1'3 z 31Y

,
,ae Ten przyklad jest dostepny na ptycle CDROM ddqczonej do ksiqtkl.

=Z=J Nle nalety yrkonystywad powytszej pracedury, jetell w arkuszu zastosowano


r 6 ~ o k o 1 o m w etla. W takirn prqpadku mslanq o n e uruniete.

Zdanenie BefareRightCllck
Kitdy u2ytkownik kliknie arkusz prawym pnyciskiem rnyszy, wyiwietli sip menu pod-
reczne. Jeteli z jakiego4 powodu chcemy wylqczyk jego wygwietlanie w okreSlonym
arkuszu, motemy w tym celu wykonystak zdarzenie Rightclick. Ponitsza procedura
ustawia argument Cancel na wart046 True, co powoduje anulowanie zdanenia RlghtCl ick,
ta tym sarnym wySwietlanie menu podrqcmego. Zamiast niego wyiwietla sip okno in-
fonnacyjne.
Drivate Sub Morksheet BeforeRightClick -

Cancel -
!3y1#al Target As Excel .Range. Cancel As 8001ean)
True
flsg8ox "Henu p o d e u n e j e s t niedostepne. "
End Sub

4 W rozdzlale 24. opisano inne rnetody Wqczanla menu podpcznego.

mmBa
Zdarzenia dotyczqce wykresbw
DomySlnie obshrga zdantA jest wkgmna tylko dla wykrcs6w umieszmnych w osobnych
arkuszach. Aby wykorzystad zdarzenia dla wykresbw wbudowanych, naleg utworzyC

Prryktady zdarzetl dotyczqcych wykres6w zamieszczono w mzddale 18. Opisam


@4 w nlrn r6wnlet i p s o b y W m n l a rnodulOw Was u celu wtqszenia obslugi r d a m r l
dla wykresdw wbudowanych.

W tabeli 19.3 wyszczeg6lniono Edarzenia dotyczqce wykresbw wraz z krbtkirn opisem


katdego z nich.

Tabela 19.3. Zdanenla dotycqce arkuszy wykresdw


Zdarzenie Dzirbnia. W6rc powodujq wygenerowrnie zdrrrmir
Activate Uaktywnienie arkusza wykresu lub wykrau wbudowamgo
2eforeDoubleCl i c k Dwukrome kliknipcie arkusul wykresu lub samcgo w y k m . To zdmcnie
zachodzi p& dom$lnym dziitanicm wykonpanym w pmypadku dwukmlncgo
kliknipcia.
BeforeRightCl lck Kliknivic l v k u w wykrtsu lub samego wyknsu prawym prryciskiem mysy.
To zdarzenie zachodzi pncd domySlnyrn dziatanicm wykanywanym w przypadku
~ ~

klikniccia prawyrn pnyciskiem rnyszy.


Calculate WykreSlcnie nowych tub rmodyfikowanych danych
Deactivate Dezaktywacja w y h s u
Pncciqgnieciezakrcsu kombrck nad wykrcscm
Przecis@ipie Eahrsu kombrck nad wy- i upuncrcnie go na wykraie
Pryci$nipcie przycisku myszy w czasie, kicdy wskafnik myszy majduje aiq
nad wyknsem
Housdbve Zmiana pozycji wskahika myszy majdujqccgo siq nad y b m
HwseUo Zwolnienie przycisku myszy, kicdy wskafnik my- majduje siq nad wykresem
Resi ze Zmiana mzmiaru wykresu
Selekt Zamacmnie elemmtu na wykrcsie
SeriesChange Mdyfikacje wartoSci punktu danych nalctqccgo do wybrsu

Zdarzenia dotyczqce aplikacji


W poprzcdnich podrozdzialafh om6wiono zdarzenia dotycqce skoroszytdw i arkuszy.
Zdarzenia te q monitorcnvane dla okrejlonego skorwzyn~Aby monitorowaC zdanenia dla
wszystkich ohvartych skoroszyt6w lub wszystkich arkuszy, naleg wykorzystat zdarzenia
poziornu aptikacji.
554 CzgfC V + Zaawansowane techniki programwania

Wykonystanls pnsglqdarkl obbkt6w do wyrmklwanla rdaml


Przegldarka obiektdw (Owect Bmwser) umotllwia uryskanle lnfonnacjl na temat oblekt6w oraz ich
wta5ciwokl I metod. Za Jej pomocq m o h a s@ t a m dowleddeC, ktdre oblekly obsiugujq okreSlone
zdarzenia. Zatdimy dla pnyktadu, t e chcemy sie dowiedzleb, jakie oblekty obslugujq zdarzenie
HouseMove. W tyrn celu uaktywniamy edytor Vlsual Basic i wclskamy klawisz F2 w celu wySwietlenia
okna przeglqdarki oblektbw. Wybierarny paqcjq <All Libraries,, a nastepnie wplsujemy MouseMove
i klikamy ikon? lornetki (rysunek ponitej).
Pneglqdarka obiektdw wyswietli Iistg pasujgcych pozycJI. Zdartenia sq omaczone mat& t6ttq
btyskawicq. Na podstawle tej listy motna slg dowiedzid, Mdre oblekty obslugujq zdarzenie m.
useMove. Wigkszoe oblektdw to kontrolkl biblioteki MSFarms zawierajqcej m.ln. formularz UserFonn,
ale zdanenie MwseMove obstuguje takte oblekt Chart Excela.

Ljsta jest podzlelona na tny kolumy: Ubrery (blbllateka). Class (klasa) oraz Members (sktadowe).
Wyszuklwany element mote sip malefd w katdej z tych kolumn. Wiqte si? z tyrn bardzo istotna
uwaga: nazwa zdamnla, oblektu lub sktadowej naletqca do jednej biblioteki moie by2 taka sarna.
jak nazwa zdanenia, obiektu lub sktadowej n a l e w e j do innej biblioteki, c h d z reguly nle spelniajq
one identycznych funkcjl. Zatem przed uiyciem elementu wySwietlanego w pneglqdarce obiektdw
nalety przestudlowad jego sktadnle, kt6ra jest wyfwietlana na pasku stanu po kllkni?ciu e l e
rnentu w pneglqdarce. Czasaml mote si? okazad, i e w okreflonej klasle lub blbliotece zdarzenie
jest obstugiwane w inny sposbb.

T ~ 0 ~ 0 f lprocedur
le obsfugl zdand poriomu aplikacjl zawsze wyrnaga zastosowania
*c modutu klasy oraz p w n y r h cqm&cl pygntowawqch.
Emm
W tabeli 19.4 wyszczegblniono zdarzenia dotyczqce aplikacji wraz z krbtkim opisem
kudego z nich.

Wqczenie obstugi zdarzeir poriomu aplikacji


Aby wykonystat zdanenia poziomu aplikacji, wykonaj nastepuj;tce czynnolci:
1. Utw6rz nowy m d u i klasy.
T a b e l a 19.4. Zdanenia d o w q c e obiektu Application

Zdatzenie Dzialanis. ktdre powodujq rrygenerowanie z d a n t n i a


NewWorkbook Utworzcnie nowego skoroszytu
SheetActivate Uaktywnienie dowolnego arkusza
SheetBeforeDoubl eCl ick Dwukrome klikniecie dowolnego arkusza. To zdarzenie zachodzi
pned domyJlnyrn drialaniem wykonywanyn w przypadku
dwukmtncgo kliknitcia.
K l i k n i v i e dowolnego arkusza prawym p ~ c i s k i e r myszy.
n
To zdarzenie mchodzi przeddomySlnym dzialaniern wykonywanyrn
~v przypadku klikniqcia prawym przyciskiern rnyszy.
SheetCalculate Pneliczenie dowolncgo arkusza
Sheetchange Modyfikacja kombrki dowolnego arkusza dokonana
p n c z utytkownika lub zmnqtrznc lqcze
SheetDeact 1 vate Dezaktywacja dowolnego arkusza
SheetFol lowtlyperl Ink Kliknipcie hiperlqcza
SheetPivotTableUpdate* Aktualizacja danych na wykresie
Modyfikacja zaznaczenia w dowolnym arkuszu poza arkusznrni
b@qcymi rwkrcsami
Uindowkti vate Uaktyrvnienie dowvolnego okna skoroszyru
Uind&a,cti vate Dezektywacja dowoLnego okna skoroszyu
WlndowResi ze Zmiana rozmiaru dowolncpo okna skorosqtu
WorkbookActivate Uaktywnienie dowolnego skorosirytu
WorkbookPddlnInstall Zainstalowanie skomszytu jako dodatku
WorkbookPddlnUnlnstall Odinstalowanie skomszytu b&cego dodakiern

! Wo~bookAfterXHLExport* Wyekspoflowanie pliku XML


WarkbookAfterXULImport* Zaimportowanie p l i k u X t f L lub odSwietenie polqczenia z danyrni
I XML
WorkbmkBeforeClose Zamknipcie dowolncgo otwartego skoroszytu
WorkboolcBefore Print Wydrukowanie dowolnego otwvartego skoroszm
UorkbwkBeforeSdve Zapisanie dowolnego otwartego skorosEytu
UorkbookBeforeXFLExmrt* Pr6ba wyekspomwmia pliku X,UL lub odiwicttnia polqczenia
z danymi XML
WorkboakBeforeXPlLImport* Pr6ba zaimportowania pliku XWL
WorkbookDeactivate Dezakbwacja otwarlego skoroaytu
'WorkbookNevSheet U i w o m i e nowego arkusza w otwarqm skomszycie
556 CzgSk V Zoowansowane techniki progromowonio
-

Tabela 1 9.4. Zdanenia dotyczqce oblektu Applicatbn (ciqg dalszy)

- - - -- - -

uor4bookPi votTableCloseConnecti~1* Zamkniqcie polqczenia z zewnetrmym tr6dtern danych dla tabeli


przestswnei
'JorkbookPivotTableOpenConnKC1on* Otwarcie poiqczrnin z zewnCtrmyrn Wdtcm danych dla tabrli
przestixbnej
n'ork .%'kSy qc** Synchmniz3cj;t z senvenm skorosrytuhdqcego c e c i q prmmeni
roboczcj dokument6w
Zdorsnla dodano Ercelu 2002. IYzrqe i v c e i n i c j ~ erch nrc obsfugujq.

2. Wpisz nazwq tego moduh w polu Name okna Properties uwononego modulu
klasy. W jqzyku VBA kakdcmu nowemu modutowi klasy jest nadawana
domySlna nazwa, na pnyklad Classl, Class2 itd. Zalecam nadanie modutowi
klasy opisowej nazwy, na prtykiad c l sApp.
3. W module klasy zadeklaruj publicmy obiekt A~oltcation z uFyciem slowa
kluczowego Wi thEvents. Oto przyktad:
Public WithEvents X L A s Application
4. Utw6rz zmienng za pornocq ktdrej bedziesz odwolywat sic do zadeklarowanego
obiektu &pl ication w module klasv. Powinna to byf n i c n n a ob.iektowa poziomu
modulu zadeklarowana w module VBA
(nie w module klasy). Oto pnykjad:
Dim X As New clsApp

5. Powiq2 zadeklarowany obiekt z obiektem Application. Cqsto czynno9C ta jest

-
wykonywana w procedune Workbook-Open:
Set X . X L - Application
6. Napisz procedury obshgi zdarzeri dla obiektu XL w module klasy.

Opisana pracedura jest niemal ldentyczna z tq, ktdq naletab w y k o n ~w celu


/i * wykonptanla zdarzefi we wbudowanych wykresach. W ~ einfwmacji
j na ten ternat
znajduje siq w rozdziale 18.

Sprawdzanie, czy skoroszyf jest otwarty


W przykladzie zaprezentowanym w tym punkcie pokazano sposbb rnonitomwania otwie-
ranych skomsytbw za pomoq informacji lapisywanych do p l i h tekstowego. Najpienv
wstawimy nowy modul klasy i nanvierny go clsApp. Kod rnoduh klasy zamieszczono
ponitej:
Public WltPEvents AppEvents As Ppplication
P r i v a t e Sub PppEvents-Workbaok@en(ByVal Wb As Excel .Workbook)
C a l l UpdateLsgFi le(Wb)
End sub
Rozddat 19. Obstuga zdanen 557

W kodzie zadeklarowano zmiemq AppEvents jako obielrt Application z obslugq zdanefi.


Ptocedura AppEvents-WorkbookOpen wywdywana p q W e j pr6bie ohvarcia skaro-
szytu.Procedura o b h g i z d m i a wywda procedurq UpdateLogFi le i pmkaZe m i e ~ Wqb
reprezentujqcq otwarty skoroszyt. Nastepnie dodamy rnodut VBA i wprowadzimy na-
stcpujqcy kod:
D l m &@bject As New clsApp

Sub I n i t 0

-
'
Procedura wywolywana przez procedure YorkbookPpen
Set AopObject.AppEvents Application
End Sub

tx? --
Sub UcdateLogFile(Wb)
Wb.FullName
txt
-t x t 8 '.' & Date I
~ x t txt 8
- '.'
'."
5 Time
& Poplication.UserNam
Fnane ThisUorkb&.Path & " \ l o g f i l e . t x t "
Open Fnam For Append As 41
W r ? t e 41, t x t
Close #1
nsgBox t x t
End Sub

Typem zmiennej AppObject jest clsApp (nazwa typu odpowiada nazwie rnoduh klasy).
W procedurzc Workbook-Open majdujwj sip w module kodu obiektu ThisWorkbook urnicsz-
Etano wywolanie procedury Ini t. Procedue Workbook-Open zaprezentowano ponitej:
Private Sub Workbook-Ow0
Call l n i t
End Sub

Procedura UpdateLogFile ohviera plik tekstowy lub m r z y go w pnypadku, kiedy nie


ismieje. Nast~pniezapisuje naj-iejsze infonnacje o otwartyrn skoroszycic: nazwe
pliku, p w ScieZkg dostqpu, dm, godzing i nanvp utytkownika. Procedura Workbocr-
Open wywduje procadw In1 t. Z tego powodu w czasie otwierania skoroszytu procedura
I n i t twomy z m i e q obiektowq.
Ten przyklad jest dwteply na plycle CD-ROM dotqcz~nejdo kslzgkl. Przed otwarciem
skomszytu naleiy go skoplowaC na dyrk twardy. Plik tekstowy jest z a @ s m n y w W
samym katalogu. w kt- ma)duJesie skoroszyt a zatem w pzypadku, kie* skorosryt
zostanie owarty z plyty CDROM. wykonanle kodu nie powledde sie.

Monitorowanie zdarzeh pozlornu aplikacji


W rronrmimiu procesu geaemwania zdanefi pomocne jest wylwietlanic listy z d m &
zachodqqch padctas wykonywania r6tnych dziahd. Na piycie CD-ROM dohcmnej
do tej hi@ majduje sip skorosqt wySwictlajqcy w fonnularm UserFon wszystkie
zdanmia poziomu aplikacji (rysunek 19.7).

S k m z y t zawieia m d Masy, w kt6rym zdefiniowaoo 21 procedur, po jednej dla W e g o


zdanenia. Oto przykfad jednej z nich:
Private Sub XL-NMrkbwak(ByVa1 Wb As Excel .Workbwak)
L q E v e n t 'NWrLbook: ' & Wb.Name
End SV3
558 CzeJe V + Zaawansowane technild prograrnowania

Rysunek 19.7.
W tym skomszycie
wykoaystano modul
klasy w celu
monitorowania
zdarzerl paziomu
aplikacji

Kictda z tych proccdur wywohlje proceduq LogEvent i pnekazuje do niej argument


skladajqcy sie z nazwy zdarzenia i obiektu. Procedurq LogEvent zaprezentowano ponitej:

-
Sub LcgEvent ( t x t l
EventNum EventNum + 1
With UserForml
.
-- -
With IblEvents
.AutoSlze False
.Caption .Caption b vbCrLf 4 t x t
.Width UserForml.FrameEvents.Wdth - 20
-
.AutoSize True

--
End With
.FrameEvents.kml lHeight .lblEwnts.Height + 20
.FrameEvents.kmllTop EventNun * 20
End U i t h
End Sub

Procedure LogEvent aktualimje ftnmularz UserForm, modyfikujqc wlaSciwoSC Caption


kon!rolki Label o nazwie 1b l Events. Procedura koryguje tak2c wfakiwdci ScrollHeight
oraz ScrollTop obiektu Frame o nazwie FrameEvents zawierajqcego obiekt Label. Dzieki
modytikacji tych wlabciwoki ostatnio dodany tekst jest widocmy, natomiast starszy
znika z ekranu.

Zdarzenia dotyczqce formularzy UserForm


lstnieje kilka adanef~zwiqzanych z fonnuIanami UserForm. Ddatkowo z kztc4kontrolh
umieszczanq w fmularzach U s e r F o n jest zwi$zany osobny zbibr bed. Zdarzenia
dotycqce fonnulany UserForm zestawiono w tabeli 19.5.
W delu pnykladach z rozdziatrh~od l.3. 0 15.zademonstrowm &$tug$ zdarzefi
dla f o m l a n a UserFonn oraz utytych w nlm kontrolek.
Emma
Zdancnle Dzlalanla. ktdre powodujq wygenerowanie zdanenia
Activate Uaktywnienie fonnularza UserForm
Addcontrol Dodanie kontmlki w fazie rykonywania progrsrnu
Wykonywanie opcracji przccit\gania i upuszczania w czasie. kiedy rvskafnik
rnyszy majdujc sip nad formularzem
9eforeOropOrPaste Prbba upuszczenia lub wklejenia danych (tzn. utytkownik zwolnil klawisz myszy)
Click Klikniqcic myszpw czasie. kiedy wskxhik myszy majduje siq nad formularzem
OblClick Dwukrome kliknipcie m y s q w czasic. kiedy wskninik myszy znajdujc sic nad
formularzem
Deactivate Dnaktywacja forrnularza UserForm
Error Blqd spowodowany pncz kontrolkp - brak motliwoki zwrkenia informacji
o btdzie do prograrnu w y w o t u j ~ c g o
Initialize tqdanie wqdwietlenia formularza UserForrn
TeyDovn WciSnipcie klawisza
iteyPress WciSniqcie klawisza (kod ANSI)
Keyup Zwolnimie klawisza
Layout Zrniana mzmiaru formularza UserFor~
HauseDavn WciSnipcie klawisza m y s p
MouseNove Przemicszczcnie wskafnika rnyszy
HwseUp Zrvolnienic klawiua myszy
OueryCl ose &hie z a r n k n i ~ i aformularra UserFon
RmveControl Usunipcic kontrolki z formularza UserFon w fmie wykonywania prograrnu
Resize Zrniana rozmiaru formulana UserForm
Scroll Prtewijanie fonnularza UserFon
Terminate Usuni~cieh u l a r z a UserFarm '

Z m Zmiana wielkoki fonnulana UserFon

Zdarzenia niezwiqzane z obiektami


,Wszystkie zdanenia omdwione wczeiniej w tym rozdziale by& p o w i w n e z typami
obiektowymi (Application, Workbook, Sheet itd). W tym podmzdzialc om6wiq dwa do-
datkowe zdarzenia: OnTime orar OnKey, M6rc nic q m i w e z obiektami. Dostqp do nnih
uzyskuje s i t ta p o m o q m e t o d obiektu Apol icstion.

spf W odr6inienlu o d innych zdarzeh om6wionych w tym rozdziale, wymienione zdanenia


On definiuje slq w ogblnym module VBA (nie w module Mary).
560 Czqse V Zaawansowane techniki progromowonia

Zdarzenie OnTirne
Zdarzenie OnTime wyst~pujeo okreflonej pone dnia. Kod ponitsrego pnykladu powoduje
wygenerowanie sygnaht diwiqkowego, a nastepnie wygwietlenie komunikatu o godzinie 3
po poludniu:
Sub SetAl arm( )
Application.OnTime 7iwvrl~e!"15:CO:OO").'DisplayAlann"
End Sub

Sub DisplayAlan0
See9
MsgBax "kistari. Czas na ooooludniwa Drzerwe!'
End sub

W procedurze S e t A l a n wykonystano metode OnTime obiektu Appl ication w celu skonfi-


gurowania zdarzenia OnTim. Metoda re pobiera dwa argumenty: godzinc (w tym prqkta-
dzie 15:00: 00) oraz pmcedurq, ktdra ma byt wykonana o tej godzinie (w tym pnypadku
DisplayAlarrn). Po wykonaniu procedury SetAlann, o godzinie 15 zostanie wywotana
procedura D l sp1ayAlar-m i wyiwietli komunikat zaprezentowany na rysunku 19.8.

Rysunek 19.8.
To okno informacyjne
zostab zaprogramowane
tak, aby wyJwietlab sie
o okref lonej porre dnia

Aby zaplanowat zdanenie w odniesieniu do czasu bi-ego, a wiec takie. kt6rc ma na-
stapif na prtykhd za 20 minut, nalety zastosowaf ponitsq instrukcjq:
Apol ication .OnTim Now + TimValue('00:2D:OO"). "Di splayAlarm"
Metode OnTIme m o h a zastosowaf t a k e do zaplanowania wykonania procedury na
okreilony dzien. Ponitsza instrukcja spowoduje umchornienie procedury D i spl ayAl arm
o godz. 0:01 1 kwiemia 2004 roku:

Metoda OnTim ma dwa dodatkowe argumenty. Szi5zeg&owe informacje na ten temat


i35$2* znajdujq sie w pomocy online.

Zapretentowane ponitej dwie procedury demonstrujg w jaki spos6b zaprogramowat


powtamjqce siq zdarzenie. W kombrce A 1 co pi$ sekund wpisywana jest biehca go-
dzina. Wykonanie procedury UpdateClock powoduje zapisanie godziny w korndrce A1
i jednoczeinie mprogramowanie nastqmego zdartenia pi@ sekund pdmiej. Zdarzenie
to ponownie uruchamia procedure UpdateClock. Aby zalrzymat zdarzenia. naleiy wy-
konat p r o c e d u ~Stopclock (ktbra puwoduje anulowanie obshgi zdarzenia). Warto
zwrbcit uwagt, t e NextTick jest zmiemq pou'omu moduh, w ktkt6rej jest zapisana go-
dzina nastqpnego zdarzenia.
O i m Nextrick .A5 Date

Sub
'
Updateclock0
Uaktualnienie t p m S ~ iA l infomaeJani o bietqcej padzinie
'
Thl sWarkbwk.Sheets(l) .Range('Al'l Time -
-
Zaplancwanie nastepnego zdarzenia za p i g sekund
NextTlck Nm + TimeValue~"DO:OO:D5")
Pppllcatlon.OnTime NextTlck. "UpdateClock"
End Sub

Sub StopClockO
Anulcwanie zdarzenia OnTlme (zatrzynanie zegara)
On Error Resume Next
Apol tcation.OnTim NextTick. "UpdateClock". , False
End Sob

Zdarzenle OnTim jest obstugiwane nawet po ramknigciu skorosrytu. M6wiqc inaczej.


w pnypadku ramknlwla skoroszytu bez uuruhornienia procedury Stoptlock skoroszyt
sam sie otworzy za pip5 sekund (pny zabienlu. t e Excel h d d e w dalszym ciqgu
dziafaC). Aby zabezpieczy6 sie peed takirn ddatanlern, nalety wykorzystad procedure
obslugi zdarzenla 'Workbook-BeforeC1 ose zawierajqcq nastepujqcq instrukcje:
C a l l Stopclock

Analogowy zegar Z rozdziatu 18. to pnyklad dzlatanla powtarzajqcego sie zdarzenia

Zdarzenie OnKey
Podczas pracy Excel przez caly czas monitoruje wciskane klawisze. bzipki temu moms
skonfigurowat klawisz lub kombiacjp klawiszy, ktbrych wcifniqcic spwoduje wykonmie
okreSlonej procedury. Jedyne pnypadki. kiedy kombinacje klawiszy nie sq rozpozna-
wane, to wprowadmie formuly lub praca z oknem dialogowym.

W tapmentowanym ponitej przyktadzie wykorzystano metode OnKey w celu skonfigu-


rowania zdartenia powstajqcego w momencie wcilnipcia klawiszy. Zdanenie powoduje
przypisanie pmcedur do klawiszy PgDn oraz PgUp. Po wykonmiu procedury Setu3-
OnKey wcignigie klawisza PgDn spowduje wykonanic pmedury PgDn Sub i pmsu-
niiyie kunora w d61 o jeden wimz, natorniast wcifnipcie klawisza fgGp
spowoduje
wykonanie procedury PgUp-Sub i przesunivie kursora o jeden wiersz w g 6 ~ .
Sub Setup-bKeY0
Pgpl ication.OnKey "(PgOn)'. "pSCn-Syb"
Pppllcation.OnKey "(PgUp}", "fWp-Sub'
End Sub

Sub PgDn-Sub(
On Error Resume Next
nctiveCe11 .Offset(l. Dl. A c t i v a t e
End Sub

Sub psUp-Sub( l
Ch Ermr Resw Next
PctiveCell.Offset(-1. O).Actlvate
End Sub
562 CzefC V 4 Zaawamowone technikl pragramowanio

Kody klawlszy umleszczono w nawlasach klarnrowych, a nle okrqgtych. Pe)nq llste


* kd6w klawlszy rnotna malet6 w pomocy online. mstarczy w z u k * hasla iswleraj-
trazq ~ n ~ e y .

W popnednirn prrykladzie zastosowano instrukcje On Error Resume Next w celu zigno-


rowania wygmemwanych blpddw. Jeteli na przyktad aktywna komdrka majduje sip
w pierwszym wierszu, prbba p m i e c i a krns& o jeden wiersz w gdre spowoduje bhd.
B+qd powstanie r6wniet w przypadku, gdy aktywny arkusz jest wykresem. poniewal.
nie ma takiego pojpcia, jak aktywna kom6rka wykresu.

Wykonanie ponitszej pmcedury spowoduje anulowanie obshgi zdariefi OnKey i przy-


wrbcenie normalnego dziahnia klawisy:
Sub Cancel -0nKey ( )
Application.GnKey ?(PgDn}"
nppllcatlon.0nKey "(PgUp}'
End Sub

Zastosowanie pustego ciclgu mak4w jako drugiego argurnentu metody OnKey nie spo-
woduje anulowania zdarzcnia OnKey. Zamiast tcgo Excel zignoruje ciitg znak6w i nie
wykona tadnych dziald. Na pnyktad ponitrza instrukcja inforrnuje Excel, aby ignomwal
kornbinacje klawisty A/t+F4 (znak procenta reprezentuje klawisz Aft):

Chociat m e t o e OnKey motna wykorzystd, aby pnypisac! klawlsz do rnakra, w celu


wykonanla taklego zadania leple] zastosowaf okno dialogowe Opcje maka. Wiecej
infonnacjl na ten temat m t n a znaletC w rozdziale 9.
Rozdziat 20.
Interakcje
z innymi aplikacjami
W tyrn rozdziale omdwip sposoby interakcji aplikacji Excela z innymi aplikacjami.
OczywiScie zostanqpmdstawione odpowiednie pnyktady.

Urucharnianie innych aplikacji z poziomu Excela


W pocqtkach ery komputer6w osobistych komunikacjp porniedry aplikacjarni stosowano
d k o . Dow5ki nie mowadzono techniki wielozadaniowolci. uMkownicy . nie mieli
innego wyjicia - byli zmuszeni do korzystania z jednego progamu w okreSlonym
rnomencie. Komunikacia pomiedw - - avlikaciami
. . - -
zanwczai oeraniczala sie do imuortowania
plik6w. Niemofiliwe bile.wykonanie nawet tak oczywistej dziJ operacji, jak skopiowanie
informacji z jednej aplikacji i wklejenie jej do drugiej.

Wsp6tczesne oprogramowanie obsluguje co najmniej kilka rodzajdw komunikacji z in-


nymi aplikacjami. WipkszoJt programow windowsowych konysta ze schowka, ktory
umodiwia wykonywanie operacji kopiuj-wklej pomiqdzy aplikacjami. Wiele prograrndw
pracujacych w systemie Windows obshguje technikp dynamicmej wymiany danych
-
(ang. Dynamic Data Exchange DDE) oraz autornatyzacjp.

Umhamianie innych aplikacji z poziomu Excela jest bardzo przydatnq operacjq Dzi~kiniej
m o h a na pnyktad tmkhorni~Glikacjp ~ i c m o >Wce lub k t D&-owy smt wsa-
dowy. M o a a tak2e u W i c utytkownikowi dostpp do windowsowego Paneh sferowania.

Zastosowanie fvnkcji Shell jezyka VBA


Funkcja She11 jCylca VBA macznie u h i a uruchkianie innych pmgramdw. Listing 20.1
,prezentuje proceduq, kt6ra uruchamia windowsowq aplikacjp Tnblica wakiiw umotli-
wiajqq utytkownikowi wpmwadzanie makbw specjalnych.
UMng 20.1. Uruchamlanle naqdziowych a@Ik@i Windows
Sub CharMaoC 1
D i m Prcqram As String
Dtm Ta$kID As Double
On Etrar Resune Next
564 C z e E V + Zoowansowane technikl progromowania

Program
-- 'champ.exee
TaskID Shell (Program. 1)
If Err 0 0 Then
HsgBox 'Hie mind uruchomit apllkacjl " 1 Program. vbcritical . "8lqd"
End If
End Sub

Na rysunku 20.1 zaprezentowano okno aplikacji, ktdra zostata uruchomiona za pomocq


powytszej procedury.
Rysunek 20.1.
U~chamianie
7-
aplikacji
Tablica mak6w
-
z ~oziomuExcela

--
a.n-
ow-
u-
i E
--
a
"

Ufytkownicy Excela 2 W 2 tub wersjl pr5fnleJszychnle m w q komystad z Tablicymakdw.


W celu wstawienla znaku swialnego
. . - rnoina skonystaC z pokcenia Wstaw/Symbol
dostepnego w menu Excela.
Funkcja Shel 1 zwraca identyfikator zadania dla aplikacji. Identyfikator ter:nYotna nastpp-
nie wykorzystaf do uaktywnienia zadania. Drugi argument funkcji Shel 1 okredla spos6b
wyfwietlania aplikacji (1 omacza aktywne okno o domy3lnym rozmiarze). Informacje
o innych wartolciach tego argumentu motna y k a t w systemie pomocy. Jeteli wyko-
nanie funkcji Shel 1 nie powiedzie sip, nastppuje w y g e m w a n i e b l d u . Z tego powodu .
w powytszej W c j i wykonystano instrukcje On Error, kt&a wySwietla kornunikat. je9li
nie mote maleit pliku wykonywalnego lub j d l i wystqi inny btqd.

Kod VBA nie zatrzymuje sie po uruchomieniu aplikacji za pornocqfunkcji Shel 1. M6wiqc
inaczei. funkcia Shel 1 uruchamia aulikacie w s ~ o d asynchronicznv.
b Jekli za wywda-
niern k c j i She11 w proccdurze mijdujcs'ip ddatkowe ktrukcje, b&q one wykonywane
r6wnolegle z uruchornionyrn programem. Jeteli dowolna instrukcja wymaga interwencji
utytkownika (np. wyiwietla siq okno informacyjae), a aktywna jest inna aplikacja, za-
czyna migat pasek tytutu Excela

Czasami trzeba uruchornik aplikacjp za pornoq funkcji Shel 1 i zatrzyrnab kod VBA do
czasu jej zamknipcia. Mote tak sip zdanyC, jedli na przyktad uruchomiona aplikacja ge-
neruje plik kt6ry jest utywany w dalszej c@ci kodu. Chociat nie m o m wmzymaC
wykonywania kodu, rnotna utworzyk pctlp, kt6ra rnonibwuje stan aplikacji. Listing 20.2
prezentuje pnyklad kodu wylwietlaj~egoo h infoimacyjne w chwili zakoticzenia
dziabnia aplikacji mchomionej za pomocqfunkcji Shel 1.
I
i
! Rozdziat 20. + lnterakcje z innymi aplikacjami 565

Listing 20.2. Oczekiwanie na zakoMenie dzlafania apllkacJl


Declare Function CpenPmcess L i b 'kerne132" -
(ByVal ~ s l r e d k c e s sAs Long. -
ByVal bInherltHandle As Long. -
ByVal ctwPrccessld As Long) As Long

Oeclare Function GetExttCodeProcess L i b 'kerne132"


(ByVal hProcess As Lpng.
1pExitCode As Long) As Long

Sub RunChartiapP( )
Dlm Task10 As Long
Dim hProc As Long
Dim IExitCDde As Long
Dim ACCESS-TYPE As Integer. STILL-ACTIVE As Integer
Dim Program AS String

ACCESS TYPE
STILL-~TIVE
--&ti400
W103

Program - 'Charmap.exe"
On Error R e s m Next

-
Uruchomienle zadanla
TaskID Shell (Program. 1)

-
Pobranle uchrrytu pmcesu
hPrcc OpenPmess(ACCESS-TYPE. False. Task101

I f Err 0 0 Then
MsgBox "Hie m t n a uruchuitit progrwu ' L Program. vbCritlca1. 'Blad'
E x i t Sub
End If

Do ' Petla w e k i w a n l a na Z a k O h c ~ ~ procesu


ie
Sprawdrenle stanu pracesu
GetExl tCodeProcess hProc. 1ExitCode
Zenolenle na przetwarzanle zdarzefi
DoEvents
-
Loop Uhtle 1ExitCode STILL-ACTIVE
Zakoliczono wykonpanle zadanla. wykrletlenle i n f o m j i
MsgBox 'ApllkacJa" & Program & " zakotlczyla dzlalanle.'
End Sub

W cmsie, kiedy pracuje urucbomiony waefniej program, procedura wykonuje w p@li


Do .. . Loop funkcje GetExltCadeProcess. sprawdzaiqc im6com wartoe (1 Exi tCode).
Kiedy prDgnun &bficzy dziahie, mi&a l ~ x i & l pryjmiee o k n ~ l &wartoit.
~
W6wczas p a ~akohnysiqi wykonywanie kodu VBA zostanie wmowione.

Obydwa pnedstawiom pawyFe] prqkrsdy q dos@pne na plycle CDROM cklqczonej


do ksi@l.
Zastosowanie funkcji Windows API Shellbecute
Do uruchamiania innych a p l i b j i motna wykorzystat funkcjq Shel 1 Execute naletqcq
do interfejsu programowania aplikacji Windows (Windows API). Watnqcechq tej funkcji
jest mo2liwoiC uruchomienia aplikacji na podstawie nanvy pliku, kt6ry ta aplikacja
prtetwarza (o ile okreellony typ pliku meal skojarzony z aplikacjq w rejesfne Windows).
Na p n y k M funkcjq Shel 1 Execute motna wykorzystat do otwarcia dokurnentu WWW
w dornyilnej przeglqdarce WWW. Motna tet uruchomiC domySlnego klienta poczty,
aby wysiat wiadornofC pod wskazany adres e-mail.

Deklaracjp API funkcji Shel 1 Execute zmieszczono ponitej (ten kod nalety umieicit na
pocqtku moduiu VBA):
Private Declare Function ShellExecute L i b "she1132.dll' -
Alias 'ShellExecuteA' (ByVal hWnd As Long. -
$Val 1pOperation As String. ByVal l p F i l e As String. -
ByVal lpparameters As String. ByVal IpDirectory As String. -
ByVal nShowtmd As Long) As Long

W ponitsym pnykladzie zademonstrowano sposdb wywolania funkcji ShellExecute.


Wykonystano jq do otwarcia pliku pficmego za pomocqprogramu graficmego, zktdryrn
skojarzono pliki GIF.
Sub S W r a p h i c ( )

-
Dim FileNanre As S t r i n g
F i l e N m "c:\face.gifm
Call ShellExecute(0l. vbNullString. FlleName. -
vbNullString. vbNullStrlng. vbNomlFocus)
End Sub

Kolejny p r y k h d dziala podobnie - otwiera w domyflnej przeglqdarce strone WWW


odnalezionq na podstawie podanego adresu URL:
Sub apenURL( 1

-
D i m URL As Strlna
URL "http://&.mlcrosoft
Call ShellExecute(O&, ybNullString. M.
.cm'
vbNul1String. v b m l i s t r i n g . v b k m l ~ & u s )
End Sub

Technikq tq m o h a talc% wy- z adresami e-mail. Pan* kod powoduje otwarcie


domfllnego klienta poczty elektronicmej i w y s b i e wiadomogci e-mail do oh5lonego

Sub S t a r t h i 1( I

-
D i m Addr As String
Wdr "mailto:bgates~tcrosoft.un'
. Call S h e l l k c u t e ( O & . vbNul1String. Addr. -
~ u l l S t r i n g .vbNullString, vbrlornalF~~us)
End Sub
Rozdziot20. e lntemkcie z innvrni a~likociorni 567

Uaktywnianie aplikacji z poziomu Excela


UQcie hnkcji She11Execute w przypadku, gdy aplikacjq uruchomiono wczelniej, mo&
spowodowat uruchomienie jej kolejnego egzemplarza. W wiekszoSci przypadkdw nie
interesuje nas uruchomienie nowego egzernplarza aplikacji, ale uaktywnienie aplikacji
dzialajqcej.

Wykorzystanie instrukcji AppActivate


W zaprezatowawj p n h j procedurze StartCalculator wykonystano instrukcje AppAc-
tivate wcelu uaktywnienia dzialajqcej aplikacji (w tym przypadku jest to windowsowy
Kulhiator). Argumentem instrukcji AppActivate jest tytul aplikacji (tekst na pasku ty-
tutu). Seteli instrukcja AppActivate wygeneruje bbd, bedzie to omaczak, t e Kalkularor
nie zostal wneSnicj umchomiony. W takim pnypadku procedura go uruchomi.
Sub StartCalculator(
D i m W i l e As String
D i m CalcTaskID As Double

&File - 'Calc.exe'
On Error Resune Next
AppActivate "Kalkulator"

Err 0- -
I f Err 0 0 Then
CalcTaskID Shell(AppFi1e. 1)
I f Err 0 0 Then MsgBox 'Nie mtna uruchornit kallulatora.'
End I f
End Sub

ggg Ten pryklad Jestdostepny na p)ycle CDROM dolqczonej do kslqikl.

UaMywnlanie aplikacji pakietu Microsoff Office


J e l i aplihcja naleg, do pakiehl Ofice,do jej uaktywnienia moms u2yC metody Ac-
t i v a t e f l i c r o s o f t A p ~obiektu Application. Na pnyklad wykonanie poni&zej procedury
spowoduje uruchomienie Worda:
Sub Sta rtWord( l
Application.PCtivateMicrosoftPpp xlNicrosoftWord
End Sub

J-li w mommcie wykonywania pmcedury Word by# jut uruchomiony, nastagi jego
uaktyvnienie. W instrukcji wywo4nia tej metody moma takte wykorqstak inne staie:
xlMi crosoftPwerPoint,
m xlMicrosoftMai1,
m xlMicrasoftAccess,
xlMi crosoftFoxPro.
568 CzeLe V + Zaowansowane techniki progmmowonio

Uruchamianie okien dialogowych


Panelu sterowania
W systemie Windows, dosqpnych jest kilka rdhych okien dialogowych i kreatordw, do
kt6rych w wiehzoici uzyskuje sic dostep z Paneh sferowania. Czasami trzeba wylwie-
tlit jedno lub kilka tych narzcdzi z poziomu aplikacji Excela. Moze to by6 na pnyklad
okno dialogowe wldciwoici daty i sodziny, jak pokazano na rysunku 20.2.

Rysunek 20.2.
Za P o m W jeryka
WA motna wyfwietlid
okna dialogowe
Panelu sterowania

Kluczem do wywolywania okien dialogowych inncgo systemu jest wykonanie aplikacji


rundll32.ere za pornoq funkcji Shell jqzyka VBA. Wykonanie ponitszej pmcedury
spowoduje wySwietlenie okna dialogowego WtaSciwojci;Data i goukina;
Sub ShowOateTImDl g()
D i m Arg As String

-
O i m Task10 As Double
A r g "rundl 132.exe she1132.dll. Cantrol -RunDLL timedate.cp1"

-
On E r m r Resune Next
Task10 She!l(Arg)
I f Err 0 0 Then
M s m x ('Nie rnotna uruchmiC aplikacji.")
End If
End Sub

Poni2ej podano og6lnq sktadnig wywohnia aplikacji mndl132. exe:


r u n d l l 3 2 . e ~she1132.dll. Control-RunDLL namgliku.qol.@n.t
nazwap 1 i k u . cp I -nazwa jednego z plik6w CPL z Panelu steruwania;
n -numer apletu wewnqtrz pliku CPL (numery zaczynajq siq od zera);
Na plycie CD-ROM clotqczonej do k s l e k i majduje s& skomszyt wy5wietlajqcy 13
apletdw Panelu sterowania. WylP@ tej aplikacjl zaprezentowano na rysunku 20.3.
Rozdrfot 20. + lnterakcje z innymi aplikacjornl 569

Rysunek 20.3.
SkorosIyt z tym oknem
dialogowynl W j e sposdb
uruchamlanla systemowych
okien dialogowych
z poziomu Excela

Wykorzystanie automatyzacji
W Excelu motna napisat makra m d z a j q c e pracq innej aplikacji. na pnykbd Worda.
M6wiqc 4ciAlej, za pomocq makra w Excelu motna zarzqdzat sewerem automatyzacji
Worda. W takiej sytuacji Excel jest aplikacjq klienckq, natomiast Word serwerem. Motna
tet napisad aplikacjq sterujqcq Excelem w Visual Basicu. Pmces zarqdtania aplikacjq
p r n z innq aplikacj~czasami nazywa siq tqczeniern i osadzaniem obiektbw (ang. Object
Linking and Embedding -OLE)lub po prostu autornarylocjq.

Zalety automatyzacji sq nieza-zalne. Na przyktad p r o p i s t 4 kt6ry chce wygenero-


wat wykres, mote po pmstu wykonystat inna aplikacjp, pobraf z niej obiekty, uzyskaf
obiekr Chart, a nastqpnie wykorzystywat jego wlaSciwoSci i metody. Automatyzacja
w pewnym smsie zaciera granice pomiqdzy aplikacjami. Urytkownik Excela mote pra-
cowak z obiektem Accessa i zupehie nie zdawat wbie z tego sprawy.
Niehtdre aplikacje, takle jak na pnyktad Excel, mcgq dzlatd zar6wm jako aplikscje
klienckie, jak aplikacje sewerowe. lnne mogq drlatat wytqcznie jako apllkacje
kllenekie lub wytqcmie jako adlkacje serwerowe.
W tym podrozdziale zademombuj~spos6b utycia j ~ k VBA a w celu korzystania z obiek-
t6w innych aplikacji. W pnykhdach poshtp sip Wordem, ale poj~ciate w rciwnym
stopniu dotycq innych aplikacji udostgpniajqcych obiekty do automaryzacji. Jest to coraz
wiqksza grupa.

Dzlalania z oblektami innych aplikacji


z wyko-hniem automatyzacJI
Do osadzania obiektu w arkuszu Excela, na przykIad dokumenm Worda, stu* polece-
nie Wstaw/Obiekt.Dodafkowo rnotna utworzyC obiekt i wykonywat z nim dziahnia za
pomocq kodu VBA (dziahnia te stanowiq sedno rnechanimu automatyzacji). W takim
pn)lpadku w c z a j mamy p h y d o s t p do obidabw. Dla pmgramist6w taka technika
m y k l e jest korzysmiejsza od osadzania obiektdw w arkuszach. W przypadku osadzania
obiektbw ukytkownik musi m a t -6b postugiwania sip aplikacjq obiektu automatyza-
cji. Natomiast jeteli do wykonywania dziakd z obielctem wykonystamy jqzyk VBA,
m-my tak zaprogramowak obiekt, aby dzialania z nim spmwadzaty sip do prostych
czynnoki, na pnyktad kliknivia przycisku.
570 CzebC V + Zaawansowane techniki programowania

Wczesne I p 3 n e wlqzanle
Przed wykonaniem dziahh z obiektem zewngnnym mlety utwonyt jego egamplarz.
Mo-a to nobiC, wykorzystujqc w z w n e lub p 6 h e w i p n i e . W i q m i e dotyczy dopa-
sowywania napisanych przez programistq wywohfi hnkcji do wtaSciwego kodu im-
plementacji funkcji.

Wczesne wiqzanle
Aby wykorzystat wczesne wbpnie, nakty utworzyC odwdanie do biblioteki obiekt6w
p o p m z wybranie polecenia TooMReferences w edytorze Visual Bmic. Na ekranie wy-
fwietli sie okno dialogowe podobne do tego, kt6rc zaprczentowano na rysunku 20.4.

Rysunek 20.4.
Dodawanle wlpblanla
do pliku
biblioteki obieM6w

Po zdefiniowaniu o d w h i a do biblioteki obickt6w motna wykonystad pmglqdarkp


obiektbw (jak pokazano na rysunku 20.5) do pneglqdania nazw obiektbw oraz ich rnetod
i w+aiciwoki. Aby uruchomit pmglqdarkq obiekt6w. nalety wcisnqt E?w edytorze
Visual Bmic.

Ryrunek 20.5.
Za pomocq
pmgtqdarki oblektdw
motna uryskad
informaj e
o obiektadr,
do ktdrych
zdefiniowano
odwohnia
Rozdziat 20. lnterakcje z innymi aplikacjami 57 1

W pnypadku wykorzystania wczesnego w i m i a nalety zdefiniowaf odwdanie do kon-


kretnej wersji biblibttki obiektdw. Na pnykbd motna wprowadzik odwdanie do biblioteki
Micrmoj Word 9.0 Object Librory (dla Worda 2000), MicrosojZ Word 10.0 Object Librmy
(dla Worda 2002) oraz Mcrosofr Word 11.0 Object Librmy [dla Worda 2003). Po zdefi-
niowaniu o d w h i a , w celu u t w o m i a obiektu n a l e e skorzystat z nastqpujwej imrmkcji:
Dim WordApp As New Uord.Application

Zastosowanie wcmmgo wiigania do tworzenia obiekt6w. polegajajgego na skonfigurowa-


niu odwolania do biblioteki obiekt6w, zwykle jest wydajniejszym i szybszym rozwiqaniern
w por6wnaniu z p6hym wimniern. Wczesne w i w n i e rnotna jednak zastosowat tylko
wtdy, gdy obiekt jest zapisany w osobnym pliku biblioteki typu lub obiektu. Dodatkowo
u ~ k o w n i c ykorzystajqcy z aplikacji muszq zainstalowat kopip okrcSlonej biblioteki.

Kolejna zaletq wczesnego wi-ia jest rnotliwoSC wykorzystania statych zdefiniowa-


nych w bibliotece obiektu. Word, podobnie jak Excel, zawiera wiele predefiniowanych
stalych, kt61-c rnoZna wykorzystae w kodzie VBA -
ale tylko w pnypadku wczesnego
w i p n i a . W pnypadku p 6 ~ e g ow i w n i a motna jedynie skorzystat z neczywistych
wartogci.

1 wreszcie wczesne w i w n i e umotliwia wykonystanie przeglqdarki obiektbw edytora


Visual Bmic oraz opcji automatyemego wySwietlania listy skhdowych ulatwiajqcej dostq
do wlaSciwoSci i rnemd. Mechanizmy te sq niedost~pncw przypadku wykorzystania @be-
go w i p n i a , poniewa2 typ obiektu jest many dopiem w M e wykonywania programu.

W fazie wykonywania progmmu wykonystuje sit funkcjp Createobject w celu utwmenia


obiektu lub funkcjp Getobject w celu uzyskania zapisanego egzemplarza obiektu. Taki
obiekt jest deklarowany jako ogblny typ Object, a odwolanie do niego jest okreslane
w fazie wykonywania programu.

P 6 h e wiqzanie motna wykonystab nawet wtedy, kiedy nie jest mana wersja aplikacji
zainstalowanej w systemie utytkownika Na pykM wykonanie ponitszego kodu spo-
woduje utworzenie o b i e h Worda (kod dziala dla irVorda 97 i wersji polniejszych):

-
Dim WordApp As Object
Set MrdApp CreateObject[~blord.Appllcatlon")

W pnypadku zainstalowania wielu wersji Worda m o h a uhvorq-6 obiekt dla okreilonej


wersji. Na pnykiad p n i f i z a inshukcja utworzy obiekt Worda 2003:
Set WordApp - Createabject( "Uord.App1ication. 1')
K l u n rejestru Widows dla obiektu automatyzacji Wordu, a t&te o d d a n i e do
obieldu Application w jqzyku VBA q t a k i e same: Word.App1 i C a t i G q . Nie jest to jednak
o d w o h i e do tego samcgo elernentu. Deklaracja obiektu jako As Word .Awl icatl J n lub
jako As New Word.Ppp1 ication dotyczy obiektu Aopl ictitl o i w bibliotece Word. Jednak
wywolanie hnkcji Createobject( "'dord.Aps1 I cation' ) dotyczy nazwy, pod jakq wyste-
puje najwytsza wersja Wordu w rejestrze Windows. Nie jest to unjwersalna zasada dla
wszysdcich obiektbw automatyzacji, ale o b o w i p j e dla gfiwnych komponent6w pakietu
572 CzeSC V Zaawansowane techniki programwania

I
Funkcja Getobject a C~matsObjeat
Obie funkcje VBA GetCbject i CresteObject ~wracajqodwcbnle do oblektu, ale dzlatajq w inny sposbb.
Funkcja CreateObject sbty do twonzenia interfejsu do nowego egzemplarza apllkacJi. Nalety z niej
skorzystaf, jeieli aplikacja nie daaia. Nawet jeteli egzernplarz apllkacji zostat wczeSniej u w
chom~ony.funkcja spowoduje uruchornlenie nowego egzemplarza aplikacji. Na przyklad Ponitsta
instrukcja spowoduje uruchornienie Excela, a obiekt zwrcicony w zmiennej XLMp b@ie odwotaniem
do utworronego obiektu Excel Ao~i?cation:
Set XLApp - CreateObject("Exce1 .Appl lcation")
Funkcjq Getobject kykonystuje siq z aplikacjq. kt6ra jut dzlata, lub w celu uruchomlenia aplikacji
zjeclnoczesnym zaladowaniem pllku. Na pzyktad ponibza Instmkcja spowoduje uruchomienie Excela
i jednoczesne zatadowanie pliku Mflie.xls. ObieM zwr6cony w zmiennej XLBook bedzie odwot*
niem do obiektu Workbook (pllku Mflle.xb).
Set YLBook - GetObject('C:\Pyffle.xls-)

Ofice 2003. Jeteli Worda 20Y12 utytkownik Wordem 2003, funkcja CreateOb-
ject ( "Word. Appl i c a t i on" 1 dalej bpdzie dzialat prawidlowo, c h d tym razem btdzie
odwolywaf sie do nowej aplikacji. Jeteli jednak usuniemy Worda 2003, wykonanie
funkcji CreateObject("Word.Appi 1cation.ll'), w kt6rej u y t o nazwy syrnbolicznej od-
powiadajqcej Wordowi 21003, nie powiedzie sip.

Funkcja Createobject wykonystana dla obiektu automatyzacji, na pyklad WOrd.App1 i -


cation lub Excel .Application, zawsze twony nowy epzemplarz obiektu automatyzacji.
Omacza to, tc zawsze zostanie wchomiona nowa kopia tej c q f c i aplikacji, kt6ra bierre
udzial w automatyzacji. Nawetjdli e g m p l a n obiektu automatyzacjijut dziah, utworzony
zostanie jego nowy egzemplarz, a nasttpnie obiekt okreflonego typu. Aby wykorrystaf
bieqcy egzemplarz lub uruchomit aplikacje i spowodowad, aby tostat zaladowany
plik, nalety skonystat z funkcji Getobject.

W oclu automatyzacji aplikacji pakietu Wce zaleca sig wykorystanie wczesnego wiqzania
i odwola~Ido najwczefniejszej wenji produktu, kt6rq jak siq spodziewarny, jest zainsta-
lowana w systemach klienckich. Jeteli na przyklad chcemy wykorzystak automatyzacjq
dla Worda 97, Worda 2000, Worda 2002 oraz Worda 2003, w celu zachowania zgodnofci
z wszystkimi caerema wersjami powinniimy wykorzystaf bibliotekp typu Worda 97.
Oczykikie omacza to, t e nic bedzie mo*a wykonystad wlaSciwoSci nowszych wersji
Worda.

Prosly przyktcrd pdinego wiqzania


W ponitrtym przykladde tadanonstrowan0 sposbb utwoncnia obiektu Worda za pomocq
@hego wi-nia. Procedura w o n y obiekt, wyiwietla numer wersji, zamyka aplikacjp
Worda, a nasttpnie niszczy ob'iekt, zwalniajqc pami&.
Sub GetYordVersion[ 1

-
Dim WardPpp As Oblect
Set UomlApp CreateObject~"Word.Ppplication')
MsgBox Wordnpp. Verston
brc!App.Puit
-
Set MrdPpp Nothing
End Sub
Rozdzial20. + lnterokcje z innymi aplikacjomi 573

a@ ObleM Words utwomny w te] prowdune bedzle nlewldoczny. Aby zobac* oblekt
v czasic, kiedy sq r nlm wykonywane dziatania. nale2y usfs*lejego wlakIwO5~
Visible na wart056 True tak, jak pokazano ponlte):
WordApp.'Jisible - True

P ~ y k l a dten m o m tet zaprogramowat, w y k o n y s t u j ~wczesne w i w i e . Zanirn jednak


bqdzie to motliwe, nalety wybrat polecenie Tools/Rt$erences, aby ustawit odwdania
do biblioteki obiekt6w Wwda, I wprowadzie nastqpujqcy kod:
Sub GetiJordYersion(
Dim Wordnw As New Word.Ppplication
HsgBox WordApp. Version
Wordl\pp.Qult
-
Set WordApp Nothing
End Sub

Zarzqdzanie Wordem z pozfomu Excela


W przykhdzic zaprcantowanym w tym punkcic zademonstnrje wsjq autamatyzacji
z wykonystaniem Worda. Proccdura M a k e M m s utwony t
q noutki zdefiniowane prrez
utytkownika w Wordiie, a nast~pniezapisze katdy dokument do pliku. Bnfonnacje wy-
korzystane do utwonenia notatek q zapisane w arkuszu Excela tak jak pokazano na
rysunku 20.6.

Rysunek 20.6.
Word automatyunie
generuje trzy notatki
na podstawie danych
zapisanych w a r k u m
Excela

Proccdura Wkeklenus z listingu 20.3 rorpoczyna sic od utwoncnia obiekhl WOrWp.


Procedura przetwana w pqli trzy wieme danych zapisanych w arkuszu Arkuszl i rvy-
korzystuje metody i w w i w d c i Wwda do u t w m i a M e j notatki i zapisania jcj na
dysku. Tekst notatki zapisano w &sic o natwie Notatba (w kornbroe E6). Wszystkie
d z i a h i a odbyajq sip w tle: macza to, te Word jest niewidocrny.

Sub MakeNmsO
Pnxedura tworzy notatki w WDrdrte za pamcq e c h a n i w a u t w t y z a c j i
Dim ~ordAppAs Cbject
Oim Oata As Rang?, rnessage Pis String
Dim Recwds k Integer. i k Integer
D i m Regim As Strlq. SalesPmt As Strlng. S a l e s W km 'String
574 Czqft V + Zoowonsowane techniki progromowania

-
a
Uruchmienle Worda 1 utworzenie obiektu (pbfne wipzanie)
Set WordAw CreateObject( "Word .Appl l c a t i on")

--
Infornacje z artusza
Set Data Shects("Arkuszl').Range( "Al")
Message Sheets("Arkusrlm) .Range("Notatka")

--
a
Przetwarzanle w p e t l t wszystklch re0rdt.w w arkuszu Arkuszl
Records Application .CountA(Sheets( "Arkuszl") .Range('A:A")
For 1 1 To Records

Appllcation.Status8ar -
Aktualizacja i n f o m c j i o posteple zadanla na pasku stanu
'Przetwarzanle rekordu ' & 1

--
Przyplsanle bletqcych danych do niennych
Region Oata.'Cells(l , l).Value

-
SalesNun Data.Cells(1. 2).Value
S a l e s h t Format(hta.Cells(1. 31.Value. "U.000")

-
Okreilenie nazwy p l l k u
SaveAsName ThlsWorkbook.Path h "\' & Region & ".doc"

Wslanle polecerl do M r d a
With WordApp
.Oocmnts .Add

--
With .Selection
.Font.Slze 14
.Font.Bald True
.ParagraphFornat.Al lgment 1 -
.TypeText Text:-'N 0 T A T K A'
.Typeparagraph

.Font .Size -
.Typeparagraph
12
-
-
.ParagraphFonnat .A1 lgrnnent 0
.Font.Bold False
.TypeText Text:-"Oata:" & vbTab 1 -
Format(Date. "d m.yyyy')
.Typeparagraph
.TypeText Text:-'0o:' & vbTab h 'Menedter ' b vbTab & Region
.Typeparagraph
.TypeText Text:-"Cd:" 1 vbTab h -
Appllicatlon.UserName
.Typeparagraph
.Typeparagraph
.TypeText Mesrage
.Typeparagraph
.Typeparagraph
.TypeTex: Text:-"Sprzedanm jednostek : " I vbTab h SalesNun
.~~h~aragra~h
.TypeText Text:-"Kwta:' & vbTab & -
FomttSalesPmt. "#.#O z?")
End K i t h
.
ActtveDocunerh.SaveAs F1leNae:-SaveAslame
End With
Uext i

Zniszczenie obiektu
Word@.Cult
I Rozdzial20. lnterokcje z innymi oplikocjomi
I
575
1 .
Set WardApp - Nothing

I + ~ d t h ~ r z e n lpaska
e stanu

Applica:ion.StatusBar "" -
M s g h x Records & " notatkl utwrzono I zaplsano u " & -
ihisWorkbook.Path
End Sub

i Na rysunku 20.7 zaprezentowarm dokument utworzony za pomocqprucedury MakeMemcs.


I

I
I
Dntr 5 mnrca. 1004
Do Menedzer Region1
I Ckl Radek hfeq-k

II Rysunek 20.7. Ten dokument Worda zosttil uhvorzonyza pomocg procedury acela
Ten wad jest dosepny na plycle CD-ROM dolgczonej do ksl@l. Nie naleiy jednak
urucharniad pmedury bezpaSrednio z m,.
W kodzie jest wykonywana prdba zapisu
do katalogu, w Mdrym majduje sie skoroszyt Excela.

Tworzenie powy2szego makra s k h d a b sic z kilku etap6w. Najpienx zarejestrowalem


'
w Wor&ie makro obejmujqce dtiahnia twoncnia nowcgo dokumentu, wprowadzania
i formatowania tekstu oraz zapisyvania pliku. DLiqki temu uzyskalem informacje o wia-
bciwobciach i metodach poazebnych do wykonania zadania Nastfpnie skopiowakrn
makro do rnoduh Excela z zastosowaniem konstrukcji d i t h . . . E i d With. Na pocz?&u
W e j inslrukcji pomiedzy siowami klunowymi With i End With rvprowadrilem kropke.
Oryginalne makro zawiedo na ptzyktad nastepujqg instrukcj~:
576 CzeJC V + Zoawansowane techniki m r a m o w a n i o

Instmkcjp tp modyfikowahrn w nastcpujqcy sposbb:


With WordApp
.Docunents.Add
a pozosta7e instrukcJe
End Y i t h

W m a k e , ktbre zarejestrowalern w Worakie, wystqpowalo kilka wbudowanych stalych.


Poniewat w tym przyktadzie wykorrystaiern p6he wiqzanie, rnusiajern zastilpic stale ich
rzeczywistymi warto8ciami. Wartoici te odczytalern w o h i e Immediate edytora Visuat
Basic.

Zarzqdzanie Excelem z poziomu innej aplikacji


M o h a r6wniet z a p d z a t Excelern z poziomu innej aplikacji (np. programu napisanego
w innyrn jpzyku prograrnowania lub procedury VBA w Wordsie). Mipdzy innyrni mot-
na wykonak obliczenia w Excelu i nvr6cik wynik do Worda. Obiekry Excela tworty sic
w nastqpujqcy spos6b:
m obiekt Applicat~ontapornocqfunkcji CreateObject("Exce1 .Application"),
obiekt Workbook za pomoq funkcji Createobject [ "Excel .Sheet" 1,
obiekt Chart za pomocq funkcji CreateObject('Exce1 .Chartm).

Listing 20.4 prezentuje proceduq umieszczo~w module VBA dokurnentu Worda 2003.
Na podstilwie istniejyego skoroszytu procedura twony obiekt Excela Worksheet, ktorego
nanva syrnboliczna to Excel .Sheet.

Listlng 20.4. Twmenie arkusza Excela w dokumencle Worda


Sub HakeExcelChart ( 1
Dm XLSheet As Object
Dim S t a r t V a l . PctChange
D l m Wbmk As Strtng

'
StartVal --
Zapytanie o dane wejiciowe
InputBox("Wartost poczqttowa?")
PctChange
PctChange - InputBox("Procentowa miana?")
PctChange / 100

- -
Utwrzenie obiektu Sheet
Mboaa: ThisDocument.Path 8 "\progmzy.xls'
Set XLSheet GetObject[Wbook. 'Excel .Sheet") .Activesheet

--
' Lmieszczenle w a r t o i c i w arkuszu
XLSheet .Range('WartoscPocz") S t a r t V a l
XLSheet .Range( 'PctZmlana') PctChange
Xisheet .Calculate

--
' Vstarienie naglhka strony
blect1on.Font.Size 14
Selection.Font.Bold True
Rozdzial20. * Interakcjez innyrni aplikacjami 577

~ ~ y 'd
Selectton.TypeText " n l e ~ l wzrost:
Fomt(PctChange. "0.0%")
-
Selection .Typeparagraph
Selection .Typeparagraph
'
Skopiowanie danych z arkusza 1 wklejenie i c h do dokumentu
XLSheet . Range( "Dane") . m y
Selectlon.Paste

Skopiowanie wykresu 1 witlejenie go do dokunentu


XLSheet .ChartObjects(l) .Copy
Selection. PasteSpecial -
Link:-False. -
DataType:-wdPasteMetafllePicture. -
Placement : r d i n L l n e . D1splayAslcon:-Fa1 se

-
Znl szczente obiektu
Set XLSheet Nothing
End Sub

Skoroszyt wykonysfany w rnakrzc pokatano na rysunku 20.8. Procedura Ha keExcel Chart


wvy8wietla pytanie do utytkownika o dwie m d c i i wstawiaje do arkusza.

Rysunek 20.8.
Ten arkusz
wbwtuJe
procedura VBA
w Wordzie

I Przeliczenie arkusza powoduje aktualizacjq wykresu. Dane wraz z wykresem q nastppnie


kopiowane z obiektu Excela i wklejnne do nowego dokumentu. Wyniki pokazano na ry-
sunku 20.9.

1 Wysylanie spersonalizowanych wiodomoSci e-mail


I z wykorzysfaniem Outlooka
W p q k h k i e mpmmtowanym w tym podrozrtdale iadunomirujp sesjp aummatyzacji
z wykonystaniem Ourlooka. Na rysunku 20.10. pokazano arkusz zawierajqcy dane.wy-
konystane w wiadomdciach email: namisko, adres d l o m kwo@ premii. hocedura
z listingu 20.5 przetwarza w rytli wiersbe w arkuau, pobim dane i twomy indywidualnq
wiadornoSC (zapisaq w miennej Msg).
578 C z g k V + Zaawansowane technikl prograrnowania

Rysunek 20.9. Procedura VBA wykonystde Excela do uiworzenia tego dokumentu

Ryrunek 20.10.
Informa@ zapisane
w tyrn arkuszu
sq wykonyswane
w wiadomodciaeh
m a i l programu
Outlook Express
Usting 20.5. b+)sybnie wlaUomJcl email Outlooka z pozlomu Exceia
Sub SendEmai1( 1
Wykorzystanie wczesnga wipanla - w g a odwtania do biblioteki miektbw
Outlooka
D i m OutlookPpp As 0utlook.Agplicatlon
D i m M I t m As Outlook.tiailItem
Dim c e l l As Range
Dlm Subj As String
Dim EmatlMdr As Strlnq
Dim Recipient As String
Dim Bcnus As String
Dim Msg A5 String

-
U*rorzenie oblektu Outlooks
Set W l o o k & ~ p NRI &itloot .&PIIcation

' Przetwarzanie wierszy w pet11


For Each c e l l I n Colunms('8') .Cel Is.~cial@lls(xl~CellTypeConstants)
Rozdzial20. + lnterakcje z innymi aplikacjami 579

I f cell.Value Like "*@*"Then


- -
Pobranie danych
Subj "Roczna premia"

- -
Recipient c e l l .OffsetlO, -1) .Value
Emai lAddr cell .Value
Bonus Formt(cell.Offset(0. l).Value. "0.000 21")

--
Utworzenie tekstu w i a d m i c i
Msg "Szanwny(a) Pan(i) ' 8 Recipient 6 vbCrCf & vbCrLf

--
Msg Msg 8 "2 przy:emno$cia zawiadarniarn. ze Panaci) raczna prmia
Msg Msg 8 Bonus & vbCrLf & vbCrL:
WyCGSi"

-
Msg Msg 8 "Wieslaw RbZahski" A vhCrLf
Msg Hsg & "Prezes zarztdu"

-
Utworzenie wiadomofci e-mail 1 j e j nys?an'o
Set MItm CutlookApp.CreateIterntolYa?l [tern:
With MItm
-
EmailAddr
.To
.Subject
.Body Hsg
.Send
-
Subj

End Ui tb,
End If
Next
End Sub

W tym pnykkdzie wykonystano wczesne wiqzanie, a zatem jest wymagane odwolanie


do biblioteki obiektbw Outlmkrr. Z w r k m y uwagq, te wykotzysrano dwa obiekty: Out ? ooq
oraz Ma i1 Itern. Obiekt Outlook jest tworzony za pomoq nastepujqcej jnstrukcji:
-
Set Outlookh~p NR* 0~100k.Applic?tlvn

Obiekt M a i l ltem jest hvonony za pomocqnastqpujqcej insmkcji:


Set MItm - Outlwkhpp.treateItem(olMailItes)

Kod ustawia wtaiciwofci To, Subject oraz Body, a nastepnie wykonystuje metode Senc
w celu wyslania wiadomofci.

Ten m t a d jest do*pny na plycie CDROM d-zonej do k s i a i . Aby go uruchomid.


tmeba r n k L lainstalowany program Microsoft Outlook.

W pcdrozdziatach .Wysylanle wiadomofci ernall z zalqcznikami z poziomu Excera"


oraz . Z a s t o m d s rnetody ScndKeys" zostanq opisane inne rposo!y wysy+nn!a
wladomofci *mail za pornocq Excela.

Dziatania z obiektami danych ActiveX (ADO)


ADO (ang. ActiveY Data Objects) jest modelem obiektbw urnozliwiaj~cymuzyskanie
dostepu do danych zapisanych w rdhych formatach baz danych. Co bardm istome,
metodoiogia ta urnotliwia wykonystanie jednego rnodelu obiekt6w dla wszystkich baz
danych. Obecnie jest to preferowana rnetoda dost~pudodanych, ktbrej nie nale2y myIic
-
z DAO (ang. Datn Access Objects obiekty dostqpu do danych).
I
i
- Rozdziot 20. lnterakcjez innymi aplikocjarrd 581
!

-
Src = Src & "and Oddzial -
Src "SELECT FROM Budtet WHERE Pozycja
'Pmeryka Pln"
-
'Dziertawa' '

.Open Source:-Src. ActiveConnect ion :-Connection

Zapisanie n a m p-57
-
For Col 0 To Recordset .Flelds.Caunt
Range("Al').Offset(O. Cal).Value --- 1

Recordset .Flelds(Col) .Name


Next

Zap1sanie zestawu rekordbu


.
Range("A1") .Offset(l 0) .CopyFrwnRecordset Recordset
End With
-
Set Recordset Nothing

-
Connection. Close
Set Connection Nothing
End Sub

' a
M
Ten pnyklad wraz z bazq danych Accessa jest dostepny na plycle CDROM doiqczonej
do kslqtki.

Wysytanie wiadomof ci e-mail


z zaiqcznikami z poziomu Excela
W Excelu istniejq polecenia urnotliwiajqce wysyhie arlcuszy lub skoroszytdw za po-
m o q poczly elektronicmej. Onywifcie motna wykorzystek j ~ z y kVBA w celu auto-
matyzacji tego typu zadah. Proccdura zaprezentowana ponidej wysyk aktywny skoro-
szyt (jako zalqcznik) pod adres jankowa/ski@aknrdomena.pl. Ternatem wiadomofci
jest tekst M4 skoroszyt.
Sub Sen&rkbaak()
ActiveWorkbook .SendMail 'jankaral5kl@jakasdanena.p1". "Mjskoroszyt"
End Sub

Aby z &ego skoroszytu wysM elelmonicznq tylko jedm a r k - naleky skopiowad


arkusz do nowego (tymczasowego) skoroszytu, przes+aCgo jako zafqcmik, a nastqpnie
zardqf plik tymnasowy. Ponitej zaprezentowano przykhd wyswyslania arkusza Arkuszl
z aktywnego skoroszytu.
Sub Sendasheet(
ActIvMrkboal: .Worksheets('Arkuul') .Copy
ActlveWorkbmk.SendHai1 "jankowal skl@Jakasdonena.pl". "ndj arkusz"
Acttveliorkbmk .Close Fa1se
End Sub

W popnednim p q h d i i e plik b&it mial domyflq nazwc skorosytu [np. Shro-


~ryrfxls).Aby nadaC z a t w o w i skladajqmu sip z pojedynczego arkusza bardziej
opisowa rimy, naleky zapisat tymczasowy skomzyt i usunqh go po wyshiu. Ponitsza
pmccdura powaduje zapisanic arkusra A r k 1 do pliku o nazwie mdj plikxls. Po wy-
s h i u tymcmowtgo skoroszytujako &cmika e-mail wykonystywana jest instrukcja
K i 11 w celu usunipcia pliku.
1
582 Czeft V Z a c r w o n s o w a n e techniki progmrnowanio I

Sub SendOneShcet( )

-
Dim Filename k String
F t l e n m "m6j p l i k . x l s "
ActlveWortbook .Worksheets("Arkuszl") .Copy
Act IveUorkbwk .SaveAs Filename
ActlveWorkbook.Sendtiai1 'jankowalstt@jakasdenena.cam". 'M6j arkusr'
ActIveWorkbook .Close False
Kt11 Filename
End Sub

Zastosowanie metody SendKeys


Nie wsystkie aplikacje obslugujq automatyzacjq. W niekt6ryeh przypadkach pewnymi
elementami aplikacji mo2na jednak zxqdzat nawet wtedy, kiedy nie obshguje ona auto-
matyzacji. ~ a ' ~ o r n & m e t o dExcela
~ ~ e n d ~ e moim
ys +sytat do aplikacjici&i znak6w.
symulujqce dziatania utytkownika.

Chocia2 wydaje sip, t e rastosowanie metody SendKeysjest dobrym ronviqzaniern, latwo


. wiele ~roblern6w.Potencialna trudnost mote
motna sie orzekonat. 55e wiate sie. z tvm
polegaC ;a' koniecznkci &korzystywania okkilonego interfejsu -ubtkownika. Jeteli
w nowsaej wersji prograrnu, do kt6rego wysylamy ciagi znakbw, zrnieni siq interfejs
utytkownika, aplikacja przestanie dzialat. Z tego powodu z metody SendKeys nalety
korzystak tylko w ostatecmoSci.

PoniZej zamieszczono bardzo prosty przyklad. Pmcedura uruchamia windowsowy Kal-


kulutor i ustawia jego tryb na naukowy, czyli wykonuje polecenie Widok/Nmko~y:
Sub TestKeys()
h e l l 'calc.Exe". vbNonnalF~us
AppActivate 'Calculator'
Apglication.SendKeys "Xvs". True
End Sub

Kod wysyla kombinacjg klawiszy Aft+ Y (znak pmcenta reprezentuje klawisz Aft), a po
niej klawisz S. Opis metody SendKeys majduje sig w systernie pomocy Excela %tam
informacje na temat sposobu p m y l a n i a niestandardowych ciag&w klawiszy, jak na
przyktad kombinacji z klawiszami Alt lub Ctrl.

Listing 20.7 pokazuje bardziej skomplikowanq proceduq, w kt6rej wyk-tano rnetodq


SendKeys. Proccdura p n ~ p o m i n azaprezcntowany wczeSniej przyklad, w kt6rym wyko-
nysta& OIrtImkn. ~&tni& polega ;a tym, te & tworzym; wiadomofci dla prograrnu
Outlook Express -klienta poczly, ktdry nic obshguje automatyzacji.

Llstlng 20.7. Zastosowanle m e t e SendKeys do nysylania wiadornogcla pornoeq pmgramu


Outlook Express
Sub Send~mallO
Dim c e l l As Range
Dim Subj As String
D i m E m t l M d r As String
Dim k i p l e n t As String
D i m Bonus As String
Rozdziat 20. lnterokcje z innymi oplikocjami 583

Dim Msg As String


Dim HLink As String
For Each c e l l I n Columns("B") .Cells.SpecialCells(xlCel1TypeConstants)
I f cell.Va1ue Like 'Q*" Then

- -
Pobranle danych
Subj 'Roczna p r m i a "

- -
Recipient c e l l .Offset(O. -1).Value
EmailAddr c e l l .Value
b n u s F o m t ( c e l 1 .Offset(O. 1) .Value. "0.000 z l " )

--
Utworzenie wladomobcl
Msg 'Szanowny(a) Pan(i) " & Recipient & "ZOA"
Msg Msg & "40A" & "2 p r z y j m o s c i a zawiadamiam.

--
Msg = Msg & "Ze Pana(i ) roczna premia wynosi "
Msg Msg & Banus & '. XOA"

-
Msg Msg & "ZOA" & "Wieslaw R6tadski'
Msg Msg & "XOA" & "Prezes zarzadu"

---
Utworzenie hiperlacza
HLink "mailto:" & EmailAddr & "?"
HLink HLink & "subject-' 8 Subj & '&"
HLink HLink & "body-" & Msg

Uyslante wladamSc1
ActiveWorkhook.FollowHyperlink HLir,k
Applicatton.nait (Naw + iimeYalue("3:00:02'1)
SendKeys "Xs". True
End If
Next
End Sub

N a r y s u n k u 20.12. pokazano arkusz zawierajqcy dane wykorzystane w w i a d o m o k i a c h


e-mail: nazwisko, a d n s e-mail oraz k w o t q prernii.

Rysunek 20.12.
lnfomacje zapisane
w tym arkuszu
53 wykorystpane
w w/adornoSuUach
m a i l programu
~utlookExpress
W p r o c e d w e SendGmi 1 zalotono, 2e Ou1look Express jest domySlnym k l i e n t e m pcm.
Proosdura ~rzehKanaw ~etli .
. wiersze w arkuszu i twm wiadomdt (zaoisana
. . w miennei
Msg), D o oiwarcia okna Nowo windomoi6 prograrnu ~ u k m kErpress ~ y k o ~ s t y w a jest
na
metoda Fol IckMyperl ink. W pnypadku pierwszega rekordu hiperbm b@ie nastvujqce:
m a i l to:jjasinskihjakasdmena .pl?subject-Rocm premla
Ibcdy-Szancwny(a) ? a n ( i l Jan Jaslhski%OAXDAZ przyjemno5clq zawiadaniam.
l e Pans( i) mczna premia wynosi 2 000 z?. XOAXOPWaldemar RbiafisklfOkPrezes zarzqdu

Sekwencja znakdw %OA reprezentuje mak kolica wienza.


584 CzgJ6 V + Zaawansowone techniki prograrnowonia

Procedura zabzyrnuje sic na dwie sekundy, a potem za poma'q metody SendKeys wysyla
polccenie Alt+S, ktbre umicszcza wiadomolt w skrzynce nadawczej Outlooks. Przenva
jest potrzebna, aby uzyskat pewnolt, t e w czasic wysylania kombinacji klawiszy wia-
domoSC znajduje sit na ekranie. Opbfnienie h-zeba dostosowat do indywidualnych wla-
sciwoSci systemu. Czasami wystarczy opjhienie jednosekundowe, a innym razem b@zie
uzeba zastosowat opbinienie pmkraczajqce dwie sekundy.

W prqpadku zastosowania tej techniki n a l e g uwzglednit ograniczenie dhgolci hi-


perlqcza. ktbre wynosi okoto 730 makbw. Z tego powodu motna jq wykorzystat tylko
dla kr6tkich wiadomoici. Jednq z wiadomolci wySwietlan&w oknie progtarnu Outlook
Express pokazano na rysunku 20.13.

Rysunek 20.13.
W tej wiadornoScl
progtamu
Outlook &press
wykonystano dane
zauisane w arkuszu
Tworzenie
i wykorzystanie dodatk6w
Jednq z wlaSciwoSci Excela, kt6ra najbardziej pnydajc siq programistom, jest motliwdf
tworzmia dodatkdw. Wprowadrenie dodatkbw sprawia, t e aplikacje stajq sic bardziej
profesjonalne. Ponadto niekiedy dodatki majq przewagp nad standardowyrni plikarni
skorosqt6w. W tym mzdziale om6wiq kornici wynikajqce ze stosowania dodatkdw otaz
pokat9, jak tworzyk wlasne dodatki, poslugujqc sip wyltpznie wbudowanyrni narzc-
dziami Excela.

Czym sq dodatki?
Og6lnie nta b i w dodatki q mechizmami, kt& wzbagacajqarkurze o nowe wlahi-
wofci funkcjonalne. Na przyktad pakiet Annbsis ToolPak, jeden z najpopulamiejszych
dodatk6w dostarczany z Excelem, umotliwia wykonywanie obliczeri statystycznych
oraz analitycmych, kt6iych standadowo nie ma w Excelu. N i e b dodatki (m.in. daSnie
, ToolPnkl dosarctaia.hnkcii
Analvsic ., arkusza ktbre m o h a stosowaf w formulach. Nowe
wl&ciwoSci nvykle d o b m integrujq sip z oryginalnym interkjscm i utytkownik odnosi
m e n i e , t e q czeciq pmgramu. Cechp te okreSla siq jakoprzevoczystq integ~acje.

Por6wnunle dodatku ze standardowym skoroszytem


M y utykownik Excela majacy odpowicdni~wiedzq potrafi utworzy6 dodatek na pad-
stawie s k o r o s m XLS.Nie sq do tego pobzdme tadne dodatkowe programy ani narqdzia
Na dodatki m o h a pneksztalcik wszystkie pliki XLS, ale nie wszystkie pliki do tego siq
nadajq. Dodatck Excela niewiele r d h i sit od skoroszytu. R62nice wymienimo ponitej.
WlaSciwoSC tsAddin obicktu ThlsWorkbwk ma wartog True. Dla skorosyt6w
ta wMciwdC ma wartof6 False.
Okno skoroszyhr jest uhytc w iaki s e b , tc nie mdma go odlay5 za pomocp
m l d a ObdOdkryt h a u a to. nic mom wy4wictliC arkuszy lub wykreshw
dodatku bez lutycialcadu, kt6ry kopiuje arkusz do standardowtgo skoraszytu.
Dodatki nie n a l e a d o k o l h i i Workbooks. Naltta natorniast do kolekcji Addins.
Mo2na jednak G k a C dost& do dodatku za poi&lnictwern kolekcji iorkbooks
-
(zobaa plmkt ,Qliki XLA przynaletnoSC do kolekcji zpoziomu W A S w ' dalszej
586 CzeiC V Zaawansowane techniki programowania

W Dodatki mokna instalowat iodinstalowywaC popnet wybranie polccenia Narqdzid


Dodatki. Po zainstalowaniu dodatki sqdostepne dla wszystkich sesji Excela.
Okno dialogowe Makro (wywolywane poleceniem Narqdzia/MakrdMakra)
nie wyswietla nazw makr zapisanych w dodatku.
lndywidualne funkcje arkusza zapisane w dodatku rnotna stosowaf w fonnulach
bez koniecznoici poprzedzania nazwy fhnkcji nazwq pliku iibdtowego skoroszytu.

,:*WU
a A*.
OomySlnle dodatkl maJqrozszerzenie .xla. Nle jest to obowiazkowe. Plikowi dodatku
rnotna nadaC dowolne rozszerzenie.

Po co twony siq dodatki?


Aplikacie XLS motna przeksztalcif na dodatki w celu:
ogronimenia dostepu do kodu i arhszy. KKdy rozpowszechniamy aplikacje
w formie dodatku i zabezpieczymy pmjekt VBA haslem, u2ytkownicy nie btdq
rnogli przeglqdat lub modyfikowaf arkuszy, ani kodu VBA, kt6ry jest z nimi
zwiwny. DlategojeSli w aplikacji u2ylidmy wiasnych m t w i p l i , przeksztakenie
jcj na postat dodatku utrudni dostqp do kodu;
zapobieteniapomylkom. Jetcli utytkownik zaladuje aplikacjpjako dodatek.
nie bqdq widocme jego arkuse. Dziqki temu istnieje mniejsm prawdopodobiedstwo
wpmwadzenia w blqd pocqtkujqcych utytkownik6w. W odr6tnieniu od ukrytego
skoroszytuXLS, dodatku nie motna odkryk;
uprosfcrmia darrepu dofinkcji arkusza. Funkcje arkusza definiowane w dodatku
nie wymagajq stosowania kwalifikatora nanvy skoroszytu. JeSli na przyklad
zapiszemy funkcjp utytkownika o nanvie MOVAVG w skoroszycie Newftcncs.x~s.
utycie tej funkcji w innyrn skoroszycie bqdzie wymagato zastosowania instrukcji
o nastqpujqcej skladni:

Natorniast j e i l i funkcjp zapisano jako dodatek, wystarczy go otworzyd.


aby skorzystaf z instrukcji o proststej skhdni, w ktbrej nie trzeba w t
odwojania do pliku:

ufatwieninutytkownikom dosteplc do wlafchvaici aplikncji. Po zidcntyfikowaniu


- - Dodatki wraz
pokdenia dodatku m t a n i e on urnieszczony w oknie dialogowvm
k przyjamq nanvq i opisem dzialania;
uqvskaniu lepszej kontroli nad Iadowaniem aplikacji. Dodatki motna otwierad.
autornatycznie przy uruchomieniu Excela, niemletnie od katalogu, w ktdrym
wstaly zapisane;
uniknipia wySwetlania~rmisystemuyrhpodda~romykania. Podczas zamykania
dodatku nie jest e w i e t l a n e okno dialogowe z pytaniern o zapisanie zmian.
Rozdziai 21. Tworzenie i wykorzystanie d o d a t k b w 587

DadatW COM
Excel obs)uguje takie dodatkl COM (ang. Component Object Model). Plikl te rnajq rozszerzenia .dl/
lub .exe. Dodatek COM m t n a naplsad w taki sposdb, i e W z i e ddataC z wszystkirni aplikacjami
pakietu Office,ktdre obsbgujq dodatkl. Poniewat kod dodatkdw COMjest skornpilowany, stosujac
je, uzyskuje sie wiekszy podom bezpieczefistwa. W odrdinieniu od dodatk6w XLA, dodatki COM nie
mogq zawierad. arkuszy lub hykresdw Exceia. Dodatki COM rnotna twortyd za pomocq jezyk6w
Visual Basic 5 (lub wersji nowszych). Visual Basic .NET lub za pomocq pakietu Office w wydaniu
Developer. Doktadne omdwienie tworzenia procedur COM wykracza poza ramy niniejszej ksiqiki.

&
"* Katdy tworzony dodatek zawiera rnakra. ale w rnomencie otwlerania skoroszytu
(83, (w przypadku ustawienla Sredniego poziornu zabezpleczefi) nie jest wyswietlane
ostrzetenie o rnakrach. Jeteli zainstalujemy dodatek, uiytkownik nie zobaczy komunikatu
ostrzeienia, o ile dqczyrny opcj? Ufaj wszptkim zainstalowanymdodatkom iszablonorn.
Opcje tq motna znalefC w zaktadce Zaufani wydawcy. Aby uzyskaC dostep do tego
okna, naleiy wybraC polecenie Namdzia/Makro/Zabezpieczenia.

Menedier dodatk6w Excela


Najlepszym sposobern tadowania i zamykania dodatkdw jest wykorzystanie okna diaiogo-
wego Dodatki w Excelu. Wybranie polecenia Narzed~iCJD~odatki powoduje wyswietlenie
okna dialogowego podobnego do tego, ktbre pokazano na rysunku 21.1. Na rozwijanej
- - - sic. wsrystkie nazwy manvch dodatk6w. Zamaczenie oola wvboru obok
idcie znaiduir
nanvy dodatku wskazuje, t e okriilony bodatek jest otwarty. ~ t w i e r a n i ei4zarnykanie
dodatkow w tyrn oknie dialogowym wykonuje siq poprzez zaznaczanie i anulowanie
zamaczenia p61 wyboru.

Rysunek 21.1.
Okno dlalogowe
Dodatki

Poczawszv od Excela 2002. w oknie dialoeowvm Dddatklznaiduie sie ~.n o w, armcisk


~ - - , ~ -
~utomafy&a, za pornoc? ktdrego rnoinainstal&aC dodatk; COM.Chociat dodatki
COM by4y obstughvane jvt w Excelu 2000.nie istnid.bezposrednl sposdb ich instalowania.

WiekszofC dodatk6w rnoina t a m otwleraC .?a pornocq polecenia Plik/Otw6m.


Poniewat jednak dodatdt nigdy nie b g z i e ahywnyrn skoroszytem, nie motna go
zamkng za pomocq polecenia Plik,Zamknij. Dodatek motna usunqC albo popner
zamknigcie Excela ijego ponowne zatadowanle, albo paprzez uruchamienie
odpowiedniego kodu VBA, jak na przyklad:

Ohvarcle dodatku za pomocq palecenla PlIk/Otwdn pormduje otwarcie pliku.


ale po Wonaniu te] czynnojci dodatek nie jest oficjalnie zainstalowany.
588 CzefC V Zaowansowane techniki programowania

Otwarcie dodatku czasami nie powoduje tadnych widocznych m i a n w Excelu. Jednak


niemal zawsze zmienia sic w pewien spos6b interfejs utytkownika: wyiwietla sip nowe
polecenie menu, pojawia sip jedna lub kilka nowych pozycji w menu albo pasek narzp-
dzi. Na przykhd ohvarcie dodatku Analvsis ToolPak powoduje dodanie nowej pozycji
w menu Nac&ia: Analiza danych. Otwarcie dodatku Narq&ia do waluty euro powo-
duje pojawienie sic nowego paska narzcdzi: EuroVnlue. J m l i w dodatku znajdujqsiq jedy-
nie nowe hnkcje utytkownika, pojawiqsip one w oknie dialogowym WsYsrow/Funkcja.

Tworzenie dodatk6w
Jak wspomniatern wczelniej, dodatek motna utworzyC z dowolnego skoroszytu, ale na
przykhd skoroszyt, ktbry zawiera tylko arkusze, niabyt sip do tego nadaje, poniewat po
przeksztalceniu arkusze bedq u m e . Motna jednak napisat kod. ktory skopiuje wsystkie
c&ci arkuszy z dodatku do widocmego skoroszym. Najwigej moma zyskat. przeksztai-
-
cajqc na dodatek skoroszyt. kt6ry zawiera makra szczegblnie makra uniwenalne.
Utworzenie dodatku na podstawie skoroszytu jest proste. Czynnoif tp opisuje ponitsza
procedura:
1. U w 6 n aplikacjp i s p r a w e czy wszystko dziak Nie zapomnij, 2e nalety zapewnit
spos6b wykonywania makra lub rnakr w dodatku. W tym celu m o a a utworzyf
nowe menu, nowq pogcje w menu albo pasek narzwi. Szczeg&owe inforrnacje
o twomniu indywidualnych menu majdujq siq w rozdziale 23., natorniast
w rozdziale 22. opisano sposbb tworzenia indywidualnych pask6w narz*i.
2. Przetestuj aplikacjg wykonujqc jq w czasie, kiedy jcst akrywny inny skoroszyt.
Z uwagi na to, t e dodatek nigdy nie jest aktywnym skoroszytem, w e to symulacja !
dziatania aplikacji po przeksztatceniu na dodatek. !
I
3. Uaktywnij edytor Visual Basic i w y b i n skoroszyt w oknie Project. Wybierz
polecenie Tools/xx~Properties, a nastqpnie kliknij zakladkp Protection. Zaznacz
pole wyboru Lock Projecrfor Viewing i wprowadi haslo (dwukromie). Kliknij OK.
Ten krok jcst wymagany tylko wtedy, kiedy chcesz zablokowaf mokliwosC
przcglqdania m a k lub modyfiowania okien UserForn przez innych ~tytkownik6w.
i
4. Ponownie uj-i Excel i w y b i m polecenie P l i ~ a C c i w d c ikliknij
Po&umowanie i wprowadk nvipzky, opisowy tytui w polu tytuh oraz d h z y
,

opis w polu Komentarze. Ten k o k nie jest wymagany, ale dzipki niernu koqstanie
z dodatku jest latwiejsze, gdyt w oknie dialogowym Dodutki wygwietla sie
zakladke
i
opisowy tekst.

Kilka d6w o bszpleczedstwie


i
Microsoft nigdy nie hvierdzif, ie za pornocq Excela moha twm$ aplikacje, Mdrych kod tr6dtowy
jest bezpiecmy. Mechanim zabezpeczenia hadern d e p n y w Excelu wystarcza, aby uniemob'i6
okazjonalnym uiytkownikm uzyrkanle dostgpu do tych czqScl aplikacji, Mdre majq byE ukryte.
W Excelu 2002 i wersjach pbfniejszych zastosowano lepsze mechanlzmy zabezpleczefi nit w wer-
sjach wczednle]szych. ale Wprowadzone hasta d o ~ f - t a mrnoina ztam&. Excel nie jest najlepszq
platforme programowania dla tych programistdw, Mdrzy chcq rnle6 stuprocentowq pewnoS6. te
nikt nie dostanie slg da ich kodu.
Rozdziot 21. + Tworzenie i wykorzystonie dodatkdw 589

5. Wybierz polecenie PIiWZopisz jako. W oknie dialogowym Zapisywanie jako


na ronvijanej IiLie Z o p k jnko &p wybicrz pozycjp Dodatekprogrcrmu Microsoft
OBce Excel.
6. Kliknij Zapisz. Zostanie zapisana kopia skoroszytu (zrozszemiem .xla),
a oryginalny skoroszyt X U pozostanie otwarty.
Skoroszyt przeksrtatcafly na dodatek musi zawierd co najmnlej jeden arkusz. JeJli

-
na pzyklad skoroszyt zawlera wytgCznie arkusze wykresdw IUD ahusze dlalog-
Excela 5/95, opcja Dodatek prugrarnu MicrosoffOMce heel w oknie dialogowym
ZapisywanieJako nle pojawl sle.Opcja ta bedzle aktywna tylko wtedy, gdy polecenie
Zapisz jako zostanle wybrane przy aktywnym ark.uszu.

Przyktadowy dodatek
W tym podrozdziale orn6wip czynnoici, jakie nalety wykonat, aby utworzyt W e c z n y
dodatek. W prykladzie wykorzysmo mrqdzie Operacje reksrowe opisane w rozdziale 16.
Wersja XLS naredzla Operacje tekstowe jest dosepna na W e CD-ROM dotqczonej
do ksiwi. PlIk ten mobla wykonystat?w celu utwomnla opisanego ponitcj dodatku.

Konfiguracja skoroszytu dla pnykladowego dodatku


W ryrn prrykladzie hdziemy postugiwat siq skoroszytem, ktbry zostal wczeSniej utwo-
rzony i pnetestowany. Skoroszyt sklada sip z nastppujqcych kornponentdw:
w arkusza o nanvie Arkuszl, wykonystywanego do u q m y w a n i a kopii oryginalnych
danych, ktbre m o h a odtwonye, jeteli utytkownik zechce cofna! operacjp,
8 okna UserFonn o nazwie Userfoml, shZqego jako zasadniczy i h j s W o m i k a
(modul kodu dla formulana UserForm zawiera kilka procedur obslugi zdarzen),
m modulu VBA o nanvie Modul el. kt6ry zawiera kilka procedur, m i d z y innymi
procedw wy5wietlajqcqokno UserFonnl,
m o d h kodu ThisWorktKIok zawierajqcego dwie procedury obslugi zdaneh
(Workbook-Open oraz Workbook-Befordlose) do twonenia i usuwania poycji
z menu Narzgdzia.
Opis dniatania na- Operaye tekslowe znajdule $19 w rozdzlale 16.

Testowanie skoroszytu
uiytego do utworzenia przyktadowego dodatku
Prred pNksztaIcmiem skoroszytu na dodatek nale2-y go pmestowat. Aby zasymulo-
wat d z i a h i e skomszytu jako dodatku. nalety go testowat wtcdy, gdy inny skorosw
jest aktywny. Nale* parniptat, t e dodatek nigdy nie jest aktywnym skorosrytem, zatem
takie postqxwanie pomote zlokatizowaf potencjalne problemy, jnk na pnyktad nie-
prawidtowe odwolania do obiektu Thisklarkboct.
590 Cz46 V Zaawansowone techniki programowania

Aby wypr6bowaC w(aSciw&i n t q d z h Opsrucje reksfowe,nalety otwonyC nowy skoro-


szyt i wykonat wszystkie czynnobi, jakic pmyjdqdo
. . glowy, aby spowodowat bhd. Bedzie
jeszcze lepiej, jdli ktof, kt0 nie m a aplikacji, podejrnie sie pr6by spowodowania awarii.

Wprowadzanie oplsu dla przykladowego dodatku


Osobifcie zalecam wprowadzanic opis6w dodatkbw, chot ta czynnog nie jest obowizgko-
wa. Nalety wybraf polecenie PliMWhichvoJci, co spowoduje otwarcie o h a dialogowego
Wi~ciwos'ci.Nasqpnie nalety kliknqt zakladk~Podrstrnowanie, co spowoduje wyfwie-
tlenie okna dialogowego pokazanego na rysunku 21.2.

Rysunek 21.2.
Za pomocq
okna dialogowego
WlaSciwoSci motna
wprowadzid opis
twononego dodatku

W polu Tyful nalety wprowadzid tytuf dodatku. Ten tekst wyfwiatli sit w oknie dialogo-
wym Dodarki. W polu Komerrlarze nakty wprowadzit opis, ktbry wyiwietli siq w dolnej
cqSci okna Dodatki, jeteli dodatek wstanie wybrany na lifcie.

Uiworzenie dodatku
Aby uhvorzyt dodatek, wykonaj nas$pujqce czynnofci:
1. Uaktywrrij edytor Visual Basic i w oknie Project wybien skoroszyt, kt6ry chcesz
przeksztatcif na dodatek.
2. Wybierz polefmie Debug/Compile. Ta czynnoW wyrnusza kompilacje kodu
VBA o m pozwala m a l e i t i poprawit bfqdy syntaktycme. Podczas zapisywania
skoroszytu jako dodatku, Excel utworzy dodatek nawet wtedy, gdy zawiera bir;dy
syntaktycne.
3. Wybierz polecenie TmWm Properrfes,aby wySwitlit okno dialogowe wlafciwoSci
projektu (mrepnzentuje nazwe projektu). Kliknij zaktadke Genmd i wprowadt
now4 nazvq projektu. DomySlnic wsqstkim projehom VB jest nadawana nazwa
VBProjecr. W pfemtowanym pnyktadzie name projektu zmieniono
na OperacjeTekFroweVBA.Ta czynnoic nie jest obowiqzkowa, ale zalecana.
Rozdzial21. + Twonenie iwkorzvstonie dodatkbw 59 1

Menedtsr dadatk6w Excela


Dostgp do rnenedtera dodatkdw motna uzyska6 poprzez wybranle polecenia Nan@ia/Dodatki.
Spowoduje to WySwietlenie okna dlalogowego Uodatki. Zaznaczenie pola wyboru obok namy dodatku
oznacza, t e jest on otwarty.
Pos)uguje$ slg poJ@am leLyka VB4, m t n a by powleddd, 2e w oknie dlalogovrym Matlo' wySwie-
tlajq sie wtaSciwoSc1 T l t l e wszystkich obiektdw AddIn naletecych do kolekcji AMIns. Wszystkie
dcdatki, dla kt6rych zmaczono pole +ON, majq ustawionq wtakiwaSC I n s t a i l e d na wartoSd -rue.
Dodatek motna zainstalowaC, zaznauajqc pole wyboru obok jego namy. Podobnie m o ~ za b
mkn* otwarty dodatek, anulujqc zamaczenie wySwietlanego pola wyboru. Aby dodaC dodatek
do listy, nalej skorzystad z pnyclsku Pneglqdaj w celu odszukania piiku. CornySlnie w oknie
dialogowym Dodatkl rnotna przeglqdat plikl nastepujqcych typ6w:
W X U - dodatek W o n o n y na podstawie pli ku XLS;
XLL - samoddelny, skompilowany plik DLL
K l l k n l ~ i eprzyclsku Avtomatyrscja (dostepfly tylko w Excelu 2002 i wersjach nowszych) pozwala
na przeglgdanle dodatk6w COM. Warto mr6ciC uwage, i e w oknle dialogowym Serwery automa
tyzacji wygwietla sie wiele plik6w. a llsta ta nie ogranlcza sie do dodatkdw COlM dziatajqcych
w Excelu.
Plik dodatku moina wprowadzid do kolekcji AddIns, uiywajqc metody Add. Za pornocq kodu YBA
nle m o h a jednak usunqc? dodatku z tlsty. Motna t e l otworzyd dodatek, ustawiajqc wtaSciwoS6
Installed oblektu M C l n na wartog True. Ustawienie tej wtadciwo5ci na wartoSC Faise spowoduje
zarnkniwle dodatku.
Menedter dodatkdw repisuje Stan instalacji dodatk6w w rejestm Windows w momencie zarnykb
nia Excela. Dziqkl ternu wszystkle zainstalowane dodatki sq autornatycznie ohvlerane przy jego
nastepnym uruchomieniu.

4. W oknie dialogowym Project Properties kliknij zakladke Pratection. Zamacz


pole w y h m Lock Project for Viewing,a nastqpnie wprowadt hasto (dwukrotnie).
N a razic kod b@zie motna ptzeglqdab bcz podawania hasla. Zabezpieczenie
zacmie obowiqzywat od nastppnego otwarcia pliku. Kliknij OK. l e t e l i nie chcesz
zabezpieczad projektu, motesz pominqb ten k r o k
5. Zapisz skoroszyt, utywajqc rozszerzenia .xis. Ten k o k nie jest obowiqzkowy.
ale dzieki n i m u uzyskasz kopip zapasowqpliku X U w pliku XLS.
6. Wybierz polecenie Plik/Zapiszjako. Wy4wietli siq okno dialogowe Zupisywanie
jako.
7. N a ronvijanej lidcie Zapin jako typ wybierz pozycje Dadatekprogramu
Micros@ O j l e Excel.
a. Kliknij 2apiF-r.Zostanie utworzony nowy dodatkk oryginalna wersja XLS
potostanie otwarta.

Dodatki moms u m i e k i f w dowolnym katalogu DomyStnie Excel proponuje nast~pujacy


katalog:
592 Czeft V Zaawansowane techniki programowanio

lnstalowanie dodatku
Aby uniknqb pomylek, przed instalacjq dodatku utworzonego na podstawie skoroszytu
XLS nalety zamkng ten skoroszyt. W celu zainstalowania dodadru wykonaj nastepujqce
czynnoici:
1. Wybierz polecenie Nan?dzia/Dodatki.WySwietli siq okno dialogowe Dodatki.
2. Kliknij przycisk Pceglqduj i odszukaj dodatek, kt6ry w4ahie utworzylei.
Odnaleziony dodatzk wykwietli sig na liicie dodatk6w w oknie dialogowym
Dodatki. Jak pokazano na rysunku 21.3, w oknie dialogowym Dodatki wyiwietla
sic rowniet opisowa informacja, kt6q wprowadzilei w oknie dialogowym
WlaSciwojci.

Rysunek 21.3.
Okno dialogowe
Dodatki
z zamaczonym
nowym dodatkiem

3. Kliknij OK. aby z a m k q t okno dialogowe i otworzyt dodatek.

Po otwarciu dodatku Operacje teknowe, w menu Nmp&iu wyhvietli sig nowa poycja.
Sej wybranie spowoduje wchomienie procedury StartTextTcal zdefiniowanej w dodatku.

Dystrybucja dodatk6w
Utworzony dodatek m o h a udoqpnid innyrn utytkownikom, dajqc im kopiq pliku XLA
wraz z instrukcjq instalacji (wersja XLS jest im niepotnebna). Po instalacji w menu Na-
tzqckia pojawi im s i nowa
~ pozycja: Operacje t e k t e . Je2eli zablokowaliSmy plik za
pomocq hasla, utytkownicy niemajqcy hasta nie b d &mogli przeglqdat lub modyfik*
wad kodu.

Modyfikowanie dodafku
Aby modyfikowat dodatek, nalety go otworisyt i odblokowat. W celu odblokowania .
nalety uaktywnit tdytor Y i d Basic, po czym dwukmmie k I W C n a m e pmjekfu w o h i e
Project. Wyiwietli sig pytanie o haslo. Po podaniu wWciwego hash nalegr wprowadzic :
poprawki, a nastepnie zapisat plik w e d y t m Visual Basic, wybierajqc polecenie File/Save.
*
Rozdrlat 21. Tworzenie i wykorryrtonie dodatkbv 593

Jeteli informacje z d o d m zapbane w arkuszu, aby przegldat ten arkusz w Excelu,


n a l w ustawid wlaSciwo$C IsAddIn dodatku na wart036 False. Moms to wykonaC w oknie
Properties (rysunek 21.4) po zamaczeniu obiektu ThisWorkbook. Po wpmwadzeniu mian,
a p ~ e zapisaniem
d pliku nalety ponownie ustawit wlaSciwoSC IsAddIn na wartoe True.
Jeteli pozostawimy wiaiciwo4d IsAddIn ustawion* na wart046 False, plk rostanie zapisany
jako zwykly skorosq% pomimo te Ndzie miat rozszerzenie J.lo. W takim pnypadku
prdba zainstalowania dodatku zakodczy sip wygenerowaniem blqdu.

Rysunek 21.4.
Przeksdakanie
dodatku
w mykw skams@

Tworienis tlodatku: pudsum~w~nle


Fned oplMlkowaniern uOvorzonego dodatku warto poWgclC Wlka chwfl. aby odpowiedzleC na pad*
ne n l h j mania.
1 Cry dodatek mstal prretestowany dla wsrystkich obslugiwanych platform I wersji Excela?
a Czy nadano pmjektowi VB opisowq n a w ? Domyflnie wsrystkle pmjekty VB otrzymujq
n a w VBFrqJect. Bedde IepieJ,je511 mienimy te n a z q na bardzlej o p i s w .
W Cry w dodatku przjjelllmy jakief zafotenia dotyczqce stnrktury katalog6w uiytkownika
lub nanv katalog6w?
Czy w oknie dialogowym Dodatkfwy5wietla sig wla5c(wa n a m Iop(s?
Cry funkcje VBA, ktdre nie majq byC ufywgne w arkusm, zastdy zadeldamwane jako prlwatne
(Private)? Jeteil nle. takle funwe wySwidtlq slg w oknie dialogowym Wstauianle funkqi.
m Czy dla spmwdzenia. te dodatek nie zawiera blqdbw syntaMycznych, paml.$allSmy 0 ]ego
skornpilowaniu?
m Czy wriellBrny pod uwage ustsuulenla r n l ~ ~ d o w Jetel
e ? na p@ad Mat&tworzy
nowq pozycje w m u Narz@zfa, to czy wystqpi problem. jeSli nanva poleania bedzle lnna
ze wrgledu na innq wersjq jqrykowq?
m Czy dodatek zostat wptymalizawany pod wz&dfJm m k o W 7 Wreoej Infomacjf na ten temat
majdule slg podrozdzrale .Optymallzacja wydajnobi dodatkbw" w dalsze] m$ci niniejszego
rozdzlah.
594 CzefC V * Zaawansowane techniki progranwwania $ (

Ten podrozdzial rozpoczyna sip od por6wnania pliku dodatku X U z odpowiadajvym


mu plikiem Mdlowym MS. W dalstej aecfombwip metody optymalizacji wydajnoki
dodatk6w. Opiszq techniki zmniejszania rozmiam pliku, dzipki czemu bpdzie siq lado-
wat szybciej i zutywat mniej miejsca na dysku i w pamiqci.
,
i
Rozrnlar i struktura plik6w XLS 1 XLA
Dodatek (plikXU) u t w o m y na podstawit p l i h ~ o w e g o X L ma
S dokladnie ten sam
mzmiar, co oryginal. Kod zapisany w plikach X U nie jest skompresowany, ani zoptymali-
zowany w jakikolwiek spodb, a zatem wykorzystanie dodatkdw nie powoduje wzrostu I
sgbkodci dziajania aplikacji.

Pllkl XLA - przynaleino56 do kolekcjl z poziomu VBA


Dodatki naleiq do kolekcji AddIns, ale oficjalnk nie sq elementami kolekcji Workbooks.
Do dodatku motna sit jednak odw& za p o m q metody Workbooks obiektu Appl icaticn.
jeteli jako indeks podarny nazwp pliku. Ponitsza instrukcja tworzy zmiennq obiektow~
reprezentujqcq dodatek o nanvie Myaddin.xla:
Set TestPddin - kbrtbooks("Myaddln.xla')
i

Do dodatk6w nie motna siq odwolywat za pomocq numer6w indeks6w w kolekcji 1


Workbooks. Jeteli wykorzystamy p n i - kod w celu przetworzenia w pqtli kolekcji
Workbooks, skoroszyt h4yaddin.h nie wyiwietli sig:
For Each w i n Applicatlan.W~rkbooks
MsgBox n.Name
Next w

Z kolei ponitsza p@la For . . . Next spowoduje wytwietlenie dodatku Myuddin.xlcr pny 1
zaloteniu, t e dodatek ten wyhvietla s i w~ oknie dialogowym Dodafki Excela: 1
For Each a i n Apglication.PddIns
MsgBox a. Name
Next a

WidocznoSt plik6w XIS i XLA I

Zwykle skomszyty XLS wySwiet1aj.q sip w jedrrym lub k i h ohach. Na pzykhd p o n i k a


instrukcja wyiwietla lie* okicn aktywnego s k o m q t u :
Msgbx Acti~rkbook.Uindws.Count

Widocznokig okien dla skoroszytu XLS mohra manipulowat za pomoca. polecenia


OkndUkryj lub whfciwoki V l sible. Pmi- kod ukrywa wszystkie okna aktywnego I
skoroszytu:
I
Rozdziat 21. + Tworzenie i wykotzystanie dodotkdw 595

-
For Each Win I n AetlveWorkbook.Windcws
Win.Visible False
Next Win

Pliki dodatk6w nigdy nie sq widacme i oficjalnie nie posiadajq okien, pomimo tego. .te
zawierajq niewidocme arkusze. W efekcie nie pojawiajqsiq na lidcie okien po wybraniu
polecenia Okno. Nawet jdli skoroszyt Myoddin.xlo jest otwarty, ponitsza instrukcja
zwrdci zawsze wartoif 0:
MsgBox Workbooks("Myaddin.xlam) .Windows.Caunt

Arkusze i wykresy w plikach XLS i XLA


Pliki dodatkdw X U , podobnie jak pliki XLS. mogq zawierad dowolnq liczbp arkuszy
lub wykresbw. Jednak, jak jut wspomnialem, aby plik XLS motna byto przeksnalcic na
dodatek, musi on zawierad co najmniej jeden arkusz.

Jeteli dodatek jest onvarty, motna uzyskat dostep do jego arkuszy z poziomu kodu
VBA w taki Sam sposbb, jak do arkuszy zwyktego skoroszytu. Poniewat jednak pliki
dodatk6w nie nale4 do kolekcji Workbooks, do dodatku motna odwolywaf siq wytqcz-
nie na podstawie n a y , a nie na podstawie nurneru indeksu. Zaprezentowany ponitej
przyklad wyiwietla wartodd z kom6rki A 1 pienvszego arkusza w pliku Myoddin.xla
(pny zaloteniu, t e jest otwarty):
MsgBox Workbodts('Myaddin.xla").Worksheets(l).Ranget"Al').Value

Jeteli dodatek zawicra arkusz, ktbrcgo zawartoM chcemy wySwictliC, motemy go sko-
piowad do otwartego skoroszytu albo utworzyk nowy skoroszyt i zapisad w nim arkusz.
Na przyktad ponhzy kod kopiuje pienvszy arkusz z dodatku i urnieszcza go w aktywnym
skoroszycie (jako ostatni arkusz):
Sub C o p y S h e e t F d d i n ( 1
D i m Addinheet As Worksheet

- -
D i m Nunsheets As Long
Set Addinsheet Workboaks("Myaddin.xla").Sheets(ll
Nunsheets AetiveWorkbook .Sheets ..Count
Addi nSheet .Copy After :-ActiveWorkbook .Sheets(NumUleets)
End Sub

Uhvomnie nowego skoroszytu wcwnqtn dodatku jest nawet prostsze:


Sub CreateNewWorkbook( 1
WorkWst"Myaddin.xla').SMtz(l) .Copy
End Sub

W poprrednich pnyktadach zabtono, ie kod majduje si* w pliku, ktdry nieJest


dodatkiem. W kodzie VBA dodatku, aby odwolat! sig do wtasnych arkuszy i zakredw,
zawsze naie jwykorrystywad obiekt ThisWortSadr. Na prrykhd instrukcja urnieszczona
w kodzie rncdutu VBA dodatku, Wwietlajqca warto9C z komorki Al arkusza Artuszi
naleiqcego do tego dodatku, powinna mieC nastepuj3cq postaf:
596 CzglC V + Zoowansowane techniki pogramowanio

Dostep do procedur VBA w dodatku


Korzystanic z pmcedur VBA w dodatku nicco rbmi sic od konystania z procedur VBA
w twyklym skoroszycie .YLS. Gdp zostanie wybrane polecenie ;Vuq&idMakrdMakra,
w oknie dialogowym Makro nic wyfwietlq sic; nanvy makr majdujqcych sic w otwartym
dodatku. Wyglqda to niemal tak, jakby Excel zabraniai nam dostqpu do tych procedur.

'%
:- Jeteli mamy n a w pmedury w dodatku. rnotemy bezposrednio wpowaddC ja w oknie
dialogowym Mahro i kliknqC Umchom w celu jej wykonania. Procedury Sub naleiy
urniescie w og6lnymmodvle VBA, a nie w module kodu obiektu.

Poniewat procedury zawam w dodatku nie q wymienione w oknie dialogowym Makro,


naleg wykorzystaf inne sposoby, aby uzyskac do nich dostpp. Mogq to byC metody
bezpoSrcdnie (takie, jak klawisze skrotow. menu lub paski n w d z i uzytkownika) ornz
p o f d n i e (np. procedury obslugi zdatzen). Dobrze do tego celu nadaje sic procedura
OnTi me, za pomocqkt6rej moms umchomif kod o okreilonej pone dnia.

D o wykonania procedury zapisanej w dodatku rnotna wykorzynaf metodq Run obiektu


A ~ pication:
l

Jeszcze inny spos6b polega na wykomystaniu polecenia Tools/References w edytotze


Visual Basic w celu zdefiniowania odwotania do dodatku. Po wykonaniu tej czynnoici
m o h a wywolywaf pmcedury dodatku w kodzie VBA bez podawania nazwy pliku. Nie
meba nawet wykonystywad metody Run. M o h a wywoiat proceduq bezpo9rednio. jdli
tylko nie zostaia zadeklarowana jako prywatna. Poniaza instrukcja spowoduje wykonanie
procedury D l splayhlames, o i l e zdefiniowano odwolanie do dodatku:
Call OlsplayNames
-'-, *
A
Nawet po zdeflnlowaniu odwotania do dodatku nsmy jego rnakr nie wySwietlq slg
,.'&$--
w oknie dlalogowym ~Makro.

Funkcje zdefiniowane w dodatku dzialaj~identycmie, jak funkcje zdefiniowane w sko-


mszycie X U . M o m uzyskaC do nich latwy dostc;p, gdy2 ich nazwy wflwietlajq sip
w oknie dialogowym Wstmianiefinkcji w kategorii Uqtkuwnika (domyflnie). Wyjatek
stanowi sytuacja, kiedy funkcjp zadeklarowano re slowem kluaowym P r i v a t e . W takim
ptzypadku ich n a m y nie wyiwietlajq sic w oknie dialogowym Wstrmimiefunkcji. Z tego
powodu nale2y dektarowadjako prywatne te lunkcje, ktbre s;~wykorystywanewyhcmie
pnez inne procedury VBA, a nie sq pmemaczone do wykomystania w formutach arkusza.

PrryWadem dodatku, w ht6rym nle zadeklarwano funkcjl jako prywemych. jest h a t o r


c
e, odnognikdw (dotqczony do Excela). Spr6bujmy po zaindalowaniu tego dodatku wybraE
piqcjsk Wstaw funwp. Pnekonamy sip, te w kategorii U&?kown(ka w oknie d i a l o m
WstaIvfanie funkcji m e t l a s i mndstwo
~ funkcji, ktdre nle zostaty zaprojektowane
do wykorzystania w formutach arkuszy.

Jak wspomniaiem wcnhiej, funkcje arkusza mpisane w dodatku m o h a wykonysty-


wat bez podawania nazwy skoroszytu. Aby na p n y k k d z arkusza nal-cego do innego
skoroszytu zaadresowaC funkcjp W o w n i k a o nazwic I.XlVAVG. zapisanq w skoroszycie
N ~ ~ n ~ . xhzeba
l s , u2yC nastppujqcego zapisu:
..
Rozdziat 21. + Tworzenie i wykorrystanie dodatkdw 597

Podglqdanle m b e z p i s ~ g doddku
o
Okno dialogowe Makm nie wygwletla nazw procedur zawartych w dodatku. Co zatem oobib. jesli
chcemy uruchomib takq procedurg, a dodatek jest zabezp[eczony I nle motna prreglqdaC kodu.
aby poznaC nazwy procedufl Nalety wykorzystad pneaqdark? obiektbw!
Najpletw wybierz polecenie N&zla/Dodathl, aby zainstalowad Knrator odmSnikdw. Jest to d ~ +
datek razprowadzany z Excelem. Jest zabezpieczony. a zatern nie nnotna przeglqdad jego kodu.
Potem wykonaj nastepujqce czynnoSci:
1. Ua-ij edytor Wsual Basic i wybierz projekt Lookup.xla w oknle Project.
2. WciSnij F2,aby uaktywnlC przeglqdarkg obiekt6w.
3. Na romijanej likie biblldek wyblerz pory~jqLoohup. WySwleUq slg wsrystkie klasy apisane
w dodatku Loohup.xla, jak pokazano na poniiszym rysunku.

4 Zamacz kilka pazycJi na IlScle Classes, aby przejrzd skladowe zawarte w tych klasach.
W pnyk+adrlezap.ezentowanym na tysunku Wasa Lookup-Comn jest d u l e m , a jej skladowe to
nazwy nniennych, stalych, procedur I funkcji. Wydaje siq. te pmcedura DoLookupCmnd uruchamia
kreator. Aby sprawdzlt tg teorle, nalety uaktywniC Excel, a nastepnie wybraC polecenie NanWa/
Makro/Makm. W polu Nama makra w p i d GoCockupCmnd i kliknqf Urvdnmr.Z pewnoblq yswietli
sle p i m z e okno dialogowe kreatora odnolnlkbw. Majqc takie inforrnacje, moterny napisat kod
VBA uruchamlajqcy kreator odnognik6w.

Natorniast jdli funkcje zapisano w pliku dodatku, kt6y jest otwaty+motna pominqk
odwdanie do pliku i skofzystak z insimkcji o nastcpujgej sktadni:
-MOIAVG(Al:P50)

Przyklady przetwarzania dodatk6w


za pomocq kodu VBA
W tym podrozdziale zapmcntujp informacjc potncbnc do napisania pmedur VBA
wykonujqcych dzialania na dodatkach.
598 Czge V + Zaowamowane techniki progamowania

Kolekcja Addlns iI

Kolekcja AddIns &era wszystkie dodatki, o kt6rych Excel posiada infonnacje. Mogq
to byt zar6wno dodatki zainstalowane, jak niezainstalowane. Skladowe kolekcji AddIns
rnotna wy3wietlit w oknie dialogowym Dodatki, wybierajqc polecenie Nmeh-ia4hfatki.
Zainstalowane sqte dodatki, dla k t w c h tamaczono pola wyboru. I

Dodawanie pozycji do kolekcjl Addlns I

Pliki dodatk6w sktadajqce sip na kolekcjp AddIns rnotna zapisat w dowolnym miejscu.
Excel utnyrnuje list? niekt6rych spdr6d tych plikbw wraz z ich lokalizacjq w rejestrze
Windows. W przypadku Excela 2003 Ma tajest pnechowywana w nastppujqcej lokalizacji:
I . ObcelMdd-in Manager
HKEY-CURRENTNTWSERISofime\MiwmoJ\~cell
Do przegl%daniatcgo klucta rejestru motna wykonystaC sdytor rejesbu (regedit.exe).
Standardowe dodatki dostarcme wraz z Excelern nie sq wymienione w tym klucur rc-
jestru. Ponadto pliki dodatkbw zapisane w )catalogu podanyrn ponitej bqdq wyrnienione ,

na liicie okna dialogowego Dodaiki, ale nit h d t i e ich w rejtsbze:


C: 1Docurnents and Settingsl<nmwa -&yikownikrr> \Dane uplikacjil
MicrosoftLQddltu
e za pomocq kodu VBA.
Nowy obiekt AddIn motna dodad do kolekcji AddIns ~ c m i lub
Aby rpcznie urnidcif dodatek w kolekcji, nalety wybrat polecenie Narrcdzia/Dodarki,
klilcnqt przycisk PrsegIqdaj i odszukad dodatek Aby d&czyC nowy element do kolekcji '
AddIns za pomoq kodu VBA, nalcty skorzysta6 z metody Add kolekcji. Oto pnykhd:
Applicat1on.Addlns.Add "c:\files\nenaddln.xla"
Po wykonaniu tej instrukcji. w kolekcji AddIns zostanie umieszcwny nowy element.
kt61-y wy3wietli sip takke na IiScie w oknie dialogowym Dodurki. Jeteti dodatek zostaf
jut wcreSniej dodany do kolekcji, nic sit nie stanie i nit zostanie wygenerowany btqd.
I
Jehli dodatek wprowadzany do kolekcji majduje sip na wymiennym noSniku danych
(np, dyskietce lub &ie CDROM), m e t e Add motna tab% wykor~ystddo skopiowania
go do katalogu bibliatek Excela Wykonanie ponizszej insbukcji spowodujt skopiowanie
pliku Myaddinxla z dysku A i dodanie go do kolekcji AddIns. Drugi argument (w tym
przypadku ma wanoJd True) decyduje o tym, czy dodatek bedzie skopiowany. Je2eli ,
dodatek majduje siq na dysku twardyrn, drugi argument motna zignorowat.
Application.AddIns .Add "a :\Hyaddin.xla", Trw
W c z e n l e nowego skoroszytu do kolekcji AddIns nie wwoduje jega zainstalowanla.
W selu minstalaanla dodatku mlUy ustawEjsg v,ia*lW instal lld m wWLETrw.

I
ReJestr Windows m e uaktualnlony ty(ko wtedy, kiedy Excel zostanle poprawrile
@* nrnkniety. MI1 pnylarzy slq awa)a, namy wymuadzmFh dodatklw nle zostanq
zapisane w rejestrze, a zatern po ponownym uruchomieniu Excela nie bgdq czgSci4
kolekcjl AddIns.
Rozdzid 21. Tworzenie i wykonystonie dodatk6w 59.9

Usuwanle pozycji z kolekcjl Addlns


Dla kolekcji AddIns nie istnleje metoda Delete lub Remove, a wipc dodatku nie motna
usunqb bezpdrednio. Jednym ze sposobbw jego usunipcia z okna dialogowego Dodatki
jest edycja rejestru Windows (za pornoctl programu regeditere). Po usunieciu nazwy
z rejesim, przy nastqpnyrn uruchomieniu Excela dodatek nie wyiwietli siq w oknie dia-
logowym D o d d i . Metoda ta nie jest skuteczna dla wszysdcich plikdw dodatkbw. a tylko
dla tych, kt6rych nazwy sqzapisane w rejesaze.

Irtnym sposobem usunivia dodatku z kolekcji AddIns jest usunipcie, przeniesienie lub
miana nazwy pliku XLA dodanku. W takirn p n y p d h prry nas&pnej prbbie zainstalowania
lub odinstalowania dodatku uryiwietli siq ostrzetenie podobne do tego. kt6re pokazano
na rysunku 21.5.

Rysunek 21.5.
Jeden ze sposob6w - m r a r ~ d ~ ~ l a + . p r ~ r p -
usuniwa elementu 2) -bn-- ~l-*~m:
kolekcji Addlns

obiektu Addln
Wla~ciwo~ci
Obiekt AddIn to pojedynczy element kolekcji Mdlns. Aby wyiwietlit n a n q pliku pienv-
s z e g elernentu kolekcji AddIns, motna wykonystat nastcpujqcq instrukcjq:
Hsgbox Addlns(1) .Nam

Obiekt AddIn ma 14 wlafciwoki, o ktbrych motna dowiedzieC sip wipcej z systernu


pomocy. Pip6 z nictl to wlakiwo9ci ukryte. Niekt6re pojpcia d o t y q c e obiektu A d c ! ~
mogqbyd nieco mylace, a zatem ornowip kilka watniejsqch wldciwoici.

Waiciwo3i Name
Nazwa pliku dodnku. Jest to wlaSciwoi6 tylko do odcEytu, a zatem nie rnotna zmienic
namry pliku popnez jej modyfikacjq.

WlaiciwoSC Path
Nap@ i f c i e k a d o a p u do p l h dodatku. Nie zawiera ostatniego ukoJnika i nazwy pliku.

WtaiciwoS&Fullname
Napqd i hie* dmtgpu or= nanva plku dodapku. WWciwoSC jest nadmiarowa, po-
niewa2 infwmacje te m o m odcqtai: t a k e z wkSciwcrSci Nam i F'zth. Poni- dwie
instrukcje powodujqwyiwietlenie dokladnie takich samych komunikat6w:
600 CzefC V + Zoowansowane technikl prograrnowania

-
Opisowa n a m a dodatku whkiwo3t ukryta. Jej wart&&jest tekstem, kt6ry wy4wietla
sip w o h i e dialogowym Dodatki. Jest to wlaSciwob5 tyke do dcytu. Jedynyrn sposobcm
dodania lub modyfikacji wlaSciwoSci Title jest skonystanie z polecenia PliffWtaiciwdci
(nalety kliknqt zakladkp Podrumowanie i wprowadzit tekst w polu Tyml). Tego pole-
ccnia menu m o h a u Q C tylko dla pliku XU,p m d pprzeksztakeniem go na dodarek.

Zanvyczaj d o s t ~ pdo elementu kolekcji uzyskuje sip popraz jej wlafciwoSt Name. Ko-
lekcja AddIns jest pod tym wzgledem nieco inna. w tym celu wykorzystuje wldciwoSt
Title. W ponizszym przykladzie pokazmo sposdb W w i a l e n i a nazwy pliku dla do-
datku Anulysis ToolPak (tm. analys32.xlC) na podstawie w ~ i w v o S c iT l t l e , kt6ra ma
wartoft Analysls TgolPat:
Sub ShnrNznW)
Msg8ox AddIns('Ana1ysl s ToolPak") .Name
End Sub

Motna oczywikic odwobC sic do okn3lonego dodatku za pomocq numeru indeksu,


jednak w oltnzymiej wieksmSci przypadkbw kdziemy korzystat z wlaSciwoSci Name.

Wtafciwo46 Comments
W tej ukryrej wMciwo4ci jest zapisany tekst, jaki wyhietla sip w oknie dialogowym
Dw'arki po mzmczeniu ohflonego d o d a h Wtdciwo56 -s jest rylko do odczytu.
Jedynym sposobem jej modyfikacji jest wykonystanie o h dialogowego Wlas'ciwaici
pned pmksztakcniem skoroszytu na dodatek Komentam mogq mieC dlugoOC do 255
makbw, ale w oknie dialogowym wyjwietla sip tylko okolo 100 mak6w.

W l c ~ k i w o KInstalled
W M i w o J t Installed ma wart&& True, jeeli w okllonyrn momencie dodatek jest
zainstalowany -tm.zaznaczony w oknie dialogowym Dodutki. Ustawienie w!dciwoSci
I n s t a l ?edna wartoe True powoduje otwarcie dodatku Ustawienie jej na wartoif Fa1se
powoduje zamlaiiwie dadatku. Ponitcj p o h o przyklad sposobu instalacji (a tym samym
otwarcia) dodatku Anabsis ToolPak za pomocq kodu VBA:
Svb Instal lATP()
nddIns['Analysl s ToolPak'l.
E*.d 41b
Installed - True
Gdy p d w a mstanie wykonana, w o h i e dialogowym W k i pole wyboru obok namy
dodatku Analysis ToolPak b&ie zaznacmne. Jeteli dadaak zainstalowano w c d n i e j ,
ustawienie wlaSciwoSci Instal led na wartoSC T r ~ nie
e przpiesie tadnego efektu. Aby
usunqC dodatek (odinstalowaf go), wystarczy ustawit whSciwoSC Instal led na wartosf
Fa 1 se.

W l i dodatek otwarto za pornocq polecenia PNk/OW&, nie jest on umawany


L~ za atwarty W nMfacle jego wtabiwo* Inrfal led ma wart056 Fa1 re.
r;:-
Poni- procedura wyswietla l i d $ dodatkdw w kolekcji AddIns z wyszczegblnieniem
tych, kt6re zainstalowano. Jak motna zauwatyd, nie zostaly uwzglpdnione dodatki, kt6re
zostaly ohvarte za pornocq polecenia P/ik/Ohvdrr.
Sub CountInstallMddInsO
O l m Count As Integer
Dim Item As Addln

-
Dim Msg As String
Count 0
For Each Item I n AddIns
-
[ f [ten.I n s t a l led Then Count Count + I

--
Next I t e n
nsg 'Dodatkbr: " d AddIns.Count & vbCrlf
Usg Usg & "Zatnstalmanych: " h Count
UsgBox Hsg
End Sub

N m p n a pmcedura przehvam w pptli wszystkie dodatki w kolekcji AddIns i odinsta-


lowuje te, M r e zostaly wczdniej zainstalowane. Pmcedura nie uwzglpdnia dodatk6w
otwartych ta pomoq pleccnia PliklOrwdrr.
Sub UntnstallAll ( I
Otm b u n t As Integer

Count 0 -
Dim Item As Pddin

For Each Item I n AddIns

- -
I f 1t~em.InstalledThen
Item. Installed False
Count Count + 1
End I f
Next [ten
HsgBox 'Odinstalcuano ' b b u n t L ' dodatkbw."
End Sub

Aby pnekonat! slq, cry okreSlony skoiosryt jest dodatkiem, wystarczy sprawdziC
wartog wta5ctwofci IsPddln tego skorosrytu. Nle jest to w+aSdwoSCtylko do odczytu.
a zatem ustawlajqc WaWIvoSC IsAddln na wart086 T m , rnotna takte przeksztalcif
-
skoroszyt na dodatek. I odwratnie popmz ustawiertie W i w o f c l IsAddin na wartog
False moaa przekztatcil dodatak na skorosryt Po wykonaniu tej czynnokl arkusze
dodatku bedq widawne w Excelu nawet wtedy, kledy pojekt VB dodatku jest
zabezpieczony.

Korzystanie z dodutku jok ze skoroszytu


Jak wspomnialcrn wczdniej, hi& dwa sposoby otwiaania dodatk6w: za p o m q pole-
cmia Plikj- oraz ia pomocq poleccnia Nmz&tdniRI. Zalecana jest h g a d a
z nas@pujqcegopo+ otwarcie doda&u za pomocq palecenia P I i l d o M d ~nie powo-
dujc ustawienia jego whkiwofei Installed na wart056 True. Z tego pwodu nie molna
zamkn& p l i h za pomoq a h a dialogowego Dodutki. kdynym sposobem ramkniecia
takiego dodarku jest q c i e nastpujqcej inmkcji VBA:
WoEorkboas("@addln.xla') .Close

Mccbanizm dodaMw w EKoelujest daQC skompl~hwany,a ponadto ten kompbnent nie


by4 ulepszany od wiclu lat Z tych pwod6w nalety nvrecsC szczeg6lnq uwagp na za-
gadnienia dotycace inrtalowania i odinstalowywania dodatkbw.
602 Czglt V + Zaawansowane techniki progarnowania

Zastoswanie metody Close dla zalnstalowanego dodatku powoduje usunlqcle go


I pamlpci. ale nie u R M a *faSciwcQclinstal led na v a r t o l False. Z tego w d u
dodatek bgdzle w dalszym ciggu zaznaczony w oknie diaiogowym Dodatkitak, jakby
byt zalnstalowany. Mote to by6 bardzo mylqce. Waklwyrn sposobem usuniqcia
zainstalowanego dodatku lest ustawlenle jego wta8ciwohi Insta 1 1 ed na wart056 Fa1 se.

Zdarzenia zwiqzane z oblektami Addfn


Z obiektem Addin sq z w i p n e dwa zdanenia: AddInInstall (generowane w momencie
instalacji) o m AddInUninstall (generowane w momencie odinstalowania). Procedury
obsiugi tych zdarzeir nalety umiefcit w module kodu obiektu Thisworkbook. P o n i B y
kod wyfwietla kornunikat po zainstalowaniu dodatku:
Prtvate Sub Yorkbmk-AddinInstail[)
M s g h x 'Dodatek " & ThisUorkbook.Name & -
- zalnstalowano."
End Sub

Nie w i n o my116 zdarzenla AddInInstall re rdanenlem Open. Zdarzenie AddInInstall


zachodzl fylko uledy, gdy dodatek jest instalowany p raz pietwsly. a nlc za katdym
razern, kiedy jest otwierany. JeSli kod ma by6 wykonyany prrl kahleJoperacji
otwierania dodatku, naleiy wykorzystaf procedure Workbook-Open.

Optymalizacja wydajnoici dodatkriw


Jest octywiste, te d@eniem prograrnisty pawinno by4 zapcwnienic jak najszybszego ijak
najwydajniejsnego dzialania dodatku. W tym podrozdziale opiszp techniki, ktdre pozwolq
osiagn&k ten cel.

Maksymalizacja szybkoici kodu dodatk6w


JeBli popmsimy kilkunastu prograrnist6w o zautornatyzowanie okre3lonego zadania,
prawdopodobnie otrzymamy kilkandcie rdhych rozwiazan. z kt6rvch nie wszvstkie
bedq dziatab r6wnie hobmi. Ponitej podano kilka wsk&bwik, k t b j c h wyko&tanie
pozwoli zoptymalizowaC kod pod mglpdem szybkoki dziabia,
P o d c m zapisyvania danych do arkusza I& wykonywania innych dziatafr.
ktdre powodujqniane wySwietlanych informacji, n a l w ustawiat wEafciwoSC
Application. Screenupdatingna wartoft False.
m Zawsze nalety deklarowd typ danych ijefli to rndiwe, unikad typu Variant.
Aby wymusib koniec.moft deklarowania wszystkich miennych, wprowadhny
na poczqtku Wdego modutu instrukcjp Option Explicit.
Aby uniknqt dlugich ad- do obiemw, n a l w tworzyt mienne obiektowe.
Jeteli na przyklad pracujemy z obiektem Series dla wykmu, utwdnmy z r n i m q
obiektowq za pomocq nastepujqccgo kodu:
Set 51 - Series
O i m S1 As
ActivdJorkbook.Sheets(1) .ChartObjects(l) .Chart .SeriesG~l1ection(l)
a Wsqdzie, gdzie to motliwe, nalety deklarowaf zmienne obiektowe, podajqc
konkretny typ. Nalety unikat deklamwania ich jako miennych typu Object.
Aby ustawit wiele wlaSciwoSci dla jednego obiektu lub wywotak wiele metod.
nalety utywat konstrukcji W i t h . . . End With.
Nalety usuwaC nadmiarowy kod. Jest to szczeg6lnie watne,jesli do utworzenia
procedur wykorzystaliimy rejestrator makr.
JeSli to rnotliwe, operacje na danych nalety wykonywat, wykonystujqc tablice
VBA, a nie h s y arkusza. Operacje o d c m a n i a i mpisywania danych do arkusza
tnvajqmacmie dlutej od dzialah w pamieci. Nie jest to jednak uniwenalna zasada.
Dla uzyskania najlepszych wynikbw warto przetestowaf obie opcje.
Nalety unikaC lqczenia kontrolek UserForm z komorkami arkuszy. W takim
pnypadku m o b nastilpid przelicranie arkusza za katdym m m . kiedy utytkownik
zmieni kontrolke UserForm.
Pntd utwoneniern dodatku nalety pamittat o skornpilowaniu kodu. Moze to
spowodowat nviekszenie rozrniaru pliku, ale wyeliminuje koniecznoif kompilacji
kodu przed wykonaniem procedury.

Kontralowanie rozmiaru pliku dodatku


Skoroszyty w Excelu (whcznie z dodatkarni) rnajq istotnq wade: rozrastajq sic. Latwo
zauwatyf. t e ronniar plikbw migksra s i z~ czasem. nawet jeSli do arkusza nie sq do-
dawane nowe informacje. %zeg6lnie sprawdza sic to w pnypadlcu, kiedy usuniemy duto
kodu i zastapimy go innym kodem. Wprowadzanie wielu modyfikacji w arkuszach takte
powoduje ronastanie sip plikbw.

Z tego powodu, w celu zapewnienia najmniejszego motliwego rozmiam dodatkow lub


skomszyt6w, nalety ponownie je uhvorzyt. Ponitej opisano, jak to nalety nobit.
1. Utw6rz kopiq z a p a s o q aplikacji i od16t w bezpieczne miejsce.
2. Uaktywnij edytor Yisud Basic,a nastepnie wyeksportuj wszystkie komponent);
projektu zawierajqce kod VBA (moduiy, moduly kodu, formularze L'serForrn.
a czasarni moduly Thi $Workbook oraz moduly arkuszy i wykresow). Zanotuj
n a m y plik6w i ich potozenie.
3. Uhudn: nowy skoroszyt.
4. Skopiuj zawartdC wsrystkicharkuszy z oryginalnej aplikacji do plrkuszy w nowym
skoroszycie. Zwbf mzcg6lnquwagp na nazwane zakresy -w n o y m skoroszycie
n a l e e utworzyC je na nowo.
5. Zaimportuj komponenty, M6re wyeksportowabi w kroku 2.
6. Skompiluj kod.
7. Jetpli jest taka p0-h d+z paski narqcla, kt(Ke byiy dotquone do oryginalnego
skoroszyhl.
604 Cz&C V + Zaawansowane techniki progromowania

8. Zapisz nowy skoroszyt.


9. Dokladnie pnetestuj skoroszyt, aby sip upewnid. cty dziala tak, jak poprzednio.

Bardzo cz~stouzyskany w ten spodb plik h d z i e macznie mniejszy od oryginalnego.


Skala zmniejszenia r o a n i h piiku w konkretnym przypadku m l e b od wieiu crynnikbw.
OsobiScie udalo mi sip zmniejszyt rozmiary plik6w .YLA nawet o 55 %.

'a> lnnq metodq pomlaJgcqzmnlejszyC romiar pliku jest ]ego zaplsanie w formacie
WML. Nast?mle nalrly otworzyc?plik H T l i ponornic zapis& w formacic XL.5,
Czasami ten sposbblhst skutecmy. m a , ie uryskany plik ma mniejsze rozrnlary.
ale sq tet sytuacje, kiedy pllk po wykonaniu opisanej operacjl jest nawet wi9ks.q
od orypinalnego.

Problemy z dodatkami
Dodatki to Swietny mechanizm, ale tak, jak w tyciu: nie ma nic ta d m o . Dodarki nawiajq
p m d programisQ okreflone wynvania. W tym podrozddale opisq kilka problemow,
kt6re pro-mrnista musi ronvigC, jetli chce tworzyt dodatki dla szcrokiego gmna urn-
kownikdw.

Zapewnienie zainstalowania dodatku


W niektbrych przypadkach dodatek musi mstaC poprawnie zainstalowany -
tzn.
otwarty za porn- poleteniaNa~~.g&irrlDodatki,a nie za p m o q polecenia PliRIOtwdr=.
W przeciwnym rarje kod wytwietli komunikat (rysunek 21.6), po czyrn plik zostanie
zamknim. M6wi;le inaczej, dodatek pozostanie otwarty tylko wtedy, kiedy zostal wla-
Sciwie zainstalowany.

Rysunek 21 -6.
Prdba niewla9dwego
owarcia dodatku
powoduje
wy3wieUenle
takiego komunikatv

Listing 2 1.1 prezentuje modut kodu dla obiektu ThisWorkbosk z tego pnykladu. Procedura
w-ykonystuje fakf ze dla skoroszytu zdartenie PudInInstal? wyst~pujepned zdarze-
raiem Open.

Listing 21.l.Sposdb zapewnienia prawldbwego zalnsf~lowaniadodatku


Dim Instal:e4Properly As Boolezn

End Sub
-
P r i v a t e Sub 'MorCbook-AddinInsts110
I n s t a l ledproperly True

P r i v a t e Sub LJortbook-Cpenc)
D i m Msg As S t r i n g
i f InstalledDtoperly Then ~ x i Sub
t
Msg 'my otworzyt ten p l l k . skorzystaj r polecenla Narz@zlalDodatki .'
Hsghx Msg. vbInfonnation. This~rktmok.Nw
Thi ~WOrkbook.Close
End Sub

-
Jefeli dodatek zostal prawidtowo zainstalowany, wykona sip procedura Workbook-
AddinInstal 1. Pmcedura ustawi miennq Instal ledproper1 y typu Boolean na wartoif
True. Je2eli dodatek otwarto za pomocq polecenia PliffOfwdrr, procedura Workbook-
AddinInstall nie wykona sic, a zatem zmiema Instal 1edProperly tydzie miah domyilnq
wartoff (Fa1 se).
Podczas wykonywania pmedury Workbook Open nastepuje sprawdzenie wartoki zmiemej
Instal ledproperly. JeZeli imienna ma war ti^^ Tme, procedura konczy dziahie. W innym
przypadku kod wyfwietla inforrnacjp o tym, w jaki sposdb n a l e g prawidtowo zainsta-
lowac dodatek i plikjest zamykany.
Ten dodatek jest dostepny na ptycie CD dotqczonej do kslqtkl. Sprdbuj ohvorzyr5 go
za pornocq polecenia PIIk/Ohvdn, a nastepnie zainstaluj 130prawidlowo za pomocq
p o l ~ e n i aNan@zia/Dodatki.

Odwdywanie slq do lnnych plikciw z poziomu dodatku


Nalety zachowaC szctegdlnq ostrotnoff. rozpowsachniaj~dodatek wykonystujqcy
inne pliki. Nie mozna niczego zakladat odnosnie struktury plik6w systemu. w kt6rym
utytkownicy k d q wykonywali aplikacjp. Najprostszym podejiciem jest wymaganie
umieszczenia wsqstkich plikbw aplikacji w jednyrn katalogu. Nast~pniemotna wyko-
nystat wlasciwoiC P a t h skoroszytu aplikacji w celu utworzenia odwotaf~do wszystkich
pozostalych plikow.

Jeteli na przyklad w aplikacji wykonystano plik pomocy, nalety znpewnit, aby mstat
on skopiowany do tego samego katalogu, w kt6rym urnitszczono aplikacje. Nastepnie
w celu sprawdzenia, czy moma odnaleki plik, wykonamy poni- kod:
Sub GetHel p( )

-
D i m Path As String
Path Thlsllarkbook.Path
Applicatton.He1p Path L 'USER.W'
End Sub

Jezeli w aplikacji wykorzystano wywolania interfejsu API do standardowych bibliotek


DLL syshmu Windows, motna zaktyk, Fe system Windows je odnajdzje. Jeteli jednak
wykorzystano wlasne biblioteki DLL, najlepiej zapewnif, aby zostaly zainstalowane
w katalogu WindowsEystem (czasami ten katalog ma innq nazw?, np. Win981Sysfem).
Aby uzyskaC dokladnq Scietkq katalogu System, mofna skorzystat z funkcji interfejsu
Windows API GetSystemOi rectory.

Wykrywanie wlaiclwej wenji Excela dlu dodutku


Jeteli w dodatku wykorzystano w+aiciwoSci unikatowe dla Excela 2003, nalety wy-
SwietliC ostm&cnie dla utytkownik6w ppr6ujqcych otwonyC ten dodatek za pomocq
wczeiniejszych wenji. M o a a to zrobit za pomocq p o n W g o kodu:
606 CzgSe V Zaawansowane technikl programowanio !

Sub Checkversion( 1
If Val(Avpllcstton.Version) < 11 Then
HsgBox "Ten dodatek dziafa tylko z Excelm 2003 lub wersjq nowsz6."
ThisWorCbwk .Close
End I f
End Sub

WMciwo4t Verslon obiektu Application zawiera lahcuch makdw, na przyklad mote mieC
wartoSC II.0 a. Z tego powodu w zaprezentowanej procedune wykorzystano fbnkcj~
VBA Val, ktdra ignoruje wszystkie maki pocqwszy od pierwszej napotkanej litery.
i
4 Wiqcej informacji na temat zgodnoSci wersjl motna znaletC w rozdziale 26.
I
Tworzenie aplikacji
Tworzenie pask6w narzqdzi
Paski narzqdzi to popularny element interfejslz lrZytkownika, hdry obccnie mottna spotkat
niemal wc wsrjstkich progrmach. W tym rozdziale opiszq sps6b ich tworzenia i ma-
dyfikowania.
Excel z cafq pewnaSciq nie jest pcodukrcm, w ktbryrn btakuje wbudowanych paskbw
nancdzi. Wenja 2003 zawiera ich panad 60. Dodatkowo moma z 4awaSciq twonyt
nowe lub dostosowywat istniejqce -zarciwno vzrtje, jak za ~pornmqjezyka VBA.

Wrat r wydaniern Excela 97 Microsoft zaprezentowat calkowicie nowy spos6b zamp


dzania paskarni narzcdzi, Z technicmego punktu widzenia pas& narzqdzi jest obi-ektem
C m n d B a r . Konstmkcja, m a populmie paskiern n a n q d i , to w racqwistofci cgzem-
plmjednego z mech typ6w pask6w nmqdri -obok paska menu i menu podqcmego.
r PaseR nanqdzi to pasek zjednym lub wieloma konmkami, kbre rnotaa kljkat.
Niniejszy r0zdzia-Ijest pofwiqcony wlaSnic temu typowi pskbw narz~dzi.
r Pmek menu to psek zawitrajqcy rozwijane tisty polecefi. Dwa wbudowane paski
menu w Excclu to Pasek menu arkusza kalkulacyjnego o m P a d mem W y k s
( p a n rordziaI 23).
Menu podreme to menu wyfwietlajqce siq po kliknieciu obiektu prawym
przycjskicrn myszy (patrz rozdzial23)+
Poniewat pasek menu jest fawnlei: paskiem narzedz1, niemal wszystkie informacje
znajdujqee sJ? w tym razldzjale w rrSwnym stopniu datycrq pa&& m n u , W mnlriale 23.
.,isan, jak p x 3 e p o w d L menu zdefiniowanymi p m z utytkownlka.

Dziafania z paskami narzedzi

I1 lisuluania hntrdek z wbudavanych paskdw nangki. Morns pozbyC sig


n i e u m n y c h kantrulek i w ten spcrs6b moLnid trochq rniejsjsca na ckranie.
~ k d w Do paska narzt$zi
Dodmmk kontrolek do w h i i ~ ~ o ~ h p a narze&i.
m o a a dodat dowolnq liczbq kontmltk. KontroUcj tc magq by6 przyciskarni
zdefiniowanymi przez w k o w n i k a lub pochodzid z jmych pask6w nmqdzi.
Mogqrdwniek nalezed do zbioru kontrolek dostarczanych w m z Excclcm.
r Twonenie ndwych park& rrarzeeki. Moms tworzyd dowalnq liczk pask6w
narzqdzi, umieszczajqc na nich kontrolkl pochodzqce z wielu ir6dei..
Z m i ~ ~pneznnczenia
rr wbudowanych k~n~roIekpaska
numqhj. M o h a dtdqcnd
maha do wbudowanych kontrolek
W Zmiund obrmu na konlrulkachpaskdw nwzydzi. Wraz z meelern dostarczany
jest prosty, ale prydamy edytos przyciskdw umieszczanych na paskach narzqdzi.
Obrazy na kontrolkach rnoZna r6wnieZ rnodyfikawad, stosujqc inne techniki.
Wymienione rnodyfikacje rnotna wykonac! ecmie lub za pornoq okna dialogowego
Dostosawywanie. Aby j e wySwietliC, nalcty wybrat polecenje WidoWPaski narzqdzl5
Dostosuj lub NunedridDmtosuj. M o h a te2 kliknqd dowolnq kontrotkq prawyrn przy-
ciskiem myszy i wybrad polecenie Dosrasuj. Paski nartdzi moha tek dostosowywaC
za pomocq kodu VBA. -
Nle nalety abawlaC sle eksperymentawanla z paskami nan~dzi.Jeieli parnieszarny
kontrolkl na paskach wbudowenych, z +atwaSclqadtwonyrny )e do pastaci domySlnej.
Wystarczy wySwietlkl okno dialogowe DostosowywBnie. Yiknd a k t ~ d k ePaskj nar-dzi,
wybrae pasek nangdzl na llfcie i klllcnqd Resetuj.

Jak Excel'zarz~dza
paskami narzqdzi?
Pried rcszpoczqciem pracy z wlasnymi pasksmi narzqdzi, wacto dawiedzieb siq, w jaki
spos4b Excel nimi mpdza. Jest ro daft aryginslny sposdb.

Wlmne paski na@d moaa doiqczaC do arkuszy Excela ilub plikdw dodatkbw i dzieki
temu z IatwoSciq mzpowszcchniaCje z aplikacjmi (wiecej infamacji na ten ternat znajduje
siq w punkcie ,,Dystrybucja pask6w nantdzi u?ytkownikaY'w dalszej czeSci rozdziahzl).
Do skotoszytu lub dodatku moha ddqczyt dowolnq ficzbq paskbw narmzi. Kiedy
uZytkawnik atwony plik dalqczone paski wygwietlq siq automawznie. Wyjqtek stanowi
sytuacj% kiedy pasek Q tej samej lzazwie 20S&t zdefiniowany wc&njej. W takim przypadlku
nowy pasek nie zastvi istniejqccgo (i me wy5wictlj siq infclrmacjrt, 2e jest dostqpny
nowszy gasek nan*j). Wiqcej informacji na ten temat majduje siq w punkcie ,,Pro-
blerny z dziaianiem paskdw narqdzi" w dalszej cq9ci sozdriah.
lnforrnacje o pashch narzqdzi Excel zapisujt w pliku XLB. W pmypadku Extela 2003,
dziahjqcego w systemit Windows XP,plik XL? jest zapisany w nastqujqcej Iokalizacji:

Dokladna n a m a pfiku i pdotcnie plikv sq c6-e dla r62nych w m j j Excel3 oraz syste-
mu Windows. W przypadku Excela 2003 pPik nasi nazwq axcelll.xlb, w prtypadktz
Excela 21002 -ace/lO,xlb.
Dlaczegol ptik XLB jest tak w a y ? Zatbkrny, h dostaled od kolegi skorosiyt Excela,
w kt6r).m mstaI zapisany pasek narzcdzi wkownika. Otwarcie skoroszytu spowodowalo
wySwietlenie paska narzqdzi. Po przejrzeniu skomszytu stwimdzi#eb, re nie jesteS nim
minteresowany. Jedrmk w rnomencie donczenia sesji Exeela pasek narzqdzi wkownika
zostal zapisany do pliku XLB. Wykonanie dowolnych modyfikacji dotyczqcych paskbw
narztylsi - od niewielkich korekt pask6w wbudowanych do zdefin iowania wtasnych
pask6w - tawsre powoduje zapis pliku XLB przy wyj4ciu z Excela. Poniewa2: za ka2-
dym razem, kiedy umchamiamy ExceIa, Iaduje sic cab plik XLB?cms urucharniania
i zamykania Excela macznie siq migksza wmz ze wtrostem romianr pliku ,'ELB. Do-
datkowo k a d y pasek narzqdzi zajrnuje rniejscc w pmjeci i W w a zasoby systemowe.
Z tega powodu, we wlasnyrn interesie, powinnibmy usuwad paski narzgdzi, kt6rych nie
utywarny- Aby to mob id, nalez;y wy brat poleeenie Widok/Puski nurzedzi/Doscosrrj.

(s> Czqstym p m d e r n awaril Excela podczas uruchamianla jest usrkodzony plik XLB.
JeFell zdarzy nam riq maria EIcela natychmiast po uruchornleniu. spr6bymy mien16
nazwg tego pliku.
.

Spos6b zapisywania paskbw narzqdzi w Exctlu jest p q c z y n a wieh problernbw. Za-


! 6 h y ,2e twonymy aplikacjq, w ktdrej w)lkorrystalih~yp a c k nanqdzi w k o w n i k a
1 do4qczylismy ga do skorosqtu aplikacji. Pasek narqdti wyiwictli siq pny pienvsyrn
otwarciu skorosqtu. W momencie zamykania Excela i n f m a c j a o nim tostanie zapisma
w pliku XLB uatkownika. Jeteli utytkownik w jakjkolwlek spas6b modyfikuje pasek
narzqdri - na prryklad usunie pnycisk, przy n-pnym otwarciu aplikacji nie wybwietli
siq whkiwy pasek nmqdzi. Zamiast njego ukyrkownjk zobaczy pasek modyfikawany.
Pasek narqdzi ddqczony do skorostytu nie wyiwietli sie sdwniel: wtedy, gdy uzy-
kownik wczeSnEej zdefiniowat pasek narzedri o tej samej n w i e . W wielu p q a d k a c h
takie dziatanie jest niepaqdane.

Na sxzqScie, aby zabezpieczyt siq pned takimi sytuacjami. rnoma napisat kod VBA,
Technika polega na unicrnotliwieniu dodania paska m d z i aplikacji do kalekcji paskbw
n a p d z i uzydrownika. Jednym ze sposobdw na wykonanie tej cqmojci jest utwonenie
p k a narz~dzi,,w locie", za katdym mem, kjedy skorowyt jest onvierany, o m usunit-
cie go w mornencie zamykania aplikacji. W ten spos6b p e k narzqdzi nigdy nie zostanie
zapisany w pliku XLB wtytkownjka. Mogloby si< yyclawai, $Etwonenje paska nanqdzi
,,w locie" jest procwem pnebiegajqcym wolno. Jak sie pnekonamy w daEszej cqSci tego
ro&iah, taki p m e s wykonywany za pomocq VBA prrebicga mkakujqct, sqbko.

Inny sposdb potega na dn!qczcniu paska nanqdzi do skorosytu, a nasqpnie napisaniu


kodu VBA, ktdry usuwa pasek w rnornencje jego mmykanla [zapornocq pracedur), ob-
shgi zdanenia Work boo~SeforeC1ose).

Rqczne dostosowywanie posk6w narzqdzi


W Excelu moha z IahwoSciq twrrtzyC nowe paski narzqdzi i modflkowad jstniejace.
IV istocie wykonwanie &a%af~ z paskarni narzpki nawet nie wymaga wykozzystywania
jqqka YBA. WiekssoX operacjj dostosawywania paskbw nmz@zi m o b a wykonad bez
n iego.
632 CzefC VA + fwarzenie aplikocji

Wszystkle rnwkacje paskdw nanHzi, zardwno wbudowanyeh, Jak I rdeflniowanych


przez uzytkownika, sq trwate. Mbwlqc Fnaczej, modyfikacje nie miknq pa ponownym
uruchomieniu Excels. Zmiany w paskach nanqdzt nie sq miqtane z konkretnym
skorostytern. Aby octhvonyt wbudowany pasek do stanu oryginalnego, naleiy go
zresetowae.

Aby wykonaC dowolnc nyme miany w paskach naqdzi jlub menu), Excel musi maj-
dawak sig w stank, Mry n m l e r n lrybem d m t u s o ~ u n i o
park& natquki. W Excelu
mogna w % cyC ten tryb za pomacq:
ttar~dz~Das~os~,
wybran ia polecenja Widok/Pc~skr'

klikniqcia prawym ptzyciskiern myszy dowolnego p z k a nmqdzi lub menu


i wybrania polecenia Dostosuj z menu podrqczntgo.

Kiedy Excel znajduje siq w trybie dostosowywania pask6w narzdzi, wySwietlane jest
akno dialogowe Dostosowpanie i moma dowolnic rnodyfikowat paski narzqdzi lub
menu. Klikniqcie prawyrn przyciskiem myszy menu tub paskdw narz~dzipawodujc wy-
3wietIenie mcnu podrecmtgo (rysunek 22. I). Po wykonaniu modyfikacji naEeQ kl ihqt
pmy cisk Zamkng w oknie d ialogowym Dustaso~ywonie.

n Zakladka Paski narzedri wy!wittla wszystkie dostepnt paski narzqdzi, wlqcznie


z paskami uhvorzonymi przez ~Q-tkownika.Na li9cie wyfiwietlajq sie ri5wnie2
dwa paski mcnu (Posek menu urkusza kaIhf~cyjnego oraz Posek m e w FyYbes)
oraz wsystkie paski menu uwkownika.
I Zakhdka Polecenia wySwietla wszystkie wbudowant polecmia wedlug kategorii.
Za jcj pornocq moms dodetf nowe pozycje do pasku nanqdzi lub menu.
w Zakjadka Opcje pozwala wybrat r6hamdne opcje datycwe paskdw narzqdzi
i menu. Naleq do nich romiar ikon, wskaz6wki e ~ c l oraz
w ~animacjt menu,
W zsktadce Owe okna dialogowego Q u s t o s u ~ a n Iznajduje
e slq opela Zawsze
pakazoj peme menu. Polecam jej wlqczenle. Kledy opcja jest wy(qczona, wySwietlsjq
siq nkpelne m u . atuieniem Micmsoftu bylo ufatwlenie poczqtkujqcyrn obstugi
menu. W necqwistoSci ranvyczaj efeM jest odwrotny.

W kalejnych podpunktach zwIq2Ee opisq sposbb rqcznego wykonywania paputarnych


rnodyfikacji pask6w narrqdzi za pmoca- okna dialogowego D o s t o s ~ a r r i e . N

Ukrywanie lub wyhdetlanie pask6w narredxl


FV ohie dialogowym D o s ~ ~ ~ ~zakhdki
r m i faski
e narre&i tlvyfwjetlajq sic wszystkie
domepne paski nanqdzi (wbudowme i u2ytkownjka). Aby wytwietlit pasek n-ti,
naleky ammi@ pole wyhm obak jego n w , natarnht aby go m,
nale2y wym Sc
c
i
to pale wybom. Zrniany t~& widacme natychiast.
Rozdzial22. + Twonenie pask6w nanedb 613

Rysunek 22.1.
W t@ie
dostosowywania
paskBw narqda-
motna
modflhwa6 paskc
narzedzl i menu

Twonenie nowego paska norzqdzi


Aby utworq4 nowy pack narzqdd, naleky kliknqe pnycisk Now-,a nastepnie wpm-
wadzit n a m e w oknie dialogowyrn Nowy w e & narzqdzi. Excel utworzy pusty pasek
namgdd i wydwietti go. Po utwaneniu moms do nitgo dodawat p y i s k i (lub potcccnia
menu). Na r y s h 222 p o h o utwomny rqcmjc p k m q d i w o w n i k a o nanvile
Mojefinnatowatrle. UmieScikm na nim narqdzia formatowania, k ~ b ~ ugwzlm
ch naj-.
c z ~ S c i jPasek
. zawiera mzwijane menu, a W e typowe dla pask6wnanm przyciski.
Zmiana ncrzwy paska nanqdzl uiytkownlka
Aby mienid namq pash -n uQtkownika, aal* qbtat go na liScEe PaFki n m q k i ,
a nastgpnie kIiknq6 pryeisk Zmied nazwq. W h i e dialogowym Zmienianie rimy parka
narze&i naleky wprowadzid now%nazwq. Nic moaa mienit nazwy wbudowanego paska
narzqdzi.

Usuwunie paska nonqdd uiytkownika


Aby usunqt pasek nanedzi utyrkownika, n a l d y wybmt go na liSeie Paski n u ~ ~ c k i ,
a nastqpnie kIiknqt prrycisk Usuk Nie m o a a usunqt wbudowancga paska narzqdzi.

Odtwonenie ustawieh wbudowanego pusko naorqdzi


Czasarni przydaje sip rna2liwoSC odtwanenia wbudowanego paska narzedzi do stanu
pierwotnego. W tym ccfu n a l q wybrad go na liScie Paski narzedzi. a nastqpnie kliknqt
przycisk Reetuj. Pasek nm@i mstanie odtworzony do postaci domy4tnej. Jekeli ctyt-
kownik d&# do paslea wlasnc narz~dzia,wmnq one usuniqte. Jezeli usunipo domy9lne
nwzqdzia, zostanq odtwmone. Je2el i jest wybrany pasek nanedzi u%ytkowrrika, prtycisk
Resemj jest nieaktywny .

Kiedy Excel znajduje siq w trybie dostosawywania paskbw narqdri (tm.kiedy wyS;wie-
tlane jest okno dialogowe D~~dsowywunie), moma dawalnie kopiowak i przenosif
kontmlki pomiedzy wsystkirni wyswietlanymi paskami. Aby pnenieS4 kontrolke, na-
l e e przeciqgnqb jqdo nowego pdamia na tym sarnym lub innyrn paslcu namylzi. Aby
skopiowrf:kontrcrlk$, nale* wcisnqk klawisz Cid, a nastqpnit pmciigrqt jq do innego
paska narzqdzi. Konhlkq moaa take skopiawat w obqbie tego samego paska n a w z i .

Aby dodat nowq k~ntrolkedo pska narzedzi, mleq skorzystat z zakladki Pofecerriu
okna dialogawego D o s f o s o ~ c r n i ekt6q
, pokatano na rysunku 22.3.
Rozdzjat 22. + Twonenie ~ a s k b wnamedri 61 5

Polecenia podzielono na 17 kategorii. Wybranie kateg~riipowodujc wyfwietlenie po


prawej smnie okna paleceri, kt6re do niej nal-. Aby d&C kontrolkq do paska nan&i,
naleq odnake2c go na ligcie plecefi, a nastepnie przeciasnqd do paska.

Dodowanie prrycisku paska narzqdzi urwcharniajqcego rnakro


Aby utworzyt na pasku narsqdzi nowy pnycisk, z ktdryrn jest zwiqzane makro, nafe@
uakcywnid raktadkq Polecenia okna dialogawego Dostosawyuanie i wybrak pozycjq
M a h na liScie Kategurie. Nast~pnienate2y przeciqgnqc! na pasek narzqdzi polecenie
Prrycisk niesfandardowy. DomySlnie z tyrn przyciskiern jest m i p i n y obraz usmiech-
niqtej twarzy.

Dodany pnycisk naleky ktiknqt prawyrn przyciskiern m y s q i z menu pokazanego na


rysunku 22.4 wybra6 indywidualne opcje, Nalce mienit mmq, prypisat mzrkss i mjenii:
ikonq .

Rysunek 22.4.
Dostosowywanie
pqclskes paska
nanedri

4 Wybranfe polecenia ZmJM obrar pnycisku powoduje wyfwietlenie listy 42 obraz6w.


Jest to aledwie niewielki pdzbidr wszystkich dostepnych obrazdw, Mdre molna
wykarrystaC na paskach narzedzi. W v e j lnformacji na ten temat majduje sie
w podpunkcie Jrniana obraru prrycisku paska n a ~ d b w* dalszej czeki rozdziatu.

W tym punkcie opiszq sposdb dystrybucji pask6w narzgdzi oraz wskakq, na co nale2-y
m 6 c i C uwagq, aby uniknq: pmblern6w.

Aby zapisad pasek mzqdzi w skomqcie, naleq w y M plecFtnie Widok,PasRi n u ~ & t i


Dostus j . Wyfwietli sic okno dialogowe Dostasowyuanie. Nasqpnie n a l q Wiknqt
pnycis k Ddqcz, co spowodujt wySwietlenje o h a dialagowego Dofqczanieparkdw ha-
nqdzi, ktbre p o b o na rysunku 22.5. Na ligcie z lewej strony okna wy9wietkaj;;l sjq
wszystkie paski nanqdzi wkawnika zapisane w h i o m Tool bars. Paski mrqdti, ktbre
jm zapisano w skm-ie, wy3wietlajq siq na IiScie po prawej stronie.
Aby ddqczyC pasek narzqdzi, nalety wybmC go i klikna-c przycisk Kupiztj. Wybtanie
paska narqdzi na liSeie po prawej m n i e powoduje mian? pqcisku Kcrpiuj na p c i s k
Usuh.Jego klikniqcie umozliwia usuni~ciewybm-anegopaska narqdzi ze skorosq-tu.
.,z,"cI.<- Do26 nieoczekiwanie w jezyku VBA nle ma sposobu dotaczania paskdw nar2edtl
=hYT do skorossytu ani lch adlqetania. 0per;rcje te tneba wykcnywaC rqcznle.

Kopa paska nanedzt zapisanego w skar~sryclez a m odrwierciedta jego zawartoe


<&)% w momencie dotgcsania, Jeiell pasek zastanie zrnadyfikawany pa datqezeniu, nowa
wenja nie zostanie autornatycmie rapisana w skoroszyeie. Nalety recmie usunqf
stary lpasek nanwizi, a nastepnie d d q ~ q Jq@
t nowq wersje.

Pasek narzqdzi dotqctony do skorosw autornatycmic pojawia siq w skomszycie w rno-


rnencie jcgo atwarcia, chyba ~e w przestrzeni roboczej ju2 znajduje sie pasek nanqdzi
o tej sarnej nanvie. Wivej informacji na Ken ztmat mjduje siq w podmzdziale ,Jak Excel
zarzqdra paskami narz~dzi?"we wczeSnijszej cqSci rozdziab,

Dystrybucjcr paska nanqdzi z dodatkiern


Jak wspomniatem w mzdziale 21 .,dystrybucja aplikacji w postaci dodatku czqsta jest
prtferowanp metada dostarcrania aplikacji utyckewnikom. OcqwiJcie ddatttek maze
zawierat jeden lub wiecej pask6w narzqdzi uq&ownika. Nalee jednak pamietar5: a po-
tencjalnym problemie.

Oto typowy scenariusz: tworzyrny apl ikacjq, w kt6re4 wykar;cystali$my pmek namdzi
q k o w n i k a . Przyciski na tyr~lpasku powadujq wykmywanie pmcedur VBA w skoroszy-
cie apllikacji, Ihlqczarny pasek n W E j i zapisujemy skorm$. Na podstawic skomzytu
t w ~ n y n ydodatek. Zamykamy wersje X U aplikacji, hstalujerny bcsdatek. Kl ikarny p q -
cisk na pasku narzqdzi u2ytkownika i . ..atwiera siq plik XLS!

OczywiScie mierzaliimy uruchomit pmcedury w dodatku, a nie w pliku XLS. lednak


wersja paska n a q d z i w ddatku nie zastqpila wersji w p l h XLS. W rtzultacit kl ikniecie
przycisku spowodowaIo otwarcie pliku XLS, aby moma byh m c h r n i 6 makro. Tego
pmblernu m o a a uniknqt, usuwajqc pack n-dzi ddqezony do pliku XLS. Po wyko-
naniu tej cqnrroSci btdtje sit wyswietlat wlaScim wcrsja paska narzedri. OsabiScie
prefemje tworzenie paska narzedri ,,w locjen, podczm otwiemnia dodatku. Zagadnjenie
to zostanie opisme szczeg6Powo w dalszej czqSci tozdziah w punkc ie ,,Twarzenie pa-
sk6w narqdzi".
kolekcjq
Kolekcja C m n d B a r s obiektu Appl tcatlon zawiera wsystkit obiekty typu CmandBar,
Ich wtaSeiwoSci i rnetody umohliwjajq stemwanie p a s h i namdzi za pomocq procedur
VBA. Ka2dy z tych obiehbw zawiera kolekcjq kontrolek (obiekt6w Control).

W tyrn podrozdziale przedstawie infomacje, kt6re naleg poznac pned rozpocqciem


pisania kodu wykonujqcego dzialania z paskami nanqdzi. Pokladoe zaponanie s i ~
z modelem obiekt6w znacnie utatwia wy konywanie zadah.

Optracje z paskami narzqdzi Evcela ( w b m i e z paskarni narzqdzi) wykonuje sic za pomoq


obiekt6w z kolek CmndBars. Ta katckcja skhda siq z nastqpujqcych elementdw:
r wsqstkich wbudawanych pask6w narzqdzi Excela 2003 (w licnbie 631,
wszystkich utworzonych paskdw nmqdzi utytkawnika,
\vvbudowanego paska mcnu o nazrwjc Pasek memu u r h z a kafkulaqjnego,ktdry
wySwictJa siq zawszc wtedy, kiedy jmt aktywny mkusz,
II wbudowantgo p a s b menu o nazwie Pasek menu Wybes, ktdry wySw ictla siq
zawsze wtedy, kiedy jest aktywny wykres,
wszystkich utwononych paskdw mcnu ugtkownika,
wszystkich wbudowanych menu p d n p y c h dostqmyeh w Excetu 2003 (dl pozycji). _

Rodzaje pask6w narzqdzl


Jak wspomniaicm na pocqtku rozdzialu, istnicjq trzy rodzaje paskbw nartgzi. K e d y
z nich charakteryzuje sigr innq wartoScia wtdciwoSci Type. Dopuszczalne wartofci wh-
Sciwdci Type kolekcji CormrandBars yszczeg6lniono w p o n h j tabeti. W jqzyku VBA
sg dostqpne wbudowane stab d2a poszcztg6lnych typ6w p~lskdwn m ~ d z i .

0 Pas& nm@ri
1 Pasck menu
2 Menu pdwnc

Wykonanie zapmentowanej ponizcj p a d u r y spowodujt wy$wietlcnic listy wsy s t -


kich obiekt6w C m n d B a r w kolekcji C m n d h r s jryrmnek 22.6). W ptypadku ExceIa
2003 lista zawiera 226 Ybuduwanych pask6w napdzi otar dodatkowo wsqstkie paski
menu i paski n q d z i utytkownika Dla Wdego paska narzedti prmdura M w i e t l a
wtawienia whkiwoSci Index, Name i Type uako Pmek nmq&i, Posek menu lub Menu
podream), a talcte informacjq o tym, c y jest to wbuduwany pasek narrqdzi.
CzqSC Vl + Tworzenie oplikacji

Rysunek 22.6.
Tq liste
wszystkich obiektdw
P # r & manqdzh
CommandBar Pas& nmqdzi
uhuorzono P h m h nmqda
Phf.$ amqdn
za pomocq k&u VBA Pnr* rrnmqjli.
' P a r a nmqdri
Parh n o n e
Pasdl mn-r@g
P l u k srrgr3.l
Pmark n u r l d n
PISIC nrrqltd
Prmh nmqda
Plllk lvtpdtl
Pmrnk mrqda
Pal& n v r q d n
Powk m q d a
Pm~mlrn r r t d r ~
Parmk nmmdm
P a dnmqde~
Pa~rl:n r r z t d e ~
P a ~ r kn w d r l
P a n h nrwdtr

Sub ShaHCbmnandBarlrfanesO
D l m Row As IntWef
D i m cbar AS ZomnandBsr

Raw -
Cel ls.C?ear
1

--
For Each cbar I n C m n d B a r s
Cells[Rcw. 1) cbar.Index
Cells[Raw. 2) cbar.Nam
Select Case cbar .Type
Case msoBarTypeHom1
-
CelIs(9ow. 3) 'Pasek irarredri*
Case msok rTypeHenuBas
-
tells(Row. 3) 'Pasek menu"
Case rnsoRa rfypPapUp
-
tell s( Row. 3) "Henu p d m r n e '
End Select

-
Cells(Rm, 41
Row ROW + 1
Next char
cbar.&llltIn

End Sub

Wykonujge &Iatania z paskarnl n a p d z l , rn~tnawQczy! rejestrator rnakr,


aby pnekond stq, jaki kod VBA mstanle wygeneruwany. Wleksza3t crynnakt
d~stosowywanlapgskbw n e r r e i [choE nie wssystkle) powduje generwanie kodu.
Jego pmanalfzwanie pnvala pamat model obiekt6w dla pask6w nmqlzi. W istacie
jest on dose prosty i ocryrulsty.

Tworzenie paskbw narzqdzi


W jqzyku VBA n o w p e k motna utworqd za pomocg met* Add kolekcji
CmandBars. Ponihza instrukcja bwmy nowy pawk narzydzi, nadajw mu dornyf lnq
nazwq, na przyklad Niestandurd~weI ;
Pasek nmqdzj poczqtkowo jest pusty (nie ma w nim kontrolek) i nie jest widocmy Cje-
go wMciwo3d Vf s ibl e ma wartoSC. Fa1 se). Padczas warnen ia nowego paska narzedzi
zazwyczaj ustawia sic pewne wlaiciwo~ci.Men ze spasob6w wykonania tych aynnoki
zaprczemtawano pon i2ej:
Sub CreateATool ba r E 1
-
D i m TBar As CcmandBar
Set TBar ComnandBars.Add

---
With T8ar
. Name "MjPa sek IJ~rztdzi"
.Top D
.Left 0
Visible = True
End With
End Sub

W pmedutze CreateATool bar wykorzysltano metode Fad kolekcjj LomnanaBars w celu


dodania nowtgo paska naczqdzi i utworzenia zrniennej obitktowej TBar reprezentujqcej
nowy pasek n a w z i . W kolejnych instrukcjnch n a s t ~ u j eustawimie nazwy paska narzq-
dzi, jego pozycji w lewyrn gdrnym row ekranu araz w!dciwaSci V i s lble. Wfakiwoici
Top i Left okreSlajq pozycjq paska nam~dzi.5q to wsphedne ekranu, a nie okna Excela.

Odwotania do kolekcjl ComMndBars w module kodu abiektu Thi ~Worktmknalej wpnedrib


i*@
. *g
m. wjwotaniern oblcktu Appl icat ion, na prrykhd:
Appl icatlon .CmandQrs .Add
W odwok?nlunalefy ufyd' kwallfikatara, poniewal obiekt Th~sMrkWkzawiera kolekcje
r m a n d 8 a r s , Gdy kod rnajduje sie w standardowym module VBA albo w module kodu
cbiektu UserForr, Sheet lub Chart, u*ie kwalifikatora nie jest koniectne. Moina by
si? spodsiwa6. Fe wlaSeiwoSE Th~sworkbmk. CmmdBars rwrdcn' list? paskdw naqdri
skaroszytu. Niestety tak nie jest. Tak wiiy wtafciwuS6 ComnvdBarr obiektu Yorrbock -
Jest rupetnie bezurytecma.

Odwdywanie slq do patk6w narzgdzi w VBA


Do l o b i e h Cmnd& r mafia a d w ~ h ksic poprzez j e p wlaSciwoSci I r d e ~lub Nam. F a
prtyklad wlaSciwoSC Index paska naczedzi Stmdurdoyv ma wartof 6 3, a zatem mo&a
siq do niego o d w M na jeden z poniazych sposoMw:

W przypadku Wcia nazwy nalety pamiqtat, $e wielko5-i liter nie ma maczenia. M6wiqc
inaczej, moha wpisaC nazwq Standard, STANDARD; srundurd Etd.

Mumerawanle indeks6w dla paskdw nanedzi nie jest sp6jne pomiedzy c62:nymi
@ wersjarni Excela! Na pnyklad w Excelu 2002 MaBdwoSf i ? e L s paska Typ wyhresu
wynosi 74, natomiast w Ulcelu 2003 wladcivndt :ndex a wartoki 74 ma pasek
narzedzl S'ehernat o r g a ~ i z a ~ nJeieli
y, apfikacja ma dzlah€ s r62nymi wersjarnl
Excela, rawsze naleiy k ~ q s b a ds wtaSciwu5ci Naw zarniast wlaSciwoSci Index.
Usuwanle patkcl nan@ri m pom'ocq kodu VBA
Aby usunqd pasek nm@zi utydcownika, nalce wykorzystat metode Delete obiektu
C m n d B a r. Wykonanie poni&oej instrukcji spwoduje usuniqcit paska nmqdzi MclJ Pa -
sekNa rzMz1:

J&li pasek narzqdzi nie istniejt, wywuhnie instrukcji spowoduje powstanie MNu.
Aby tapabiec wyvySwieflaniu kornunikatu o blqdzie pod- @by usunipcia nieistniejq-
oego paska n a r ~ d z iwystarczy
, zignomwat h$. Wykonanie poniazego kodu powodujc
usuniqcie paska nacqdzi M O j P a ~ eMarr@z+,
t je2eli taki pasck istnieje. JekeIi pasek nie
istnieje, nie zastanie wygwietlony komunikat o bwtie,
an E ~ R Wae~unpM X ~
CamandBars( "MbjPas&Nafr+jrf'l .@lete
On Error h T o 0

Enny spos6b polega na utwomiu fhkcjji ~ k d w o i k akr6m


, o h d h , CZy wybrany p a c k
n w d z i majduje sic w kolekcji t m n d b r s . Zaprezentowana p o n h j kfunkcja przyj-
muje jcden argument (n- obiektu ComndBar) i m c a w m d e True, je2eli pasek
narqdzi istnieje, Funkcja pmtwarw w ptt'li kolekcjq Cmnd8ars i konczy driaktnit
po tnalezieniu paska narz~dzio n m i e odpviadajqcej qurnenmwi.
Function Cc)mn~rExirts(n)As Boolean
Dlrn cb As ComMnQ&dr
For Each In CanMndBars
I f UCasetcb-Ham)
CmndBarExl sts
-- UCasetnl Then
True
I

E x i t Funct:m
End I f
Nexteb -
CannandSarExlsts
End Fun~tiion
- False

Bull t In -tylko do odczyh~Ma wartoSf True, jc%li obickt jet wbudowanym


paskiem nwqdzi Excela,
Enabled -j-i ma wart&&Fa1se, paslek natz@b!ijestukryty 1 wy*ieta.sie
na liikie dostqpnych p k 6 w narqdzi.

Name -n m a paska m q d r j . .

mo8arleft -- p ~ n qk d z i jest pqtwiierdzony do lewlej hwdzi okna;


msokrRi ght -pasck n-dzi jest przytwilerdzony do prawcj krawqdzi okna;
I. msoBarBottm -pasek n m ~ d zjest
i pmytwierdtony do dolnej laawqdzi okna;
msMar f l w ti ng -pas& narqdzi nie jest pnytwiedzony;
r msoSarPopup - pasek n q d z i ma postat menu podqcmega.
-
Protection liczba mkmita okr&laj~atyp zabtzpiecania dla paska n m z i .
MoZe m i d nastqpujqce wartof ci :
md3arNoPmectlon (domfllna) -- niezia@icctony kQ&~wnikmo2e docrolnie
dostmowat pasek n-i do wlasnych pomcb;
1 ms&a rNoCustmi ze -nit moaa dostclsowaC paska narzqdzi;
moBarNoResire -- nic m o a a mienid roaniaru paslra naqdzi;
msakrNoMove -nie moms przernicszcta6 paska n q d r i ;
ms~BarNothangeV1st b?e -utytkownik nic mo2e rnodylikmt s t a m
wySwictkania paska naqdzi;
mo0a rNo0angeDock -pasek nanqdzi nic mote bye prtytwicrdzony w innyrn
m iejxu;
E -
msMa floVerti cal k c k paxk narzgdzi nie mote by5 prrytwierdzony pa lcwj
lub pa prawej stranic uknq
mso6arNoFtort zontal k k -pasek n-zi nie mote fytp y t w i d z o n y
wzdht gdmej lub dolnej krawcdzi &a.

-
Type m c a l i e cdkowitqnprezenmjqq typ p a s b namzi. Matt miet
nastqpujqce wartdci:

msaBarTypePopUp -- menu pdrqcme.


m W i s t bl e -ma warto4C True, jcJli paselk narzqdzi jest widoeny.

Zapreantowma ponitej hkcja zwnm li* pask6w uZytkowniks. Rocdm


prmwam w p@fikolekcjp CunwindBzn i miqhza limik w pypadku. pas& narrp.
dzi rtpnzmtDwany przez mirnn$cbl jest paskiern n w d d , sj e p wWjwoSC aui 1t :n
ma wartoSC Fa1se.
Fumqan Custcmfual bars()
Dim cb As CcmandBar

-
Dim Count As Integer
bunt D
-
For Each cb I n Comnand0ars
I f sb.Type msoBarTypeNorma1 Then

bunt
End I f
-
I f Not cb.Builtln Then
Count + 1

End I f
Next t b
Customfool bars
End Function
- Count

Zabezpieczanie pned rnoillwo5ciq modyfikacji paska nanqdzi


WlrFa3ciwaSC Protection obiektu ComndBar zapewnia wide mo2liwoSci wbezpiecmnia
obiektu ComnandBar. Poni2sza instrukcja ustawia w!a4ciwoSC Protection paska namcdzi
o nazwie MdjPasekNarzNz~:

Po wykohaniu tej instrukcji uwkownik nit bgdzie m6gt dostowwa6 paska nanedzi.
Smte dla w I d c i d e i Protectlot? m o h a Iqczyk, ce omacza, kc za prnocqjednego pole-
cenia m o h a wpmwadrad dme rodzaje zabezpieczeh. Na prykhd p n i ~ z instrukcjaa
modyfikuje pasek narzqdti Mbj PasekNarzHr i w taki sposbb, aby nie rnoitna go byto do-
stosowaC lub.przenieid:
- -
Set cb CmandBars[ 'H6jPasekNarzedrlm)
cb. Prgtect-ron t m*i msoBarNoMov~
m s ~ B d f N o C ~ ~ze

Wiele wbudowanych p k 6 w -n Exaela s p m i a wmknit inteligentnych, tm. pojawia


sie w przypadku, kitdy pracujemy w okreS;lonym kontekScie. Na prryklad pasek narzq-
dzi W y h s ~ v y k l ewySwietla s j q w mamencie uaktywnienia wykcesu, a znika z e h n u
w przypadku jego deaktywacji. P q t k o w o Microsaft okreSlaI tq w&cim3t jako mre
m q a n e wykywunie (an% mrrmerrsitg), ale w nowszych wersjach zapmstam msowania
tej tminologii. Z p o d u braku lepszep terminu w dalsym, cjw b d q go w celu
opismia tej cechy pmk6w narqdzi.

v
c!?!
Aby wyCqcryC autamatycme wykrywanlc dla ohSlonega paska narzqdzi, wystatczy
go ramknq6 podczas pracy w kmtekScie, w Hbryrn y k k Iten pasek sie wyswietla.
Aby ponownie w t p z ' dutamatycme wylcrywanie dla tego pasb narmd, nalezy
pnownie przywolat go na ckran paderas pracy w akreSlonym kontekScie,

Wciwo4d autontatymego wykrywania kantchtu m o h by4 pmydatna w nasqch


aplikacjach, aby na przykhd wy9wiet'tat pasek narzgdzi tylkol wteby, kiedy zostanie
uakt)wniony okreSIony arkusz lub kiedy zostanie uakqwniorra kum6rka w okreilonym
zakresie, Dziqki obsiudze zdarzeri w Excelu vykonanie takiego radania jest stosunkowo
pmste.
Proccdm 2: listing 22,l hvorzy pasek &n w b m e n d e wtwierania skomsytu,
nastqpnic wykorzystuje zdarzenie 9 1ectl anChange jdnegr, I:arhzy skororqtu w celu
spsawdtenia, cry- aktywna korn6rka majduje sjq w d r e s i e ZzkresPaskaNarzdzi. Jekeli
IlktIng 22.1. Pasek rtamxf Wcdocmy tU,ko wtedy, kieby wskafnlk k c m H C majdure sif, w okreS10nym
zakresie
Sub Createfoolbar( 1
'
Twrzy dmnstracyjny pasek narzedri o narwie kutoSensc
Dlm AutoSense As C m a n d B a r
Dim Button As CmndBarButtan
Dim i As Integer
'
Usuniw4e paska narzedzi . jetel i i stnleje
On Error R e s m Next
CmndI3arst "AutoSmse"1 .Delete
On Error EOTO O

- --
' Utwarrenle paska narredzi
Set AutoSense Camnamlbrs .Add
For I 1 To 4
Set Button AutoSense.C~ntmls.Md(ms~ntr~lButton1
Wlth Buttm

-
.Onbct~on= "&uttonn & 1
. FaceId i + 37
End With
Next i
. -
AutaSense Nam *PutoSenseD
End Sub

tak jest, pasek nandzi zostanie ~ w i e t l o n yna e h i c , w innym pm?5adku pozostanie


ukryly. Mbwiqc inaczej, pasek n a q d z i bgzie widomy tylko wtedy, kicdy akrywna
kornlbrka majdzie siq w okreSlonym takrcsie.

Pmcdura ta ( e a n a p m z procedw Mrkbmk-Open) twomy prosty p k narzqhi


o nazwie Aurdeme. Do wykonywania procedur skonfigrowano w r y pnycisk i paska
narzqdzi. Ich n a m y to Buttml, Button2, Button3 i Button4 Przcd utworzeniem paska
narzqdzi kad usuwa pasek narzqdzi a tej samej nazw-ie G d e l i taki istniejt).

Rocedurn abslugi idamnia Select i onchange (umieszczona w module kodu obiektu Ar-
kusrl) jest nastgpujqca:
Private Sub Worksheet Selectlar~Changet ByVal Target As k e l .Ram)
.
I f UnlontTaqet ne.ftangel "ZakresPaska~ars~dzia1
1 .Address = -
-
Me.Rangeln5akresPaskaMarz@z:l'1 .Pddress Then
ComMndBars("Aut~Sensc"I .Visible T m
El se
-
CmndEars("htoSense* 1,Visible Fa1se
End If
End Sub

Rocedm spra* E Q Y B C J I O ~kombrld.


~ J e l i lamacowy ohrm muim sic w zdmsie
Za kres Pa skaNarzedzi ,wldciwoSC V i s i b l e paska narzphi Aurdkme jest ustawiana na
wartMC True, w innym pqpadku jest vstawiana na wartoe Fa1se.

W akwoszycie zdefiniomno takte pmadwq Workbook-&foreCl ose, ib6rej wykonmie


powoduje usunigcie panlia narqdzi Autoserne w mornencie m y k a n i a skomsmu.
Technikq te moms bc~)rviSciewykorrystai do dostmwnja innych wlaSciwaSci auto-
rnmcmego ykqwania pska narz-.
Nieladrry pr~gramifcilubiq ,$mjrnowaE kontmlp" nsd Excelem w czasie ladawania
aplikacji, u k r y w a j ~na p q k h d wszystkie paski nrrzqcki, pasck -nu oraz pa?;& for- I
rnuty. Takie dzialanie jest jednsk wbkiwe tylko wtedy, jeZeli po zamknieciu aplikacji
zostanie ppwr6cony stan poezafkowy. Odtwmmic obejmuje wyswietlenie paskdw
nmqdzi, kt& by ly widoeme przed uruchomitnim apli kacji.

W przykladtie pokarsnym w tym podpunkcie zaprcmntowano s+b ukrycia wsryst-


I
kich paskbw narzcdri i pbtniejrzep ich odnwonenia w rnommcie zamykanis aplikacji.
P m d u r a HldeAl1 Toolbars jet wywolywana p m z pracedurq obshgi sdanenia Wcrk -
book-Open. natomiact proaedura RestoreTcolbars p m z p m n d u q obshrgi Edarzmia
-
Workbok B e f o r d l ose.

Kod zapamimje ekranouy W s paskbw na-i. m p i s u j ~namy widoanych p k 6 w


w arkuszu o n m i e TBSheet, W nasic zamykania arkurl2a procledura Restorefoo'l bars
odczytuje te komdrki i wyiwietla paski ci&iWykorrystanie
. arkusza do zapisania
nanv pask6w n a q d z i jest bespiecmicjsze od wykorzystania tablicy VBA. ktdrej war-
tofci mom by5 utraconc. Obie pmcdury pakanrje listing 222.

Sub HideA11Tmlbars~l
Din TE ds ComMndbr
Dim TBNum As Integer
Dim T&Sheet As Worksheet
Set TBSheet = ~ t s C ' T B ~ " 5
-
d p O l i c a t i w r . S c r ~ L $ d a t i n g False

'
-
Ukrycrle wszystkleh wlckcmyeh pask6w ~ r ~ e d iz iraplsanie i@
TBNun I)
razw

-
=or Each T3 I n CarmandBal.5
If -.Type f l s o B ~ r T ~ m
If TB-Vlsible Then
Then
l

TBNm = f0Nm + 1
TB.Visible False
.
-
TBSWt Cell sTTBNm. 13 - PB-Ham
End If
End If
Nextm
i = f me
A p p l I c a t l m . S c r ~ a tng
End Sub

Sub RestomToolbats C 1
Dim TSSheet As nbrksM
Dim cell As Range
,
Set TBSheet -
Appllcatian.ScrmVpdating - False
Sheets l'tBSheet " 1

I Wktyclepaskdwnarzedzl. ktdrebyly paprrdnicswyfwietlane


OI Error a e ~ e ~x t ~
For Each cel l In TSSheet. Range( "A :An 1
.Specia1Cel'1s(xlCe11~~~e~onstantr)-
C$mnandSarslcel1 ,Value).Ui5ible - True

End Sub
Next cell
-
Apoll cat 1on. ScremUpdat ing True

*-*,
W niekthyh plnypadkach ukryeie widocmych pasltbu, nan@zl nle wystarcza. Na pnykhd
@
; $*a
paski narpdzi, W6re autmatycm{e wykryw;rfq kontekst pctrnim ukrycia ich w momeneie
ctwiwania aplikacji, y5wieietla sie, jedli splilcacja znajdzie sit!! w odpowlednirn
korrtekSde. Jednym z rnoilrwych foorwiaqzan t y h p&lern&w jest ustawrenie WaScfwaSci
Enzbld na wart046 False dla wszystkich p s k h narzedd, ktdre nie majq by? Wyswletlane,

Obitkt ComnandBar -taki, jak na przykhd pasek narqdzi -zawiera kontmlki (abitkty
Cmnd8atf;ontrol). Dostqp do tych obiektirw uzyskuje siq za pmocq wtaSciwoSci Curb-
trol s abiektu CmandEar. Istniejq trsy mdraje:kantrolck:

pole konrbi -ob ickt C m n d B a rCombcrBox,


w menu -obielct C m n d f l a f l o ~ u p .
PaniZsza procedura Test wyfwietla wartoid wMciwo9ci Ca~timdta pitrwszego
obiektu ComndBa~rContro'Fmwarttgo w standardowym pasku n a ~ @ z (o
j findeksic3):
Sob T e s t 0
Msqbx C m n d S a r~ (3I .Controls('11 .Capti an
End Sub

Wykonanie tej p m d q spowoduje wy5wiet2cnie o h a informacyjnega pbkazmego na


r y s u n h 22.7 (pny zaIo2eniu, Ze pasek nanqdzi Stundmdow)r nie byt modyfikowany).

bstw popnez numery indelcs6w do kontrolek pask6w n m d z i jest mogliwy niezaleimie


od ustawienja opcji Z ~ ~ r spz ek m j pe h e m m (majdujqcej siq w zakMce Opcje okna
d ialogowego Dosrosa~ywanie).Ale mmim posiugiwad siq numerem indcksu, moha
wykorzystae wMciwaSt Caption. Wykonanje ponibzej praccdmy ponvala uqskak te
same wyniki, co p u p d n i o :
Sub Test211
Msgbx (amaandBars(*Standard') -
.Control sC"Nbwym1.C~ptfm
End Sub
Odwotpanle sic do kantralek za pamacq ich namy jest ralehe od wersji jerykowych. L
Z tego p o d u kod zaprezentowany powytej nle bqdzie dziaIa4, jeteli utyjemy inne)
nazwy paska n a ~ d z nlt
l wlska. Romiqzaniem problem" jest zastosowanie melody
Fi ndControl w celu odszukanla kontrolkl na pctdstawie ]ego wtaSciwoSci Id. Metoda ta
mstanle opisana w rotrlziale 23.

N a m a kontrolki zapisma w wlaSciwoSci Caption czqsto zawiera znak &. Litera za tym 1
makiem jest wy9wietlana z @krcSlcnitrn i dziah jako klawisz sMtu dla przycisku
paska narzedzi (np. w n m i e &Nowjest to litem N). Jc2eli odwotujerny siq do paska I
narzqdzi za pofrednictwern wMcEwoSci Caption, nie musimy uwzglqdniad znaku &.
Czasaml eblakty CaRml zawlerajq lnne oblekty Control. Na $mykhdplsrwsza kontralka
RF* paska nanedzl l?ysowanie rawiera inne kontrolki (na tej podstawie m t n a tak2e
wywnioskowat, ze paski nanqdrj mogq zawierat elemenv menu). Zagadnienie
to opisano bardziej szczegdtow w rozdziale 23, prry okazjl ornawiania menu.

Wykonanie poniazej pmedury spowoduje Wyswietknic wla9ciwaSci Capti on w t k i c h


obitktbw Control w obqbie abiektu ComnandBar. W przykladzie wykonystano pasek
narzqdzi Stundardowy, 1
Sub ShowCont r o lCapt ions( 1

-
D i m Cbar as CormandBar
Set CSar ComnandBars( "StandardWJ

-
Cells.Clear
Raw 1
-
For Each ctl In CEIar.Cantro1s

-
CellsIRaw, 13 ctl .Capttan
Rm Rcm + 1
Next ctl
End Sub
Wynik dzialania pmedury ShowControl Ca ptians zapnzentdwana na rysunku 22.8.
Rozdzia?22. + Twonenie pcrskbw narzqdzi 427

WySwietlanie wslystkich kontrolek na wszystkich paskach nunadd


Pmi- procdura pmtwam w pet1i wszystkie paski narzgdzi w kolekcji. Dla wszystkich
pask6w n-dri, tzn. w p q p d k u , gdy wSaSciwo4e Type o b j e h ma wart& maBarType-
Normal, wykonywaaa jest inna petla, w kt6rej wySwietlajq sie podpisy (watto3ci wtaSci-
woki Capti on) wsystkich przycisk6w znajdujqcysh siq na pasku. Stata msoBarTypeNom1
jest wbudowanq stalq Exccla, a j e j wartof i wynosi 0.
Sub ShmAl1Tool barCont rol s I
D i m row As I n t e r
D i m Cbar AS CmandEIar
D i m ctl As kmand0arCbntrol

row 1 -
Cells.Clear
For Each Cbar I n C m a ~ E l a r s
If Cbar.Type msoBarTypeNoma1 Then
Cells(rcw. I ) CSar.Naw
For Each c t l I n Cbar.Controfs
Cell f ( rm. 2) = ctl .Captian
O
rw row + 1
Next ctl
End f f
Next Cbar
~ n dSun

CzqSciawy wynik dziahnia pmcedury ShmA11Tool barbntmls zapmentowano na ry-


sunku 22.9.

Rysunek 22,P.
Lista podpr'sdw
wszptkich konftojek
na wszystkich
paskach nan@a
W cclu dadania nowej kontrolki do o b i e b C m n d B a r mama wykonystad metode Add
obielctu kolckcji Controls. Wykanmic instrukcji pokazanej poni2ej spwuduje dodanie
nowej konaolki do paska narz~dzio m i e MdjPasetHarz@ri. WMciwoid Type tego
paska nanqdzdzi ustawiono na wart& moControlBurton, co odpowiada standardowemu 1
pqciskowi,
CmandBarsI "MjPasekNanedzi'3 .Controls.Add Type :lmsKcm*.ml&Itton I

Przycisk dodany na pash nanqdzi za pomocq p p c d n i e j insrmkcji jest pusty: jcgo klik-
nivie nie przynosi tadnego efektu. W wiqkszdci pnypadkbw, dodajqc nowy przycisk
na pasku nan@zi, nalety ustawit pewne w+aiciwohi. Zapmntotmny poniaj kod
powoduje dGdanie nowej kontrolki, przypisanie o b r m ZZI pomocq wlaSciwa9ci Fa celd.
przypisanie makra ta pomocpwlaiciwobci &&ti on i okdlenie podpisu:
Sub Mdflutt~W
D i m NewStn As CornnandBartkrttbn
Set NewBtn CmnandBars( "MbjPasekNarzqdzi"I .hmtrol r .bdd -
(Type: l m ~ n t r 0 7 B u t t o n E
Wlth N&tn
,Faceld = 300
-
.Onbction "Hbjetl~km'
. C a p t i ~ n "To jest tetst wskazbki .'
End With
End Sub
i
Praeedura AQdWlttm twomy zmimnq chiektowq M n repreantujacqd u d a m q kontrolkq.
Nastqmie m pumocq konstrukcji With . . . End M i t h ustawiane q wlaSciwoSci obiektu.
T c same dzidania m o a a wykonaC bcz wyhrzyst~cwaniazrniennych abicktowych t&
jak pokazana w poniBzym krsdzie: I

Sub Md6uttmO
Ui t h ZomnandSarsI*M6jPas&Hai=z~zlD~ .brCmls.Md -
(Type :~msdontrolButton 1
.FaceId 300
.Or&tfan = "HojeHakro"
.CaptScm * L L Tj ~e s t tekst wskazhki .'
Znd With
End Svb

Vsuwunle kontrolki z paska narzqdzl


Aby usunqt konholkp z obielau C m r r l B a r . nal* wykorzystad mctodp Delete obiektu
CmndBa rContml . Wykonanie ponituej instmkcji s~owodujeusunigie picnvszej ken-
1

trolki z paska nmgdzi M6j Pas&Harzedzi :


Konmlki pask6w narqdzi chmkcrytujq s i kilkorna~ wWciwdciami, h6re wptywaj q
na ich wygIqd i sposbb dzialania. PoniZej zapremtuwano Listq ki!ku bardziej &ytecmych
wIaSciwoSci kontrolek.
m Beg1nGmup -jeAi ma ~ 9 6prrcd kontrollq wySwictla siq scpatator.
~ 0 True,
-
Bui 1t In tylko do odczytu. Ma wart096 Tme, jeteli kantralkajest jcdnq
z wbudawanych kontrolek Exctla.
-
Captlan tekst wyiwictlany dla kontrolki. J-li kontrolka wyiwictla tylko
ohm, tekst pojawi sic, gdy nad kontrolks, wstanie urnieszczony wskafnik rnyszy.
Enabled -jtali ma w a ~ o STrue,
t kontrblke mo-a klikad.
-
FaceID Iiczba repmzentujqca ohm wy3wietlany obak tektu kontralki
albo na przycisku, je2eli kontrolkajest przyciskiem paska nzllz*i.

-nazwapmdury VBA,ktdra ma by6 wykonm po klikniqciu kantralki


On4ction
1State -decyduje o tym, czy wyjwktlana kontroika wyglqda na wci4niqQ.
WlaSciWC jest dostqpna tylka dla kontmlck typu C m n d B a T B u t t o n ,
Sty1e -d e u j e s tym, czy konmlkajest wySwittlma zpipisern i (lub) a b m .
W&iwo$t jest dostqpna tylko dta kontrolek mu C m n d B a r B u t t o n
oraz CmndBarCombcBox.

WlaSeiwoSE Style konmldc t o m n d B a r h t t o n m ComnandBarCCnb~fhxdecyduje a ich


wyglqdzie. Zazwyczaj okreSla siq jq za pommq wbudowanych stdych. Aby na pwkhd
wyiwietlit pnycisk z obrazern i tekstcm, nal* ustawid w M c i w d t - Styie na wrtoSE
mo0uttonIcon A~ldCaption,

Punikj wyszc#g6Iniono ptawidiowc ustawjcnia wkiwc3Sci Style dla kmtmlki Cam-


msnd5arButton:

rn msaButtonIcondMrapCapti on,
Dla kontrolki ComrrandBarCwnbo8ox wWciwyrni ustawi eniam i sq msoComboLabe1 tub mso-
CombNorma1.

Na rysunku 22.1 0 pokazano siedem kantrolek przyciskdw polecd. K&dy x nich repre-
zentuje inny styl.

Siedern warto5ci
wlaSciwaSci Sryfe
dla kbntrolkl

= Skmszyt. w Mbrym znajduje slq kod M r z q c y pokamny wsek namyH, jest dostqpny
na *ie CDROM dolqcronej do ksieki.

Tekst wySwietlany na kontrolce okre9fe sic za pomocq wfaSciwSei Cant ion,


<?22&*
!!, -
natomiast obraz za pornocq wartaSci wlaSciwoSci FaceIO.

Zrnianrr obrazu przycisku parka nanqdri


W trybit dostosowywania pask6w narzqdzi klhiqcie d ~ w o l n q pm i s k u paska naqdzi
i wybranie plecenia Zmiefi obrm pqclrkrr spowoduje wytwietlenie 1Isty 42 o b m 6 w
do wybaru (rysunek 22.4). Bardzu rzadko uda narn siq wybrad spo3rlid nich taki obraz,
hbry nam odpowiada. Z tega puwodu do wboru obrazu warto wykoszystat kod VBA.

O b m wy3wictlany na p k u nan.@zi cikFeS!a jego wfaSciwd6 Faceld. Aby obraz sic


wySwietla4, whSciwoSC Style konaolki maze by6 ustawiona na dowolnq wat.lo4t s wy-
jqtkiern msoButtonCaption. Ponitsza irtstntkcja ustawia wkiciwSi: FaceId picnwzego
pnycisku paska nmqdzi ;MbjPasekNarr@zi na WOSC 45 adpowiadajqcq ikonie skrzynki
pocztowej:

W jaki sposbb okreSlit nurner kodu wtytej ilustracji? OczywiScie mokm zastosowa~
metodq pr6b i wd6w, ale 0 wiele lepszle! jest zastosowanie prmedury VBA, k6ra wy-
Swietla wszystkie dostepne obrazy prryeiskdw paskbw narzgdzi. K d t listingu 22-3
tworzy pasek n-zi z 200 przyciskami. Opr6cz tegs zmim p l c kombi, kt& mobs
wykorzystat do okrdlenia, ktbry zbibt przyciskdw ma byt wySwietlony. Poqtkowl'o
wyhietlajq siq obrazy o numerach FaceId I - 200. Dmgi zbidr wySwiet!a a b m q o iden-
tyfikatorach 201 -400 itd.

Ptm ButtwrGroup As Long


Sub 5hawFaeeTDs [ 3
Otm NewTmlbar As IhnandBar
Dim New&rtton As CmandBasButton
Dim SetNm AS CmndBarCornbaEox
Dim 1 As Integer
'
Usuniecic 1stniejacego paska n a r z ~ WFaceIds . jeLe1 i Istnieje
On Error Rsume Next
Appl icatlcxl.ComnanCBars('FaceIdsm) .Delete
OR Error GOTQ 0
ButtanGmp = 1

'
5et NewToalbar -
tbdanie pustego paska narzflzl
Rppl tfaticm.ComnandBars,Add
(Ham:-"FaceIds" , temporary :-True)
-
MewToolbar.Vi s i ble True

'
-
Dadanle 200 prxyci s k b
For i 1 To MO
!jet N&ttm NekrToolba;r.Contmls,Add -
I T y p e : ~ o C b n t r o l ~ u t t o n10:-2450)
.
Next I

- -
Obdanie mrwij a n e j 11sty
Set SetNum NewToolbat.Contm1s .AddlType:lnrsoControlD~cwmI
For 1 1 To 10
~ t ~ . A d d I t"2bj6r
m " 8 i
Uext 1
With SetNwn
- -" N m r
. L i stlndex h~ttoffiroup

,On&tion -
.Caption zestarm prtycisk&"
"NewButtons"
End W l t h
HewTaal bat.Wtctth = 400
* Skonfigurclwanie ptsyci skbw
Call NewButtons
End Sub

Sub k B u t t o n s t l
'
Wy5wietlenl e przycf s k h na podstawle wybranega rbioru na rozwljanej 1 l3cle
O i m i As Long
- -
ButtwlGmp ~ n d B a r i ~ " F a c c 1 d. sC"o ~r i t r 0 1 ~ ~ ~ N u nzestawu
e~

-
przyci s k b " ) .Li stIndex
For i 1 To 200

-
W l t h CannanCSars("Face1ds') .Control sC1 E

-
.FaccId l0uttonGmup 11 * 200 + i -
.Caption = 'FaceID
-0nAction "EwtySub*
End With
- " & IButtonGroup - I1 * 200 + i

Next i
End Sub
Ptbcedura ShowFaceIDs tworzy pasek natrgdzi i dodaje m i s k i . Wywduje prncedur~
NewButtons, lusdawia whiciwoic FzteZD i d h j e podpis (podpis ~ S w i e t k asiq %K mo-
mencie, kiedy wskahik myszy majduje siq nad prqciskiem). Wybrsnie innej pozycji
na romijanej Iiscic take powoduje uruchomienie p~lceduryNMuttons. Zbibr przyciskdw
jest okre4lany za pornocq micnnej poziomu modulu ButtanGrauu.

z%= Ten pryklad Jestdostepny ns pFycla C M 0 M m m n e j do kdqtkl4

Chociat w Excclu dos&pnych jm bardzo duto obtwhv, Mre motna nosowat na pa-
skach mqdzi, nicktbny wo14 definiowd w h n e . Do tego celu m o a a wykotzystaC
ed;or pnyciskdw, pokazany na rysunku 22.12, kt6ry p i w a l a na dycjq obraz6w pmy-
ciskbw o wyrniarach 16 x 16. Aby wyiwietlid Edyror pnyciskdw, n a l e q wybrat pole-
cenie IViduPP arki nunq&~Dustmuj. Nastepnie pny wySwietlonyrn oka ie dialogowym
Dosto.rmvpwnie nale* kliknqd przycjsk na pasku narz@zi prawym pnyciskjern rnyszy
i z menu wybrat polccenie E@uj obrmprrycidai.

' WW u 2003 molna -u


wersjach.
wi.ekszej I l d y kctllorbw na pr;tyciskach nfz w popmdnich 6
G

I
Jceli korzystamy z VBA, do utwamnia paska m q d z i ,,w Iucie" rno- wykorrysta6
metode PasteFace, b6ra wklei ohm ze schowka. W kdzie saprezentowanym ponitej
przyjgta, fe arhsz Arkuszl mwiera obraz Meja Ekona. Obraz skopiowanu do schowka, na-
stepnie dodano pasek mqdzi i za pomocq rnetody PasteFace o b m umieszmano na pasku.

-
ThlsWarkbaok.Sheets~"ArkustZm).P1ctures("HofaIkbnam) .Copy
Set PyButton GcmiandBar~["MjPasek"
VyRutton. Pasteface
5 .Control s.Add~fype:~msohntmlButtonl

hocedursr z Iistingu 22.4 twrzy pmek namdzi mwicrajqcy pujtdyncq prtycisk Pod-
pis na tym rysunku prredstawia laricuch opisujqcy format liczby dla aktywnej kom6rki
(rysunek 22,13). W pmcdurze wykorqstano z d a m i a m i w e z obiekzem Worksheet
w celu monitomwania m i a n mmaczonego o m . KEedy achodzi zdarzenie Selection-
Change wykonywana jest pmtdura mitniajqca podpis przycisku.

ltysunek 22.13.
Ten pwsk
$Wy~lrM JT n v q ' obrrh? Cnmrru&r (Tnrmlt hczby).
M w i etfa 7 ,

Sub MakeNmberFomtOi splayC 1


Dim Tt3ar As CarmartCBdr
Dlm Newstn As CmandBarButtan
@
U s u n l ~ i epaska mrzedzl F o m t I lczby. jete15 istnlcje
On Ermr Resune Next
kmmndSars[" F a m t Ilczby'l -Delete
C~I Ermr GoTa O

Vhronenie mwegc~paska n a r d z i
Set TBar = Comnand€hrs,&dd
With redr

-
.Ham = "Format 1iczby'
..Visible Tme
End With

' ~ a n l prwr
t stu
Set Hewetn ComMndBarsql 'Format 1Iczbf"' ,CMTtml S , Add -
lType:-msKmtrol Button]
KSth NewBtn
.Captian
.OnActlon
--
"'

-
'ChangeNwnFem t '
.Tool tfpText "Kl ik n i j. aby mienit fomat 1 tczby , "
.Style = msoEWtonCaption
End M l t h
C a l l UpdateTwlbar
End Sub

csis 4 Wwej infbrmacji na temat zdamfi majduje sle w rozdzlale 19.

Pmcedura UpdateTmlbar kopiuje whSeiwoi6 NumberFormat miennej Acti veCel l do wla-


SciwoSci Capti on prycisku:
Sub UpdateTwlbar( 1
'
Wstawienie m p l s u na Sarlcuch opisujqcy format 1 icrby w aktgwnej tomdrce
On Error Resm Next
-
CommandBars( "Format 1 icrbym).
Control s(l) .Captjon A c t t v e E e ~.HWrFamat
~
If Err 0 0 Then CorrmandBars[*Fomat 1 lczby"). -
Control s(l).Captrlon; ""
End Sub

WldciwoM OnActi on przycisku zostala ustaw'ona na pmcedurt ChangrNumFormat, kbrq


mieszczono panizej. Pmcdum ta ydwietla zakhdkq Liczby a h a diallogowego For-
matuwrrnie kom6rek (rysunek 22.14).

Sub Cha ngeNmfemat Z 1


Appl i c a t f o n . D i a l a g s t x l D ~ a l ~ F o r m t ~ r ~ . 5 ~
Call UpdateToolbar
End Sub

Tcchnika ta dzjah doSC dobrze, ale ma wade: jeeeli &ytkomik mieni format liczby za
pomocq przycisku na pasku narz~dziFmtztawani~,podpis nje zmieni sic, gdyt zmiana
>
fonnatu liczby w km6m nie generuje zdarzenia, kt6re rno-a Sledzit.
Przypisywanie m a h uiytkownlka da wbudowanego przycisku
K a y wbudowany przycisk po waduj c wykonanie okre9lonej wewn~trmcjprocedury.
Do wbudctwanego przycisku motna jednak p q p i s a t wlasne makro, W tym celu wy-
starczy ustawiC w#aSciwoS6 OnActi on, Poni&za instrukcja powoduje prtypisanie makra
do pnycisku Sortaj ranqco:

Gdy ta instmkcja zostanie wykonana, kliknigcie przycisku Surhj rosnqco nie spowoduje
posortawania rakresu. Zamiast tego zostanie wykonana proeedm VBA ShowMsg. Aby
pnywtdcid normalne dzialanie przyciskowi, nale* pr~ypisaEpusty hricuch nakdw do
wIagciwofci DnAct ion:
CmandBars("Standardml,Control s( "Sortuj rosnqco") .OnActlan - '"

Wy konywanie dzialafi zwiqza nych z przycisklem paska nanqdzi


Wywdanie mctudy Execute powoduje wykonanie procedury wewnqtrmej prtypisanej
do wbudowanej kontrolki paska narzqdzi. Na przyklad wykonanie ponifizej instrukcji
jest rbmoimacme z kliknivim prqcisku Swmj rosnqco na pash n m @ Standardary:
CmandBars { "Standard"1. Control s( "kttuj rosnqco" 1,b ~ ~ u t c

Zastosawanie metody Execute dla pnycisku na p a s h narzqdzi utytkownika powoduje


unrchomienie z w i p e g o z njrn makra, kt&rezostafo przypisane m pammq wkdciwofci
ORACt7 on.

Zostosawunie lnnych typ6w kontrolek na poskach nunqdzi


Standatdowy przycisk na pasku n a n d & jest zaledwic j&ym spoSr6d pieciu typ6w
kontrolek, ktbre matna na nirn urnEe3ciC. Typ kantmlki d m i n u j e wMciwoSt Type.
Poszczeg6lnym typrn kontrolek, ktdrych moha u2yd na paskach nanedzi, odpawia-
dajq nastqpujqce wbudowane stale:
r msoCont rsl Button -standardowy przycisk,
M maCanEto1 EdS t -pole tekstowe,
a msmnt ral CarrboBox -pole kombi,
msoContr o l Dropdm -- mzwijana list&
msaCont rol ButtonPopup-pnycisk, ktarego klihjqcie powduje wy3wietlenie
innyeh kontrolek. Za p m q tej kontrolki m o h a utwony&menu mwierajwe kilka
C
~ z y eim
j

%
2
-
(
WtaSclwoSE Type abiektu Control, ustawiana w rnomncle twmenia kontrolki, jest
Qlko do odcrytu. M6wiqc in=@, po utwoneniu kontrolkl nle m o ~ mienit
a jej typu.

kocedura MakeHanthli st z listingu 22.5 twony nowy pasek narzmi, d d a j e do niego


ruzwijanq I* i +a jq mmmmi mitsiqcy. W t k o w o &wia wkjwoSC OnA5 on,
dzieki czemu khijeeie kontrolkf pdwaduje wykonanie prmedury PEsteHorhh, Mra
wkleja wybmy miesiqc do aktywnej korndrki. Uqskany pasek zapamtowano na ry-
sunku 22.1 5 .
Rysunak 2 2 15.
Ten pasek nanedrf
&era kontrolke,
do ktbrej d d p o n o
rnakro

UsHng 2.2.5. LWqcranle mnvi-amJlkty do paska naapdzl


Sub MakeMonthll s t I )
D*m T$a r As C m n d B a r
Qtm NewWl As CananCSarContml
Oim I As I n t e r
"
Usuntqcle paska narsqizt. jeJt 1 lstnleje
On Error Resm Nefl
ComMndbrs( 'Llsta mies4ecy') .Delete'
OR Error GaTo O

-
Utwclrzenie nawego paska narx@rl
kt lEar mandSars,Add
With TBar
. N m --
'L4 sta miesjqcy"
.Visible True
End With

Oadanie mrrrfjanej llsty


.Controls.Md
Set hlewOO = GonmandBarsC'l'l sta miesiwyW> -
[Type:lnrsoControlDropdtM)
kSth N m

-
.Capt iwr = 'DataDO"
.Onktim 'PasteMonthW
.Style ms&ttonAutamatic
.
For 4 -
Hypelnienle listy mmmi m i e s i w
1 To 32
.AddTtem FormatIDateSerlal(1. ? . 1). "mmmml

End
Next 1
.Listfndex 1
W l th
-
End Sub

Sub PasteMonthC}
'
Ctnieszczeulc w y b r a m mlesSwa; w aktywnej kamdm
(h Error Resme Next
With CmndBars("L1sta mlesiecyml.Controls("DataDOw3
ActivKell ,Value = .kistI.tistlndex)
End With
End Sub

W skomszycie dddatkowo wykorzy5tano p r o c d u ~~ b d u g zcfaneh


i Worksheet-Selec-
t t on(Xla me. Prccedura jest wykon y n a , kiedy ctykownik zaznaczy nowy obszar w arku-
s a 3ej
~ dziatanie polega na sprawdzeniu, cry w aktywnej kom6rce majduje siq nazwa
Illiesiqca JcSli tak, pr~ceduraustawia wla3ciwoSd L ~ sIndex
t mnvijanej Tisty na pasku
narzgdzi.
Private Sub Worksheet Select ionChange(ByVa1 Target As Excel .Ran91
Set ActGell ?aGet . ~ a n ~ e ~ * Aj ! '
For 1 = 1 TQ 12
-
If Actcell .Value FormatC03ttSerlalil. I, I ) , "m')Then
-
Cmanb&arsluLista miesiecy") .Control sl"DataD0" 1, L~stZndex 1
E x i t Sub
End If
Next i
End Sub
Rozdziai 23.
Tworzenie menu
Niemal w k & d p prugramie dziakjqcym w Windows system menu spehfa funkcjq pod-
stawowego interfejsu. W standardzie Windows pasek menu majduje siq bczpofrednio
pod paskiem tytuh apPi kacji, Dodatkowo w wiq ksmki wsp#czesnych pmgramrjw im-
plemmtowany jest inny rodmi menu: menu podreczne. Zatwyczaj klikniqcie pmwym
pryciskiern m y s y aMlonej pzycji wyJwbtla menu p d q c a r e zawierajqce plecenia
wtasciwe dla wybranego konteksm.

W hcelu wykotystano tradycyjny pasek menu okna om menu podvmc. hgmmi5ci


majq niernal pelnq kontralq nad caw systemem menu, wlqcnie z menu podrpmymi,
W l ~ y mrozdziale zapremtujg niczb@ne informacje na ternat mmmu Exctla, ktCEre powi-
nien mad ka;tdy pmgramista.

Pasek menu w Excelu


Czytclnicy, ktbrzy p m y t a t i mzdzial22., w i d - pasek menu (podobnie jak pasek
narzgdzi) jest o b i e h typu C m n d B a r . Techniki apisane w mzdziale! 22. majq msto-
sownie &e dla pask6w menu.
Jaka jest zatern &mica pomiedy paskitm menu a paskiem narqdri? Pasek menu jet
wygwletlaay w g6rnej czeci aha Exctla, bczpa3rednio pod paskiem tqrtuh~.Klikniqcie
kantrolek najwy~zeigr,poziornu na pasku menu powoduje wygwictlanie mnvijanych
list poleceri. Pasek menu ma2e takte zawiemt t r q pwciski stemjqce oknami (Minima-
lizlrj, P q w r d i oraz ZumKrriJ3,kt6re sp wy3wietlane tylko wedy, gdy okna skorosqtu jest
zrnaksymalizowanc. Z kalei paski narqdzi zazwyczaj zawierajq gmficme ikony i nie
ma w nich przycisk6w stemjqcych.

Nie q to bynajmniej mgu& sztyme. Jezeli jest taka pbhneba, moha mtosowat mdy-
cyjne pnyciski paskdw nsrqdzi na paskach menu lub tradycyjne polecenia mmu na
paskaEh nmzqdzi. Mokna nawet przenosid pasek menu z jm tradycyjnego polo2mia
i spowdawd, 2e b@zie ruchomy. Chock& Excel o b m j e wiele paskbw menu, tylko
jcdm z nich makc byc widoczny w okrieSlonym mornencie,

-' k z m z y od Excela 2002,w p k u menu IlwySwietla siq pbqcja W @ km4anie


do pomocy, ktdm pomala uqskad swki dostep do wla&iw3cl p s m k i w a n i a
systemu po-. Pole to rnatns tahvo ukr$ pny ujciu nastepujpej instrukcji VBR:
Modyfikowanie menu Excela przez viyfkownika
Typowym uwkownikom Exccla m j q standardowe mmu. Czytelnik6w tej ksi* tki
prawdopodobnie nie moms jednak raliezyt do typowych utytkownikdw. Modyfikowa-
nie menu uhtwlia wykonywanie niektdrych dzialah projektantorn or= uzytkownikorn
tworzonyeh przez nich aplikacji.

W cclu dwtosowania menu Excels do whnych potrreb moan usuwaC elmmty. dodawat
j e i zmieniat. Ponadta matna tymcmczasowo mtqpiC standardowy psek menu Excela
paskiem nicstandardowym. Menu Excela m o h a modyfikowat na dwa sposoby: rqczn ie
lu b za pornocq kodu V B A.

W rnomet~iczatnykania Exctla zapisywane q wszel kie miany dokonane w systernie


menu. Zmiany te pajawiajjq siq przy nasqpnym ocwarciu Excela I nformacje o mody ti -
kacjaeh menu s$ zapisywane w pliku XLB.

;set JeSll nle chamy, aby modyfikacje menu byty zapisywane 1 obowiqqwafy w lnnych
sesjach, nalefy napis& kod VBA mieniajgcy menu podczas owleranla okreSlonego
skoroszytu, a nastepnle prtywracajacy stan pSetwutny podczas jego sarnykani a.

PoJqciamiqzane z systemem menu Excela


Tenninologia datyczqca menu jest czarami nicco rnylqca re wzglqdu na istnienic wieh
podobnych pje. Pon initcj wysnzegdlniono ling of~jdnycht m i n 6 w zwiyanych z menu
w Excelu, kt6rych bf;dq u w a l w tym rozdziaFc,
-
Pasekpoleccti cbiekt, ktdry dziahjak p m k menu, menu podqcme lub pasek
nmqdzi. W bibliotccc obiektbw Microsoy? Ofim rcpmentuje go typ ComndBa r.
Pcuwt mem- wimz wyiaz6w urniazcmnych bezpoSrsdnio pod paskiern tyruh!
aplikacj i. W Excelu q dwa paski menu: jedm jest wyiwinlany w aasie. kiedy
jest aktywny arkusz, natomiast dmgi w w i e t l a siq, jeSli jest a-y arkusz
wyhesu lub w morneneie uaktyrmienia wyknsu wbudowanego.
Mmu -pojedynczy elemmt pash menu najwytszcgo poziomu. Na pnyktad
oba p s k i menu Excela mwierajq menu Plik.
P-u nem -element pojawiajqcy siq ne mzwijanej ligcie po wybraniu menu.
Na prtyktad p i m q poycjq w menu PIik jest pozycja Nmy. Pozycje menu s q
W e wy3wietIane w podmenu oraz w menu gmdrqcmych.
Separator -- lpzioma linia rnzdziefajqcadwie pzycje menu. Scparatoy
wykoqstuje s& do gnrpowania pozycji m n u o podobnym pmznaczeniu.
Podmanu -menu drugicgo poziiomu. Na pvkM w menu &&jn
podmenu Wyczys'i.
najduje sip
Rotdo'at 23. + Twonenie menu 64 1

W Menu p o d r m e -mienma lista prrzycji menu wySwietlajqa siq na cksanie


po klikniqciu prawym pnyciskiem myszy zamaczonego obsmrv lub obiektu.
ZawrtoSC wyswittlanegs menu podrqctneg~zale2y od biekqcego kontekstu.
W4qczona-okreSlenie menu Iub pozycji menu, kt& s q aktywne. le2eli menu
lub poycja menu nie jest wtqaona, j e j tekst jest wygwletlany szarym kolorcm
i nie moha ich uZywat.
Zaznamonn -stan pomji menu reprezentujqcejstan wl;tczony (wylqczony)
lub prawda (falst). Pozycja menu czasami wyiwietla pole wybm, kt6re Jest
zanacmne lub nie. Pnykladern mote byt WidokrPasck slam.
Qbraz -nitwiclka ikona wy3wietlajqca sic obak niekt6rych pazycji menu.
W teminologii jezyka W3A kod powiqzany z obrazern jst zapisany jaka
w!a!kiwofd FaceID. Wieceji inforrnaji na temat wh6ciwoSci FaceIO ~ a j d u j siq
c
w sazdziale 22.
r Kornbin~cj~ klowiszy skrdhr -
kambinacja klawisy stanowiqca altmatywny
s p d b wykonywnia polcceil menu. Kombinacja klawiszy skr6tu w-y$wieolasit
po prawtj stronie pszycji menu. Na prz)lk%adCtrI+S ta s M t polemia PlikrZ~pis3.

UQtkownik mde usunq6 d m l n q ca$d s p a n u menu Exotla: poqcje menu, menu i &
paski menu. J&li na iprzykhd nie cbcemy, aby u2ytkownicy rndyrfikcrwali opt-t wySwie-
tlania, m a m y uurrqt menu Widok z Pmka m e m urRzrsra kdhfacyjmgo. Jeeli z kolei
usvnicrny polrycjc Nowy z menu Plik, l&ytkownicy nie l y d q mogli wykzystat menu
do u t w o m i a nowego skmsqtu, Wreszcie mokna wytliminomt pasek menu Exccla
i mtqpit go paskiern niestandardowym. Celm takiej a p c j i mote bye sterawanie apli-
kacjq prmm u w a w n i k a catkowieie za pommq zdefiniowanych p r x z pmjekmnta rnakr.

Usttnieele p k b w m u , m n u rub porycjl m u nie ma wplyrm na alternatywne


c a smsoby w)rkonywania okreSronych driatati. Je2eli na m t a d usunierny prycje Nowy
z menu Plik ujrtkownlk w celu utwotzenia skomsytu bqdzie mdg+~ ~ t prlclsk
a 6
paska narwzi N w v y skomsl)rf, kt awi SZ slcr6itu CtsS+hr, panel sadad l ub menu
padreczne plrpitu.

Dodcrwante elernent6w menu Exeela


fh
wbudawanych pask6w m u m o h a ddawaC nowc menu, plobnie jak do wbudo-
wanych menu moaa dodame pozycje xdefiniowane pmz u2ytkownika Bez pnnszk6d
m o m utwonyt catkawicic nowy pasck menu Na p&Iad najpmstszym spsobem
m m n i a apl lkacji, k6ra nit w p a g a Zadnyeh wbudowanych menu Excela, jest utvvo-
m i c ncrwcgo paska menu skkdajqcego sic ze zdefiniawarrych menu araz poqcji, Crt6m
~ e mas m h M d n a te2 ukryt staodadowy pasek menu
wykonujq ~ d ~ n i o w mprztz
Excela i go paskiern niestandardowyrn.
642 CzeSC VI + Twonenie aplikaqj

Utytkownikorn, Way naucqdi sie dostosowywa6 menu w ExceEu 5 lub Exoelu 95, na niewiale
przyda siq zdobyta wiedza. Pocr$wsry od h e l a 97, dostusowycuante m n u z n ~ m i esic zmienib.
Pa& menu jest wtaSciwie nieco m o ~ k o w a n y mpaskfem narzpdd. J'efeli kt05 nle wlecy,
prosze spr6bowaC kllkn# pasek rnenu pa lewej stronle I przmlqgnqd go w inne rniejsce.
Uqskamy paseg nanedd, M6ry rnolna swbodnie pnemieszczad. Dla paskdw narzedd
I paskdw rnenu wjeryku VBA stosowana jest wsp6lna oficjalna nazwa paski polecer5.
Pocrqwszy d hcela 97, nie ma dytm menu mmego r Excela 5/95. Alsy wmie rnodyfik W
menu, nalety wybrd polecenie Widokflaskl n a n ~ d ~ f l o s t o s uNalezy
f, jedna k pamiqtat,
te skcrroszyty Excela 5/95,wyposaione w menu dostosowane za pomocq stamgo edytora
menu, w dalsryn? ciqgu dziala~qw Excelu 97 1 wersjach nowsmh. Jednak aby kvprowadziC
Iakiekdwiek zmiany w tak zmo~kowanychmenu, nalety uQ6 Excela 5/95.Je2eli planujemy
wyk0ny~tyW8Cstay skorosqt r nowszq m j q Excela, o wiele wygdni~ejusunqe modyfikacje
(za prnocv Excefa 5/95).
INle ma bezpoSredniego sposobu pnyplsania makra VBA do nwvej porycji menu w menu
Namo'rfa. W Erccelu 5/95 by+oto drieclnnie W e . W dalszej czq$ci ninieJsregarozdziafu
z a p z e n t u j ~kod VBA. kt&y moha wykonystaCS w celu dodania nowej pozycji w menu NapdriEl.
W bcelu 2000 1 wwsjach m s z y c h dmfllnie Wyswletlajq sig tylka ostatnio utpane porycje
m n u . Moim zdmiern jest to jeden 2 najgorsrych pomyskh Microsoftu. Nie potrafiq zrozurni~,
komu ma shzyd ciqgh miana kalejnbki parycli w menu. Na szczqhie te wtaSciwuSC moina
wyiqczyC w saktadce Opcje akna dialagowego LbsXosowywanie.

ModyRkacja element6w menu Excela


Ci,ktdrymr znudsily sie standatdowe teksry menu, mom je zmienit na inne, msppujqc
na przyktad menu Narze&ia nowym menu R h e , Moms t a k e p w i s a f : w h m e rnakrn
do wbudowanych pozycji menu. Do innych moZljwoSci modyf~kowrsniaclcmtnt6w menu
nal* miana kolejnoki menu na pasku menu [np. pmuniqcic pzyc-ii Pomm z ostatn iego
na pietwsze rn iejsce),
Nalety tachuwaC astm2no5C w przpadku miany podplsdw rnenu Excela. Niektdrry
progfamiki, tworzqc nowe menu, wykonystujq standardme n a y menu. W takirn
przypadku, jefeli smodyfikujemy pcdpisy menu, wykonanie kodu rakoircry sie btqdem.
Jak siq niebawem ptzekonamy, zastosowanie w kodzie melody F~ndControlelirninuja
te ptoblemy lpatn podpunkt "Dodawania menu: sposdb 2").
.
d

Pozostala cz@Craxkiab mmh pofwiqcona pimiu kadu w cet u rnodfikacj i menu.

Wykorzystanie jqzyka VBA


do dostasowywania menu w Excelu
W tym p d m d z i d c z a p m t u j q kilka pryfrladdw kodu VBA, kt6ry pornah wykmywat
dz3hnia z menu Excela.
Rozdij~!23. + Twonenie menu 643

WySwietlanie informacji o menu Excela


Pmedura Ld stMenu Info zaprczmmma poni2ej mate sic prydat tym, k t 6 9 bqdq do-
stasowywaC menu Exctla. Procedum wySwietEa podpis kazdej pozycji (nazwa menu,
porycja menu i pozycja podmenu) na Posh menu arhsza kaIkuloqinego.
Sub tistMenulnfol1
Otm raw As Integer
Dim Menu As ComrrandBarContml
Oim MenuItm As CbmandEarhtml
Olm SubMenuItern As ComnandhtCcnt ral
row-I
h Errat Resune Next
For Each Henu In CmandBars (11 .Ccnt~ols
Far Ezch MenuItem I n Henu,Ccntrols

-
For Each SubHenuEtm 1fl Mcnul tm.Control5
Cells[rm. 11 Fenu.Caption
-
Cell s[rm. 23 = KenuItm,Caption
tells[rm. 3) SuiPenultm.Captlon
Mwarm+l
Next SubMenuI tem
Next slenvltem
Next Menu
End Sub

W kodzie utyto instnakcji On Error Resm Next w cdw zapobimnia wydwietlania


komunikatu o M e e , jeSli procedura qrdbuje utyskat d w ~ do
p nieistniejacego podmenu.
C q k i o w y wynik dzialania procedury L i rtMnuInfo pokazano na rypunku 23.1.

Rpunek 23.1.
CrpSciowy wynik
..
batanfa ~ ~ w . .
bdnrdywsnls slq do kalskcjl CmmamlBan
Kolekcja Cornmandhrs jest sktadouuq obiektu Appl I cat ion. Kledy odwdujwny slq do nfej w og6lnym
module VBA, mzemy pominqC odwdanle do obiektu Appl tcatlan, poniewai ten obfekt bedrle
uiyty darnySlnie. Na pnykiad panihza instrwkcja {umleszczona w standardawyrn module VBA)
wySwietll namq picrwszego elementu kolekcji CommandBars:
.
HsgBax CcmandBa rst 1I Name
I
Jetelf -my sfe dol kolekcji ConnandSar; r modutu kodu oblektu ~ I s W k b a o k rnushny
, pocrzedzlt
jej name odwotaniern do obiem Appl rcatlan w nasepujqcy spos6b:
Msgkx Appl icatlm .Carm#ndBars313 .Name

Dodawanie nowego menu na pusku menu


W tyrn padmzdzialc apiszmy sposdb dodawania nowego menu do arkusza za pomocq
jqzyka V B A. Parek mentr arks kolkulacyjnegojest' p i t ~ r s pozycjq
q w kolekcji Corn-
mandsan, a zatem muaa siq do niej odwohC na dwa spmaby:
rn wedlug nazwy (angielskiej!!!I: ComnandSarsl*Norksheet Menu &a re 1;

Aby dodae now%konttolkq do kolekcji Controls w jezyh VBA, nale2y wykorzystad


metode Add. N o w menu to kontroEka rypu msoCont rol Popup. W erasie dadawania m o h a
okreitid poizycjq kontrolki. Je~ctisiq jej nie okrdi, nowe menu k d t i t ddane na koficu
paska menu. ,

Dodamnk nowego menu jest czynnoSciq skladajqcq siq z M c h ctap6w. Najpietw m


p m m q rnetody Add twony siq zmitnnq obiektowq, hira d d u j e siq do nowej kon-
tmlki. Asgummty mtody Add urna2liwiajq oWlenie typu kontmlki, jego idcntyfikatora
(przydaje siq tylko wtedy, kiedy dadajemy nowe menu do wbudowanego paska) o m I
pozycji. Pozwalajq r6wnie2 sprawdzik, c q jest to kontrolka tyrnczasowa, kt6ra zostanie
vsuniqta przy zamlanjqc iu Excela Nastepnie dostasowje sip w!a!icEwo4ci nawej kon-
trotki, Na przykiad zanvyczaj o M l a sic w+aSciwoSciCaption i OnActi on. r

Dodmanle menu: spos6b 1


Cclern niniejszcgo pnykIadu jest dodanie nowtgo menu Bur&# do Prrska nrmw urkwza I
kuZkuilucyjnego i ~micszczenietego menu z lewej strony menu Pomm.
Sub MdN@lemCE
Ofm HeipImkx AS Integer
Dim NeJ.)erw As ComnandSarPopup

tlelpIex -
Pobranle indeksu menu PMnoc
CamnandBars(l3 , C e n t m l s C ~ ~.Idex
"l
' Utwonerrle MU
-
Set HMlertu CnmandSars[l] . ~ n n t msl. A d d C T y p e : 1 m s c C m t ~ u 1 ~-~ .
kfo~:-HelpIndex.Temparary:- True)
' Wantepodplsu
&&nu.Caption ="&gudtetw
End Sub
*
KanwsnGje Wmanla m u
Menu w apllkacjaeh wfndbwsawjrch zarylezaj wallmje pewrte konwncje. NiM nie We,kto te kon
m c j e ustatit ale p91i chcemy sprrzlwiat dobm wrahnie, puwInnl3my ich p s t m g a t . Modyflkujqc
menu, pamiqtajmy o ponifsqch rasadach.
ITradycyjnie m n u Plik jest pierwsrq potycliq menu, a menu Pmoc ostatniq.
-
r Tekst menu JestwySMetlany jak n a m whsna tm.zaezyna slq wlelkq Ilterq.
H Menu nalwytszego pozIomu nfe gowodu1;gwykanywanla dziatati. MMqc inamj, Mde menu
rnusi sawieraC co najrnniej jednq porycjq.
U PozycJe menu zamyezaj skIadaJqsl.9 z trzech lub mnlej s W .
a Z k&dq powgmenu pcwinien trjd miqzany klawisz skrdtu (litera pmW&lana), Mbm w rarnach
wybranega menu jest niepowtarzalna.
Poryeja menu wy5wietlajqca okno dfa!@ow]est xakoficzona wlelokmplclem I,..).
U Wsty poyeji menu pbwinny byC stosunkowo ImRkle. Czasarnl zamiast dlugiej listy IepieJ
rdennimC podmenu. Gdy zachodzi konfecmoSd zdefiniuwania dtuglch list, nale* wykomystaC
separatory w ceftr podrielenla polecer'F,na Iogiczne gru~y.
H W miae m mo itl Sc1pozyqe menu niewtadciwe w okref lunym kmtekScle powl~nybyC
w
nieaktywne. W jezyku VEA w mlu d e a w a c j i pozycji menu nale2y ustawlt jej WaSciwafC
Enabled na wartoft Fa1 se.
H NieMbre poq%jemenu drlalajq jak p&qcmikl. Je2ell apcja jest wtqcma, poqcja menu
jest popmdzona maklern raznaczenia.

Zapnzmtowany kod nic jest idealnym mmiqaniem. Po jego wykonaniu nowe menu
nie zawsze zostanie umicszczone na wlafciwtj pozycj i. Wys-tqpujqdwa problerny:
zaIokono, PE menu Pornoc istnitjc, a grzecie2 make siq zdamyd. 2e u ~ k a w n i k
j e usmai,
talotono, b podpis menu pomocy to Pomm, natumiarr w innych wersjach
jqzykowych Excela mogqwystepowaC inne pdpisy.

Dodawanie menu: spos6b 2


Lepsze r c i z w i ~ i p~zentuje
e listing 23.1. Wykorzystana w nim It'tet~dtFl ndtontrol
w celu zlokalizowania menu Pomm. W prypadku niepwcdzenia nawe menu jest du-
dawane na koticu P a r k menu arkus,.&hlkulaqjnegu.

listing 23.1. Dodwanie menu Buttkt do paska menu Excel0


Sub AddtWtwu[ 1
D i m HelpMcnu As ComnandSatContml
Dim M e n u As CarmandBarPopup

'

If f-4lpMenu
-
Odsttlkanie menu Pcmc
Set MlpHenu! ComMndBarstlS .Ff ~
Is Nothing Then
m ' f
I~d:*300101

Oodanie r w q o menu na kalScu


Set HewMRw = ComnandBars(l1 .Cbntrals -
.dddCTyce:-moCantrol Papro. T ~ r a r y : ~ T w 3
El st!
I

-
Dodanfe m u prsed menu k m x
Set tfWWu C m n d B a r s ( 13. Control sSMCT~:~aCcrntm106pup,
Before: 4elpHenu .Irdex,Teqarary:-Trw)
-
End If

"ante
End Sub
oplsu
.
NewMenu Capt Ion - "&Budtet"

pep
L=,
Prmedura z Ilstlngu 231 twany bemfytecme! menu, ktdre nie zawiera kadnych
porycji. Pnyktad dodawania porycji menu do menu zaprerentowand w punkcie
"Dodawanie pozycji do menu Narzedzia' w dalwej cze5ci rozdziatu.

Aby wykorzystac! metode Findcontrol, meba mat wart054 wtaSciwaSci IO poszukiwanej


kontmlki. Z ka2dym wbudowanym obiektem CamndBa r Excela jest twiwana niepo-
wtarzalna wart046 w+aSciwaSci ID. Dla potrzeb ego przykhdu whSciwoSC I D dla menu
Pornlac okref litern na podstawie nmtepujacej instrukcji:

W oknie infomacyjnym Wyswietlih siq wartoSC 30010, kt6Ftj uwkm jako argumentu I D
m a y F i ndContro1. Ustawicnia wfaSciwoScE I D dla menu najwyBzcga poziomu Exeela
zestawiono w tabeli 23.1.

Tobela 23.1. Ustawfenla wfaS&wScI JD dla menu n a w s f e g o pziomu Excelra

PI*
E&ia
Widok
wsrm
Fmmctr
Nma&iu
Dane
wybe3
Oh0
Pomm

Usuwanie menu z paska menu


Do usuwzlnia menu s h t y metlsda Delete. Zaprezentom p o n b j p ~ k b powduje
d
usuniqcie menu Brr&et z P& menu mkuszu hfkrrlaqjnego.Instmkcjq On Error Resume
Next wykorzystalem w celu zablokowania wyiwietlania komunikatu a Hqdzie w prq-
padku, kiedy menu nie istnicje.
Sub Oel eteMenuC I
On Error Resm Next
ComMndBars( 11.Control s("W2etm1
.5elete
End Sub
Rozdzlat 23.+ Twonenie menu 647

Jak pamietamy, podpis menu Bu&et mml ustawiony za porn- nas@pujqcejinstrukcji:

Kiedy odwohjerny siq do menu za pornocq pdpisu, w c i e mafnt & jest opcjonalne.

Dodawanie pozycjl menu


W pmykt.adzie zaprezentowanym w punkcie ,,Dodawanie nowcgo menu na pasku menu"
pkazakm spos6b dodawaoia nowego menu na pasku. W k&ie z listingtt 23.2 do m-
prezentowanej wczeSniej pnxcdury wprowadzono nowe elementy, aby pokazat, w jaki
sposdb rnotna dodawatf poycje do nowe,0 0 menu.

Ustfng 23.2. Dodawanie polecefi i podmenu da menu Budfet


Sub C ~ t&nuE l)
D j m HelpHenu As ~ m n d 0 a ~ n t t a l
Dim k A e n u As I;omnandBarhopup
Dim Menultm As CumandBafldntroJ
Dim Submenui tetn As CmandSar0uttcn

' Usunfeciemenu, je51i j u t lstn4eje


Cal l Del et#mu

' Wstukanle menu P a m


Set He3pMenu = CemaMf3ar-s(11.Finmntml t 16:-30010)

If HelpMenu Is Nuthing Then

-
Dodanze mnu na ~ M Ckolekcjt
U
I

-
Set N e n u ComMndBarst 1) .Cmtrol s .Plb$CType:=n~o&mtm1P~~~~,
Tmrary:-True)
El se
Dodanle menu prted menu Pam
Set NeMenu CumandBarsf 11.13ont ral s.Md(Type:~s&ntralPoarD. -
kfu~e:-HelWenu. Index . T m t a r j l :-fmI
End If

' PIEMU PDZYCJA MEW


Set Mer\.ultm = M e n u .Cmtrols.AddtType:%crContro1 Button)

--- "Hacrol"
With MwruZtem
,Caption "bWprcxuadranIe d ~ n y t h. . "
,Faceld 162
.0nktlon
End Wlth

' DRUC;A POTYCIA 'MFHLI


Set MmuItm
kith HenuItm
- NeMmu .Control s .Add(Typ?:lrr6~Corrtr01Button1

.
. F a c ~ I d-
.Caption = " M r o w a n i e rawr26w.. '
590
-
-43nktlan 'MacroZ'
End M i t h
' WECEA POZYWA M€W
Set HenuItem
With MenuEtem
- ~u.Cmtmls.Wd(Ty~:~oContro~Popup3

.
BeglnGrwp True
End W t h
-
.Caption *&Podglqd wykmsh"

'
-
P f M Z A PdZl'WA PU34EMi.I
kt Subnrenuitern &nu1 tem.Cwlrtmls.Md~Ty~:~rns&ntrotButtanl

---
Wa t h S u ~ n u i t m
.Caption "&Odchylenfa miesi.eezneM
. Facetd 420
.OnAc t ion 'Hacsa3'
End With

* lY?UGA WEYWA PUMMI


Set S u h n u f tem ~ n u 2 t m . C m ~ t m l s . ~ ~ T y p e : . m s ~ t ~ 1 B u t t ~ n l

---
With Submenuitem
.Caption ' 8 P t x t s ~ l ~ ~ ~ aadn lpacs&tku
e mku*
.Face Id 422
.OnActr on *HacrM'
End Wlth

End Sub

Pmcdm CreateMem twany mtnu pkazam ne rysunku 2 3 2 k n u zawim bzy pozycjc.


Ostatnia to p i m e n u zawiitrajqce dwie pozycje.
. ..
Rysunek 23.2.
To menu
oraz jego p~xycle
mstab utwomne
ra psmocq kodu V8A

Ten pnyklad jest dostlpny na p&eleCDROM dulqczonej do ksiqtkl.

Niektdrych cqtelnikdw pevvnle zastanauris, dlacrego w xaprezentowanyn pcnqcbj


prrykfadde, w pnypadku gdy menu istnieje, nastqpujc Jegousunfpzie, a nie pa pmstu
wyjScie z pmcedury, Ddqki utwanenlu menu od nowa uqskujemy pewnoe,
te na pasku wySwietll sie najnowsra wersja menu. Porn tyrn w ten sposdb w r n l f c h
tatwiej testow& t w o m y kad, pbniev~atnie tmba wznie u s w d menu pned ka2dyrn
unlchomienim procedury. Jak mazna zauwa2yt1twonenie menu jest operacjq bardzo .
szybkq, a ratarn nie m b a si? martwiC:lym, te odtwmenie menu od pocqtku
zajrnujs czas.

a W e p i m kontroki dodme da menu'sq typu msdontml0utton. Tmeci


formant jest typu rnsoControl Popup, p n i e w a jes? to podffmo zawimjqce dwie
patycje. Z tego pWEbdu w deklmcji miennej NnuItein uZyto og6Lnego typu
CmndBarContro1.
Rozdriut 23.+ Twoazenie menu 649

W c i m 3 t BeginGroup dla trzcciej poycji mmu ma &t True, co powoduje


wy4wietlenie przed niqmzdzitllajqcej linii. Linia separators ma maczenie c y s t 0
kosrnetycmt i slu@ do grupowania w c j i menu o pvdabnym pntznaczeniu.
WMciwoft FacelD oheS1a obraz wy4wietlajqcy siq obok tekstu polecenia
Nurner FaceID reprezentrqje wbudlowany obraz.
m W t W i e wMciwofci Capt Ion wykonystano mak B w celu maczenia klawista
sk6tu dla pozycji menu. Klawisz skr6au umo2liwia do* do okdlonej pozycji
menu z klawiatury.

Dodowcanle pozycjl do menu Nonpdzia


Prrykhd z lish'ngu 23.2 g m d u j e ddanie nowego menu t kilkurna poycjami na P m h
menu a r h a kalkrrlacyjnego. Znacmic mecicj wystqpuje pomeba dadan ia pozycji do
jednego r wbudowanych mrnu Exccla, na prryklad do menu Nonpkiu. W Excelu 5
i Excelu 95 prrypisanic rnakra do nowej pozycjj w menu N~rz&ia bylo proste. Z pcw-
nych powod6w w!aSciwoSI: tq usuniqto.

W tym punkcit mpezen~wanakod VBA m~2liwiajqcydodanie poyeji w menu Na-


rzq&io. Kod z tistingu 23.3 dodaje posycje WycqdE wsz)stko oprrict(onnul w rnmu
Nanqdria, Klikniecit ttj pnzycji pawoduje wykonanic pmcdury Cl ~ r A l 1 8 u t F 0 as.
~1
UsHng 23.3. Dadanle pazrcjJ do mcnu Nanpdzia & e C
Sub PddMuIteAtlI
O i m Tml sHmu As CarmadBarPapup
Dim M n u I tern As ComMndBarButtcm

' Usuniecle menu. jeil i Istnieje


Call OeleteMenuftem

'
-
Odsmkanie menu NarmzJa
Set Toalsknu CmandRarsIll ~Fb~mtm1~1d:-3[bW71
If TcmlsH~nuIs Nothing Then
MsgEiox "Hie mtna dod& psrycjl m -
u wtyj klawirzy Ctrl+Shift+C.'
E x i t Sub
fl sc
-
Set HMermItm tbal ~u.Cmtmls.AddtType:lnzsoCartrolRttonl
K l t h N*nuItm
-
.Caption Vykry3.C wsystko n p m f o m l "
.FaceId
.Q&tlon
=
-
3a0
'ClearAl 1&EtFbrmrlarse
.BegtnGmp Trw
End With
End I f
End Sub

Na ry~Un)N233 polca~anomemu Nar?&ia ~ ~ j q nmqpoqqit.


p e Kcd nie d w o h j e
si~do menu hrrzrze&itr za prmnocq pdpisu - mcnu jest identyfikowane pnez wtdci-
woSC I0 Wdm wynosi 30007).
Ryswnak 23.3.
W menu Naaedzh
dadans n w q poryleje

m
-- u
- -- --- - 2.1
me..

Ten pnyktad jest dastepny na m l e CDRQM dolqczowj do ksl@ki,


<-s3
Usuwanie pozycji z menu Nanqdzla
Do usuwania pzycji menu shty rnetda Del ete kolekcji Control s. Wykonanic p i t -
sngo przyktadu spowoduje usuniqcie pozycji W w S 6 ws,ystRo uprdczfirmd z menu
Narzebzia. W kodzie wykonystano metode Findcontrol w celu obsl.uzenia sytuacji,
w kt6rej menu Narze&Sa ma irmy opis.
Sub Del eteMenuIten( 1 e
On Error Resune Next
Cmand&ars(13. FindControl (fd:*3000'fl.
Controls( "Wy&crySt mrystko oprbcz f o k l ' l .Delete
End Sub

Obok niekthych pozycji wbudowanego mmu Excela wyfwktlr! siq kombinacja klawisy,
krbrej wciJniccie powoduje wykonanie tych samych dzialafi, ca wybtanie pozycji menu.
KIawisze sMt6w Wwietlajq siq na pnyk-lad obok k i l h poqcji menu lk$cju.

Aby wy SwictliC kombinacjp klawiszy w m m i e pozycji menu, nalety wykonystaf wla-


f ciwoSC ShortcutText. Tncba pamimd, Ze ustawimie wMciwo3ci ShoncutTex t nie
powodujc pnypisania klawisza skr6tu, a jedynie wybwictlenk cizgu znakdw w menu.
Skonfigurowanie klawisza skrdtu wymW zdefiniowsnia dodatkowego kodu.
Podabnie jak kod z listingu 23.3, kod z listingu 23.4 tworzy w menu IV~rzedziopozycje
WycyjrL.wszysiko oprdd furmu!. Jtdnak zapremtowana poni-j pmedura umwia wla-
SciwoSt ShortcutText na c i a mak6w Ctrl+Shif t + C oraz wykorzysmje metode Macro-
Options w celu skonfigumwania kIawisza sb6m.
Listing 23.4. W a n / @parycjI menu z klawiszem sCvdtu
Sub AddHenu I tm( 1
D l m Tool s M u AS Cmand3a rPopup
D l m NewHenuItem As CmnbBarButtan

' Urunleclemenu. jest1 istnieje


Call DeleteMenultm

'
Set -POI -
Wszutanic menu NarzMzla
sknu ConmandBarsCl) .Fi nKmt rol (Id:=30007l
If Tool sMenu Is Notping Then
HsgBox "Wie mzna dodaC pbzycjl mnu - u t y j klmiszy Ctrl+$?ift+C.'
Ex?t Sub
Else
Set HMenu[tem Tool zJlenu . ~ t r a l s . A d d l T y p e : ~ m s a ~ n tEhtton)
ral

-
With K W n u I t e m
.Captlan "UykzyiC wszystka oprdcr fomlM
.FaceId = 340
-
.ShortcutText = "Ctrl+Shi ft+Cg
.Cn4ctiw *ClearAl18utFom~as"
End U i tn
End If
'
Utwotrenle kl awi sza skrdtu
Appllcat~on.MacmOptionsMacra:-'ClearA1 leutFamlasm.HasShb~cutKey:-Tm. -
ShortcutKey : -"Cm
End Sub

Wykonanie tej prucedury spowadujc dodanie poycji w menu Nmq&ia, jak pokazano
na rysunku 23.4.
Ten prryktad jest dastepny na p)yeie lCDLROM doQcmnej & ksi@l.

Odtwarzanie menu, M6re zostalo usuniqfe


Rozwzhny nastppujqcq sytuacjp: napisalihy kod VB A two- nowe menu, k6re ma
sie wyswietlad w czasie, gdy jest otw- skurosqt aptikacji. U w o m i k o t w a q 4 inny
skmszyt zawierajqcy makro, kt6w; p~zywrcjkilostandardowy pasek menu Excels, dba
t& testujqc o h o dialagowe h t m m g w m k , w y b d Pas& m m urkus.zu W k u l u ~ j m g ,
po crym kliw pnycisk Resetuj. W obydw prrypadkach Irlefiniowane pnez nas menu
zostab miszczone.

Kod t W O p c y menu z a m y c w j jest wykanywany w prm- obshgi zdarzenia Work -


boak_Dpen, a zatem jedynym s p o k m przywrbcenia menu jest zamknjqcie skoroszytu
i jega ponowne a ~ c i eAby . zapewnid inny sposdb wykonania t q o kodu, zdefiniujemy
klawisz s M t u pwdujqcy w-ykonanie procedury, k t h ~ r z menu.
y
Rpunek 23.4.
Paryja menu
h)azyJC wszysfko
0prdGr farmu)
wySwiet/ana
wraz z kombinacJq pr . r a m - -- -.
ktawisra skrdhr

. .-~-----.--. .. .?

F'. or* -.-

Aplikacje, kt6re pnpracajq startdardowy ukhd p k a mmu Execla, motna spotkaf


do46 n p m . Ufytkomicy dodazku Pmer Utility Pak czasami informujq mnie. 2e menu
PUP v5 nagle mihqfo bez w-yahego ~ W O $ uPnyczynq
. takich sytuacji zawszc sq innc
aplikacje, w ktdlych wykonywana jest operacja przywracania ukladu Parka menu u r k u
kalkuircyjnego. Z tych powod6w zde fin iowa4crn kombinacjq klawiszy Ctrl+ShijrAiJ,
kr6rej wcigniqcie pawoduje odtwbrzcnie menu PUP 14. Wykonanit pani%zej jnstrukcji
przypisuje pr6eedurq CreateMenu da kombinacji klawisy Clrl+Shifr+U:

Wykorzystanie zdarzeh do prograrnowania menu


Prrypudfmy, fe cheemy utworyf menu w momencie atwarcia skomszyht. Chcemy tet
usunqt menu w rnomencie jego ramykanib poniewd rnodyfikacje menu obowiilflljq
dla wielu sesji Excela. Albo zalbkmy, te m u ma byt dortqpne tylko wtedy. kiedy jest
akrywny okre31ony s k m lub ~ srkusz. Takic dziabnia sq stosunkowo l a w do =pro-
pmowania dziqki rsbshrdze zdarzeh w Excelu.
W k h d y z tego padrozdziah pokmjp kika Whnik progmmowania menu, w ktdrych
wykorzystano zdmnia.

Automatyeme dod&anie i usuwanie menu


Aby ut*razyC mmu w mmencie otwierania skomszyhS nalcty w y k o ~ s t a zdanenie
t
Wokbook-@en. Ponitszy kd, zapisany w module kodu obieltar Thi sWorkb30k, p d u j e
wykonanie pmdolry Creatblenu (k6rcj tu nie pokazmo):
Rozdzid 23. + f-ie menu 653

P r l vate Sub Mrkbaok-Opnt 1


Call Creatmu
End Sub

Aby t~sunq4menu w rnomcncie zarnykania skoroszytu, nalety wykarzystat procedurq


pdabnq do tcj, Mrq zaprez~entowanopani&j. Roccdura jest wykonywana przed za-
rnknieciern skoroszytu. Jej dzialanie polega na wykonaniu procdury DeleteMenu Cb6rej
tu nie pokazano).
Prir~teSub Workbook-BeforeC1oseECancel As h 3 e a n )
CaJl QeleterClenu
End Sub

IeI3Cli jednak jwzed ramhivim skomszyt nie xostanie zapisany, mo* pojawiC siq pro-
blem. Okno dialogawe Excela z pytaniem a zapisanic zmian jest wyJwietlane, ranirn
uruchomi siq procedura obstugi zdarzenia Workbock E e f o r K l ase. Zatem jdli utytkownik
kliknie A m h j , skoroszyl pazomnie otwarty, ale menu utytkownika wczegniej zostalo
usuni@c?
Jcdnym z mzwizpah ?empmb!emu jest porninigcit pytania wyiwittlanego przez Excel
i napisanie wtasnego kodu w pmcedune 'dorkbook BeforgCl ose, k6ry wySwietla pytanic
o zapisanic zmian Proredm tq zapmentowano Gnittj:
Prlvate !&& bbrkbmk BeforeClasetCancel As Boolean)
If NO t *.Saved hen
?I59 = "Czy zaplsat m a n y w "
Msg Msg 8 He,Nam & "?'
Ans MsgBoxlHsg. vMues;tjon * vbYesFloCance?1
Select Case Ans
Case vbYes
Me.Save
Case vbNa
&.Saved = True
Case vbtancel
Cancel = True
E x l t Sub
End Select
End If
Call &let-
End Sub
Procedura s p m e czy skamzyt -1 zapisany. JeMi tak, n a w u j c wykonanie
pm%h"y D e l e t ~ iumrnkniqcie skormzytu. Je2eli jednak skomsqt nie mstal jeszcze
zapisany,pcdmwyswietla alolo infmcyjnc idmtycmcjak to. Mre wytwietla Exoel.
Je2eli uzytkownik kliknie T& skoroszyt 2;05~niezapisany, menu usuniqtc, a skorosqt
atnkniety. JeMi ujrtkownik kliknie Nie, kod ustawi wlafeiwSE Saved obiektu Hark-
book na wartclSk True [ale nie mpisze pliku) i usunie menu. Jezeli uvkownik kliknie
Amhj, pmocdum obslusi zdarzcnia BeforeC! me zakohczy siq kusuwania menu.

Pezaktywacja lub ukrywanle menu


Kidy menu lub pozycja mmu q nierlrryvne, ich tekst riry5wietla sip mrym kolom,
a klikni~icnie p y o s i 2adnych skutk&w.Excel deaktywPrje te poleccnia menu, Mrt
nie majq sensu w okdlonym kontekie. Na p n y W pzycja tqcsrr w menu E+cjn jest
nicakt).lvna,,jdli a k t p m y skorosqt nie mwjera tqcz.
Uakywnianie lub dezaktywacja menu i ~ z y c j menu
i wbudb~8nych.jak u2yt-
kownika jest mcsZIiwa xa porn- k d u VBA. Pdobnie rno2Ra napisak k4, kt6ry ukrywa
menu lub Jegopozycje. KJuczem do sukcesujest wykorzystanie odpowiedniego rdmia
Poniare procedury nalcty zapisat w module k d u obicktu Thl sWork book:
Private Sub Workbook-Open( l
lCa 1 1 AddMu

End Sub

Prl vate Sub Workbook -Before~?osetCance~As Emlean l


Ca 1 1 Del eteMenu
End Sub

Private Sub GIorkbaok-Actt vatet 3


Ca 1 1 Unhi deMenu
End Sub

Private Sub Uotkbook-Deactjvate( 1


Ca 1 1 H I deMcnu
End Sub

W momencie otwierania skomszytu wywdywana jest pmedura AddMenu, a w mornencie


zamykania - Del eteMenu. Dwie dodatkowe procedury obsiugi dame6 sq wykonywane
w rnornencie aktywacji (Unh4beMenw) i deaktywacji skoroszytu (Hideknu). Procedura
HSdeMenu ustawia wlaSciwoSt Visible menu na wafloSC Fa1 se, co powaduje usuniqcie
paska menu. Procedura Vnh~deMenuwykonuje dzialanie odwrotne. W efekcie menu jest
widoczne tylko wtedy, kiedy skoroszyt jest aktywny. Wyrnienione proceduty - p r q
zal&eniu, kt nazwa menu to Bu&el- sq nastqpujqce:
Sub UnhideFFenuC 1
Comn~ndBarsCI),~trolsCa0ud.2et*~
End Sub
.VIslble - True

Sub HideMenu( l
CmandSarsI1).Contmls~"Budtet"~.Vislble= False
End Sub

Aby deakty~owaCmenu, nale2y ustawilS wlaSciwoScS Enabl ed zamiast wMciwdci V i s i ble.


Ten ~ k k jest
d dostqpny na plyde CbRdM ddqczone) do ipiqikl.

Drialania z pokceniarni menu powiqzanyrni z pdarni wyboru


Niek6re poqcje menu Excela sq wyiwietlane z polem wybaru. Na p y k h d w pozycj i
WidoWPmekfarmu& wySwietla sic p l e wybru, kt&= jest zaznamM, jc2eli pasek
fortnub jest widoczny, lub puste, jdli pas& forrnuly jest ukryty. Wybranje tcj p o q c j i
menu powoduje wlqczanie i wytqczanie p a s h n q d z i . J&oc&nie wySwietla sig a&
mznaczenia lub puste pole wybm.

Takie W a n i e rno2na r6wnief zaprogmowaC dla p v j i menu zdefifiomych p z


u2ytkswnik;l.Na rysunkv 23.5 pokazano pozycjq menu, w kt6rej n a k zamaczenia wy-
Swietla siq wtedy, kiedy w aktywnym arkuszu sq wyiwictlane l i n k siatki. Wybranie tej
Rozdzial23. Twonenie menu 655

Rpunek 23.5.
Porycja menu Ude
siatki wySwietla a a k
zaznaczenia,
JeSIi w akywnym
aikoszu
wvfwietfajq sic
link siatkl

pozycji powoduje mian? mnu wyfrviettania linii siatki oraz wy8wictltnie Iub ukrycie
maku zaaraczenia.O tym, czy znak macrenia jest y4wictlany. dccydujc whSciwoSC
S t a t e kontrolki.

R o b l m w tym pnypadku plega na qmchmnizwaniu maku zamaczenh z aktywnym


m h z e m . Aby to osizlpnq5, naleq uakruailniat pozycjq menu za k a d p razern, kiedy
uaktywnia siq nowy arkusr, nowy skoroszyt Aub nowe okno. Jest to rnoZliwe dziqki
skortfigumwaniu zdaneii poxiomu apljkacji.

boduwanie pozycji menu


Procxxlura MdMenuItem ;r listing 23.5 jest wykonywana w mornmic owierania skomszytu.
Br~ceduramany prrzycjq JLinie siatki w menu Widok.

Sub MciNmItenC I
Drm V t M e n u As ICornnandBarP~pup
Olm MMMuItem As CamMndBasButton
'
Usunjsie mrycji rrrenu. jczel t ju2 1sttnleje
Call klete%nuItem

'
-
Mssukanle menu Widak
Set V t M e n u tomMnd8ars ( 2 :,.F i ndarrtrcl It 0:=301C041
I f WiMenu Ir Mthinq Then
MsgBax 'Nie moina dad& porycjt menu. '
E x i t Sub
Else
Set HewMmItem = U l M e n u .Controls ,P$dtT~:moContmlsUtton~
With NwPknuItem
-
.C?p?ion "8Linie siatkti'
.Onktian
End Ylth
- 'TcgglcGr~dIines"
End ff
*
-
Konfiguracja pmedury obstugt zdarzed a01 f k a c j i
Set PgpOtl.j~t.AppE~et~csAppt icatlon
End Sub

Wykonanie praccdury AddMnu Itm powoduje dudanie nawtj puzycji na Pasku memrr
m k a kafkulocyfiego, Procedura nie doda pozycji na Pasku mentr Wykres. Z tego po-
wodu nawa paqcja mmu nie bqdric wyiwietlana w prypadku uaktywnienia wykresu
(wldnie o takie dzialanie nam chodri).

Omatmia instmkcja w procedurze AddMenuI tem konfigumje zdarzenia paziomu aplikacji.


ktbrc Wq monitormane. Procedury obshgi zdarzeri zapisant w module klasy o nanuie
XtHand 1er sq nastqpujqce:

Private Sub &wEvents-Sheet&t 1vateCByVal Sh As Object)


Call CheckGrjdl tnes
Endl Sub

Prfvatt Sub AppEvwrts-llorkWActIvateIByVa1 1Jb As Excel .Workbookl'


Call C k k G r l d l ines
lEnd Sub

Private Sub AgpEvwrts-WS*AetIvatelByVal MI As Workbock. ByVal Wn As Window)


Call Checktrjdflnes
End Sub

fse* t a p m t a w a n a poceduta ma jednq wade: miana ustawiefi linli siatki w oknie


dialogowym O w e nie jest wykrywana.

Synchronizacja menu z arkuszern


JeJli utylkwmik mimi aktywny a r k lub skaoszfi poniZsra procedura CheckGridlines
sprawdzi, czy n a k zamaczcnia wySwietlany obok opcji menu Link siutki jest zsyn-
c hronizowany z arkuszern:
Sub CMGridl im{)
DSm TG As C6mMndBarBtitton

-
Gn Ermr &sum kxt
Set TG ~andBars(l).Find~ntm?{ID:-30004I.Cmtmls~'&linie
If bctlwWIndor~.01splayGridlinesThen
siatktu1

-
fG.State msoBrrttonDarm
Else
-
TG-Statt? msa0uttanUp
End If
End 5ub
Pcocedura spramlza akrywne ololo i ustawia wlaSciwo+f State porycji mmu. J*?cli nq
wyhvietlane link siatki, do pozycji menu Link siarki dodawany jest mak tamaczenia
kkli Linie siatki nie sq wyfwialane, proredm usuwa mak zmacmia z pozycji menu.

JcJli pozycja menu jest tsmactona, wla9ciwde OnAction tej pozycji mmu powodujc
wykonanie procedury Toggl eGridl7 nes, k t d q zaprctentowano ponitej:
Sub Tuggl &ri dl 1nes ( 1
IfTypeNameCActiveSheet) = "Worksheet' Then
ActiveW1ndow.Oi splayGr1dl ines = Not ActfveWindaw.Dl splayGridl1nes
Ca 11 UleckGrldl 1nes
End If
End Sub

Ps.ocdura prze@za wy3wi'etlanie linii siatki w aktywmym oknie. W nlu sprawdzenia,


czy aktywny arkusz nie jest wykrertm. wykorystrlno konstmkcjp If .. . Then.

Tworzenie menu uiytkownika -tatwy spos6b


Po wydaniw Execla 97 bykm nieco sfru-ny ilo9ci4 kodu. jaka byh wyrnagana do
utworzenia menu wtytkownika Z tego pwodu opmwalcrn technikq, bbra pornla
na naczne uproszcztnie tego pracesu. Wykonystalem arkusz, kt6y pakszano na ry-
sunku 23.6. w kdrym wprowadra siq informacje o n o w mcnu. Prmedura VBA od-
czytuje dane z tego arkusza i twony mmu, pozycje mcnu o m pozycje podmmu.

Rpunek 23.6.
lntomrade zsplsane
w t)lm arkusru
shr& do utwomnfs
menu u2ytkownlka
Plniom wyznacza @o&nie o M l o n e j poycji rclatywnie do h i e m h i i systernu
menu. Poprawne wartogci to 1,2 i 3, Poziom 1 odpowiada menu, poziorn 2
pozycji menu, natomiast poziom 3 pozycji podmenu. Zanvyczaj powinna by6
jedna pazycja poziomu 1 o m kilka pozycji poziomu 2. Niektdrym poqcjorn
poziomu 2 odpowiadajq pozycje menu 3 (pzycjc podmenu).
Nanola to tekst, kthry wyiwietla siq w menu, pozycji menu lub podmenu.
Aby wySwietI it pdkreSlony nak, nalew popntdziC go makiern &.
E PozycjdMakro -dla ekmentSw pziornu 1 powinna to by5 liczba calkowita
reprezentujqca p q c j e na pasku menu. DEa elementdw poziornu 2 i 3 kolumna
zawiera makro, kt6re Wzie wykonane po wybraniu pozycji. Jcteli clementowi
goziomu 2 odpowiada jeden lub kilka elementbw poziornu 3, to z elementarni
pziomu 2 nie zawsze sqpowiqzane rnakm.
-
Separator naleky wpeowadzit wartogt PRAWOA, jttcIi p m d elementern menu
lub podmenu ma byd wyfwietlony separator.
w FuceiD to wartdt opcjonallna Jest kodem, kt6ry rcpmmhje b b r Wwietlane
~
obok tekstu elemtntu menu.
Na rysunku 23.7 mpmentowano menu, h6re utwowno na padstawie danych mpisa-
nych w arkusm.

Rysunek 23.7.
To menu oMomno
na podstawle
danych zaplsan)rch
w arkuszu

Ten pnyk)ad]est dostqpny na ptycfs CDROM dotqczone] do ksiqai.

Aby zaFfosowa&tg teehnikq w skoroszycie hb dodatku, wykcmaj czynnohi o p i ~ ponikej:


e
1. CW6rz przykladawy skomszyt zapisany na Wcie CD-ROM.
2. Skopiuj kod z m d u h M u 1el do moduh w ~ i r pmjekcie.
n
3. Wpro~8d6prucedury zaprwentowane ponaj w module kodu o b i e h
Thi sWorkbook:
Private !hb Mrkbmk-Open()
Ca 11 CreateMerlu
End Sub

Prt vdte Sub Workbook-Befordlme~Cancel As Boblean)


Call QeleteMenu
End Sub
4. Wstaw nowy arkusz i nadaj mu nazwr;A r h z M e m . Najlepjej9jeSli skopiujcsz
arkusz ArkuszMem z przyktadowego pliku.
5. Dostosuj zawartoSt afkusza ArkwzMenu do zawartoSci twononego rntnu.

<:s@* W pnyktadowym skoroszycie nie ma obslugi bbdbw. Powinnismy zatem sgawdzi6,


cry menu utwomno prawidbwa.

Utworzenie zastqpczego paska menu

W niekt6rych przypadkach m t n a caikowicie ukry6 siandardowy Pmek menu orkrrsza


k ~ / k t r b j n e g oExcela f zastzpid go niestandardowyrn paskiern menu. Psocedura Make-
Menukr z listingu 23.6 t w r z y nowy pasek menu o nanvie MdjPasekMemr. Sq w nim
dwa menu. Piemsae to standardowe menu PIik skopiome z Paska m m arkma knikufa-
cyjnego. Drugie menu Pokcenia xawiera dwie p y c j e : 0dtwdt.l. srundurdowe merrrr
oraz Pornoc.

Listing 23.6. Zas tepowanic wbudowanego menu Excela Hasnyn


Sub HalceMmuBar( 1
Olrn NMenuBar As Cannandhr
Dim N M e n u As CarrmandBarCmtrol
Dlm New1 tern As ComnandBarControl
'
Usunleeie paska menu. jt3ll i s t n i e j e
Call CeleteMenuBar
' Dodanie paska menu
-
Set HmtlenuBar CmndBars .Add (MentrSar :-True)
With NedlmuSdt

.Vtslble
End Uith
-
.Name "VbjPasekMenu'
True

Skopiawanle menu Pl l k s PaQa mnv arkusza 4alkulacyJnego


.
CmndBarsC'Worksheet Menu Sa r") FindCont m1I( ID:-300021 .Copy -
Bar:-bmandBarsC "H6jPcs&MemW3

- -
Dbdanie n m q o m u
.
Set M e n u W e n u B a r .Cmt rol s Md[Type:.~rrsoContml
NMlenu. Captlm "gPolcen~ a'
Popup3

'
-
Wanle p o w 1 do menu
Set HwItem W e n u . Cont re1s .Add (Type; 1msoContr01Eutton 1
Vith HmItem
--
.Captim 'b0dtw6rz stand~sdawemenu"
.QnActian 'Del eteNmuBarm
End With
.capEton
.OnAction
-- "&W'
'ShanHet p"
End MI t h
End Sub

Nowy pasek menu pokazano na rysunku 23.8.


Rysunek 23.8.
/Viestandadmy
pasek menu rastqfl
Pasek menu arkusra
kalkulislcfinego

-
W tcj p~.detduranie ma instrokcji, ktbre ukrywajq P m k m m arkrrra &uku?~cpjnego.
lnstrukcja Set NWemBdr CmnCBars.Add!MenuBar:-True1 powoduje dodanic no-
wego paska palecd. Kiedy wiaSciwo$t V i s i bl e tego nowgo paska zostanic ushwiona
na wartoft True, pasek pnejrnuje r o l ~gI6mego paska menu. W Excelu w okreflonym
rnorncncie m02e by6 aktywny tylku jeden pasek menu.

5
t
e%!e4Zgadnie z tym,co napisafem w rozddals 22.. wfaklwu9C Trpe standardowego paska
nanedd ma wart056 msok tTypet4orna 1, WaJcim9d Type paska menu uhvanonega
w wpncdnlrn prryktadzie ma wartoe mso&ar7ype*nuBar.

Usuniecie niestandardowego paska mcnu p d u j c wySwictlenie Paska m m arkus:u


kalkulacyjnego. Tym samym pasek ten staje sit a k m y . Poni~smgrmedura Del eteMe-
nuBa r przywraca stan p o c q t k o ~:y
Sub Deletf!MenuI3arll
On IErrar R e s m k x t
CarnmandBars( "M6jPasekMenuW).Delete
.Ih Error &To 0
End Sub

W prykhdzie wykorzystano metode FindControl w celu odszukania menu PJik., ktdre


nastqpnie zostalo sk~piowanr:(wraz x wsystkirni pzycjarni) z Pmka mmrr orkusza
kalktrlacljnego do nowego paska menu za prnocq rnetody Cgpy:

Ndcw pami-, re pozycje menu i pudmenu nie sq mc-i kopiamj odpowiada-


jqcych im pozycji na Pasku menu mkusza kaIhIiza),jneg.a. Je*li na pryklad zmienirny
wartoSC whSciwoSci Caption dla pozycji menu Nowy paska MdjPmekMenu na Navy
skoroszyt, mjana ta bqdzie dotyczyrf s6wnie poycji J'Cruyv na standardowym P a s h
menu u r k u kahlucyjnega. Z tego powdu, po odhwrzeniu w k a menu, ~ S w j e t t i
s i pozycja
~ ze mienionq nazwq.

Operacje z menu podrecznymi


M m pw'reczm to lista poleced wydwiettajqcych si* po kl ihiqciu prawym przyciskem
myszy niemal W e g o elementu w Excelu. W Excelu 2003 jest 61 wbudowanych mmu
podwmych Do ich usuwania lub rnodyfikowania nie moms a h dialagowego
Rszd;dat 23. Twmem'e menu + 66 1

D u s t o s ~ a n k Jedynyrn
. spdsobm dostosowania menu pdqcznych jest wykorzy-
stanie jezyka VBA.

Menu podqcrne jest paskiern pleccfi, kt6lego wlaSciwSk Type ma wartog6 msokrfype-
Popup. Aby wyk6nywad d z i a h i a z menu m m y m j , azeba mat wamfci ich wMci- .
wdci Index lub Name. Do ygenernwania Ijsty wszystkich menu podrqcmych rnclgna
wyk-C p o h q prcrccdu~.Na 1ikie w pmzzegbhych w i e m c h arkusza wySwietlq
sic wartoSci w#&ciwoSci Index i iam o m Iista wszystkich pzycji menu.
Sub L i s t S h o r t C u t ~ u tsI
Row 1
For Each cbar I n Cmnd6ars
I f cbar .Type mm%rTypePn~upThen - -
-
Cells(Rw, 21 c b a r . N m-
Zells(Row. I > cbar.Ir?:ex
For Col 1 TO c h r -Contr315 ,Count
Cells<Rou, t o 1 21 c3ar.Controls(Cu13 .CaptSon
Next CoJ
+ -
Rw = Row + 1
End I f
Next cbar
End Sub

Fragment uryskanego w y n i h pokazano na sysmku 23.9.D t i ~ k tej


i proctdurrt m o a a
takz?e uqska6 infmacjc a nanvach pozczq$lnych menu pcdrpmych. Bez niej t d n o
byioby zgadnqd, 2e menu psdqcme ~ S w i e t l a j psiq po kfihiqiu prawym przyciskiem
myszy zakhdki arkusza nosi n w q Ply,

-
. .
:9: '2 Ra . WT'W .&4 m*;Lpwlrha...
my
a plr - .ffiergNqrkrnn Whnr W S ~
1, u n~ u'-- Whml . -mW+ - . ~ . wq L U W ~w...
1 2 j 15 DummM - Zkwzyta. BDuxili.. LL¶l- army.
.I- -- -

-
*13 r G D . I H o r - ... - - - - - - - - ---. h p r &!r. L-1 [err
IAE
-+-
uw
l l r r * ~ r fPrtmrtmy
d ~ b~ayw' ~ ~ b 1 3 ) 1 ' -
~ ~ w
* ~ t W j lfkdphbihW
a --
-. * . - - .w a r r k m - _ _&Wnh!
'SJ
i a
-. 9 D*
?74
.
.
--- - - - -
..
wan%
*'@
+
~~

. -
. -.----
m d q
* _-
v-.~
-,!"rFq
<
tTb+Ibrm*- -
~ & r c : ~ ~ l h l l t *
~ M
W / Dtbsx -

.
_
---
~BJ51 S m m W y b r r y Wmbl hTp y b r ~ w . abarn2*ddlM.
-X#J
'9_1_9p'* - _---Wr*r~ h h
53FlowdHHI
&Tfl r ~ k n * ~ . . - - ---- o ' ! a w t m . - & Qm**-* - -
-. Wy!lmmyb.W Wi*ktw, wq*t
W J b r n ~ w M W=rY
m r M -
-23_1
- S 6-
--2 4 ~5? F
E4 C*.lrl
b a Swrr
a n *m
~
w r bbtrl
WybmrL&mH
L W t
~ T T ~P m m .
LYycr* usd nt-
ww--
bpasrz -
I
-
5 SB Famd L q d EMy Wybq bbrw iJLCryj BZE- *Palal m r m 4wyE~Ty
. A 53 FFmMJ1m 0 ~ r wfi w wj mlbq Panaym ,
8 BORrPtT*mrlLkcu ffamwW.. . C W y k m m L K r l ( l ~ ~ U b d oWbarnz#m
~ ~
k- f i r -
-. WflW WJ %% ~ n by-..

~~ann*&&i -ar,-prjb.a, --,


"+=v
U c t*
-
D--L-
-. - -
--
Wlq LIpqrlru..
Ulc2rdcmPl
-
, O P * ~ r l h r h . .__
-. _ * _

my--- --- - .

P Ea ~~* wi. -W H - - WpFi . _ - ._mW --- w)rp*i...


- w?twtt IWT
-- -
-

--
A A

69 k r o 5rm . -
31m
-
H
F~~
r * u\-cl
&rsp-
Sbnku
Wk
y
o
-lt:p
r
$
in
la LLrmt SLmm ~

1
' us'*-
Llnmrrc~a
*lr

lRysunek 23.9. Usta ~ F u " c menu


h pcdrwmych waz z po!ec&amr', kWns sq w nkh zawatte

Ten p q h d jest dostepny na p&~k


CDdQlM - ~ j w;?Ski.
Choci& do menu podrqcznego motna odwdyva6 sip za pornocq MalciwaSci Index.
zej takl sposdb nie jest zalecany. 2 niernanych puwodbw waR0Scl vdaSciwoSci Index
nie sq takle same w RStnych wersjach Excela. W miqzku r tym w celu odwofania sie
do menu podrectnych lepiej wykarryst& WaSciwof C Naw,

Dodawanie pozycjl do menu podrqcznych


Pozycje do menu pdmpxnych dodaje sip dokladnie tak samo, jak do mykkpo menu.
Ponitszy przyklad pokazuje spos6b dadawania pozycji do menu podrqcmego Cell, wy-
Bwietlajqcego sip po klikniqciu kom6rki pawyrn pnyciskiem rnyszy. W rym przypadku
pozycja menu bqdzie dodana jako ost amia i zostan ie popnedmna separatorem.
Sub Add'ltmToShort~utt(1
Dim NewItem As ComnandBarControl
Set NewItem CmandBarsl'Cellm).Comrots.Add

-
W ~ t hNewltem
.Caption 711~ezlwylacrtmi janle btyrarbw"
.OnActian = 'ToqgleWordWrap"
.Begi !Group True
End With
End Sub

Wybranie nowej pazycji mmu powoduje wykonanie pmccdury Toggl MrdWrab {nie zapre-
zentowano jej w tekScie ksigtki). Now? zawartoM menu podnymego zaprczentowano
na rysunh 23.10.

Rysunek 23.10.
Do tego
menu podpcmego
dodanrr nowa porycJe

W popminim przyldadzic w a l u pnypisania makra do pozycji menu podrpnego


wykwzystano wlajciwodd MIon. W przykladzie p k m y m porritej nezygnowano
z tej wtaSciwo8ci i rarnizst niej dodano do menu podmimego wbudowanc polecenic
( W j ookno), kt6n wy4wietla siq po klikniqciu paska t y h h okna skor~zytu.
Sub AddItmToShortcut[ 3
Oim NewItm As Cmand&itContral
Set NewItm = CmandSa rsF "Docmnt") .Contml s .Add( ID:4651
NewItem.Caption = "Ukryj okno'
End Sub

W y b n i e tej poycji jest r6wno-e z wybmiem plecenia OkndUhyj. WEtrtofC wta-


3ciwofci ID tego polecenia to 865. Infomtacje tq uyskatem &icki nastqpujqcej instrukcji:

Usuwonle pozycji z menu podrqcznych


metodq Delete w
W puniboej pmcdune wyko~~ystano celu usuniecia pozycji menu
ddanej za pornma pmedury pokazanej w poprzednirn punkcit:
Sub RmveItenfrmShort~utC 1
On E r r o r 4 e s m Next
CamtandBars( "Cell " 3 .ControlsC " W 1 ~ c r l w y l ~ czawijanie
z rayrazb*).klcte
End Sub

lnstmkcja b Error ksm Next apobiega wy9wietlaniu komunikatu a M e e w pny-


padJrrr, gdy oFrre5lunej pcizycji nie ma w menu pdqcmym.

Wybnanie kolejnej procedury p d u j e usunipic pozycji Ukgy z d w h h menu podqcz-


nych -jednego, ktlSre wySwiet la siq po klikniecju prawyrn pnyciskiem mysy nagbvka
wiersza, o m drugiego, wySwietlantgo Qla mgldwka ko'lumny:
2ub R ~ i d e * l e m I t m1I
CmnandBars( "blurm"1 .Controls1 'Ukryj" 3 .Delete
GomnandBars{ "Row") ,ControlsI " U k r y j " 3 .Delete.
End Su5

DeraMywacja pozycji menu podrpcznych


P q c j e mmu -go nm&~ zde&powiC pudczas dzidania aplikacji. Kicdy poq-
cja menu jest nieaktpna, w y d w i d a siq szaqrn koImem, a k l h i v i c nje pqmasi a y c h
cfeMw, Wykonanie poniZszlej pmedury p d u j e deahpmcjc menti U@j z menu
padrqmych Row o m Cohmn:
Sub DisableHTWknuItmsE)
CcmnandUzrs( "Calm*
- -
3 .hntmlsl'Ukry j'l ,Enabled False
b m i n d f l a r s t "Row') .Corrtml sCWUkryj'3. Enabled False
End Sub

Dezoktywacja menu padrqcmych


M o m r6wnieZ dektjwuwat cafe mnu pdqme, blohjqc dost9 ~ k o do pole- e
ceri dostepnych po klihiviu kom6rki p w y m pr7vciskiern mysq. Fnxedlrra Ilisabl &el 1
zapraentQwana p o n k j deasrtywuje menu podrt;cm Cell. Po wykanzmin pmdury kEik-
niqcie kornbrki prawyn prqciskiern myszy nie przyniesk admego efektu.
Sub DisableCelt0
Cmmnd6anC'Cell') .IEnabled
End Sub
- False

Sub O i sab?eAl1ShortcuttMus( 3
O l m cb As Cmmndbr

I f cb.Typ
Next cb
-
For Each cb In CmmandBars
mso0arTypePopup Then cb.Enabl ed - Fa1 re
End Sub

lednak po jej wykananiu w dalszysn ciqgu bqdzit dostqpne menu pdt.ecmc Toolbur
Lisr (jest to menu, k6re wySwietta siq p klikniqciu pra- pnyciskicm myszy do-
wolnegcr paska nrtrzqdzi). Nie mam sposobu, aby zablokowat jcga wyfwietlanie.

c3J OemMywacJamenu podrqemych jest tmda. 3eJ skutki nia sq cofane po zakoficzeniu
;=@* sesji, Z tego powodu pned sarnknivlem Ejrcela tneba pamieat5 CIodtwoneniu menu
podrfxxnych. Aby je od t
w om .nslezy pmedurg pokaranq powyief modyfikowd
w takl sposdb, aby ustawiata ~ ~ w menu
l Snebled o ~godrecznyh na wartoSC True.

Przymvrcanle ustawleir menu podrqcznych


Mctoda Reset przywsaca m m podwme do picnvdtncgo, domy3lnega stanu, Jec2i
w aplikacji dodana pozycjc do menu podrpznyeh, najlepiej odtworz)ld j e indywidualnie
p o d c m mykania aplikacji. W innym p n y p k i mwma nieum).Slnie usune modflkacje
wykonane przez inne aplikacje. %ni&za prmedufzl dnvarza menu podrvzne Cell do
pierwotntgo stanu:
Sub RcsetCell Menu t 1
CmndSarr[*Ccll">.~et
End Sub

Twonenie nowych menu podrqcmych


Procedura z listingu 23.7 t w o r y calkawicie nowe menu podwm o n m i e MoJpMe-
mrPodqme. Skhda sic ono z 6 pozycji, dla ktchych ustawiono wlakiwof t O n k t 7 on
w taki sposbb, aby wykanywal4y sjq pro* procedury wyfwietlajqce jednq z zakIadck
w ohic dialogowym Fonnatowa~iekomdrek. Dta m h d u p e d w ShowNwberFornat
ma nastqpujqqtre96:
Sub S M o m a t M e r C I
Appl tcation.Dialugs[xlOf al~FomtNmkr)
.Shun
End Sub

-
Sub CreateSMrtcut ( 3
Set mybr CnmandSars.Add _
CfOame:="MbSdlenrsPodwme'. Posi ttm:~moBarhpup.
TEmmrary.:=Tml

"
-
Oodanie pazycji merru
Set myItem @ar.Cantrbls
Wfth myItem
.Add[Type:-msoComtml
Buttofl)

.Caption = "&Fomt liczby ..."


Rordziol23, + Twonenie menu 665

.OnAetIon
.FaceId
E d With
-- *ShPwFomtNunbern
1554

' Wantc pszyejf menu


Set myItem = myBar .Controls .MdtType:~~oCmtm1Buttm~
k t h myItm
.Caption -
'&Wyrhanle.. .'

-
.C)nktion "Sh0wFomatAllgmntU
.Faceid 217
End W l t h

'
-
Oadanie potycji m u
Set nryltem my8ar.Control s .llddfType :lmsaCantra?Button)
Wlth my!tm

--
.Caption = "ECzclonka.. .'
.Cnktion "ShMormatFonim
.FeeeId 291
End Ul t h
aodanie potycjf mnu
Set myItem = mybr ,ControPs.MdtType:-msaCantrusl&rttonl
Mith *Item

- - "ShawFormatBorderw
. C a p t i a n = "8Obranowanie. , . "
.OnActlan
.FamId 149
.Bqi&raup = True
End Wj!h

*
-
Doclanit! p z y c j l menu
Set inyItm nyBaf .Control s.AddIType:qsaCantmlMtm)
Hith myItem
.Caot lon -- "W&rorce.. ."
.%Action
-
*ShawFomtPatterns'
.FaceId 1550
End WCth

-
Oodantt! pozycjl n#mt
Set nyItem myBar.Gmtmls .MdlType:m~m1Buttbn~
With myItm
.Captian = 'Za8bewl~renJa.., '

,FaceId
End With
-
O n k t i o n = 'ShauFarmatPmtectlon'
2654

End Sub

hftworrone w ten s p d b menu podqemt p o b o na qwnku 23. E 1.


Nowe menu po4i-c rnotna wyfwidit za pomocq m&dy 5 M ~ p u p Ponitna
. pmcb
dura, umiesncmna w module k d u o b i e h Worksheet, wykmuje siq, kiedy w k o w n j k

-
Privcte Sub Worksheet &f~reRiglltCl~ck[ByUalTarget As Excel .Range, taneel As Boolean)
If !hisnt~arget.6qe("~l'l.RangeC'dmm) 1,Address Sange( "dam"I .Address men

-
CmmndBars [ " H o j M u P 6 d r e u n c "1. ShorPaoup
Cancel True
End If
End Sub
Rysunek 23.1 1.
Menu padr(:cme
utwonane
za pamocq kodu VBA

Jckeli kornbrlra, kt6q kliknie utytkownik, majduje sic w zallarsie a nazwie dune, wy-
Swietla siq menu pdrqcme McrjeMemrPudreme. 3Dziqki ustawjeniu argumentu Cancel
na wart05C True nie jest wySwietlsnc standardowe menu podrvzne.

8@ Na ptycle CD-ROM dotqczune] do ksiqtki msjduje siq pzyklad twonqcy menu


p o d r ~ z wySwiellane
n smiast standardowego menu pohecmego Cell.
Rozdziat 24.
Tworzenie system6w pomocy
w aplikacjach
Oprograrnowanie powstajqce w ostatnich latach rozpiefcito u2ytkownik6w komputer6w.
W poczsttkach ery komputer6w osobistych producenci oprogramowania nadko tworzyli
systemy pomocy ekranowej. A jefli ju2 byla opcja pomocy, rzadko dostarctata wyczer-
pujqcych informacji. Obecnie niemal wszystkie komercyjne systemy zawierajq opcje
pomocy i c o r n cqfciej systemy pomocy spehiajq funkcje podstawowej dokumentacji.
Opaste tomy dokumentacji program6w powoli stajq sip wymarlym gatunkiem. Krrytyk
na drogq!

Dlaczego naleiy tworzy6 systemy pomocy


w aplikacjach?
Opcje pomocy nalety implementawaC w aplikacjach o W z y m od p n e c i m g o poziomie
skomplikowania Dzipki temu korzystanie z aplikafji stanie siq latwiejsze, a programista
nie bdzie marnowat czasu, odpowiadajqc na trywialne pytania. Dodatkowo utytkownik
bqdzie zawsze miat pod r qhpottzebne infomacje. Podtycmiki korzystania z aplikacji
nie zginq gdzief pod stertq ksieek.

Systemy pomocy motna twonyC na wiele sposoMw, od bardm prostych do skompli-


kowanych. Wybrana metoda zalety od tematyki twononej aplikacji, jej zlootondci o m
poniesionego nakiadu pracy. W pnypadku niekt6tych aplikacji wystarczy kilka instruk-
cji opisujqcych spodb ich uruchornienia. W innych tneba zdefiniowaf obszerny system
pomocy wraz z wyszukiwarQ Najcqkiej potrzebnejest rozwiapnie pofrednie.

W tym rozdziale systerny pomocy podzielih na nieoficjalne i oficjalne. W niwfiqahych


systemachpomogJutywane sqstandardowe komponenty Excela (np. obiekty UserForm),
natomiast w systernuch oficjalnych - skompilowane pliki CHM, uuhvonone dla systemu
WML Heb. Pnygotowanie skompilowanego pliku pornocy nie jest zadaniem ~~ ale
warto je wykonak, je2eli aplikacjajest zbtona tub prremacmna dla wielu &ytkownikbw.

Wuystkie pfzyklady zaprerentwane w tym rozdziale s$ dost?pne na plycie CDROM


dolq~zone]do ksiuigiW.
Pomoc anline?
W pnesdoki zawsze okreflakm pomoc ekramwq Excela jako pomoc online. Istotnie. jest to
og6lna nazwa dla tego rodzaju instrukcji. Jednak w ostatnich latach terminu online zaceto uty-
waC w odniesieniu do informacji dostepnych w intemecie. W nviqzku z tym wyraienie pomoc O r b
line zaczqlo mylit niektdrych uiytkownikbw, poniewai inforrnacje by4y w rreczywistofci zaplsane
na ich lokalnych dyskach twardych.
Z tego powodu, aby opisat wskazhki dostepne w aplikacji, utywarn obecnie terminu system
pomocy. Jednak wraz z wydaniem Excela 2003 spawy zatoczyly pelen obr6t. Po raz pierwsry
molna korzystd z inforrnacji, kt6re naprawde sq dostqpne online. System pomocy Excela 2003
-
umoiliwia prreglqdanie informacji zapisanych lokalnle lub je&li polaczenie z internetem jest
-
aktywne wyszukiwanie ich w witrynie WWW Microsottu.
,

Systemy pomacy
wykorzystujqce komponenty Excela
J e d q z najprostsych metod definiowania systemu pomwy jest wykorrystanie wbudowa-
nych wlafciwoSci Excela. Najwamiejsq zaletq tej rnetody jest fakt, te nie meba uczyi:
siq twonenia plikbw pomocy w jezyku HTML -
co stanowi jeden z najwatniejstych
problernbw i mote zajq6 wiccej c w u n i t opracowanie cajej aplikacji.

W t)m podrozdziale zarnieszcze przeglqd r62nych technik pommy. w ktbrych wyko-


rrystuje sip nastppujqce wbudowane kornponenty Excela:
komentarze do zbyartoSci komdrek -jest to jeden z najprostszych sposob6w
tworzenia systembw pomay;
polo tekstowe - wystarczy zdefiniowad proste makro, ktore wySwietla pole
tekstowe zawierajqce tekst pomocy;
arkusz -prostym sposobem detiniowania systemu pomocy jest wstawienie
nowego arkusza, wprowadzenie informacji i nadanie arkuszowi nazwy Pomoc;
kiedy u2ytkownik kliknie zakladkp arkusza, nastslpi jego uaktywnienie;
formulan UserForm-istnieje wiele technik wySwietlania pomocy za pbmocq I
okien UserFom

Wykorzystanie komentarzy w celu twonenia system6w pornocy !I


I

Jednym z najprostaych systembw pomocy q komentanc do W S c i korn6rek Technika !


,

ta najbardziej nadaje siq do opisywania typu danych wejfciowych, ktbre nale2y wpm-
!
wadraC w komdrkach. Kiedy utytkownik umiefci wskahik m y p w kom6rce zawierajwj
kornentan, wyJwietla siq niewielkie okno podobne do mkaz4wki e h o w e j . Uhvomnie
takiego systemu pomocy nic wymaga definiowania makr.
!
Kanentarze w km5rkach mina * y M e t ? a t autmtycznie. PoniLsza Instmkcja VBA
zapeunia M e t l a n i e macmikin d l a tych k d r e k . dla ktbrych Z d e f m l ~ a n o
kcmentame :
-
Appl Ecation .DisplayCmmtIndi cator xlCamentIndtcator(Xl1y
Rozdziat 24. + Tworrenie system6w pomocy w aplikacjach 669

Uwad na ternst pykiad6w pprredrtawlonych w tym mzdzlab


W wielu przykladach w celu zademonstrowania r6tnych sposob6w tMHzenla system& pornocy
poshtono sie prostq apllkacjq. Apllkacja wykorzystuje dane zapisane w arkuszu w celu genere
wania i drukowania formulary. -:
Jak motna zobacryC na zamieszczonym n i h j rysunku, w kom6rkach wySwletla she calkowlta Ilcz-
ba rekordbw bazy danych (korn6rka C2 -
warto.44 obllczona za pomocq formtdy], biezqcy numer
rekordu (C3), plemszy rekord do wydrukowania (C?) oraz ostatni rekard do wydrukowania (CS). AtYy
wySmetlit okreslony rekord, nalety wprowadnC wart056 w komdrce C3. Aby wydrukow& clqg
formuiarzy, naleiy wprowaddE numery pierwuego i ostatniego rekordu w korndrkach C4 i C5.

YCYlllCl-

f Gvta-blfm*
m-PB VIM

: ~ m w . ~ o . ~ & C b . Q ~ ~ ~ m I l l k ( P . ~
W w m R k p r t O~
a r q~d a c l q p h n m m w R m I h l , l p y &

Aplikacja jest v s t a , ale sktada sie z kllku cdddelnych komponentbw, M6re pcezentu]q r6he
sposoby wyfwletlania kontekstowej pomocy. Skoroszyt huorzq nastepujwe komponenty:

Szablon Arkusz zawlerajqcy tekst szablonu llstu


Oane Arkusz zswierajqcy bate danych rnajwq sledem p61
ArkuszPmmc Arkusz wptepljacy tylko w tych prqkhdach, w ktdrych tekst p o m y jest
zapisany w arkuszu
ModDt.uk Modut w jezyku VBA tavciemjqcy rnakra &@ce do drukawania srablon6w
ModPbmoc Modut w jezyku VBA zawiersjw makra m @ ~ a j $ o ew$wletlantem p o r n
cy. Tree tego modulu tale@od rodzaju prezentowanego systernu p o m w .
Usef7%ml Okno UserFonn w y s t e p u j ~tylko w tych technlkach wySwieUanla porn-,
w M6fych wykorzystpmny jest obiekt User+arn
lnnym sposobern wyhletlanla p o w Jestwykorzptanle polecenia Excda Sprawmanie
poprswmSci, kt6re powoduje wySwietlenie okna dialogowego umoillwiajqcego
wpmwadzenle kryterl6w poprawnoSci danych dla korn6ki lub zakresu. Zaktadka
Komunikat wej.4clowyokna dialogowego Svawdzanie poprawnoSci danych umotliwia
wprowadzenie komunlkatu, ktbry jest wyswietlany w przypadku uaktywnienia kornbrki.
ObjetoSC tekstu jest ogranlczona do okdo 250 znak6w.

Wykorzystanle p61 tekstowych w celu utwonenia systemu pomocy


Stosunkowo h t w o motna opmcowtd system pomocy w y k o r y s t u j ~ ypola tekstowe.
Wystarczy kliknqt
- -
przycisk
*
Pole tekrrowe paska n@zi Rysowanie, wprowadzid tekn
p&ocy i-odpowiednio sformatowat. ~ n y k l a dpola tekstowego wykorzystanego do wy-
Swietlania pomocy pokazano na rysunku 24.1.

Rysunek 24.1.
wonystanie
pola tekstavego
do wySwietlania
pomocy
dla utytkownlka

W systemach pomocy pferuJe 48 kontrolke z paska narwdzl Rysowmk.


porwalajgcy na formatowanie pojedynczych mak6w. a nie kontrolkq ActiveX z paska
nanedzi Fomanty, kt6ry nie oferuje takiej mofliwoSci.

Pracujw z aplikacja, nvykk nie chcerny, aby pole teksrDwe bylo widoczne. Do jego ukg-
.. zwiaranv z makrern. kt& od~owiednio
wania i wiwietlania m o a a zdefiniowak arzvcisk
~ pola tekstowego. ~mykiad;akiego rnakra zapre&ntowaoo
ustawia v k c i w o ~ Vt i s ble
ponifej. W tym przypadku pole tekstowe wysepuje pod n a m q HelpText.
Sub ToggleHelp 0
ActlveUleet .TextBaxes('HelpText'l .\risl ble-
Not Activesheet .Textf!oxes('HelpText") .'disicle
End Sub

Wykorzystanie arkusza do wyiwietlanla tekdu pomocy


Imyrn latwym spasobem uhnorania systemu p ~ m o c yw aplikacji jest zdefkiowanie
malaa. kt6re uaMywnia addzielny arkue z trmatarni pomocy. Wystarcy powiqzzd makm
z pnyciskiem w arkuszu, pnyciskiem na pasku nm&i lub pozycjq menu! Klikamy
Rozdzid 24. + Twonenie systern6w pornocy w aplikocjach 67 1

i mamy pmsty system pornocy. Na rysunku 2 4 2 pokazano p+ arkusz wykonysty-


wany jako system pomocy. Zdefiniowalern w nim mkres zawierajqcy tekst pomocy,
symulujqcy stronp z notatnika

Rytunek 242.
Skonystenie Pardl & .z.mnu -
z oddzielnego &SIB
jest l
a m sposobem
zdefiniowania
Insrrukcje
systemu pomocy . -- .--*.
bm.~.4
.0:::.
rnmlv- ~ r u"o**.~
....... lo.nr..
l * earn.+*
*# ...............................
., ., . . , . -
.... ......................................
, . . . ob.lS;:virrk?~"rr+.a.. ....... , ............
. . - . w k o m r n r Cln*lrr.**.nd-tplmn?nM*. . . . . . .
,. .. va~ornunrrrn(.u& a m , n k w . ~ w p d r u b b 4 ( ~ a i n a i n . ,
nb-, n.*l)lr obu k.mdrtm .CI I CS q d . 6 I. ..nm rm.$rl

'oln'n.-l*-
P~*+I-*.
....................
W I ~*h)t
, m..q +m.w-r;Uy i
...... sdd" ** lo+omi.:.~r*k.-~~ laxnd prrp*. . . .
O ~ Y M .Y. . . . . . . ..............
-
.

n.:#
..... ..*KT
. . , .. , .....-....
....................
v:.$?+---.!*+-Y!b.
L H ~ ~ * ? P I I W ~ * L % I I I ~ M ~ W ~ ~ ~ ~ ~ ~
. . . .

...... HZ*~OZN.P?W* W.M-.**. ................


.-..... ..................................
.........................................................
.....'. P!?'*+J.-*b.d.??w l*Mh-.........................
...... .OW- ~ r n a u a r~~-.v++n-,HblpaIm . .
. .I~*(I* y rb ha ~ p m q q c ~ ncsd,n*q
. . . W d 2 d m t n k W r b w & m C3. . , . . .,

.
. . *ncrki.irinrri .: ..,

.... .:.:..:.:-1: .I-:.: -: :


I
I.c-
Aby uniernotliwid utytkownikowi przewijanie arkusza ArkuszPomc poza obszar, w kt6-
rym zdefiniowano tekst pomocy, za p o m q rnakra ustawiono wldciwoSC Scrol lArea
arkusm. Poniewa.2 ta wlafciwoib nie jest zapisana w arkuszu, nie ma koniecmoki jej
ustawiania w momencie uaktywniania skoroszytu. Arkusz mtal takte zabezpieczony
w celu unierno2liwienia utytkownikowi dokonywania zmian w tekJcie. Matkowo zostat
,,zamro2ony" pierwszy wiersz lak, aby by1 zawszc widocmy prycisk Pawrot do sro-
blonu, niezalemie od tego, do kt6rego rnicjsca utytkownik przewinql akst pornocy.
Niesaty, podczas konystania z tej tcchniki nie jest widacmy gl6wny obsm roboczy.
Rozwimiem mo2e by6 napisanie makra, k t 6 otwieta
~ nowe olcno w celu HySwietlenia
arkusza z tekstem pomocy.

Wyjwietlanie pomocy w oknie Userform


lnny spa* tworaenia systemu pomocy polega na wyhvietlaniu tekstu w olarach Userform.
Kilka technik t w o m i a system6w pomocy w oparciu o formularze UsarForm o p i m o
w kolejnych podpunbch.

Zastosowanle elyklet do wyjwietlaniu tekstu pomocy


Na rysmku 24.3 zaprezmtowano okm UserFom, w ktbrym umieszcmno dwie etykiety
{obiekty Label): j d n q dla nagh5wka mnatu oraz drugq dla whkiwego bckstu pomocy.
Przycisk pnewijania Wpndd i Wstea umrxtliwia wkownikowi nawigacj~pomiqdzy
tematami pomoq. Tematy qzapisane w kolumnie A arkusla, a tckst w kolumnie 0.
Rysunek 24.3.
W/kniecie ptzy3skbw
nawigacdnych (w postad
kontrolki SpinSuttmJ
powoduje zmiane tekstu
wySwietlanego
za pornocq etyMet

Klikniqcie przycisku powoduje wkonanie ponitszcj procedury. Jej d z i a h i e pol- na


ustawieniu wMciwoici Caption dw6ch ctykja na tekst w odpowiednirn wicnzu arkusla
(o nazwic ArhszPomoc).
Private Sub SpinEWtonl-Change(
Din HelpTopic As Integer

-
He.Caption APPNPME &
SpinButtonl.Max & ")"
" (tmt pmmy ' L HelpTopic & 'z ' I -
End Sub

W tym pnypdku A P W jest globalnqstaiqzawietaj~q aplikaeji.

Zastosowanle pnewijanej etyWely do wyhdetlanla tekztu pomocy


W tej technice tekst pomocy jest wyhietlany ra pomocq jedntj ttykjety urnieszszonej
w rarnce (obiekt Frame) wyposatonej w pionowy pasek prrewijania (sama etykieta nit
mote posiadat paska). Prryldad okna UserFom skonfigumwanego w ten spos6b tapre-
zentowano na rysunku 24.4.

TekPt wyhvietlany za pomocq etykiety jest adcqtpmy zarimza o nazwie ArRusrPomoc


w momencie inicjalizacji o h a UserForm. Listing 24.1 prezentuje procedurt; UserFom-
I n l t l a l i z e dla tego arhsza Kod rnodyfikuje wWciwoSt 5cro:l Height obiektu Frame,
aby =pewnit obsi-ugq pnewijania dla cakgo tekstu tapisanego w etykiecie. Podobnie
jak w poprzednim przyk!adde, &PPWiE jest globalna,s~ta,zawieraj~~ n m aplikacji.
L M I n g 24.1. ZWmowade etyMety do wy&Wlanla tekstu z motlIwJda PtZeW~nia

--
Private Sub UserForm-Initial ize( )
He.Caption A P P W E I ' - p m ~ '
LastRar Wleets:'ARu~fm').Range('A66536') .End(xlUpl .Rod
Rozddat 24. + Tworzenie systern6w pomocy w aptikocjach 673

txt " --
-
For r 1 To LastRar
t x t t x t k S h w t s ( ' A r k u s z P m " ) .Cells(r. 1).Text d vbCrLf
bxt r
Nttn Label1
.Top 0- -
--
.Caption t x t
.Width 160
.AutoSize True
End Y i th

--
With Frarnel
.Scm1 \Height Label 1 .Height
.krollTop 0
EM W i t n
End Sub

P o n i m za p a m e ctykiety nie mo2n;a w$wietlad sformatowanego tckstu, wykwrysta-


lem maki pod.bglenia w arkuszu ArkmPomoc w celu podkreilenia tytut6w tematbw
pomocy.

Wykorzystanic rozwijanej Iisty do wybierania tematirw pomocy


Przyklad zapremtowany w tym podpunkcie jest nicco barddej skomplikowany, ale
oferujc wipkste motliwoici. Do wyfwiatania tekstu dowolncj dlugo9ci wykorzystano
opisarq pprzednio technikc polegajqcq na urnieszczmiu aykiety wemqttz ptzewijalnej
ramki. Na rysunku 24.5 pokazm okno UserForm zawierajqce ronwijanq list$ oraz etykietq.
Umkownik m o ~ wybrac
c temat z rozwijanej listy lub p m g l d a t tematy, sekwcncyjnie
klikajw przyciski Poprredni i ~Vostqny.KKad przykfadu premtuje listing 24.2.

Prl vate Sub UpdateFonnt 1

- -
CaEbcBoxTopics.ListIndex h r n n t T o p l c
Pe.Caption HelpFonrtaption
-1
I' & CurrentTwlc d ' z ' h ToptcCourrt 6 '1"

k i t h LabelText
--
.Captlcn HelpSheet .Cells(QmentTwlc. 2)

.Width --
.AutoSlze False

.Autosize True
212

Erd U i t h
Uith Frarnel
.krnllHeQht -
LabelText.HergM + 5
1
674 CzefC VI + Twmenie aplikacji

.ScrollTop
End U.i t h
-1

-
I f CurrentTopic 1 Then
MexzButton. SetFocus
Else'.f CurrentTopic TopicCount Then
Preri ousButton.SetFocus

--
End I f
PreviousButton.Enabled CurrentTopic 0 1
.
Nexthtton Enabled CurrentToplc o TopicCount
End Sub

Tekst pomocy jest zapisany w arkuszu ArkunPomoc w dwbch kolumnach (A i B).


W pienvstej kolumnie sq zapisane naglbwki tematdw, natomiast w drugiej - tekst.
W procedune UserForm-Initialize dodawane q pozycje pola kombi. CurrentTopic jest
zmiennq poziomu modutu, kt6rej wartoid odpowiada numerowi tematu pomocy.

Wykorzystanie asystenta pakletu Offlce do wyiwietlania pomocy


Czytelnicy prawdopodobnie majq asystenta pakietu W c e - ,mil$' postaC ekranowq
zawsze gotowqdo udzielania rad. 0 ile mi wiadorno, wiqkuoSC utytkownikdw nie mosi
tego natrqta-.
W pakiecle ORSce 2003 dsSclwosd asystenta nlelest lnstalawana domySlnie. Z tego
powociu ten sposdb wyMetiania pmocy nie jest najlepsn

Asystenta pakictu Ofice motna zaprogramowak tak, aby wyiwialat tekst pornocy dla
utytkomik6w. P n y k M zaprezcntowano na rysunku 24.6.

Rysunek 24.6.
wkonystanie
asystenta
pakietu Mflce
do wySwietlania
tekstu pomocy

G16wq proceduq sWqcq do wykonystania asystenta pakictu mce


w celu shvomnia
systemu pomocy prezentuje listing 243. Kolumna A arkusza ArkYrzPomuc zawiera te-
-
maty, natomiast kolumna 0 tekst p o m y .
Rozdzial24. Twazenie system6w p o m y w aplikacjach 675

Public tcnst APPME As S t r i n g


Dim Topic As Integer
- "Slonie t o my'

Dim HelpSheet As Worksheet

Sub ShowHelp( I
-
Set HelpSheet Thishbrkbwk .Worksheets('ArkuszPomoc')
On Error Resune Next
-
App1icatfon.Assistant.On True
I f Err.Nunber 0 0 Then
MsgBox "Nie zainstalmano asystenta pakietu Office. -
W celu zainstalowanla t e j funkcji uruchan program instalacyjny -
pakietu Office. " , vDCritica1. APPNPM
E x i t Sub
End If

-
On Error GoTo 0
Twlc 1

- --
With Assistant.NewBallmn
.Heading " T a t p m y " 8 Topic d ': " d vbCrLf 8 HelpSheet.Cells(Topic. 1)
.Text Help5heet .Cells(Top~c. 2)

- --
.8utton msoButtmSetNextClose
.€!dllmnType msoBa11wnTypeButtons
.Mode msoM3deMadeless
.Call back "ProcessReqwst'
.Shov
End M i t h
End Sub

hocedura rozpoczyna sit od sprawdzenia, c q wl;bciwdC asystcnta pakietu m c e zostab


zainstalowana Jeteli ustawienie whkiwoki On powoduje powstanie Mqdu, asystent pakietu
W c e nie zostat zainstalowany. W takjej sytuacji wyswietla sit kornunikat i procedura
kohczy dzialanie.

Jeteli asystent pakietu Ofice jest -lowany, procedura twory nowy obiekt Ball oon
Cjak pamietamy, tekst pomocy asystenta pakietu m c e jest e w i e t l ~ yw postaci
chmurki) i w c z p j e picnvsy temat pornocy z arkusza ArkrrszPomoc w celu ustawienia
jego wlaSciwoSci Heading oraz Text. Dziqki ustawieniu wlaSciwb$ci Button e w i e t l a n e
sq pnyciski N a r t q n y i Zamknij, podobnie jak w pnypadku kreator6w. Nastqpnie pro-
cedura ustawia w+&ciwoStMode aa wartoid msoModeModeless. dzieki c a m u utytkownik
mote kontynuowak prag podcm wyiwietlania pomocy. w l d c i w o ~Cali back zawiera
nazwq procedury wykonywanej po klikniqciu pnycisku. Na koniec wygwietlana jest
chmurka asystenta za pomocqmetody Sbow.

W pmypadku kliknigcia dowolnego pnycisku wywdywana jest procedura Process-


Request, ktbq prezcntuje listing 24.4.

Sub ProcessReqwst(b1n As Balloon. l b t n As Long. l P r l v As Long)

-
Dim MnnTopics As Integer

-
NmTwi cs Uorksheetfunctlon. CauntA(He1pSheet .Range('A:A') I
Assl~tant.Animatmon msoAnlMtionCharaberSut.ceY~jor
Select Case l b t n
Case msa8allaarf)utton8ack
-
I f Twlc 0 1 Then Topic Toptc -1
Case moBal 1aonButtonntxt

Case
I f Topic 0 NunTopTcs Then Topic
moBal 1aanEuttmClose
- Tapic + 1
bln.Ciose
Exit Sub
End Select
Wtth bln
.Close
Select Case Toplc
- -
Case 1: .Buttan aot?uttonSetNextClase
-
Case ICanTopics: .Button m~B~ttmSetBackCloSe
Case Else: .Button mso8~1ttonSetBackNextClose

--
End Select
.Heading 'Tmt ponocy ' 6 Tcplc 6 ': ' d vbCrLf & HelpSheet.Cells(TooW 11
.Text H e l p ~ t . @ l l s [ T o p ~2)c .
.Show
End W i t h
End Sub
,

Proeedura PwssRequest Wwietla jednq t kilku dosepnych animacji, a nastwnie


wykonysluje konstrukcjq Select Case a wlu wykonania dtialania, uialetniajq je od tego,
kt6ry przycisk klikniqto. Informacja o pnycisku jest przekazywana do procedury za
pomoq zmiennej 1btn. Na podstawie bietacego tematu procedura okreila take, jaki
pnycisk nalety wySwietli6.

Szueg64om infonnacje na tcmat programowania asystenta pakietu Wcemotna male26


w systemic porn- Excela.

Symulacja wtakiwofci Co to jest?


za pomocq formularza UserForm
Na pasku tytulu nickt6rych okien diabgowych Excela, obak przycisku tomknij znajduje
siq ikonka pytajnika. W Excelu 2003 jej kliknbie p o d u j e wyiwietlenie pomocy na
ternat okna dialogowego. W popnednich wersjach Exccla klikniecie pytajnika urnotli-
wiab uyskanie objakienia Co tojest?. W s M i k mysy zarnieniat sic w pytajnik, a kicdy
utytkownik kliknqt dowolnq konlrolkq okna dialogowego, uzyskjwal krbtkje cabjafnienie
dotycqw tej kontrolki. Nie m i e m ,dlaczego~usunieto t t wMciwoSf z Excela 2003.
Okna Userform definiowane pmz ukytkormika zawicrajq wszystkie elementy potrzebne
do zaimplemmtowania pomocy C o to jest?, jednak jest jedcn problem: to po pmshl nic
dziab Ustawicnie w oknie UserFom whkiwoSci GhatsThi sBcltton oraz WhatsThi sHel p
nie powoduje wyiwietlenia tekstu zapisanego w pliku systemu HTML Help. Wiqcej in-
formacji o plikach systernu H T M Help m o w maleM w nastqpnym podrozdziale.
K d a kontrolka umitszczana na formulam UserForm posiada wMciwofC CmtmlTip-
Text. Je2eli prograrnista wpmwadzi t e b jako wartog tej wlafciwoSci, wySwietli siq on
w o h i e w momencie, kiedy utytkownik wskate konmlkq za pomoq rnyuy.
RozW 24. + Twmenie system& pornocy w aplikocj~ch 677

Matna r6mie2 wykoq%ta6 w & W nduseMove konhalki w celu wyfwietlania tekstu


na podstawie pozycji wskainika myszy. Na rysunku 24.7 zapremtowano okno UserFom,
w kt6rym wykonystano etykietq do wyiwietlania tekstu pomocy dla ka2dej kontrolki.
Dodatkowo mstosowano pnelqccmik umotliwiajqcy utytkownikowi wlqczanie i wyfq-
czanie trjbu pornocy. J&li q b pomocy jest wyhczony, okno UserForm staje sip rnniejsze,
aby ukryC etykietc z pomocq.

Wykorzystanie systemu HTML Help


Obeenie w aplibcjach Windows najcqtciej stosuje sic system pomacy HTML Help,
w kt6rym wykorzystywane sqskompilowane pliki z rozszerzeniem .chm. System HTML
Her'p zastzpit starszy system pornocy WinHeb, w kt6ryrn wykorzystywano pliki HLP.
Obydwa systcmy umotliwiajq programikie powipnie identyfikatm kontekstu z o b
4lonym ternatem pomocy. Dzicki temu rnotna wyfwictlat t m a t pomocy w okrdlonym
konteWcie.
W tym podrozdziale zwiele opiszq program wspomagajaq tworanie plikdw systernu
HTML Help. Szczegb)owy opis t w o m i a takikh systemdw pornocy wykscta poza ramy
tej ksiq2ki. kdnak w i p W potrzebnych infonnacji wrar z odpowiednimi przykladami
ma2na znaleg w internecie.
Tym. kt- zamlerzajq hvonyE rubitdowane systemy p o w . *am zakupienie
odpowledniego nanedda, macmie utatwiajqcego wykonanie zadania. Takie
oprogramowanie wykonuje za programiste wleie trnudn~hoperacji. W5r6d system6w
wspornagajqcych twoaenie systemdw pomocy sq pograrny Qpu freeware, shareware
oraz podukty komercyjne. Jednym z najpopularniejszych jest produkt firmy eHelp
Corporat~on- RoboHelp, M6ry umotliw~atwonenie plikdw systemdw WnHelp,
jak tei HTML Help. Wipeji informacj~na ternat prograrnu rnotna uzyskaC w witrynie
WWW tirmy, pod adresem muw.ehelp.com.

M i c m f t opracowal system HTML H d p jako standard systembw pomocy w aplika-


cjach ut@owych Driahnie systcmn polega na skompilowaniu serii plikbw HTML
w celu utwctmenia sp6jnego systernu pomocy. Dodatkowo motna uhmnyt spk WSci
i indeks, a tak2c zdefiniowad slowa kluczowe w celu utwonenia zaawansowanych hi-
perlqczy. W systemie HKUL Help motna t a b wykortystywd ddatkowe narzqdzia
takie, jak pliki graficme, k o m l k i ActiveX. skrypty oraz dynamicmy HTML. Przyktad
systernu pornmy HTML Help pokazano na rysunku 24.8.

P l i p o q HTM1; Help wy4wietla prtegl&darka RTML. Help Yicwer, kt6ra wykorzy-


stuje mechantmy prnglpdarkiInrema Erplorer, Lnformacje pojawiajq sic w oknie, a spis
trek4 indeks oraz narzpdzia wyszukiwania w wydzielonym panclu. Dodatkowo tekst
678 Greg VI + Tworzenie oviikacl

Rysunek 24.8.
Pnyktad systernu
pornocy MML Help

pomocy mote zawierad standardowe hipnf$cza, shac do wySwietlania dodatkowych


tematbw lub nawet dokumentdw z internetu. Co istotne, w systemi,e HTML Help istnieje
mo2liwoSC dostcpu do plikdw zapisanych w witrynach WWW. W ten sposdb motna
kierowat utpkownikbw do fr6dh najaktualniejszych informacji, kt6n nie byly dostcpne
w momencie tworzenia systemu. pomocy.

W pakiecie O e e ZOO3systemy pomocy zalmplementowano in-j niL w pomednich


wersjach systemu. Z jekichg powoddw tematy pomocy wfWietlajq sig na pasku
zadafi, a infonacje w oddzielnym oknle. Tak w i v prreglqdanie pomocy w systemie
Office 2003wymaga korzystania z W6ch okien. OsobiScie watam to ra olbrrymi
krok wstecz, jeSll chodzl o qgo* uiytkowania systernu. Czasarni decyzje Micmsoitu
sq po prostu sptzeczne z og6lnie obowiqzujqcq logikq.

Podobnie jak w przypadku systemu WinHelp, do tworzenia systemdw pomacy HTML


HeIp poaebny jest specjalny kornpilator. Program HTML Help Workohop mo2na pobrat
za d m o z witryny WWW Microsoflu, pod adaesem: hrp://mdnmicrosoJ.com/fibrary/
tools/hhnIheIp/c~HH~Starl.hhr. Znajduje siq tam r6wniet wiele dodatkowych infonnacji
na temat korzystania z tego naqdzia.

a> Aby pornat sposdb hmxrsnla pllkbw MML. wySwletl dowolny tema w systemie
pornocy Excela. Nastcmie kliknlj prawym pmsiskiem myszy Wkumnl i wybieia2
polecenle Wy5Met,frWb. WySwietli sig oryginalny pllk ir6cslawy w fonnacie HTML

Powiqzanie pliku pomocy z aplikacjq


Plik pornocy systemu HTML HeIp moaa p o w i w t z aplikacjq Excela albo za pomocq
okna dialogowego Project Properties, albo popnez zdefiniowanie kodu w jpzyku VBA.

W edytom Visual Besic nal* wybraC polecenie* T Propmies (gdzie xtr jest
nanvq projektu). Wfiwidli sip okno diaLogowe Pmjecr Properties, w ktdrym nale2y
kliknqt zakladkp General i wprowadzit skompilowany plik pomcy systemu HTML
Help dla projektu. Plik powinien mi& rozszemenie .chm.
I
I
Dabrq pmkQ~kq jest pmechowywanit plikbw pomocy aplikacji w lym samym katalogu,
co aplikacja. Ponitsza instdcja powoduje powiqzanie aplikacji z systemem pomocy
Mojef.nkcje.chm. Rzyjqto mlokenie, t e pljk pomocy majdujt siq w tym samym kata-
1
i

logu, co skomszyt f

ThisUorltbcak .Wmject .HelpFil e - ThtsUorkbook.Path L '\Mojefunkcjr.chnm


Po skojamniu pliku pomocy z aplikacj~tematy pomocy wyhvietlq sk w nastepujyych
sycuacjach:
kiedy utytkomik wciSnie klawisz Fl w mommcie, gdy w oknie dialogowym
W~tawianiefunkcjijest zamaczona funkcja utytkownika,
kiedy utytkownik wcilnie klawia Ff w momencie, gdy jest wygwietlane okno
UserFon W tym pnypadku wyiwidli sis temat pomocy dotycza~yaktywnej konbulki.

Wiqzanie temat6w pomocy z funkcjami VBA


Urwatzonq w jqyku VBA funkcj~utytkownika, przeznacwnq do wykwzystania w a&-
szach, m o m p o w z plikiem pomocy oraz identyfikatorem konbckstu. Gdy te elementy
zostanqprzypisane, wcifni~cieklawisza F1 w momencie, kiedy funkcja jest zaznaczona
w oknie dialogowym Wstaruianiefunkcji, spowoduje wy$wietlenie pomocy na temat tej
funkcji.
Aby oMIEE identyfikator kontekm pomocy dla funkcji utytkomika, wykonaj naste
p u j v czynnobi:
1. Utwdn funkcjp.
2 U p m i j siq, czy z projektm skojarzono plik pomocy (opis tej crynnoki
zamieszczono w popnednim punkcie).
3. W edyKKze Visuoi Basic wcihij F2,aby uaktywniC pmegk&rkq obiekt6w.
4. Na rozwijanej likie Projecflibrmy wybietz projekt.

5. W oknie Cim~eszamacz d o 1 zawierajqcy funkcjq.


6. Zamacz funkcje w oknie M e m k 05
prawym pnyciskiem myszy i z menu p o d m e g o wybim pozycjq
7. Kliknij fimkcj~
Propertiu. WySwietIi siq okno dialogowe Member Options, jak pokazano

Rymnek 24.9.
Det7nlowanle
/dent)nkatora kontekstv
pornocy dla funky/

-
uiytkomika
w oknie d i a l o g t w p
Member Optlons

6. W p r u W identyfikator k o n t e b pornocy dla timkcji Motesz t a b wpwadzit


opis funkcji.
W oknle dialogowym M e m b e r Options nie mokna okreSliC pllku pdnocy. Zawsze
u2yvmny jest piik pomocy nvlqzany z projektem.

Do ustawienia identyfikatora konhkstu pornocy oraz pliku pomocy dla funkcji utyb
kownika mo2na wykonystat kod VBA. W tym celu n a l w pos- siq metodq Hacro-
Options. W pan&zej p&edune utyto jej & celu oh9lenia opisu, pliku pomocy oraz
identyfikatora kontekstu pomocy dla d d c h funkcji ukytkownika (AddTwo oraz Squared):
sub Setopttcnso
'
Ustawienle opcjl dla funkcjl MVO
Awl icat1an.MacroOpttons Macm :-'AddTwo' .Descrlptlan:="turdca 5 1 4 dw6ch 1 lczb'. -
W1Mile:-ThlsUarkW.Path & "\mjefmkcjc.ctm'.WlpConteJnIO:-1000
'
Ustmrienle opcji dla funtcjt Squared
Appi icatlm.MacroOptlons Macro:-'Squared'. -
D e x r i p t ion:--Zwraca kwadrat 1 lczby pcdanej jdko a-nt'. -
WlpFi 1e:-ThisUorkbwk . Pat3 & "\mjefunkcJe.chn' .WlpContextIO:-2000
End Sub

lnne sposoby wy4wietlania


plik6w pomocy HTML Help
J@yk VBA zapcwnia kilka innych spob6w wySwictlanh oMlonych temat6w pmocy.
Zostanq one opisane w nastqpnych punktach.

Wykorzystanle metady Help


Maoda Help obiektu Appl lcation umtliwia wygwietlanie pornacy w jcdnym z dw6ch
fonnat6w: HLP sysmnu WinHelp oraz CHM systernu HTML Help. Metoda dziala nawet
wtedy, kie* w pliku pornocy nie zostanqzdefiniowane tadne identyfikatory kontekstu.
Jej sktadnia jest nastmujqca:

Obydwa argrmrmty q opcjonahe. W pnypdku p o m h i ~ i nanr?,


a pliku pomocy wyfwie-
tlony zostanie plik pomocy Excela W przypadku pornifliecia argumentu opisujgego
identyfikator kontekstu wySwietlony hdzie dornyilny temat podanego pliku pomocy.
1

Ponitszy kod wy4wietla dornytlny tcmat pliku Mojaop.chm przy zatoteniy 2e plik ten
majduje sic w tyrn samyrn katalogu, co skomszyt, z ktbrego go wywohno. ZwsbCrny
uwagp, te dmgi argument pominiqto.
Sub Y,&l pContents( I
Ppplication. Wlp ThlsWorkbook.Path & '\Hojaap.chn' !
End Sub

Ponitsza instnrkcja wyhietla temat p o m q o idcntyfikatom kontekstu 1002'2 pliku


pCnnocy Help o nazwie Mojaap.chm:
Appllcat1an.Help Thi $ W O k W . P a t h 8 '\Mojap.chnn. 1002

Wy5wieflanle pomocy z okna inforrnacyjnego


W W c j i NsgBax jpzyka VBA s m e j do Wyswialania komunikatbw motna umieSciC
przycisk Pomoc, dodajqc stAq vtHsgEbffle1pE!utton do drugiego argumentu funkcji. Jako
cmarty argument funkcji trzeba takte podat n m pliku pomocy. Piqtym argumentem
(opcjonalnie) jest identyfikator kontekstu porncrcy. Zaprezentowany p o d e j kod pow*
duje wygenerowanie okna informacyjnego, kt&e pokazano na rysunku 24.10:
Rozdziol24. + Tworzenie systern6w pomocy w aplikocjach 681

Rysunek 24.10.
Qkno infonnaqbjne
z pWskiern Pomoc

--
Sub t%gBox&lp{
Ksg "Czy podDba c i t i e Excel?'

--
Buttons vtQuestion + vbYesFlo + vbElsqBox+lelp&rtt~n
HelpFi l e Thi sMrkbook.Path & " \ P m x A p . c h "

--
Context10 1002
.
Pns bgBox(Msg. Buttwrs. HelpFlle. ContextID)
If Ans vbYes Then Call C10sd)own
End Sub

Wyjwiatlanfe pomocy z okna InputBox


Pnycik ~ e f p pojawi
' siq talc& w oknie finkcji VBA InprtEbx w przypadku, kiedy n a z q
pliku pomucy podamy jako &sty argument funkcji.Ponitszy kcd twony okno InputBox

- -
Sub ShowinputBox( 1
Hsg ' b c a j liczk:"

- -
DefaultVal 0
HFlle ThlsWarkbook.Path & '\PcrmcApl .&TI'

x -
ContextID 3000

End Sub
tnput!!ox(Prmpt:-Msg. Cefault:¶efaultVal.HelpFSle:-HFlle. Context:WextID)

Rysunek 24.11.
Okno lnpltBox
z pnyciskiem hmoc

' W pqpdku funkcji InpltEbx wySwistIaJiqai~sngidskie w@e apisu pnyciebw --. tf~m
Rozdziat 25.
Tworzenie aplikacji
wygodnyc~hdla uzytkownika
W tyrn rozdziale spr6buJiqpodsumowat informacje z p o p d n i c h rozdzial6w. Opisane
-
zagadnienia zostaty zilustrowane za pomocq Kreatora omorfyzacjip~czek prostego
nanedzia pnygotowanqo zgodnie z zasadami pmjektowania aplikacji typu user-
oriented. W tym skqdinqd utytecmym pnykMzie zaprezentowano kilka ciekawych
technik projektowania. -
Co to jest aplikacja user-oriented?
Tcrmin apjikacja wer-orientedtanzerwowakm dla aplikacji, kt&q z powodzcniem mogq
poshgiwaC siq u2ytkownicy o minimalnej wiedzy na temat Excela Opisany w rozdziale
fieator m o r w a c j i poryczek sklasyfikowalem jako aplikacje urw-oriented, poniewat
skuteczne korzystanie z niego nie wymaga od utytkownika wiedzy na temat zawiloSci
Exwla. Wystarczy, 2e utytkownik odpowie na kilka prosrych pya& a utworzy przydatny
i elastyczny arkusz z gotowymi tomulami.

I Przyktadowa aplikacja
I
I - Kreatar arnartyzacji poiyczek
Kreufor amwryzu~ipo?ucrek generuje arkusz zawierajilcy hamonogram amortyzacji
powzki o stalp opmntowaniu. Hamonogram pnedstawia informacje o potyczce dla
kolejnych rniesiecy (rysunek 25.1). Wyfwietlane q talkie dane o poqczce, jak kwota plat-
noki z wysxzeg6lnieniem kapitah i odsetek oraz saldo potyczki po splacie. Altema-
tywnym sposobern utwonenia t a k i e y harmonogramu jest zdefiniowanie pliku szablonu
XLT. Jak sip przekonamy, zastosowanie kreatora jest lepsze z kilku powod6w.

Kremor m r @ r a c j iW e k sklada sip z p i ~ i okien


u dialogowych @uk6w), za pornoq
kthych sq pobiaam infonnacje od utydmwnikbw. W typowy dla krratot-6~spodb utyt-
kownik mote poruszai s* w prz4d i w tyt porni* posaeg6lnymi oknarni. Klikneie
684 CzqK Vl + Tworzenie aplikacji

Rysunek 25.1.
Harmonogram
amortpacji wySwietla
szuegdty potyclki
zaciqgnietej na 30 let

pnycisku Z a k o k powoduje utworpnie nowego arkusza Jeteli u2ytkownik kliknie


Zakohcz, zanim zostanq udzielone odpowiedzi na wszystkie pytania, wykorzystane k d q
wartohi domy9lne. Klikniecie pnycisku Anuluj powoduje zarnknipcie okna UserFom
bez wykonania tadnych dziahh.

cm Kreator enwtymyf p o m k jest dostppny na plydo CDROM do+$czonsido k s W i


IposYCi niezabezpieczonego dodatku.

W tej aplikacji wykwzystano jeden formularz UsvFwm zawierajqcy kontrolke Multi -


Page 5 - q do wySwietlania okien dialogowych dla pi@u krok6w. Poszczeg6lne okna
dialogowe zaprezentowano na rysunkach od 25.2 do 25.6.

Rysunek 25.3.
Krok 2. Kreatora
amorryzscl'l PO-
Rozdziol25. Tworzenie oplikocji wygodnych db uiytkowniko 685

Rysunek 25.4.
Kmk 3. h a t o m
amortpacji potyuek

Rytunsk 25.5.
Krok 4. Kreatora
amortyzacjl p o w e k

Ryrunek 25.6.
Kmk 5. *atom
anmrtpdcji potyuek

Struktura skoroszytu Kreatora amortyzacji poiyczek


Kreutw umorfyzacjipofycrek sktada siq z nast~ujqcychkompoaent6w:
FormMain -okno UserForms-ce jako gi6wny interfejs wkownika;
FonrHelp -okno UserForm. w kt6rym wy4wietla siq pomoc online;
He1pSheet -arkusz zawierajacy tekst pomocy online;
Modt4ai n -modul w jqzyku VBA zawierajqcy proadury wy4wialajiw gk5wne
o h o UserForm:
Thi ~Uorkbod:-modut kodu dla tego obiekhl zawicrajqcy proccdury obslugi
zdaneir Wortbook-Open oraz Workbook-BefareClose, kt6n odpowiviednio tworzq
i usuwajqpozycjp menu
Jak dziala Kreator amortyzacji poiyczek?
Kreatw amor@zacji p o 2 p e k jest dodatkiem, a zatem nalety go zainstalowat za pomocq
polecenia Naw&idDodatki. Kreator bpdzie jednak dzialat r6wnie dobne, jeSli otwo-
rzymy go za pomocqpolecenia Plik/Otivbrz.

Dodanie porycjl do menu Narzqdzia


W czasie otwierania skoroszytu procedura klorkbook-Open dodaje do menu Nap&ia
nowq pozycjp: Krearor amorfyzacji potyaek. Kliknipcie tej p o q c j i powoduje urucho-
mienie proccdury StartAmrtizationWizard, kt6ra wyiwietla formularz LkerForm -
FormMain.

lnforrnacje na ternat Wonenla nowych porycll menu m t n a malet6 w rozdziale 23.

Pracedura UserFom-Inltial ize f o r m u l m FornMain wykonuje kilka istotnych czynnoki:


ustawia wartog w k d c i w o l i Value konhalki W l t t Page na 0, d z i ~ kcmmu
i zawsze
wyfwietla siqpicrwsza strona, niezaknie od wartoki tej wMciwolci w mornencie
wykonywania ostatniej operacji zapisu skoroszytu;
dodaje pozycje do trach p61 kombi wyk~ortystywanychw h u l m u ;
wywohje procedw GetOefaults, kt6m.pobiera ostatnio utywane ustawienia
z rejeshu Windows (wipcej informacji m j d u j e sip w podpunkcie Japispanie
iodtwamnie ustawien domyflnych");
I sprawdza, ny skmszyt jest aktywny ( j d e l i nie -
deaktywuje przycisk opcji
urnotliwiajqcy utworzenie nowego arkusza w aktywnym skoroszycie);
m jeteli skoroszyt jest aktywny, dodatkowy test sprawdza. czy smktura skomszytu
jest zabezpieczona (jetcli tak- procedluradeaktywuje w i s k opcji d i w i a j q c y
utytkownikowi utwotzenie arkkza w akywnym skoroszycie].

Hlatorb Kmatora amortyzacji potyuek


l k q t k ~ Kreator
~ ) aplikwi +ek byl prostq aflikacjq, M(ira pdfileJ pzdtsztakila slq w st&
swnkowo skornplikowany proJekt. Moim podstawowym celern bylo zadernonstrowanie Jak najwlek-
szej liczby technik projektowych, a jednoczesnie opracowanle u?.tmmego produktu. Chciabym
powiedzld. ie doktadnie przewidzlabrn, jaki bqdzle ostateczny efekt, zanim przystqplhrn do pro-
..
jektavania, ale. skfamatbyrn.
Mq p i e m y zamlar b$ macmk mniej ambitny. Chcldern je@nle utwmZ# a f l k W , kt&% pobim
dane wejfciowe od utytkownika i tworzy arkusz. M n a k po r o m u twDtzenia aplik@i racz-
mySleC o sposobach jej usprawnlanla. W efekcie napotkalem kllka 5lepyd1uliczek. Niekt6ny m i e
n,amq rnoje wysitki stratq czasu, ale te falstarty byty istotnq czeSciq procesu projektowania. Wy-
konakm ten projekt w ciqgu jednego (dtugiego] dnia oraz spedzihem kllka d o d a t k w h godzin
na ]ego ulepszaniu i testowaniu.
Ro-25. + Twmeme aplikacji wygodnych dla utytkownika 687

Pnelwananie zdanefi podczar wyiwietlania formulana UserForrn


Modut kodu hrmulana ForrrMain rawiera kilka procedur obshgi zdarzefi Cl lck i Charge
dla kontrolek fonnulana UserForm.
Kliknlecle prrycisk6w Dalej I Wstecz decyduje o tyrn. M6ra smna kontrolki MultlPage
formulana Userform i a d p w i d n i o u a h t y i a przyciaki Dale, i Wstecz. lMqcej
lnformacji na temat dworzenia kreator6w znajduje sie w mzdziale 15.

Wyjwietlanie pomocy w beatone


lstnieje wiele motliwoSci wySwietlania pornocy. Wybralem prosty sposbb, wykorzy-
stujqc fonnularz UserFonn pokazany na rysunku 25.7, kt6ry wySwietla tekst zapisany
w arkuszu. Jak m o m zauwa2y6, jest to kontekstowy system pornocy. Kiedy Wytkownik
kliknie pnycisk Pomoc, wySwietlany ternat pomocy adpowiada bieacej stronie kon-
trolki Mu1 t i Page.

Ryarnek 25.7.
Pomoc
jest @wieUana
w fonnulam
Userfonn, do Mdrego
jest kopiawany tekst
zapisany w arkuszu

Wigcej informacjl na temat techniW przenoszenla tekstu z ankusza do krmulana


Usefirm W d u j e sl, w rmdziale 24.
mB#!I
Uhotzenie nowego arkusza
Kiedy u2ytkownik klihie przycisk Zahha, b e a m ro2paezyna wykonywanie dzialah
Procedura obshgi zdarzenia Cl ick dla tego przycisku wykonuje dzhlania opisane poni2ej.
Wywduje funkcje OatalsValid, kt6ra sprawdza paprawnot6 danych wprowadzanych
przez utydcownika JeteIi dane q p w n e , funkcja nvr;tcawartoSf True i program
kontynuuje dziaianie. W pnypadku odnalezienia niepoprawnych danych
uaktywniana jest ta kontrolka, ktbqnaleky poprawit, a funkcja zwraca opisowy
kornunikat o Wdzie (rysunek 25.8).

Sleteli dane wprowadzone pnez tctytkownika q p o p m e , pmoedura tworzy


nowy arkusz w aktywnym albo w nowym skomszycie, w zaletndci
od zaznaczonej opcji.
Zapisuje do arkustlupmameby patyczki (cena zakupu,wymkaM p i w s z e j
wplaty, kwota powzki, okres kredytawania i oprocmtowanie). Wymaga to
zastosowania kiLku insdtukcji If, pniewat pienvsiqwphte m o a a wprowadzif
jako procent ceny zakupu lub jako kwotc w zlotych.
niepopmqch daqch
ua@wniana jest konbdka
zawierajqca blqd

rn Zapisuje do arkusza nagl6wki kolumn.


Pod nagtbwkami kolumn zapisywany jest pierwsty w i m z zawierajqcy formu&.
Wimz ten rbini sic od pozostlltych. poniewa zapisme w nirn formuiy odnoszq
siq do danych w sckcji parametrbw iotyczki. ~ozostatefonnuly odnosq sip
do poprzedniego wiersza. Z w d m y uwage, te w formutach zastosowano
nazwane zakresy. Sq to nanvy poziomu arkusza. a zatem utytkownik mote
zapisat wivej nit jeden hartnonogram arnortyzacji .w tyrn sarnym skoroszycie.
Dla odWL w kt6rych nie zasrosowano nanvy, wykorrystabm notacjp
z numerern wiersza i kolumny. Jest ona znacmie ~rostszaod pr6by okrellenia
rzeczywistych adresbw korn&k.
Zapisuje do arkusza drugi wiersz fonnut, a na*pnie kopiuje po jednym wierszu
dla katdego miesiqca.
Jeteli utytkownik wybicrze opcjc dla padsumowah rocmych, procedura oblicza
sumy cgfeiow za p o r n metody Subtotal. Przy okazji jest to pmykhd pakazujqcy
mstosowanie wbudowanej wtaiciwoki Excela, dziqki ktbrej programista mote
uniknqd kodowania.
Poniewat twomnie p o d s u m M cz&Aowych dla kolumny Sddojest niewlakiwe.
procedura zastqpuje formu@ w tej kolumnie f o r m u h i obliczajqcymi saldo
na koniec mku.
Kiedy Excel oblicza sumy cz&iowe. jednoudnie h w ~ hieratehip.
q Jeteli
utytkownik nie c h n wy4wietlania h i m h i i , procedura wykorzystuje metodp
ClearOutl i ne w cclu jej usuniqcia.
Nastwnie procedura wykonuje fmatowanie kombrck: wprowadza format liczb
oraz autofmatowanie w prrypadku, kiedy utytkownik wybime wynik w kolom.
KolejnqczynnoSciaest dostosowanie szerokdci kolumn, zablokowanie tytu16w
pani2ej wiersza nagl6wka i zabezpicczenie formd oraz innych watnych komdrek,
ktbrych nie nalety modyfikowat. Arkusz jen zabapieaony, ale bez W c i a hash.
Na koniec wacedura SaveDefault s misuie
8 " bi&acc wartoki kontrolek fonnulam
UserForm do rejestru Windows. Wartdci te stanqsip nowymi ustawieniami
domySlnymi, kiedy u2ytkownik two@ hannooopm arnortyzacji nastcpnym
razem (wi~cejinformacji majduje sig w podpunkcie ,,Zapisywanie i odtwarzanie
ustawieri domyllnych").

W Formularm FonrMain zawsze wySwietlaj4 sic ostatnie u m i e n i a , Wre p r o p r n za-


pamittat i wykonystat jako nowe wartoSci domyilne. Dziqki temu m m a z latwoiciq
generod wiele harmonogramdw amortymji rbtniqcych sip jednym lub kilkoma pa-
ramebami, co umotliwia uzyskanie odpowicdzi na pytania typu co-jdli?. WMciwo5C
tq zapewnia zapisanie wartoki w wjcsbze Windows, a nasbgnie odtwarzanie ich pod-
czas inicjowania formulam UserForm.Kiedy aplikacja jest utywana po ~ a z ' ~ i e n v s z ~ ,
w rejestrze nie ma adnych wartdci, zatcm s q wykorzystywane wartoSci domySlne 2.-
pisane w kontrolkach formularza UserForm.

Zarnieszczona paniaej procedura Getkfaults p m t w a m w w l i wszystkie kontrolki for-


mularza UserForm.Jetcli prrehvarzana kontrolka to pole tekstowe, pole kornbi, przycisk
opcji, pole wyboru lub pokrdto, wywolywana jest funkcja VBA Getsetting, ktbra od-
czytuje wanoSC z njestru. Trzecim argumentern Frrnkcji Getsetting jest wartog, kt6ra ma
by6 utyta, jeteli w rej~esCrzenie zostanie odnaleziona okreSlona wartoX. W tym przy-
padku wykonystywaraa jest wartoic kontrolki wprowadzona w czasie projektowania.
APPNAME jest globalnq stalq mwierajqcq name aplikacji.
!kt) GetDefaults( )
'
Wczytante danyllnych ustawlet z rejestru
Dtm ctl As Contml
Dim CtrlType As Strlng

--
For Each b l In Me.Contrnls
CtrlTm TypeName(ct1)
- -
--
If CtrlType "Textk' Or CtrlType ' M x " Or
CtrlType 'OptionButton' Or CtrlType "~heck~ox'Or -
-
CtrlType 'SpinButton" Then
ctl .Value V~.GetSetting(APP~,
End If
"DonySlne'. ctl .Hame. ctl.Value)
Next ctl
End Sub

Na rysunku 25.9 pokazano, jak wyglqdaja zapisam wi- wySwietlane za porn=@


Ebjrtwu rejuhu.

Rysunek 25.9.
Domy3tne warto§t9
worrystywane
p a 2 kreator
sq zapisane
w rejestne Windows

Zapmmtowana p i t e j procedura SaveDefaults jest padobaa Wykonystmo w niej


funkc.jp VBA SaveSetting w celu zapisania bietqcych wartosci do rejestru.
Sub SaveOefaultsO
Zapisanie bietacych ustmriefi do rejestru
Dim c t l AS Control
O i m CtrlType As String

--
For Each ctl I n k . C M l t r o l s
CtrlType Typebm(ct1)
-
--
IfCtrlType "TextBox' Or
CtrlType 'CmhBox" Or
CtrlType "0pticn8utton'13r -
--
CtrlType 'CheckBox" O r
CtrlType 'Splnhttm' Then
-
Savesetting APPNPME. 'Dony9lne". c t l .Name. CStr(ct.1 .Value)
End If
Next c t l
End Sub

W kodzie wykorzystano funkcje CStr w celu pmksztalcenia poszczegblnych ustawieh


na ciagi mak6w. Ma to na celu w b i e t e n i e problemom utytkownikbw konystajacyh
z ustawie6 regionalnych dla jeyk6w innych n i t angielski. Bez konwersji na cia$ znakbw,
wartoSci True i Fa1 se przed zapisaniem do rejestru zostalyby przet+umaczone.Niestety,
wartoSci nie msta4yby przethaczone w drugq strotq w prypadku pobiemnia ustawid
- a to spowodowa+obybtqd.

W instmkcjach Savesetting i Getsetting zawsze w y k o r y s ~ a n yjest nast~pujllcy


klucz rejestru:
HKEY-CURRENT_USm\Software\W and \rBA Prcgraa Setttngsl

Potencjalne usprawnienia Kreatora amortyzacji poiyczek


Panuje opiniia, te nie mo2na sMcyC aplikacji a motnajedynie przestaf nad niqpracwat.
Nawet bez gebokiego mtanowienia przychodzi mi na myfl kilka usprawnieh kreatora:
dodanie opcji wyswietlania skumulowanych podsumowah dla odschk i kapitatu,

8 dodanie opcji fmatowmia(np. bee miejsc po pnncinku, bez makdw d u t y itp.)


oraz definiowania nagtbwkbw i stopek strony pnez utytkomikbw. I

Wskaz6wki dotyczqce projektowania aplikacji


(
Analizujw aplikacjp -n pzez irmego program* nasami mam probluny ze mzu- 1
mieniern jej logiki. Aby dahvit nozumimie rnojcj pracy innym, umieScikm w kodzie
licme komentarze, natomiast w pdpnednich punktach opisafern og6lnie pne* ste- .
rowania w aplikacji. Jetelijednak lad chce d o k W c zrozumiet dzialanie tej aplikacji,
polecam skorzystanie z debugera i pmanalizowanie kodu luok po h k u .

Na p n y b d z i e Kredora umtr?wucji potv-k zademonstrowth kilka ciekawych


pojpt i techmi kt6.z ~owinnyzaintmsowat5 programist6w Excela Sq to:
I Rozdriat 25. + Tworzenie oplikacji wygodnych dlo uiytkownika 69 1

twonenie pozycji menu utytkownika wy5wietlanej tylko wtedy, kiedy jest


otwarty olueflony skomszyt (lub dodatek),
wykoqstanie kreatoa utwononego na podstawie okien UserFon w celu
pobierania informacji od utytkownikbw,
I! W dynamicme ustawianie wlakiwofci Enabled kontmlek,
w powiipanie poh tekstowep z przyciskiem powla.
D wyfwictlanie pomocy dla utytkownika,
8 defmiowanie n m kom6rek za pomocqj p y k a VBA.
8 pisanie i kopiowanie f m u l za pornomjpzyka VBA,
odcytywanie i zapisywanie danych do i z rejestru Windows.

Twortmie aplikacji urer-oriented w Excelu nie jest proste. Tmeba pnewidzid, w jaki
s p 6 b utytkomby b& konystad z aplikacji. Chociat stamhm sic, aby aplikacja przed-
stawiona w niniejszym wrdzialc byla w maksymalnym stopniu odpoma na nierozsqdne
dziatania Uytkownik6w. nie przrprowadzitem dla niej gruntownego testowania w wa-
mnkach rzeczywistej pracy. W zwia;rku z tym nie zdziwilbym sic, gdyby w pewnych
warunkach nastqita jej awaria

Rojekbwanb e p l h c j l typu ummdented -w & a ~ 6 ~ M


Pmjektujqc apllkacje, klt6ra ma b# wygodna dla utytkownika, nalety parnletd o wielu sprawach.
b i t s r a lista m o k stuw jako wzonec czynnofci, M6re naleiy sprawddC.
Czy pospnqtak.5 p o d i e ? Upewnij sig, c q pa zakohczeniu aplikacji paski na- i menu
zostaly adtwonone do ich plemotnego stanu.
8 Czy okna dialogowe moh8 obshgiwd c&owicle z kJmvkrhny7 Pamwaj o dodaniu klawlszy
skr6t6w oraz dowadnle sprawdi kolejnoe zaktadek.
W Czyprzyjqk9jakieS zalotenia dotyczqce kataIogdw7 Jeteli apllkacfa odczytuje lub laplsuje
pliki, nle motna zatot$. ze istnleje okre5lony katalog oraz te jest to katalog Meiqcy.
D CzyzapwrriEe.5 m o m 6 anufowada okien dialogowyh? Nie wlno zakladaC, ie utytkownlcy
zakoficrq prace we wzystkich oknach d~alogowychpopnez kliknwle prryc~skuOK.
N Ciy zab2)+el,te nle sq otwaite i m arkus=? Jeteli podczas testowanla aplikacja byta
jPdynyrn atwartyrn shosqtem, rnog4S tam pm?cczy5 zdmenia, k t h wystepujq w czasle.
kiedy sq otwarte inre skoroszyty.
Czy ~ ~fe shomszytlest
9 ,wiobcmy7 Z Excela motna k q t a d w sytuacJl, kkdy
nie jest wdomy zaden skoroszyt.
Cly z o p t y m a l l z ~ faprikacje pod w@@ern m k o S c I J e j 'el#mla?Apllkacjq moha
ptzyspeszyc?,ns pqltlad deklarujqc typy miennych oraz definiujqC anienne obfektowe.
W C z y p r ~ r y m sWaWw/e t~ u d o k u m m e ? C q kod bpdzie mzurnialy, jetell
spr6bujesz pneanallmwad go za szeX m i e s i w
r Czy dotcr)te5 odwedniq d a . k u m @ e f @ i k m ~ k a ? ~ o n a n dokumentscjl
le asto
etirnlnuje m n l a uiytkown1k6wbotyczqce obslugl aplikaa (M, prrynajmniqzmniejsza Ilczbq
Wtafi).
Czy M & i e pneadizowakJ a p f i w ? lstnieje prawdopodabfefistwo, ie apllkacja
razu dbskonah. PoSwl& t m h p crasu na jej papiawlanie.
nie bqdzle QCI
CzeS6 VII
Rozdziat 26.
Problemy zgodnoici
J-li aplikacja ma dzialaf w stanzych wersjwh Excela, w Excelu dla komputer6w Ma-
cintosh lub wersjach dla imych jqzykdw, nalety pamiqtat o potencjalnych problemach
zwivnych zt qdnoSciq. Czytelnicy, ktdrzy tworzq aplikacje w Excelu 2003 pnezna-
czone wyhcznie dla utytkownikbv tej samej wersji, mogq pominq6 ten rozdzial.

Co to jest zgodnoit?
W W utytkownik6w komputedw terminzgorlnoitjest m y bardzo cqsto i omacza
zdolnoft dziahia programu w rdtnych Smdowiskach spnqtowych, programowych lub
sprqtowoprogramowych. Na prz)rktad aprogramomie napisane dla 32-bitowych systs
rn6w operacyjnych takich, jak Windows XP nie bQdzie dziaM ze starsq 16-bitowq wcrsjq
systemu Windows 3.x. M6wiqc inaczej. 32-bitowe aplikacje nie sq zgdne z Windows
3.x. OczywiScie nie m o a a tet bezpoirednio uruchornii oprogramowania napisanego
dla sysemu Windows w innych systcrnach operacyjnych takich, jak MacOS czy Linux.

W tym rozdziale opisy, jak aplikacje Excela 2003 dziahjq we wczehiejszych wersjach
Excela dla Window o m Excela dla systcmu MacOS. Do zapewnienia pehej zgadnoici
pomiqdzy zawartogciq plikciw nie zawsze wytarcla Fakt, it dwie wersje Excela kony-
stajq z tego samego formatu plik6w. Na przyklad Excel 97, Excel 2000. Exoel 2002,
Excel 2003 m z Excel 2002 dla systcmu MacOS wykorystujq ten sam format plik6w.
ale wystppujq pomipdq nimi olbrqmie problemy zgodnoki. Samo otwarcie skoroszytu
lub dodatku w dmAlonej wersji Excela nie oznacza, ke uda sic utuchomit zapisme w nich
r n a h jqqka VBA.

Pmblrmy ze zgodnoiciq r n o g sip z d w nawet w m a d k u tych sarnych gl6wnych


wersji Excela Na przykkl Excel 2002 wystqpuje w co najmniej m h r6tnych pod-
wersjach, Sqto: oryginahe wydanie, wersja z p i e m dcdatkiem Service Pack ma-
na jako SP-I drugie wydanie dodatku - Sf-2.Chociak gl6wnym celem dodatkciw
Servrce Puck byb m i p i e problem6w dotyc~aycychbezpieczdshva, prawdopodobnie
poprawimo t a k e inne bkdy (Microsoft d o ujawnia szczeg6ly). Z tych wzglpddw
nie ma g w m j i , t e aplikacja utworzona za pomocq oryginalnego Excela 2002 bqdzie
dziatata bezbbdnie w wersji Excel 2002 SP-1.MoZna ta!de sformutowat twierdzenie
odmme: mie ma pewn&i, te aplikacja opacowana za p o m q Excela 2002 SP-1 b m i e
dzidala poprawnie z oryginalnym Excelem 2002.
W przypadku pakietu w e e 2003 problmy zgodno9ci .qjeszcn bardziej skompliko-
wane. Wersja Exccla z wydania Pro pakietu Office zawiera wlaSciwoSci, k6rych nie ma
w pozostatych wydaniach pakietu Oflce 2003. Mam na myfli nowoici zwiqzfine z ob-
slumjqzyka XML, a t a b e obstus zaqdzania prawami wlasnoki do inforrnacji (IRM
- ang. Information Righi3 Management), Jeili w i ~ cw aplikacji wykorzystano te cechy,
proste sprawdzenie, czy aplikacje opracowano za pomoq Excela 2003, nic wystarcza.
Trzeba takte sprawdzit, czy sq dostqpne wyimione w~ciwo3ci.
I
Wynika stqd wnioxk, te Excel jest platform&zmiennq. Nit ma sposobu zapewnienia
stuprocentowej zgodndci. Zgodndci pornidzy wersjarni nie uzyskuje sic automatycmie.
W wiqkszoici przypadkbw, aby jqosi~nqd.trnba wykonat sporo pmcy.

Rodzaje problem6w zgodnojci


IsMicje pi* hkgorii potenjalnych problcm6w &natci. Wymieniono je pni&j i om&
wiono bardziej szczegdtowo w daluej e c i ninicjuego rozdziahr.
Problemy durycrqfeformatuplikdw -skorosyty Excela mama zapisat w kilku
r62nych formatach plikdw. Utytkownicy wcafnicjszych wcrsji Exala mogq mief i
problemy z otwieraniem skoroszyt6w zapisanych w formacie nowszych wcnji.
-
Problemy mirpmre r nmymi ddciwafciami jest ocywiste, h w l a k i d c i ,
kt61-epojawity sic w okreilonej m j i Exala, nie m m a wykorry-(5 w jego
wczef niejslych wmjach.

zwracat-s&eg~ln~ owage w pnypadk" wykarzystyknia wyvklah interfejsu


Wmdows API, jettli aplikacjamusi &iaM z 16-bimwqwersjpExcela(np. Excel 5).
-
Problemy rgodnoicipomi&y g~iemomiWindows a M d jeteli aplikacja
ma dziahf w obu platformach, naleZy poSwiviC wiele czasu, ronviqzcjqc
r62norodne problemy zgodndci.
Problemy r6tnicpomiqdry wmjami nwodowyrr~I-jehli z aplihcji majq
konystat utytkownicy poshgujqcy siq rhyrni wersjami jqzykowymi Excela,
naleZy r o z w i p t dodatkowe problemy dotycqce zgodnoSci.

btnieje tylko jeden sposdb zapewnienia zgdw9ci: nalei?y p n e t e s t o d aplikacjp na


wszystkich platfwmach docelowych oraz z wszystkirni wcrsjami Excela. z ktdrymi ma
by6 u2ywana Cysto jcdnak takie dziafanic po prostu jest niemdliwe. hgramista mote
natomiast wykonad pewne czynndci, aby zapewnif dzialanie aplikacji w r6hych wer-
sjach Excela.
I
Czytelnky, Mdny spadzlewali slq maleft w tyn mzdziak pelnq llstb prcbkrn&, bqdq I
r0fcmroulli. Nie styszatem, aby taka list. w rgdle iilVli&~.I rriy516 b jq sbmmnie I
m y bardrabudne- Po prostu Irystwe zbyt wiele takich prablern6w 1 zbyt ztafone.

Oobym fr6dbm InfomacJl, pomalajqqm ZidentyfikowaC Were b k d 6 ~ m hwmjl


Excela aaz porn& ptencjalne prcblemy zgod&l. jest biua wiedzy online Microsoft.
Jej adres to htrp://search.support.
micmsohcom. I
Obslugiwane formaty plik6w Excela
W Excelu mama zapisad skomsyty w formacie wczdniejszych wersji. Dodatkowo sko-
rosyt m o h a zapisak w formacie podw6jjnym. w kthyrn w jednym p l i h q zapisam dwa
formaty. Takie pliki majqocqwi9cie wiekszy romiar, ale niestety nie jest to jedyny pro-
blem z nirni zwi@any.

J&li aptikacja ma W C we wczehiijszych wesjach Excela, m b a pami@ o jej zapi-


saniu we wtaSciwym formacie pliku. W Excelu 2003 moha zapisad pliki w nastpujl\cych
fonnatach:
Microsofrficel Workbook- standardmy format pliku Exala 2003, ktbry moma
otworzyC w Excelu 97, Excelu 2000, Excelu 2002 oraz Excelu 2003;
m skoroqyt MimtzsoP Exce! 5.0/95-format, ktdry mobla otworzy4 za pomoq
Excela 5.0 i wmji pdkniejszych;
m skoroszyt Mic~rnoPExcel 97-2QO0 & 5.W95 -podw6jny format, ktdry m o m
otwarzyC za pomocq Excela 5 i m j i ndwszych;
m m b Micrmofl ficd 4.0 - format, W r y m o h a otwonyt za pomocq Excela 4
i wmji nowszych (w tym formacie zapisywany jest tylko jeden arkusz);
m a r k Miaosofl Excel 3.0 - formag ktdry motna otwonyC za pomocq Excela 3
i wersji nowzych (w tym formacie zapisywany jest tylko jeden arkusz);
-
u r k m Mdcrosofl Excel 2. J fmat, ktbry m m a otworzyt za porn- Excela 2.1
i wersji nowszych (w tyrn formacie zapisrxany jest tylko jedm arkusz);
skorrntyr M i m j Excel 4.0 -
finnett, kt&y motaa otwonyC za pomoq
Exccla 4.0 i wersji Nhkjszych (w tym forma& moha z a p i d pliki z a w i k j g e
wide arkusy,ale nie jest to nn sam format, co w pnypadh skwosytdw Excela 5).

W j w k u VBA motna skarystat z wlaScii&i Fl IeFormat obi& Workbook w mlu


okSlenia formatu pliku wybrancgo s k o r o Ponhza ~ insfrukcja powoduje wy4wie-
tlenie wartofci reprezentujacej format pliku aktywncgo skoroszytu:
Mswx PctlveYorkboak . F i lefomt
Do okrellania vvlaSciwobi F l leFomt rnam wykmymt pddin-e d e . Na prq-
klad poniZsza instrukcjrt wyhvietla True. jdeli aktywny skoroszyt jest plikiem Excela 5:

Okrdanie n u m wa@l E x d a
Wersjp Excela m&a uryskaC za pomocq ~~ Version obleldu ~ l r c a t i mZwrkona
. warto5C
jest clqgiern makh, a zatern aasami trzeba jq prreksztakit na Hczbp. ldealnle nadaje sig do
tego funkcja Val jeryka VBA. Na pnyklad p ~ k z funkcja
a m a wartog Trw, jekli uzytkorm~k

-
wykonystuje Exoela 2003 lub m s z + wersj? [uwaga: Excel 2003 to rversja 11):

-
Function XCllOrlatert I
.XLLllOrlater lralIJpplicatlcn.V~lon)
End Fumtim
11

-
698 Cz@eV11 lnne zagodnienia

Redefiniowane stale wraz z ich wartofciami dla r6tnych wersji Excela ~ g 6 l n i o n o


w tabeli 26.1.
Tabela 26.1. St* I wBlt09ci dla dhych lbrmatdw plikdw Ercela
- --

Wersja Excels Stals WsrtdC


Excel 2.1 xl Excel 2 16
Excel 3.0 xl Excel3 29
Excel 4.0 xlExcel4Uork~ 35
Excel 5 xlExcelS ' 39
Excel 95/97 xlEme19795 43
Excel w formacie HTA4L xlHtml 44
Dodatek Excela xl Addin
Excel 97~000/2002/2003 xlWorkbookNorma1

Kiedy tneba unika6 nowych wla5ciwoici?


Jeteli aplikacja musi dziahd z Exeelem 2003 oraz z wersjami wczeSniejszymi, n a l q
unikat konystania z wta9ciwo~ciwpmwadzonych pb wydaniu najwczeiniejszcj wcrsji
Exscela, kt6q aplikacja ma obslugiwd. Nowe wMciwoSci m o m stosowat selektywnic.
Mbwiqc inaczej, za pomoq kodu naleq oktdlit utywanq wersje Excela, a nastqpnie,
w zale2noici od wyniku tatu, wykorzystak nowqwt&ciwolf lub nie.

ProgramiJci VBA musq.-u aby nie ko- z obiektbw, wlaSciw&i lub maod,
kt6re nie s~ dast$pe we wczeSnjejszych wersjach. Ogdlnie RCCZ biorqc, najbeqiecz-
niejszym sposobern projektowania aplikacji jest zastosowanie zasady najmniejszego
wsp5tnego rnianowika W celu zachowania zgodnoSci z Excelem 97 i wersjami nowsryrni
nalety do projektowania aplikacji wykonystak Excel 97, a nasttepnie przetestowaC jq
w nowszych wersjach.

Czy aplikacja bqdzie dzialae


na komputerach Macintosh?
Jednym z n a j e z g m problem6w, jakie muszq rozwizgywad propmihi, jest zgod-
noit z komputerami Macintosh Excel dla kornputerbw Macintosh stanowi zaledwie
niewielkq czqX rynh Excela i dlatego with programist6w po prostu go ignoruje. Na
szcz~lciepliki Excela sq zgodne porniedy obydwoma platfarmami. Obshgiwane wia-
Jciwolci nie sqjednak idcntycme, a z g o d n o ~makr VBA jest daleka ad ideah.

Do oW1enia platfwmy, na jakiej dtida aplikacja, m o m zastasowd kod VBA. Zaphe-


zentowana ponitej fimkcja wykonystuje wtaSciwo5C DpratingSystem obiektu Application
i m c a wartoft T-ue dla dowolnej wersji systemu Windows (tm.jdli zwracany ciqg
znak6w zawiera tekst Win):
.. -- .* - - - --
! Rozdziot 26.4 Problerny zgodnofci 699

Function WindmOS( As Boolean

-
I f ~ 1 i c a t l o n . D p e r a t i n g S y s t e ml i k e "%int" Then
W l ndonsOS True
El se
WindonsOS False
End If
-
End Function

lstnieje wiele r6tnic pomiqdzy wenjp Excela dla systemu Windows oraz dla systernu
MacOS. Niektbre z nich sq subtelne (np. r6me czcionki domyflne), a inne dofC istotne.
Na przykhd Excel dla systemu MacOS nie obshguje kontrolek ActiveX. Ponadto do-
mySlnie wykonystuje system daty 1904, a zatem w niektbrych skoroszytach daty rnogp
byC wcztSnicjsze o cztery lata. Z kolei w Excelu dla Windows domySlnie wykonystywany
jest system dat 1900. W systemie MacOS data o wartojci 1oznacza I stycmia 1904 roku,
natomiast w Excelu dla Windows ta sama wartoit daty oznacza 1 stycznia 1900 roku.

Inne ograniczenia dotycq funkcji interfejsu Windows APk w Excelu dla systemu MacOS
takie funkcjc nie wq dzialaf. Jeteli w naszych aplikacjach takie funkcje odgrywajq
istomq mlq, nalety opiacowat rozwipnie zastqpcze.

Jettli w kodzie wykorzystywane sq S c i e i i nazwy plikbw, nalezy zastosowa6 odpo-


wiedni separator kiekki (dwukropek dla systemu MacOS, odwrotny ukohik dla systernu
Window). W takiej sytuacji najljlcpiej unikad kodowania separatora Scietki .,na twardo"
i wykorzystaf jqzyk VBA w celu jego ookreilenia Ponizsza instrukcja powoduje przypi-
sanie separatora Scie2ki do zmiennej o nanvie PathSep:
PathSep - Ppplicattw .PathSeparator

Po wykonaniu tej instrukcji motna wykmysta6 miennq Pathhp zamiast zapisanego


,na twardo" dwukropka lub adwrotnego ukoinika.
Zamiast two@ jeden plik zgodny z obiema platformami, wipkszd programist6w
pmjcktuje aplikacjt dla jcdnej platfonny (zazwyczaj jest niq Excel dla Windows), a na-
stpnie mdyfikuje jq w taki spos6b. aby dzialah na drugiej. JeSli wiqc aplikacja rnusi
dzia4aC w dw6ch systernach, nvykle utnynuje sic jej dwie oddzielne wersje.
Jest tylko jeden spas6b spmwdtenia czy rtplikacja jest zgcdna z wersjq Excela dla syste-
mu MacOS: naleky dokhdnie jq pmestowat w tym systemic i opracowaf rozwiagnia
W p c z e dlatych procedur, ktore nie dziabjajaprawidtowo.

Tworzenie aplikacji dla wielu wersji narodowych


Ostalnim problcrnrm zgodnodcL, jaki om6wiq w tym rozdziale, squstawienia migdzynam
dove. Excel jest dostqpny w r6hych wersjach jqzykowych. Kod kraju dla wersji Excela
wyhvietla poniaza instrukcja:
MugBox &plicatim. International (xlCantryCobe)
-
Kod 1odpawiada wersji Exccla dla j q q b ongielski WA).Pozostale kody j w k 6 w ze-
stawioao w tabeli 262.
700 CzqK MI+ lnne zagadnienla

Tobela 2 6 9 . Kadyjqzykdw dla Exceta


-
Jwk K+Iwh
angielski 1
rosyjski 7
gtecki 30
holcndmki 31
tiancuski 33
hiszpdski 34
wqgierski 36
wtoski 39
enski 42
dtn'iski 45
szwedzki 46
norweski 47
polski 48
nicmiccki 49
pagalski (Brazylia) 55
tajski 66
japohski 81
kordski 82
wictnamski 84
chiiski (uproszczony) 86
turecki 90
hinduski 91
urdu 92
portugalski 351
fiiski 358
chinski (tmdycyjny) 886
maski 966
hebrajski 972 "

pnki 982

Jeteli z aplthcji bqdq korzystaly osoby postugujqce sip innyrni jwkami, nalety m-
pewnit ntycie wMciwego jqzyka w oknach dialogowych. N a l w t a b ddentyfikowat
ustawimia rnipdzynarodowe dla syrnbolu dzitsiwego oraz sepaqtora tysi~cy.W Polsce
R o z M 26. + Problerny zgodnokl 701

sr\ to odpwiednio pracinek i spacja, jcdnak utytkownicy w innych laajach stosujq inne
aski. Kolejnym problemem jest format daty i czasu: w niekt6rych laajach u2ywa sip for-
matu miesiqJ&ieri/mk, w innych &iedmiesiqdrok, ajesaze w innych rok/miesiqd&i&.

Jeali tworrymy aplikacjt, k t h j W q *at jedynie ludzie z n a m j tinny, nit musimy


mart46 siq problemami zgodnolci z wersjami mi~dzynarodowymi.Jeteli jednak firma
posiada b h M caiym lwiecie lub j&li planujerny mzpowszechniaf aplikacj~poza krajem,
powinnifmy &id uwagc na zagadnienia zgodnofci po to. aby zapewnid poprawne
du'ahnie aplikacji w innych wersjach jczykowych Excela. Zagadnienia re opiszp w ko-
lejnym podmzdziale.

Apllkacje obslugujqce wiele jqzyk6w


Oaywistym problemem nviqzmym z aplikacjami m i p d z y n d w y m i jest jezyk aplikacji.
Jeteli na pnyktad utywamy okien dialogowych, powinnifmy zadbaf o to, aby tekst wy-
Swietlat sit w jczyku utytkownika Na szcecie nie jest to zbyt skomplikowane (przy
zatoteniu, te potrafimy przethmaczyt tekst lub mamy kogol, kt0 potrafi).
Na @)tie CD-ROM ddqczonej do ksiqtki zamleszczono kreatoc z oknem dlalogawym
skonfigumnyrn dia jozyk6w polskka. an@eiskicgoha niemkclego. W kreatorze
wykotzystano m l a d zaprezentclwany w mzdziale 15.
W o h i e dialogowym piewzego kroku kmatora umicszczono trzy pnyciski opcji, kt6-
re u2ytkownik m o d wykonystat do wyboru jpzyka. Tekst dla trzech j p z y k h zapisano
w arkuszu. Na rysunkach od 26.1 do 26.3 pokamno okna Userform wyfwietlajqce tekst
w trzech jwkach.

Rysunek 26.2.
Demonstracyjny kreaQor
- j p q k polski
702 CzefC VII lnne zagadnienia

Obsluga jqzyka w kodzie VBA


Nie musimy pmjmowaC sie jwkicm, w kt- p i s m y kod VBA. W Excelu wykorzy-
stywane wdwie biblioteki obiektdw: biblioteka obiektdw Excela oraz biblioteka obiektdw
VBA. Podczas instauacji domyilnie rejestrowana jest angielskojqzyczna wersja obu bi-
bliotek, niezalemie od wmji jpzykowej Excela.

Wykonystanfe wta~ciwofcilokalnych
Jeteli kod wySwietla informacje z arkusza (np. formulp lub adres zakresu), najlepiej
wySwietlif je w lokalnym jezyku. Na przykhd ponitsza instrukcja wylwietla formulp
zapisanq w kom6rce A l :
MsgBox Range(~Al').Fomla

W pnypadku aplikacji mipdzynarodowych lepszym ronvi@aniem jest wykorzystanie


w+aiciwoici FomlaLocal zamiast wlaSciwo9ci F o m l a :
MsgBox Lnget 'Al') .F o m l aLoca1
Dla kilku innych wlaSciwo5ci istniejqwcnje lokalne. Wyszczeg6lnionoje w tabeli 263
(szczeg6towe informacje na ten temat majdujq sip w systemie pomocy).
Tabela 26.3. WaWwoScf, dl8 M6wh Esfniejq m e bkalne

WhkiwoiC Wenjr lokrlnm Zwracmnr zawrrtaSC


Address AddressLccal Adrcs
Category mmwL@.Xl btqoria funkji
Fomul a FomlaLaa 1 Formula
FonarlaRlCl FonnulaRIClLocal Formula w noCacji WlKl

RefersToRlCl RefersToRlClLocal Odwolanic z wykonystanicm notacji WlKl


Rozdzlot 26. Roblemy zgodnolci 703

ldentyfikacja ustawleii systemu


Nie moms zakladae, te system utytkownika bqizie skonfigurowany tak, jak system,
w kt6rym tworzyrny aplilcacjp. W pnypadku aplikacji mi~dzynarodowychnaleq m c a C
uwag? na nastqpujqce ustawienia:
-
symbol dziesietv mak wykonystywany w celu oddzielmia cqJci dziesi~tnej
od cySci cakowitej liczby;
separator vsiecy -znak wykorzystywany do odddelenia trzycyfrowych grup
w liczbach;
separator li5.t -mak wykonystywany do oddzielenia elment6w na IiScie.
Bieace ustawienia seperator6w motna uzyskat za porn* wlaSciwoSci International
obiektu Apollcatim. Na przyklad ponitsza instrukcja wySwietla symbol dziesiqmy:

Za p o m q whkiwo5ci International motna uzyskaf 45 ustawien rni~dzynarodowych.


Wyszczeg6lniono j e w tabeli 26.4.

Kod kraju dla wnji Exccla


Bi-ce vstawienia kraju w PmcIv xtemania systcmu Windows
Symbol dzicsictny
SepllraDor tysi~cy
Separator list
Wielka litm dla wiasza (dla o d d w sty111 WIKI)
Wdka litera dla kolumny
Mafa Litera dla witrsza
Mala liira dla kolumny

Znak utywany zamiast prawcgo nawiw kwadndawego (1)w d w h i a c h


w stylu WIKJ
Znak m a n y mi- lrwrp nawiasuklanmrwego ((1 w literalacb
tablicwrych
h a k *any tamiast prawego nawiasu ldamrowqo (})w l i t m k h
tablicowych
Znr* u-y w celu oddzielmia kolumn w Ijtcralach tablicowyth
Znak utpvmy w celu oddzidcniawieny w literatach hblicwych
704 Cz- VII lnne mgadnienio

Tabda 26.4. Stale dl8 w l a S c M lntemstfonoI (clgg delsry)

Altanatywny wperator elementdw tablic do wykorystania w pnypadku,


gdy bic* separator tablic jest taki sam jak symbol dziesiply
xl Dateseparator separator daty (-
xlTimeSewrator Separator godziny (:)
xlYeatCode Symbol r o b w formatach liabowych Cy)
xl Wnthtode Symbol micsipca (m)
XI
0ayCode Symbol dnia (d)
xlHwrCGde Symbol gbdziny (h)
xlMinuteCode Symbol minuty (m)
xlSecondCode Symbol sehndy (s)
xlCurre.eMuCooe Symbol waluty
xlGenera1FotmatNane Nazwa standardowego rormatu limb
xlCurrencyDig1t s Liczba cyfr ddaipmych wykarzrstywana w formatach walutowych
xlCurrWICyWegative W-fC rcpmmtujqca format waluty dla ujemnych kwot
xlNonqlrrencyDIglt s Liczba cyfr dzikipmych wykomyslywana w formatach innych n i t rvalutowe
xlMonthNmthars Zawsze n m a ay ~ maki w cclu zachormnia zgodnoki wstecz W systemic
Windows sMty nazw rnicsi~ymom mi& dowolnq dlugoJC.
Zawsze zwrscabry maki w a l u zachcnvania zgodnoki wstecz W systemic
Window skr6ty nazw dni tygodnia mogq mi& dowolnqdlugog.

True, jdeli w systemic wykorystuje sip 24-godziiny format Fa1se.


jdli wykonystujc sic 12-godzinny fonnatczasu
T m , jetcli w spcmie funkcje nie qwyfwidlanc w jmku angielskim
True. jetcli jest w y k o r m y system rncbycmy: False; j&i w synemie
wykonysrywany jest mngiekki ryskm miar
True, j e M i w e d symbolem waluty dodawana jest spacja
True, jeteli wartoki kwot popmdza symbol waluty; False, jdli symbol
d u t y jest umitszczanyza kwotp
True, j e ~ e lwi systemit wykomystujc siq mak minus dla liczb ujcmnych:
False, je2eli sq wykorzystywanc nawiasy olaagte
True, jctcli dla anowych WartoSci walutowych sq wySwiUlane kohmwe ma
True, jdeli dla m w y c h wartoki ~ u t o w y c h
q w y ~ ~ l a wn ied w ncrs
True, wli w liczbach omamjqqch numny m i a i mjest wyfwietlane
w i d w e zcm
Tabela 26.4. St& dl8 whddwdd lntmtlonal (c& dslszy)
Stala Znaaenie
Xl Dayleadl ngZero True, jchli w liczbach omaczajqcych nurncry dni jcst wySwictlanc wiodwc
zero
True,jetcli la- w systcmie zapisuje s i w~ postaci cnmch cyfr: Fa1 se.
jetcli zapisuje sip jc w postaci dw6ch cyfr
T m , jetcli formatMPl daty jcst miesiqddziatVrok dla daty dlugiej: Fa1 se
w prrlpadku formatu &ieri/miesiqc/rok

Ustawienia daty I gadziny


Jehli w aplikacji, kt6ra ma by6 uQwana w innych krajach, zapisywane sq sformatowane
daty, mlezy zapewniC ich wy3widlanie w f m a c i e manyrn utytkownikowi. Najlepyvm
sposobem jest obliczenie daty za pornocq funkcji VBA DeteSerial. Excel sarn zastosuje
w6wuas odpowiednie fonnatowanie, utyvajqc fonnatu daty kr6tkiej utydrownika.

W zaprwmmwmej ponhej proctdurze wykmtano fimkcjp DateSerlal w celu pny-


pisrmia daty do miemej StartDate. Tak ustawiona data jest m n i e zapisywana
w kmdrce A1 z zastosowaniem lokalnego formatu daty Ikrbtkiej.
Sub Wri t c O a t e 0

--
Dim StartDate As Date
Stamate D a t e S e r ~ a l ( ~ 34.. 15)
Range('AlB) StartOate
End Sub

Aby zastosowat dodatkowc fonnatowanie dla daty, mo2na napisad kod, kt6ry wykonuje
te dziatania po wprowadzcniu danych w kom6rce. W Exalu jest dost~pnychk i b for-
mat6w daty i czasu, a t a b kilka fomat6w liczb. Opisanoje w systemie pomocy.
708 Czqe VII Inno zogadnienia

Tabela 27.1. Polecanla o m 1 na plikadr wj e W V8A


Pdecenie Dziahnie
UlDi r Zmicnia b i w katalog
ChOrtve Zmicnia bietqcy nap@
Dl r Zwraca mrny pliku lub katalog pasujqcy do o k ~ $ l o m g ow m a lub atrybutu pliku
FfleCopy Kopiuje plik
FileOateTlne Z w c a datq i godzinp ostetniej modytikacji pliku
Flldm Zwrnm roan& pliku w bajtach
GetAttr Zwtaca wartoy rqmmtujqcqatybut pliku
Kill Uwwa plik
WDi r T W nowY W l o g
Name Zmimir n v pliku lub katalogu
M tr Umrm plny kamlog
SeUttr Zmienia snybut pliku

a l e jpodrordziaiu dernonstrrjq zastosowanie ni&rych


~ ~ ~ ' z p o z m t cz&i plmn
operacji na plikach.

Funkcja VBA sprawdzajqca, cry istnieje plik


P o n b fiurkcja mraca wartoSC True, jebli oMlony plik istnieje, lub Fa1se w p m - -
ciwnym d e . Zwr6cenie pustego c i w mak6w przn funkcjp 01 r omacza, tc nie mo*a
maleft pliku, a zatem funkcja zwraca wartoSC Fa1se.

End Functim
-
Fumtlon FileExlrts(fnae) As Boolean
FllcExlsts Dlrtfname) "" 4

Argumentem funkcji F i leExi sts jest p e h ki- dostqu do pliku wraz z jego n w
Funkcjp mo2na wykony~tatw arkuszu lub wywoM z pmedury VBA.

Funkcja VBA sprawdiajqca, cry istnleje katalog


Ponima funkcjs m c a wartog True, jehli okrr$lony katalog istnieje. lub False -
w pneciwnym razie:
Function PathExists(pnane) As Boolean
Zwraca warto% True. j e t e l i katalog istnieje
-
Dn Error Resm Next
PathExists tGetAttr(pnm1 And vb0irectoryJ
M Function
. .
- ~irectofy
.Rozdziat 27.+ Operocje no plikachwykonywone za porn&q kodu VBA 709

Procedura VBA wyhvietlajqca list9 plik6w w katalogu


Poniaza procedura wySwietla w m y m arkuszu lie plik6w z oknglonego katalogu
wwz z romiarem i dat;l modyfikacji:

-
sub L i s t F i l e s o
01 rectory 'c:\wlndows\PulpIt\'
r-1
' Wstawienie naglW6u

--
Cel1s.ClearContents
Cells(r. 11 'Nazwa pliku'

-
Cells(r, 2) "Rozmlar'
Cells(r. 3) "Datalgodzlna'
Range('Al:Cl").Fant.Bold -
True

'
-
Pobranfe piemrego pltku
f Di r(Di rectosry. 7)
DoUhile f ""
r - r + l
Cells(r. 1) --
f
Cellstr,
Cells(r.
Pobranie
2)
-
FlleLen(0irectory L f)
3) FileOateTim(0irectory & f )
nastepnego pl l k u
f -Dlr
LOOP
End Sub

Przykladowy wynik dzialania proceduey L l s t F l les pokazano na rysunku 27.1.

-11 M M ~
H.W, ,Yh" R ~ l l l rD l l u + l l c * r
-
-
E . ~ ~ I 1.
~ sssosm.aru n n
ma
I . ~ . . ~ . t S.W. rn 459 w a r n ran.
A .nt@ amuu mrn rr:n
y%ar-w m w~awm15
-kr*~f.rt* . 3 4 oroz.mr3m.
7 E n t r u 2 7 ~ p ~ b m ~ ~ l )m,OTaaMltl
W1~
&am n (n wmrn01:10 .
-. 9 - h h - s o c z b k . 9 5 O Bmm H:35
A&nwr*15 w m w-mmmls
n"'YkYsn'+ : 51s ormm~a..-
7--
&m, s c n k ~ ~,-m.wm.arwcea.
e .
13 .L**k.W v l 5 a M Y p8 ( ~ m m 1ua
T!:*M.,q , ,.,W1 O M I
m lk36
15%~ .- -. i m rsmaxrnrc_
-.I S P I # ',1 2 t W 1-HY nrl
rrlm-iw " - I dn rrma~wrr
Xlwmm,c-.u , mnm-mms'
.
a3i~
; ..
3-p,dlrmsmd,mihl
,.
i\mptf
&
1
-- = .=- - [*I.-._-A
~ A¶
- . . . . .- . !if
lcK&mz:I

W procKivne d-ie -no funkcjp Oi r. Za pierwszym r a m funkcja po-


biera p i e w s q malezionq namq pliku. Kolejne wywdwia w pqli powoduja pobmnie
nanv kolejnych plikbw. Jeali nie ma wigej plikbw, zwracany jest pusty c k g znak6w.
Na plycle CD-ROM dolqcmnej do ksiqtkl majduJesl? bevdtlej raawansarmna wersja

Pimvszym argumentan fankcji Di r mode by6 takte rpecymcsja pliWw w paptmsci wmrca
"
Aby na przykl;aduyskat I i q plik6w Excela, nal- wyk- insbukcjs
710 CzefC VII* lrme zagadnienia

Wykonanie tej instrukji spbwaduje pobranie z pbdamgo W o g u nanvy pimvszego pliku


zgodnego z wzorcem .xi? (mogq to by6 pliki o ronzerzeniach .xis, .xlt lub .xfa).Drugi
argument funkcji Dir umotliwia wprowadzenie atrybutdw plikdw. Argument 0 wartoSci
7 powoduje pobranie nazw plikdw, wlqcznie z plikarni, ktbre majq ustawione atrybuty:
plik tylko do odczytu, plik ukryty oraz plik systemowy. S x a g 6 l o w e informacje doty-
c q c e argument6w funkcji D i r motna znalekd w systemie pomocy.
czq$g Zapezentowena InstNkcja nie jest najlepszym spasobern Wwietlenia llsty plikh.
ce, Aby urnoillwid utytkownlkowl wybranie pliku z Ilsty, leplej zastosow~dmetode
GetOpenFi 1enam, kt6ra zostata opisana w mzddale 12.

Wykorzystanie obiektu FileSearch


Obiekt FileSearch nale2y do biblioteki obiektbw pakietu Microsofl Wce i udost~pnia
w jezyku VBA wszystkie wlafciwoSci windowsowego okna dialogowqo Znajtii pliki.
Motna go wyko~zystakdo wyszukania wszystkich plikdw odpowiadajqcych podanej
specyfikacji (np. As), a nawet wyszukiwa6 pliki zawierajqce okreSlony tekst. Obiekt
Fi leSearch mo2na wykorzystat w Excelu 97 oraz wenjach nowszych. W tabeli 27.2
zestawiono jego wahiejsze metody i widciwoici. Pelnq ich list? wraz ze szczegbto-
wym opisem rnotna male26 w systemie pomocy.

tabela 27.2. WaJdwaJd I I o d y obi& FNeSeerch

Wa5eiwoSC tub metoda Dzialrnie


F l leName Nsnva piiku do ysmkania (rnoma stosawd rnaki wzorc6w)
Zwraca obi& zawiaajqcy nazwy malcdonych plik6w
Katalog do wy&ukiwania
True, jmli majq by6 pneszukiwane podkalalogi
Execute Wykonuje operacjp 'kysmkiwania
NeuSearch Rcsttujc obickt Filesearch

P q k h d y z pozostatej c q k i tego punldu demonstrujqzastosowenie obiektu Fi 1esearh.

Zastosawanie ohiektu FileSearch do sprawdzenia, cry pllk istnieje


Ponitrza funkcja pobiera dwa argumenty (kietkp i namp pliku) i z m c a wartdC True,
jeteli w okrdlonyrn katalogu plik istnieje. Po wykonaniu metody Execute,jeSli plik 20-
stanie maleziony. wlaSciwoSd Count obiektu FoundFi 1es Wzie miah wartoit 1.
-Function FlleExlstsZ(path. fname) As Boolean '
Wlth bpplIcation.F~leSearch
.N&arch
.LookIn - -
.Fi leNarae fnane
path
.Execute
Fl leExists2
End With
- .FaundFlles.Count - 1

End Function
Rozdzid27. + Operacje no plikach wykonywone za pornocqkodu VBA 71 1

i9
'm Obiektu Filesearch nle motna wykanystd w celu sprawdzenia, czy istnieje katalog.

Zastosowanie obfektu Filesearch


do wySwietlenia listy plikbw w katalogu
Procedura z listingu 27.1 wytwietla w aktywnym arkuszu listp plik6w z okredlonego
katalogu wraz t rozrniarcrn i datq modyfikacji.

U I n g 27.1. Zastosowanie obiehtu filesearch w celu wyMetetlenia listy plikdw w kataIogu


Sub ListFiles2(
-
Directory 'c:\windcm\Pulpft\"
Wstawienie nagIhk6w
r-1
--
Cells(r. 11 'Nazwa pliku'

-
Cells(r. 21 'Rozmiar"
Cells(r. 3) 'Datalgodzina"
Range("A1:Cl'). Font .Bold True -
r - r + l
With Pppllcatiar.Fi1eSearch
.N&earch
- - '*.**
.Lookln Directory
.F~lename
.SearchSubFolders Fa1se -
-
.Execute

--
For 1 1 To .FoundFiles.Count
Cells(r. 1) .FwndFTles(i)

-
Cellstr. 2) Fileten{.FoundFiles(i))
Cells(r. 3 ) FileOateTime~.FaundFlles(i))
r - r + l
Next i
End With
End Sub

Obiekt Filesearch IgnoIUje mzystkie pliki skrrSt6w systemu Wlndows (pllki

Na W i e CDROM dotqczoneJ do kslqtkl majduje sb bardriej zaawansowana wersja


tej prccedury urnotliwia]pca wybranie katalogu.

Obiekt FiIaSystemObject nalety do biblioteki Window ScriFng Host i zapewnia do-


step do systemu plik6w komputera. Obiekt ten c w t o jest wykonyaywmy na stromch
WWW zawierajqcych skrypty (np. YBSmpr lub JmaSwlpt).M m a z oiego konystat
w Excelu 2000 i wersjach nowszych.
h4echa7im Wiodows S&fl.ng Host jest czqsto -ny do rarpwsrschnianla
komwrowych Wirus6w. dlatego funkcja ta w wlelu srjternach jestwy+qczona.
PmjeMujg apllkacje. M6re bqdq wykorzjapane w wlelu systemach, naleiy zachowd
saczeg6lnq ostrolnoS6.
712 CrqSc5 Vtl* lnne zogodnisni

Dokumcntacjt obiektu Fi 1eSystenObjcct moctna i r r r a l d w intcmccie pod adresem hnp://


mrdnmicrosofl.com/scn'pting.

Zastorowanie obtektu FileSystemObject


do sprawdzenia, czy plik istnieje
Ponits~afunkcja pobiera jeden argument (kietkp wwz z n s m q pliku) i m c a wartoft
True, jeteli plik istnieje:
Function FlleExlsts3(fnanel As emlean

--
Dim FileSys As Wject
Set FlleSys CreateObject('kriptlng.FileSystrrn0bjfft"l
FlleExists.3 F l l e S y s . F l l e E x l s t s ( f n ~ )
End Function

Funkcja twony nowy obiekt F i l e S y s t ~ j e c ot nanvie Fi leSys, a . m p n i e spr~wdLa


wMciwo3t F j 1eExi sts tego obiektu.
Na m e CDROM m e ] do ksl- rnajduje slg w, ktdry demonst~b
vsrystkle trly rnetody spaurnanla. czy plil lstnleje (polecenla m a VB*.
wykorzystanle obiektu Filesearch oral oblektu Fi 1eSystenCbject).

Wykorzystanle oblektu FlleSystemObjtct


w celu sprawdzenia, cry istnfeje kotalog
Ponitaa fhnkcja pobicra jeden argument (katalog) i m c a wartodt True, jeteli ten ka-
talog istnicje:
F m t l o n PathExists2(pname) AS Boolesn
MI FileSys As Obj&

-
Ma FolderObj As Object
Set F l l eSys Create0bject('Scrlpring.FlleSyst~j#t")

-- -
(h E m r Resue Next
Set FolderObj Fi leSys.GetFoldw[pnm)
PathExlstsZ Err 0
End Fvnction

Funkcja padejmuje pr6bq utwo~zenianowego obielctu Folder o nazwie Foldedbj. Je-


2eli wykonanie operacji zakodczy sip pomyflnie, katalog ismiejle. Jetelli powtanie w,
katalog nie istnieje.

Procedura z listingu 27.2 wykonystujc obiekt F i 1eSystmUbject w celu pobrania i ~vy-


Swietlmia Myth infonmacji na temat dostqrrych n w w . Procedura prPtwarza w petli
kolekcjp Or1ves i zapisuje wartaSci r6tnych da9ciwdci do 8rku%taNa rysunkn 272
zapnzentowano wyniki d d m i a pmcedury w systernie zawierajqcp naped dyskietek,
dwa twardc dyski oraz n a p ~ dCD-ROM.Wyhktlane dane obejmujq liter$ napptfu, in-
f o m c j q o got0waSc.i W i a , typ umykenia, nazwq wolurniny cakowity rowiar
oraz iloSC dostcpnego miejsca
Rozdzid 27. * Operacje na piikach wykonywone za pomocq kodu VBA 713

! LMIng 27.2. wyimrrystanle obieMu ffleSysternO@eetw ceL pobranfa I wySwletlenIa informadl


o naHach
Sub hok0riveInfoO
Dim FileSys. Orv
Dim Rnw As Integer
-
Set FlleSys CreateObjea('Scrlptlnq.Flle~stan0bjed")
-
Cells.Clear
Ra 0
&I Error R esm Next
For E x h Drv In FileSys.Drives
Rdw-&+1
--
CellstRow. 1) 0rv.DriveLetter
CellstRw. 2) 0rv.IsReady
Select Case Drv .DriveType
--
Case 0: CellstRow, 3) "Niemny'
--
Case 1: Cells{?cw, 3) Vynienny'
Case 2: CellstQcw. 3) 'Staly'

--
Case 3: Cells(?w. 31 'ST&"
Case 4: Cells(Rcw. 3) 'CD-RCn'
Case 5: CellstRcw. 3 ) 'RaEOysk'
End Select
--
Cells[Rcw. 4) D r v . V o l ~ m e
-
Cells(Rcw, 5) Drv.TotalSize
Cells[bw. 6) Drv.AvailableSpace
Next DN
EM sub

W nlektdnyh wersjach Windows wfa9chwJcl TotalStze aar AvaflableSwce mogq


mmkf4 nlepopfame wartdcr dla napeddw o pojemwJcl pzekraczaJqcejdwa glgabajty.
Taki problem nie wystepuje w systemadh Windows NT, Windcws 2000 lub nowszych
wersjach.

Ponitrza proaxha penehuje katalog Moje adokrmm@( zawarte w nim podkatalogi),


I
psllkujw wszystkich plikbw .xi3 zawierajqcych tekst M e t . Znaledone namy plikow
q dodawane do listy w oknie UserFonn.
Sub FindFilesO
With Ilpplicatlon.FlleSeareh
.H&earch
.Lc&in - 'C:\tbje dokunenty'
71 4 CzqlC VII + lnne zagodnienicl

- --
.SearchWolders True
.Textorproperty 'budtgt"

-
.MatchTextExactly Fa1 se
.Filenam '*.XIS'
.Execute
-
For i 1 To .FoundFile5.Count
UserFoml.ListBoxl.AddIten .FcundFlles(l)
Next i
End With
UserFonnl .Shw
End Sub

Operacje z plikarni tekstowymi


W jeyku VBA kilka instrukcji wejkia-wyjdcia motliwia wykonywanie niskopoziomo-
wych operacji na plikach. Dajq one macznie wipksq kontrolp nad plikami nit zwykk
opcje irnportowania i eksportowania plik6w dostqpne w Excelu. Wyr62nia sip trry metody
dostepu do pliku:
dostep sehenqvjny to met& najbanfziej popularna, pozwalajqca o d c w w a k
i zapisywat,pojedyncze maki lub caIe w i e m danych;
dostep lmowy wykonysttje sip tyko w pn)rpadku programowania aplikacji
bazodanowych (nie powinno sip tcgo robit w jezyku VBA, pbniewat ismiejq
lepsze techniki);
dostep bin- wykorzystywany jest w celu odczytywania lub zapisywania
dowolnego bajtu w pliku, na przyklad podaas operaji zapisywania lub w y h i c h i a
mapy bitowej (ten spos6b jest bardzo m d k o wykorrystywany w jezyku VBA).

Poniewat w j e y k u VBA rzadko wykonyshrje sip losowy lub b i i dostqp do plikbw,


w tym rozdzialt skoncentrujemy sip ria plikach o datepie sekwencyjnym, w ktdrych
wiersze sq odczytywane po kolei, poczipszy od pierwszego. W pnypadku zapisu dane
sq urnieszczane na kohcu pliku.
W metodzie odczytywania 1 zaplsywania plik6w tekstowych oplsanej w teJWqtce
ZastosowanO tradycyjne p o b i e k a n h dannych. Alternatywnie rnoina zastosawaE
wdejfcie obieMowe. ObieM FlleSystemCbject zawiera oblekt Textstream, ktdry rnotna
wykowst* do odcrytywania I l t , zapsywmia plkbw t e k s t w h . ObieM FlleSy~tenObjeCt
nalety do bibl~otekiWrndows Sclpt~ngMost Jak wspomniatem mze5niej, ta wlaSdh&2
Jest m z o n a w Melu systemach ze wqjlm na duie ryzyko rozpwszechniania wirus6w.

Otwieranie plikdw tekstowych \ .

Do otwierania plikbw do zapisu lub odczytu duty instrukcja VBA Open (nie nal* jej
mylie z metodq %en obiektu Workbook). Qdczyt lub zapis do pljku jest rnotliwy tylko
wtedy. jdli wczeiniej plik mtanie otwmty. Instrukcja Open jest uniwenalna i ma doSC
skomplikowanq skladniq:
Open Lcie2ka For tryb [Access dostgo1 Cblckaddl
As Ctlnur~rplib[Len-rumfar-&ardu] '.
-
Rozdziat 27. Operocje na plikach wykonywane za pomocq kodu VBA 715

W Jciezka (wymagany) -zavuiera nazwp i ScieZkq (opcjonalnie) pliku,


kt6ry ma by6 otwarty.
H tryb (wymagany) -mote mieC jednq z ponitszych wartofci:
Append -tryb dostcpu sekwencyjnego, ktdry pomala na czytanie danych
lub ich d&czanie na kodcu pliku;
Input -tryb dostepu xkwencyjnego, ktbry pozwala na czytanie danych,
ale nie ponvala na ich zapisywanie;
Output -tryb dostqpu sekwencyjnego, kt6ry ponvala na czytanie danych
lub ich zapisywanie (w tym trybie zawsze jest twonony nowy plik a ismiejqcy
wczeiniej plik o tej sarnej nanvie jest usuwany);
H Blnary -byb doaqpu lasowego, ktbry pozwala na odczytywanie
lub zapisywanie danych bajt po bajcie;
W Randan -byb dostepu losawego ponvalajqcy na czytanie lub zapis infonnacji
w blokach, kt61ych rozmjar akreila ostatni argument instrukcji Open
- roni ar rekordu.
-
dostep Iopcjonalny) -okreSla mdmj operacji dozwvlonych do wykonania
z plikicm. Mote m i d wartoif Read (czytanie), Wrft e (zapisywanie) lub Read
Write (czytanie i zapisywanie).
-
blokada (opcjonalny) prydaje sit w przypadku utywania pliku jednoczeSnie
.
pnez wielu wkownikbw. Dopuszczalne wartoici to Shared twsD6tdzielonv).
.
L ~ c kRead (blokada odczytu), ~ b c kWrite (blokada zapisu) oraz Lock Read G t e
(blokada odczytu i zapisu).
w nlrmergl iku (wymagany) -numer pliku w zakresie od I do 5 1 1. Aby uzyskat
nastqpny wolny numer pliku, m o m skorzystak z funkcji FreeFl l e (opis funkcji
FreeFt le rnotna mal& w punkcie ,Uqskanie numeru pliku" w dalszej czeSci
rozddahr).
romiar fekordo (opcjonalny) -rozmiar rekordu (dla plik6w o dostqpie
losowyr$ Lub r o n i a r bufora (dla plik6w o d o e p i e mkwencyjnym).

P d u r a odczytywania pliku tekstowego w jqzyku VBA sklada sic z nastwujqcych


hk6w:
1. Otwarcie pIiku za pomocq insmkcji Open.
2 OkreSlenie potycji w pliku zapomocqfunkcji Seek (opcjonalnie).
s.Odaytywanie danych t pliku (za pomoq instrukcji Input, Input t lub Line
Input #).
4 Zarnknigcb pliku za pornocq inmukcji Close- ,
716 Czqg vll + lnne zagadnknia

Zaplsywanle danych do plikbw tekstowych


Proccdura zapisu do pliku tekitowego jest nastwjqca:
1. Mwarcie lub utwonenie pliku za pomocq instrukcji Open.
2 Okreflenie pozycji w pliku za p o m q funkcji Seek (opcjonalnie).
3. Zapis danych do pliku za porn- inmkcji Write # lub Prlnt #.
4. Zamlcniqcie pliku za pomocq instrukcji Close.

Uzyskanle numeru pliku


Wi&szo&5 programistdw VBA po prom pnydziela nwner pliku i podaje go jako nrgu-
m a t instrukcji Open, na przyktad:
Open "nbjplik.txt' For Input As C1

Gdy ta inmkcja rostanie wykonana, w daluej cySci kodu motna sic odw- do
pliku jako do #I. Jettli plik jest otwierany w uasie, kiedy inny jest ju2 otwarty, drugi
plik mtna omaayt jako #2:
Opm "1nny.txt' For Iqwt As $2

Itmyth sposobem uzyskania numwu p l h jest skmiysmie z fimkcji VBA FreeFl 1e w a l u


pobrania uchwytu do pliku. Po wykonaniu tej hnkcji m o m odwlywat sip do pliku za
pomocq miennej. Oto pnyklad:
-
FtleHandle FreeFile
Cken 'djpllk-txt' For Input As Fil&ndle

Okre4lanie lub ustawiunle pozycji w pllku


W ~ c y j n c g od o m u do plik6w rzadko jest potrarbna znajornoS6 bie-j
lokalizacji wewnqtn pliku. Je2eli z jakiegof pwodu taka informacja jest potrrebna,
motna do tego wykonystpif funkcjp Seek.

w VBA sluty do odczytywania i zapisyania danych do plikdw.


Kika instrukcj'i j
Do czytania daaych z plikdw o dostCpie sekwencyjnym shtq tny insaukcje:
Input -odcytuja o M l Iimkq
~ makdw z pliku;
Input f -odczytuje dane do c@ .
m i e ~ y c oddzielonych
h pnecinhmi;
Line I lrput #- odczytuje cab wiast danych, ogranicmy mkanii powotu
lmctki i (lub) wysuwu wiersza.
Rozdziat 27. Operacje no plikochwykonywane za pomocq kodu VBA 71 7

-
Wlsdchvodci lmportamnla 1 d u p o r t m b pllk6w Ckstowych w Excslu
Excel obstuguje t?qtypy plikr5w tekstowych:
- -
CSV(ang. CommaSepafaM Valve wartoScl mzdzlelane prreclnkarni) kolumny danych
q rozdzielane pnecinkaml, a katdy wlersz ko15czysie znalkiem powr~tukarstkl (w niektdrych
narodowych wersjach Excela zarniast przecinka uiywany jest Srednik);
PRN- kolumny danych s$ wyrdwnywane przez pozycle makdw, a katdy W e n 2 kchczy sic
znakiem powmtu karetkl;
-
TXT(plik[ z darpmi rozddelanymi makami tabulacji) kdumny danych sq rordzldane makami
tabulacjl, a kaidy vuiersz kohzy sie makiern p m t u karetki.
Rdba marcla pllku tekstowego za pomocq polecenla Pllk/Ohvdrzczasami powoduje wfWetlenle
Kreatora impom tekstv, kt&y ulaNa hfiniowanie kolumn. Jetell pllk tekstowy jest mzddelany
makami tabulacji lub spacji. Excel razyczaj otwieta plik bez ySwletlanla kreatora. Kreator konwersji
tekstu na kolumny [dostqpny pa wybrardu polecenia Daneflekst jako kolumny) jest ldentyczny.
ale ddala dla danych zapisanych w pojedynczej kolumnie.

Do zapisywania danych w plikach o d o s t ~ i sckmncyjnym


e sWqdwie instrukcje:
Write #- zapisuje do pliku ciqg wartoki. Wartdci sqod siebie oddzielom
przecinkami i ujge w apostrofy. W przypadku zakohczenia instrukcji dndnikiem,
po w d c i a c h nie jest wprowadzana sekwencjla mak6w CR LF. Dane zapisywane
do pliku za pmnoq imtrukcji Write # zazwyczgj qodczytywwe zpliku za pomocq
instrukcji Input #.
Mrrt #-zapisuje do p l h ciag wattoki. WartoSci rqod siebie oddtielom makim
tabulacji. W p q p d k u zak06czmia insmkcji mdnikiem, po wartodciach nie jest
wprowadzana sekwmcja makdw CR LF. Dane zapisywane do pliku za pornocq
instrukcji Print # mzwyczaj sqodayywane z pliku zapomocq instrukcji Line
Input # tub Input.

Przyktady wykonywania operacji na plikach


Pnyktady z tego padrozdriah demonstnljq r6me techniki wykonywania dziaM z pli-
kami tekstowymi.

Importowanis danych z pliku tekstowega


Pa&zy ptqidd d-je dam z pliku tckstoweg~,a a w i e utnicszcia kaMy wimz
danych w osobnej kom6rce @caqmzya d aktymej komdrki]:
Sub InportDataO
Dpenr "c:\rlndorrs!Pulpit\textfile.txt' For Input k #I
r - 0
co lhtll EOF[1)
L l r r Input #l. data
-
AetiveCell.Offset(r. 0) data
r - r * l
L m
Close f l
End Sub
718 CzefC VII + lnne zagadnienio

W wiekszo$ci prypadk6w ta proeedura na niewiele sip przyda, poniewat katdy wiersz


danych jest a u c a n y do pojedynczej kom6rki. Motna jednak wybraC polecenie Dane/
Tekst jako kolumny -w6wczas tekst zostanie pmeksztatcony w taki sposbb. t e dane
majdqsip w oddzielnych kolurnnach.

Eksportowanie zakresu do pliku tekstowego


Procedura z listingu 27.3 zapisuje dane z wybranego zakresu arkusza do pliku teksto-
wego CSV.

Ustlng 27.3. Zaplsywanie danych z zamaczonego zakresu arkusla do tekstowego pliku CSV
Sub ExportRange( )
Dim Filename As S t r l n g
D i m NumRows AS long. NunCols As Integer
D i m r As Long, c As Integer
D i m Data

-- -
Dim ExpRng As Range
Set ExpRng Selectton
NumCol s ExpRng.Co1urns .Count
-
NmRms ExpRng.Rm .Count
Filename "c: \windows\Pulplt\textfile.txt'

- -
Open Filename For Output As #l
For r 1 To NurnRows
For c
- 1 To NunCals

-
Data ExpRng.Cells(r, cE.Value

If c
Else
-
I f IsNuneric(0ata) Then Cata Val (Data)
IfIsEmpty(ExpRng.Cells(r. c)) Then Data
NumCols
Write $1. Data:
Then
- "

Write #I. Data


End If
next c
Mext r
Close #I
End Sub

W procedune dwukmtnie wykanystano funkcjq Write #. Pienvsza instrukcja kohczy


sie frednikiem, a zatem sekwencja CR LF nie kdzie zapisywana Jednak dla ostatniej
komdrki w wienzq w dmgiej instrukcji Write # nie utyto Sndnika. dzipki czemu na-
stppny zapis do pliku zostanie urnieszczony w nowym wierszu.

Do q h i a zawartoki kom4rek wykorzyslalern zmienqo nanvie Data. Jeteli kom6rka


zawiera format liczbowy, mienna jest p n c k s z t a h a na l i c e . Dzipki tej czynnoSci
dane linbowe nie zostanq zapisane ze &mi cudtystowu. Jeteli kom6rka jest pusta,
wartoSC jej wlaiciwofci Value wynosi 0. Z tego powodu kod sprawdza, cy komdrki nie
sq puste Iza pomocq funkcji IsEmpty) i wstawia pusty c i makdw
~ zarniast wartdci 0.
Ten ptzykkd jest dostgpny na piycie CDROM dotqczmej do kslwi.
Rozdzid 27. + Operacje na plikach wykonywane za pomocq kodu VBA 719

Zawart& uzyskanego pliku pokazano na rysunku 27.3.

Munek 27.3.
Ten plik tekstowy
zostai wygenerowany
za pomocq kodu VBA

lrnportowanie pliku tekstowego do zakresu


Procedura z listingu 27.4 odczytuje dane z pliku tekstowego utwmnego w p o p d n i m
przykhdzie. a nastqpnie. zapisuje uvskane wartoici, zaczynajqc oil aktywnej komdrki.
~ o odczytuje
d katdy m k i przetw- wiersze danych w celu wyszukania przecinkbw
oddzielajqcych kolumny i usuniccia cudzyslo~6wprzed mpisanitm danych do arkusza.

Udng 27.4. Odczytywanie pliku tekstowego z lfstingu 27.3 i zapisywmie wEHtuScl, pocawszy
od aMyrmej komdrki
Sub ImportRangeO
Dim ImpRng As Range
Dim Filename As Str'mg
Dim r As Long. c As Integer
Dim txt As Strtng. Char As String *1
Dim Data
Dim i As lrrteger

-
Set I w n g ActfveCell

-
On Errar Resune Next
F i l m m e "c:\ w l n d ~ s \ P u l p i t l t e x t fle.txtU
Open Filenarne For Input 4 #l
i

I f Err 0 0 Then
M s m x 'Hie maletiono pliku: ' L Filename, v b t r i t i c a l . 'BUD"
Exit Sub
End I f
r-D
c-0
-
t x t '"
Applicatlon.kreenupdating False -
Do Until EOF(1)

--
LIne Input $1. Oata
For 1 1 To Len(Data)

-
Char HidfData. i. 11
I f Char '.' Then ' przecinek
-
PctiveCell .Offsettr, cl txt
c-C+I
txt " --
--
ElseIf 1 Len{Data) Then ' znak t d c a wiersza
I f Char o Chr(34) Then t x t txt & Char
Active@ll.Offset(r, c) t x t
720 CrgfC VII + lnne zagadnienia
i
txt " - I
ElseIf Char 0 Chr(34) Then ' mak d t n y od cudfysla~~
-
txt txt 6 Char
End If
kxt 1

L
m
-
c-0
r r + 1
Close #l
Application.kreenupdating True
End Sub

Rbcedura pokazana pawytej ma WM&: nie potrsn poprawnie prretwarzd danych


zawierajqcych pnecinki lub maki cudzysbwu. Dodatkow zaimportowane daty b@q
otoczone znakami #. na pnyktad #2001-0512#.

8w Ten przyktedjest dostepmy na piycle CDROM dotqczonej do ksimi.

mma
Rejestrowanle wykonystania Excela
Kod zepmentowany w tym punkcie zapisuje dane do pliku tekstbwego podczas ka2dej
operacji uruchamiania i zamykania Excela Aby zaprncntowana procedura dziatala nie-
zawodnie, musi by6 umieszczona w skomzycie, kt6ry otwiera siq za katdyrn razem,
kiedy uruchamiamy Excela. Idealnie nadaje sic do tego osobisty arkusz makr. Ponitsza
pmedura jest umieszczona w module kodu obiektu Thi sworkbwk i wykonuje siq podczas
otwierania pliku:
Private Sub Workbook-Open0
Open Appl icatlon.Path 6 '\excelusage.txt' -
For Append As #I
Print bl. 'U~chaniana ' & Naw
Close X1
End Sub

Rocedura dodaje wiersz do p l i h o nazwie excelwage.~rt.Nowy wiern &era b m


datq i godzinp i mote mieC nastcpujqcq postat:
Umhaniono 03/16/04 9:27:43

Pokazana ponitej procedura wykonuje siq podczas zamykania skoroszytu. Jej dzidanie
polega na dodaniu do pliku tekstowego wiersza zawierajqcego stowo Zakoricrono wraz
z bie4cq datq i godzinq.
Private Sub Workbook-BeforeClose(Cance1 As Boolean)
Open Appl tcatton .Path L "\excelusage.txt" -
For Pppend As #l
Print #l. 'Zakohczono ' 6 Ncw
Close #1
End Sub
Rozdtiot 27. Operacje n a plikach wykonywane za pornocq kodu VBA 721

Fittrowanie pllku tekdowego


W pnykhdzie zaprezentowanym w tym punkcie zademonstruje spos6b jednoczesnego
przetwarzania dw6ch plik6w tekstowych. Procedura F i 1t e r F i1e odczytuje dane z pliku
tekstowego (inrfe.&r~)i kopiuje wienze zawierajqce okreilony ciqg mak6w do drugiego
pliku tekstowego (output.trt).
Sub Fi lterFi l e t
Open " i n f i l e . t x t W For Input As #1

-
Open 'output.txt' For Output As +2
TextToFind "Styczeh'
Do While Mot EOF(1)
Line Input #l. data
I f InStr(1. data. TextToFind) Then
Print 82. data
End If
LOOP
Close
End Sub

Ten pnyktad jest dostgpny na plycie CD-ROM dotqcmnej do ksleki.

lmportowanie wiecej nii 256 kolumn danych do skoroszytu


Doit cqsto pojawia sic p o a e b a zaimportowania pliku tekstowego zawierajpgo wiwej
nit 256 kolumn (to maksymalna liczba kolurnn Excela). Pr6ba otwarcia takiego pliku za
porn- polecenia PliWOtwdrz powoduje dgnorowanie danych za kolumnq 256 (nawet bn
wyiwietlenia ostrzeZenia). Listing 27.5 pokazuje zmodyr~kowanqprocedwy IwrtRange,
kt6rq zaprenntowalern we wcze~niejszejczeici rozdziah. Procedura odczytuje dane
z pliku tekstowego, a nastqpnie importuje dane do nowego skoroszytu. Jettli dane za-
wierajq wiCcej ni2 256 kolurnn, dodawvane sq nowc arkusze.

UIffng 27.5. Czytanle den)rch z pllku tekstowego I irnportowanle ich do nowego sk-szyhr
Sub ImportLongLines( )
' Importuje p l i k tekstowy zawierajecy ponad 256 k o l m danych

Dim IlnpRange As Range


Dim r As Long. c As Integer
Dim CurrLine As Long
Dim Data As String. Char As String. Txt As String
D i m i As Integer
D i m CurrSheet As Worksheet

Utworzenie nwgo skomszytu zaui erajqcego jeden arkusz


Workbooks.Add xlWorksheet

Open ThisWorkbook.Path & '\longfile.txt' For Input As #1


r - 0
c-0
- -
Set InpRange AdiveWorkboak.Sheets(1) .Range('Al')
Application.kreenUpdating False
' Ddlczytanie pienszego wiersra i wstawienle n~wycharkuszy. je9li ~ e 5 taka
t
potrzeba
-
CurrLine CurrLine + 1

For t--
Ll~neI n p l t # l , Data
1 To LencData)
Char Mid(0ata. i.1)

-
Czy jest zbyt duto k o l m ?
I f c 0 0 And c Mod 256 0 Then

-
With ActiveUorkbwk.Sheets
Set CurrSheet .AOd(after:-.Sheets( .Count ))
End With
-
Set ImpRange CurrSheet .Range{ 'Al")
c - 0
End If

- '.'
Koniec pola?
I f Char Then
-
--
ImpRange.Offset(r, c) Txt
c c 1
Txt "
Else
Pominiecie cudzyslowOw
-
-
I f Char 0 Chr(34) l h n
Txt Txt 8 Mid{Data. I.1)

Koniec wienza?
If i = Len(Data1 Then
ImpRange.Offset(r. c) - Txt

-
c - c + l
Txt '"
End I f
End If
Next 1

' Ddczytante pozostalych danydr


c- 0
- -
CurrLine 1
Set ImpRange ActtveMrkbook.Sheetstl1 .RangetmAl'1
r m r + l

- -
Do Until EOF(11
Set ImpRange ActtveHork~.Sheets(ll. R m t "All)
CurrLine Curdine + 1
Line Input bl. Oata

--
Application.StatusBar
For 1 1 To Len(Data1
-
'Przetwananie wiersra " h CurrLine

Char Md(0ata. 1. 1)
Zbyt duio koltnm?
IfcoOPndcM256-DM
c-0
-
Set InpRange I m n g e . Parent .#ext.Range('A17
End I f

I f Char- '.'
Konfec pola
Then
InvRam.Mfset(r. c l - TxU
c-C+1
! Rozdzial27. Operacje no plikach wykonywone za pamocq kodu VBA 723

Else
Txt - '"

P a i n i e c i e cudzys+&w

-
If Char o Chr(341 Then
Txt Txt & ~id(0ata: i 1) .
-
Koniec mersza?
I f i Len(Data1 Then
ImpRange.OffsetW. c) - Txt

End If
c-c+1
Txt - .,"

End I f

c 0-
Next i

Set ImCRarqe = Acti vellorkbock .Sheets ( l 1 .Ranget "Al'l


r - r + l
LWP

SprzPanlie

-
'

- -
Close #l
Aopl ication.ScreenUpdating T r ~ e
A~llcation.StatusBar False
End Sllb

Prooedura sktada sir; z dw&h czpgci. W piemszej odnytywany jest pierwszy wiersz
danych i d d w a n e nowe arkune. jefli istnieje taka koniecmoff. W drugiej odczyty-
wane sq pozostak dane z pliku teksrowego. Przyjqlem, t e wszystkie wiersze zawiemjq
maksymalnq liczty kolumn.
I Ten przyklad jest d o s t w y na plycie CDROM dolqezonej do ksiqtki wraz z pllkiem
I teksto*ym zawierajqcyn 100 uierszy, kafdy po 6 W kdurnn danych.
I
I
Ekspartowanic zakresu do pnku HTML
i

hykM z tego podr~dzhh demonsbujc w jaki spas6b wyeksportowat talcns korndrek

I do pliku W M L . lak wisdom, plik HTML jest plikiem te).stowym zawitrajqcym specjalne
maczniki formatowania, ktdre opisujqsposdb prezentacji informacji w pmglqdarce.

Dlaszcgo nie skorzystamy z polecenia Excela PlWZbopisr jab Jtronq sieci Web? Po-
niew& zaprezemmwana pmcedura ma istotnqzaletq: nie twony skomplikowanegokodu
WML. Kiedy za parnoq procedury ExpartToHTML wyeksportowa~cmzakres 70 kom6rek,
uyskatem plik o rozmiane 2,6 kB. Nastqpnie do tego samego zadania wykorzystakm
polecenie Excela PliR/Zapisz jnko s t r q sieci Web. Uyskany plik mid rozmiar 15,8 k3
-ponad szesf,razy wiqcej. Tneba jednak pami@&, ke pprocedum ExpartToHlNL nie za-
pisuje formatowania korndrek Jedyrte zapispane elementy formatowania to pogrubienie
i pochylenie. Poza ~ y m
istrnieje dodatkowe powme ograniczenie: pmcedura nie obstuguje
scalonych k o m h k .

h e d q ExportToKML 2 listingu 27.6 moma wykorzystd j a b podstawe do twonenia


pliku HTIWZ, ktdry p 6 h i j dostosujerny do indywidualnych p o e b .
Sub ExportToHTm( 1
Dim ws As Uorkshcct
Dln F i l e n m As Variant
Dim mOpenTag As String, TDCloseTag As S t r t y l
Dim Cellcantents As Strlng
Dim Rng As R a w
Dim r AS Long. c As Integer

'
-
Wykorrystanie zamauwlego zatresu k&r&
Set Rng Appl ication. IntersecttActiveSheet .UsedRange. Selection)

'
-
Pobranle nazny p l i k u
F1lename Appl iation.GetSaveAsFllenwR(
InitlalFi1eLme:-"vrange.htrn". -
-

-
fileFi1ter:-'HX Files(*.hun).
IfFilename False Then E x i t Sub
*.htn")

Otwarcle pllku tekstowego


Open Filename For Output As #I

' Zapisanle m m t k a <TABLE>


Print #l. '<TMLE 9CRDER-1 CELLPAWING-3'

-
Pnetwarzanie tcmbrdc r pet11
For r 1 To Rng.Raws.Count

- -
Print #I. '<TR>'
For c 1To Rng.Colums.Cant

-
TOOpenTag "<lD ALIGN-RIMT,'
fOC10seTag *<nb"

--
I f Rng.Cells(r. c).Fmt.Bold Then
TCOpenTag TWpenTag & 'cB>'
TKloseTag '<ID' L TDCloseTag
End I f

--
I f Rng.Cells(r. c).Font.Itallc Then
rOOpenTag TDOpenTag L '<I>'
iOCloseTag '</I>' 8 TOCloseTag
End I f
-
Celltontents Rng.Cells(r, c).Text
Prlnt #I. -Tag k Cellcontents 6 TDCloseTag
Next c
Print #l. ' C A W
Next r
Zarmkniecle tabel i
Print #I. '<ITABLE>"

' Z a * n l ~ l ep l l k u
Close #l

I n f o m c j a dla utyttowrlka
MsgBox Rng.Count 6 " Lambrek wyeksportwno do p l i k u ' & Filmanre 1 '.'
End Sub

Ten pryktadjest d 0 na phcie ~ Wqcmmj .]d.W.


~ CD-ROM
.
Rozdzial27.6 Operacje no plikachwykonywane ra pomocq kodu VBA 725

Najpiem pmcedura okreSla zakm do wyeksportowania, odslukujqc punkt przecipeia


zaznacmego zakresu i wykonystanego obszaru w arkuszu Dzipki temu motna myskat
pewno$& te nie bdqprzetwarzane cak wiersze lub kolumny. NasQnie utytkownik jest
pytany o nazwp pliku, po czyrn plik zostaje otwarty. WitksmSC dziahh wykonywanych
jest w dwbch pqlach For . .. Next. Kod genmje odpowjednie mcznlki H'IML i zapisuje
informacje do pliku nkstowego. Na koniec nastqpuje zamknipcie pliku i wySwietlenie
komunikatu z podsumowaniem.
Na rysunku 27.4 pokazano zakres w arkuszu, a na rysunku 27.5 ten Sam pikes w prze-
glqdarce, po pmeksaatceniu na HTML.

Rysunek 27.4.
Zakres w arkuszu,
ktdry zostanie
pneksddcony
na pljk HTMC
726 CzefC VII lnne zagadnienio

Eksportowanie zakresu do pliku XLM


Zaprezentowany ponhj pnykhd wyeksportuje takres Excela do prostego pliku XML.
Jak wiadomo, w fwmacie AX4L m z n i k i otaczaj~wszystkie elementy danych. Procedura
pokazana w tym punkcie jako macniki XML wykonystuje etykiety zapisane w pierwszym
wicrsm arkusza. Na rysunku 27.6 pokazano z a h w arkuszu, natomiast na rysunku 27.7
plik XML wyiwietlany w przeglRdarce Internet Ecplorer.

1.7.98 L. ~ d - n
3594 d b ~ m c b u j l a

Rysunek 27.6. Dane z tego zakresu m a n e pmksztakone na f m a t XML

Ryrunek 27.7.
Dane z arkusza
pa p k s z t a k e n l u
na fonnat XML

- Choclai! w M u 2003 ulepuorwr obslugq fomratu XML nie m h a hvorryE pliku MGlL
Z dclvolnego z&su da-h be2 zdefiriowania pliku adwzorowali (schernatu) dla danych.
Rozdzid27. + Operocje no plikoeh wykonywone za pomocq kodu VBA 727

Pmoedtq ExpM.tToXK p m t u j e listing 27.7. Jak motna zau- ma ona wiele -1-
ncgo z pracedurq ExportToHTML p o h q w poprzbdnim podrozdziale.
Usnng 27.7. Eksportowanie rakresu Excela do prostego pliku danych XML
Sub EgortToXHL(
Dim Filename As Variant
Dim TDCpenTag As String. TDClaseTag As String
Dim CellContents As St-ing
Dlm Rng As Range
Dlm r As Long, c AS Integer

-
Ustawienie zakresu
Set Rng Rawe("A1:Lll'I

'
-
Pcbranie nazwy p l l k u
Filename ~ltcation.GetSavekFlle~me(
1nitialFileFlame:-*mjzakres.ml".
-
f i l e f i l t e r : - " X M Flles(*.ml I. *.GI*)
-
If F i l e ~ m e False Then E x i t Sub

' W a r c l e p l l k u tekstcwego
Open F i l m a m For Output As tl

Zap1 sanle znaczni ka c m l >


P r i n t #I. 'Qml v e r s i m " " l . 0 " enccding-"windm- 1250"' standalone-""yes"'?>"
P r i n t F1. " Q l s t a P r a c c m i t w m1ns:xsi-"Mtp://mw.w3.orq/20011 -
XHLSchena-instance">'

-
Przetuarzanie k d r e l : w pet11
For r 2 To Rng.Rows.(bunt
P r i n t tl. 'cPraca*ll t>"
-
For c 1 To Rng.Cclums.Eount
P r i n t d.1. '<' 1ling.Cells(1. c l 8 ,'":
If IsDate(Rng.Cells(r. c ) ) Then
P r i n t #l. Rng.Cellsk. c):
Else
P r i n t bl. h g . C e l l s { r . c1.Text:
End If
P r i n t #I . 1 Rng.CelTs(l, cl 1 ">"
"<I"
Next c
P r i n t #l. '+'Practknik>'
Next r

Zankniecie tabelr
Print $1. * < I L I ~ M P r a c a * rkw'
i

M n I @ e pliku
Close #1

' MySwietlenic k m i t a t u
~ s g Rng.Rm.tount
h -
1 1 ' uierszy wyeksportcwam 6 p l l k u ' 6 F i l m m e
End SUD
Operacje na komponentach
jezyka VBA
W tym rozddale po w ,jak pisaf kod w j ~ k VBA,
u ktdry dziah z elcmtntami pmjektu
VBA. Okate sip, tc bcz wipkszych pmblern6w motna stwonyC kod VBA dodajqcy
moduly, genmjqcy inny kod VBA lub nawet cworqcy fonnularze UserFomw , locie".

Podstawowe informacje o f rodowisku IDE


-
!bodowisko IDE (ang. IntegratedDeveIopment Environment zintegrowam Srodowisko
pmgramisty) jest w istocie interfejsem autornatyzacji OLE edytora Y h a / Bmic. Zawiera
model obiektdw, kt6r-y udostepnia kluczowe elementy projekt6w VBA. Gdy za pomocq
polecmia TooWReJerencesedytora YisvaI Basic zostanie zdefiniowanie odwotanie do
biblioteki Miuasofl Visual Basicfw Applicution Elrtensibi!ity, utytkownik zyskuje dostq
do obiektu VBIDE (ad tej chwili rno* deklarowaf jego obiekty skhdowe) oraz do wielu
predefiniowanych stdych Srodowiska IDE.Dostep do obiektdw Srodowiska IDE motna
wbSciwie uzyskaf &z tworzcnia odwotania, ale w takirn pnypadku nie jest m A i w e
wykorzystanie stalych w kodzie ani deklamwanie specyficmych obieMw, kt& o d w h j q
sic do komponentdw Smdowiska IDE.

C >4 Pcdstawowe Infomacje na temat automatyzacji OLE rnoha maletC w rozdrIab 20.

Po zapomahiu sip ze sposobem dziahia modelu o b i i b w M o w i s k a U)E, rnotna pisad


kod wykonujqcy r6tnorodne dzialania, na przykw:
m dodawanie i usuwanie modul6w VBA,
wstawianie kodu VBA,
730 Czete VII + lnne zaaadnienia
-
W a h informacja dla utytkawnik6w Excola 2062 1 Excela 2003
Jetell utywarny Excela do tworzenia apllkacjl, Mere bqdq wykomystywene przez innych, powinniSmy
pamiqtd, t e w Excelu 2002 wprowadzono lstotne zmiany. W celu minirnallzowania ryzyka roz-
powszechnienia wirusdw Microsoft znacznie utrudnil modylikowanie komponent6w projektu VBA

r
za pornocq makr. Pr6ba wykonania procedur zaprezentowanych w tym rozdziale mote spowodowd
wyfwietlenie nastepujqcego komunikatu o wdzie:

F!--.1OW:

~ m a s ~ p l . N - ~ ( w ~ n ! - i

- , I Dd 1 w I
WSwietlanie tego kornunikatu zaleiy od ustawlenia opcji w oknie dlalogowym Zabezpieczenia

ficela (dostepnego po wybraniu polecenia N a ~ a / M a l o P / Z ~ ~ e n l Opcja


a ) . Ufgi dostepowl
do pmgramu Visual Basic ~rojec?jest domyflnie wytrlczona. Nawet jeieli urytkownik ufa makrom
zapisanym w skoroszycie, modyfikowanie projektu VBA za pornocg rnakr bedzie nlernotllwe, gdy
ta opcja jest wylqczona. ZwrdCmy uwage, t e ustawienie to dotyczy wsrystkich skoroszytdw i nie
rnolna go zrnienid tylko dla okreilonego skoroszytu.
Do wart&i oplsywanegD pmykj ustawienia nie rnotna uryskaC bezpornnlego dostepl. Jedynym
sposobern jego wykr)cia jest prdba uzyskanla dostvpu do obiektu YBPmject, a nastqpnie spraw
dzenie, czy wystqpii Mqd. Spos6b ten pokazano w ponitszym przykladde:

-
On Error Resune Next
Set x ActiveWorkbwk.VEProject
If Err 0 0 Then
HsgMx "Ustabtienla zabezpteczeli w twolm systmie unlanotllwlaj~uruchaienie -
tego makra.'
E x i t Sub
End If
Nle mrystkle przyklady zapemtowane w tym rordziak powinni uruchamla6 rwykll utytkownicy.
Wiele z nich sluty do wspomagania twortenia pmjekt6w przez programist6w. Dia takich pojeM6w
naleiy wt;)c@ opcje Ufaj dostqpowl do programu VJsual Basfc Proj%ct.
d

Madel obiektbw jrodowiska IDE


Programowy dostw do Srodowiska IDE wymaga pozurnienia jego rnodelu obiekt6w.
Obiektem, kt6ry znajdujc sip najwytej w hierarchii, jest VBE ( V h a l Basic Environment
- Srodowisko Visual Basic); oczywifcie zawiera on innc obiekty. Uproszczonq wenjp
hierarchii obiektdw IDE zapmentowano poni2ej:

' Nazwa opcji Ufij d o s t m i dopragramv VisualBmic Prqkijest myl- b I 3m.c Project nie jest
progwncm, a zatem opeja ta powinna m i d n m U f a j p r o g r a m m u d o s t w i doprojektu Visual Basic
-m.rtum.
Rozdzial28. Operacie na kom~onentachiezvka VBA 731

Oeslgner
Property
Reference
Window

,<ST$*
W tym razdzlale zignorowano kolekcj? Uindcws z blbliotekl Ertensibilityoraz kolekcje
CmandBiirs, poniewaz w mnlejsrym stopniu przydajq siq one programistorn Excela.
Wigkszog materialu w rozdziale poSdecono obiektowi VBPmject, kt61yjest bardzo
przydatny. Trzeba jednak pamieta6 o uwagach przedstawionych w rarnce .Waine
informacje dla utytkownik6w Excela 2002 i Excela 2003'.

Kolekcja VBProjecfs
Kakly atwarty skomszyt lub dvdatek jest reprezcntowany p m z obiekt VBProject. Aby
uzyskat dostep do obiektu VBProject ze skoroszytu, nalety utyC wtafciwdci VBProject
obiektu Workbook. Na pnyktad wykonanie poni*ych instrukcji spowoduje utwonenie
miennej obiektowej reprezentujqcej obiekt VBProject aktywnego skoroszytu:

-
D i m VBP As Wroject
Set VBP ACtiveUorkbook .V3Pmject

Jefli wystslpi bfqd podczas pr6by wykonania instrukcji Dim, naleiy spr?nvdziC czy dodano
d w d a n i e do biblioteki Micrarofr Visual Bmicjor Applications Ertensibilip.

M y obiekt VBProject zawiera kolekcje obiekt6w odpowiadajqcych komponentom


projektu VBA (formulam UsarForm, mdufy, moduly klas lub moduly dokumentdw).
Jest to kolebcja VBCamponents. Obiekt YBProject zawiera takte kolekcjc References,
kt6ra reprezentuje biblioteki wykonystywane w projekcie.

<w Nle motna bezpolrednio dodawaC nDwych e l m t b w do kolekcji YBProjects. Nalety


to wykonaC poSrednio, uhwerajqc lub twonqc nowy skomszyt w Excelu. W ten sposdb
do kolekcji VElProjects nostale autornatycznle d&ny nwryelerrmt. Podobnie nle moma
bezpoSrednio usungC obiektu VBProjKt. Zamknivie skoroszytu autornatycmie usuwa
obiekt VBPmject z kolekcj~.

Aby uryskaC dostep do kolekcii YKarponents, nal- wykonystat wMciwoSC VKm-


nenis, podajqc numer indeksu bqd2 nanvg. ~onikszeInst;ukcje dcmonstrujq dwa sposoby
uzyskania dostipu do kornponentu VBA i utworzenia zmiennej obiektowej:
Set IlsC
Set W
-- lhisbbrlrboolt . V B ? r o ~ e c t . V ~ e n t s ( l l
I h i s W o r k W .VBPro5ect.VBCcmxnents(")lodulel")
732 C Z VII~ + Inne mgadnienia

Kolekcja References
Kafdy projekt VBA w Excelu &era kilka odwdah. Odwdania pmjektu m o h a prze-
glqdak. dodawak lub usuwat za prnq polecenia Tools/References (rysunek 28.1).
Wszystkie projekty zawierajrl jakid odwobnia (np. VBA, Excel, OLE Automation, czy
tet Microsofr OficeObject Librmy). Ponadto rnotna je dodawat w m i q potszeb.

Rysunek 28.1.
W oknie dialogmyn
References
Mwietlajaje sig
oclwofania pmlckhr

Opaacje z odwdaniami projektu motna takte wykonywaC za porn- kodu VBA. Koldtcja
References zawiera obiekty Reference, kt6n majq odpowiednie whkiwofci i metody.
Na przykM pokazana ponitej procedura wyiwietla okno informacyjne z wMciwo8ciami
Name. Descrlption oraz F u l l Path dla katdego obiektu Reference aktywnego projektu:
Sub L i s t C f e r m s O

- ..
Dim Ref As Reference
nsg

--
For Each Ref In ktiveWorkbool:.VBhject.Refemces
Msg Msg 6 Ref.Name 6 vbCrlf

-
Msg Msg 6 Ref.Oescripticm & vbCrCf
Msg Msg.6 Ref .Fullpath 6 vbCrLf & vbCrLf
Next Ref
HsgBox Msg
End Sub

Efekt dziahia tej prmdury dla akt)Mmego skwotzytu z sz&ioms odwdaniami po-
kazano na rysunku 282.

(.V-
-- Reference, jej dddanie wyrmga zdefiniowania odwotania do blblioteki VBA
octenslbi!lty.W pzypadku zadeklarowania obiektu Ref Jako zrnlsnnej og6lnego typu
Object, odwdanie do biblioteki VBA Extensibilitynie jest potnebne.

Odwdanie mom t a k t ~ dodd ra pomoq j&ej z dwdch metod klasy Reference. Maoda
AddFrorrFi 1e ponvala dodaC odwohnie, kiedy sq mane nazwa pliku i katalog biblioteki.
J e t l i jest many globalny identyfikator biblioteki (GUID), nalety skorzystat z metody
AddF rwnGuid. Wivej informacji na ten temat majduje sit w systemic pomocy.
Rozdziat 28. + Operacje na kornponentach@yka VBA 733

WySwietlanie wszystkich komponent6w


projektu VBA
Roc& ShowCamponents z listingu 28.1 pmtwarza w wli wszysdcie komponmty VBA
w aktywnym skomzycie i zapisuje do arkusza namt koinponcntu, typ kornponentu
oraz lic* wierszy kodu w module kodu kornponentu.

Slrb Shc*CcnpanentsO

- -
Dim \rgP As VBPrOdect
Set V3P ActiwWo&bod:.YBProject
NlmCcmponents ~ P . V ~ e n t s . C o u n t
-
t e l l s . Clearcontents
For i 1 To NMConponCnts
#am
-
tells(i. 1) 11BP.Wqmnents(tJ.Nane

TYP
Select Case VBP.rlBC0npOnents(iJ .Type
Case 1
-
cells(i. 2 ) 'Mudu'l'
Case 2
-
Cells($. 2) 'Mcdut klasy"
Case 3
-
Cells($. 2 ) 'Userform'
Case 100 ,

-
Cells(1. 2) 'Hodul dokuentu"
End Select

Next l
-
Liczba wlerszy kodu
Cells(1. 3) V B P . V B C o n p o n w t s i f ) . ~ l e . C w n t U f L t n e s

End Sub
734 Czgg VII + lnne zagadnienia

Wynik dziatania procedury ShouComponents pokazano na rysunku 28.3. W tym przypadku


projekt VBA zawierat pip5 komponent6w i tylko w jednym z nich by1 niepusty rnodut
kodu.

Rysunek 28.3.
Wynik wykonania
procedury
Sho components

b.pa Ten pnykfad jest dostepny na Wie CDROM dotqcmnej do kslqtki. Zawiera
c
-, odwohnie do blblioteki V8.4 &renslbillty.

Zastepowanie modulu uaktualnionq wersjq


hzykkid z tego podrozdzialu pokazuje, w jaki spas6b - konystajqc z metod obiektu
VBtomponent (Export, R m v e o m Import) - zastrlpiC modul VBA innym modukm
VBA. Procedura ma t a b zastosowanie praktycme. Na pnykhd mote sic zdanyt, t e
po instalacji skoroszytu p m z grupe utytkownik6w oka2e siq, i t rnakra zawierajq blqdy
i trzeba je poprawit. Poniewat utytkomicy pracowali z aplikacjq od jakiegoi czasu.
zastslpienie calego skoroszytu jest niewygodne. Rozwiqzaniem w takim przypadku jest
dostarczenie utytkownikorn innego skoroszytu, zawierajqcego makro, kt6re zastqpi rnoduf
VBA zaktualizowanq wersjq makra tapisanego w pliku.

Pokazany pnyklad sklada sic z dw6ch skoroszytbw:


SkormyrU.tkawniko.xls -zsiwiera modul Hodulel. kt6ry trzeba zaktualizowaC;
zmtqp moduLxls -zawiera procedury VBA umotliwiajwe aktualizacj~modutu
Wul el w skoroszycie SRorbnyrU+tkowniknxls.
Procedura Beginupdate z listingu 28.2 jest zapisana w skoroszycie zmtqp modulxlr.
Skoroszyt ten nalety zatem dost- utydtownikom skoroszytu SkoroszytU~tkownC
ka.xls. Najpierw nastqpuje sprawdzmie, czy otwarto skoroszyt SkomsrytU~rkownikaxls.
Potem wySwietla siq inforrnacja o planowanym dzidaniu procedury (rysunek 28.4).
Rozdzial28. + Operacje no kornponentochjqzyka VBA 735

-
Sub @eginUpdate()
Filename "SkoroszytU2ytkownika .xls'
' Uaktywnienie skoroszytu
On Error R e s w Next
Warkbooks(Fi1ename) .Activate
I f Err 0 Then
MsgBox Filename I' musi b y t otwarty!", v b c r i t i c a l
E x i t Sub
End If

--
Msg "Makm zastepuje modul Hcdulel w skoroszycie SkomszytUtytkcwnlta.xls '

-
Msg Hsg & "jego z a k t u a l i z w o * wersjq.' IvbCrLf L vbCrLf
Hsg Msg & 'Klikni j OK. aby kcntynuowat."
IfMsgBox(Msg, vblnfonnation + vbOKCance1) vMK Then -
Call R w l a c e M u l e
Else
MsgBox "Modul n l e zostal zastapiony!', v b c r t t i c a l
End If
End Sub

Kiedy uZytkownik kliknie OK, wywchna zostamie procedura Replacenodule (listing 28.3).
Jej w y k o n a n i e p o w o d u j e zastqpienie istniejqcego modulu Module1 w skoroszycie Skoro-
szytUiytkownika.xls zaktualizowanq wersjq zapisanq w s k o m z y c i e zrrstqp moduf.xls.

lkting 28.3. Zastqplenie mod& kodv jego poprawlanq wersjq


Sub Replacenodule0

-
Eksport modulu M u l e 1 z tegn skoroszytu
Filename ThisWockbmk.Patn 6 "\tempmodxl~x.bas'
ThlsUorkbmk .VEProject .YBCcnponents( - W u l e l ' ) -
.Export Fi lenam
I
'
-
Zastapienfe tmdulu nodule1 w StoroszycleUtytkownita . x l s
Set VBP ActiveUorkbwA .VEPmject
On Error GoTo ErrHandle
With VBP.VKmponents
.Remove VW.VBCmponents('nodulel"1
.Imp~t-t F i l e n a w
End With

' Usuniecie tymczasowego pliku m d u l u


Kill F i l e m
HsgBox ' M u 1 zastqpiono.". vbInfomatlcm
E x i t Sub

ErrHandle:
' Czy w y a p i l Mad?
t4sgbx 'w. H3dul n i e zostal zastqpiony.'. -
vbCrl t i c a l
End Sub
PI.bcedura z listin@ 28.3 wykonuje nastppujzp czynnobci:
1. Eksportuje rnodul nodul el (zaktualizowany modut) do pliku Nanva pliku
(tempmodmrbar) wstah tak wybrana, aby mniejszyt pmwdopodobiefistwo
zastvienia istniejqcego pliku.
I
2. Usuwa modut Module1 (stary rnadut) ze skomzytu S k o r o s z y t U ~ t ~ n i k o . x l s
za pornoca rnetody R m v e kolekcji VBCanponents.
3. Irnportuje mdut (zapisany w kroku 1.) do skoroszytu SkormqvtU~tkownika.xls. I

4. Usuwa plik zapisany w kroku 1. 1


1
6. WyJwiaIa infmacjp dla utytkownika. Do poinformawania utytkownika
o powstalym btqdzie wykorzystywanyjest og6lny mechanizm obslugi btqd6w.

Ten p-ryklad (sktada]$cy sig z dwdeh pHkbw)Jestdostepfly na plycie CDROM


dotqcmnaj cb ksiqtki. Poniewat makm zapisujt?informacje do biet-0 katalogu.
p d uruchornieniern przykladu nalety skoplowaC pliki na twardy dysk.

Wykonystanie jqzyka VBA


do generowania kodu VBA
Pnyktad z tego pod&zdzialu demonstrujc, jak napisat kod VBA generujqcy inny kod
VBA. Procedum AddSheetAndButton (listing 28.4) wykonuje nastgpujqce dtiahia:

Lisllng 28.4. W)gsncwwane lmweg@erkvste, wbvdommegrosku onu Pvmtw ~ s -/a w


Sub PddSheetAndButton()
Dim NeuSheet As Warksheet
Dtm NewButton AS OCEObject

' Dodanie ahusza


-
Set NewSheet Sheets .Add

-
Dodanie przyclsku CumnandEutton
Set Ne*&rtton NewSheet.OLEObjects.Pdd -
t'Fonns.CarmanCButtan.1')

---
W t h NewButton
.Left 4
.Top 4
.Width 100
.Height = 24
.Object.Caption
End u i t h
- "Patrdt do akusza Arlruszl'

'
--
Oodanle procedury obslugi zdarzenia
Code 'Sub CamandButtonl-C1IckI 1' & vbCrLf

-
Code Code h '

--
Code Code h '
W Code h '
On Error Resm Next" & vbCrCf
Sheets('"ArLuszl"").Activatem 1 vbCrLf
I f Err 0 0 Then" 8 vbCrLf

--
Code Code h '
Code Code & '
Hsgbx '"Me m i n d u a h y m i t arkusza Arkuszl.""' b vbCrtf
End I f " 8 vbCrLf
Code Code & 'End Sub'
Rozdzld 28.4 Operacje na komponentachjpzyko VBA 737

Nth IctlwWork~.Wro.iect.-

-
VBConponents(NRIYleet.Nam) .CodeWodule
NextLlne .CouotOfLines + 1
.InsertLines NextLine. Code
End With
End Sub

1. Dodaje nowy arkusz


2. Dodaje do arkusza nowy przycisk (obiekt CmndButton).
3. Ustawia pozycjp, rozmiar i podpis przycisku.
4. W module kodu arkusza wstawia procedu~obshgi zdarzeli dla przycisku
o nanvie CmndButtonl-C1 lck. Pracedura uaktywnia arkusz Arkuszl.
Na rysunku 28.5 poka~lm,arkusz o m pnycisk dodany za pomoq pmcedury AddShe-
etAndButton.

Uysunek 28.5.
Ten arkusz
m z z p-zJdskiwn
oraz procedum
obshrgi .?damenla
dodano za p o w 4
kodu V8A

Ciekawym elementem tej pmcedwy jest wstawimic kodu VBA do moduh kbdu noweno
arkusza Kod jest zapisanjw nniehej o d e Code, a ! a x 4 instrukch koficzy sekwcn&
mak6w CR, LF. Metoda ImertLines m w i a kod do rnodulu kodu unvorzonego arkusza.
W zmienmj NextLine zapisano numn ostamiego wicrsza w module powiqkszony o je-
den. Ddcki tcmu paaadura zostanie dodana na koncu modulu. Wstawienie kodu od
pienvszego wiersza spowodowabby blqd w przypadku, gdyby w systemie utytkownika
ustawiono autornatycme wstawianie instrukcji Optlon Explicit do katdego moduiu,
poniewa instrukcja ta musi byd zawszc pierwsq instrukcjq w module.

Procedur$ u t m m q za popomocq @ury AWSheetlmdButton wyhietlanq w oknie


kodu pokapmo na rysunku 28.6.

Rysunek 28.6.
Ta pocedura obslugl
rdamnia m s t h
wygenerowana
za parnow kodu W3.4
738 QqfC VII * lnne zagodnienia

Wykorzystywanie kodu VBA


do umieszczenia kontrolek w formularzu UserForm
w fazie projektowania
Cqtelnicy, kt6ny majq do9wiadcaenie w projektowniu formulany UserForm, wiedza>
jak tnrdno dodaje siq i ustawia kontrolki. Nawet w pqpadku wykorzystania do maksimum
p o l e d formatowania edytora V h a l Bmic whkiwe ustawimie kontrolek zajrnuje doSf
duto czasu.

Formulan. UserForm p k u a a y na rysunku 28.7 zawiem 100 prcyciskbw. Wszystkie majq


identycmy rormiar i sq r6wnorniemie mmicszczom w oknie. Co witcej, z katdym
przyciskiem zwi- jest proccdura obslugi zdanenia. Dodanie tych pnycisk6w w m i e
i uhvomnie dla nich procedur obshgi zdanen zajptoby mnbstwo czasu. Automarycme
dodanje przycisk6w za pomoq kodu VBA zajmuje okdo mech sekund.

Rysunek 28.7.
i rym oknie
P ~ q c l s kw
UserFom Zostaly
W a n e auto^
za p o r n @kcldu VBA

Operacje z formwlarzaml U s e r F m
w fade projektowania i wykonania
Operacje z kontrolkami formularzy U s e r F m w W e pmjehwania macmie r&hiq sip
od podobnych opmcji w fazje wykonania Te astamje E$ widocme podczas wygwietlania
fomularza U'erFmrn,ale miany nie sq tnvale. Motm na w k M napisat kod anie-
n i a j w wl&ciwoSC Caption formulana U s w F m p m djego wygwietleniem. Nowy lytul
jest widoczny, kiedy okno wygwietla sip na eknmie, ale po wejSciu do edytora Visuul
Bmicokazuje siq, te wlaSciwoSE Caption nie mienih sie. Wiele przyklad6w k& wy-
konujqcego operacje z formulammi UserForm i ich kontrolkami w fazie wykonmia
zaprezentowano w cqgci IV niniejszej k s i w i

-
Z kolei operacje wykonywane w h i e pjektowania sq twah efek jest taki saa,
jakby zmiany byly wykonane nymie nr pornocqmqdzi w edytom Visuu1 Baric. Zwykle
pneprowadza sis je, aby zautomatytowat mudne czynndci podczas p j e k t o m i a for-
mulamy b'serFcwm. Aby wykonat opcracje w fazir pmjektowania, nalegf wykorrystat
obiekt Designer.
I Rozdzial28. + Operacje na kornponentoch jezyko VBA 739

W celu zademonstrowania r62nic pomiqdzy obydwoma rodzajami operacji opracowb.


lem dwie proste procedury. Pierwsnl dodaje przycisk w formularzu VserForm w fazie
wykonania, natomiast druga w h i e projektowania

Zamicszczona ponikej procedura RunTimeButton jest bardzo prosta. Jej uruchomienie


z og6lnego rnoduh (w odr6lnieniu od modutu fomulana UserForm) powoduje dodanie
przycisku, modyfikacjpjego kilku wWciwoici i Mwietlenie formularza. Pnycisk wy-
iwietla sip na fonnularzu w c m i e dziabnia programu, ale kiedy otworzymy formularz
UserFon w edytorze Visual Basic, okate siq, BZ prrycisku tam nie ma.
Sub RunTirneButton(
Dodanie przycisku w fazie wytonwnia

-
Dim Butn As ConnandButton
Set Butn UserFonl , f m t r o l s . Add("Fons.CarmandBucCtan . I " )

-- -
WIth Butn
.Caption 'Oodany w fazle wykonywania'
.Uidth 100
.Top 10
End With
UserFoml .Shw
End Sub

PoniZej zamiesnzono praadurq OesignTiwButton, kt6ra tym rbtni sip od poprtedniej,


te wykonystano w niej obiekt Des~gnerb&cy skhdowqobiektu VBComponent. M6wia.c
doktadniej, do dodania pnycisku sluty metoda Add. Dziqki wykonystaniu obiektu Designer
otrzymujemy doktadnie taki sam efekt, jaki uzyskalibflmy, gdyby poleeenia edytora
Visual Basic mstaly wybrane wznie.
Sub DesignTileEuttonO
Dodanie przycistu w fazie p r o j e k t ~ a n l a

-
Dim Etutn Cls CmnandButton
Set Bum lhis'Aorkbaok.VBProject .VKmpments[ 'UserForn11~) -
.bsigner.Cartmls.Add('Forms.ComMndButton.l')

-- -
Y i t h Bwtn
.Captian 'Cbdany w fazie pmjektwanla'
.Width 120
.Top 40
End With
YBA. UserFoms.Add~'UserFoml" .Shew
End Sub

i Dodanie 100 pnyciskbw CommandBulton w fazie projektowania


F Y q k M z t c g ~punktu denanstruje spos6b wykmystmia obiektu Designer w celu
ularwienia projcktowania fonnulany UserFonn. W tym przypadku kod dodaje 100 przy-
ciskbw (idealnie rozmieszczonych i wyr6wnanych), ustawia tytul dla katdego przycisku
o m hvary 100 procedur obshgi d a n e d (po jednej dla knkdego przycisku). Pehy kod
p r o d u r y AddlDOButtons plrrenhlje lidng 28.5.
740 CzeLC VII lnne zagadnienb

Sub WdlOO&rttonsO
Dim x as Object ' VB Project
Dim UFvbc k Object ' VBCamponent
Dim (Nod As Cbject ' C o d W u l e
D l m ct: As Control
Dim cb As Comndhtton
Dim n As Integer, c As Integer, r As Integer
Dim code As String

Spradzenle, czy j e s t d o w l o n y dostep do oblektu VBProject

-
On Error Resune Next
Set x ktiveYorkbook.V@Froject
I f Err 0 0 Then
M@Jx 'Ustawlenla zabezpluml nie p 0 M l a j 4 na wykonanje tego ~nakra.'. -
vbCri t i c a l
On Error GoTo 0
E x i t Sub
End If
Set UFvbc - Thisworkbock .VBProject .VBCanpolents( IlserFonl')
' k u n l w l e a z y s t k i c h kcntrolek. jeSll jaklef ra
Fw Each c t l I n UFvbc.Designer.Contmls
UFvk.Designer.CMlttols.Rea~ve c t l .NMle
Next c t l
' Usuniwle kodu VBA
UFvbc. CodeHodule.Deletdlnes 1. UFvbc .CodeModule .CnntOfLines

' Dodanle 100 oblekt6w CcamndButtcns


n - 1
--
For r 1 To 10

-
For c 1 To 10
Set cb UFvbc.Designer.Cwltrols.Add('Fonns.ComMndhtton.l')
With cb
.Width 22 --
-- -
.Height 22
.Left (c 26) - 16
.Top (r * 26) 16 -
.Caption n
End With

Dodanie kodu pmcedury obs'lugi zdaneti

--
Hi t h U F v b c . m u l e
code "
code code L 'Private Sub CamndButton" In & "-Clickm & vbCr
code = code & 'Ftsgbox "To jest przyctsk OmandEuttar n r ' -

-
& n L ""'& vbCr
code code L ' h d Sub'
.InsertLines .CwntOfLines + 1, code
End With
n - n + l
Next c
next r
End Sub
I Rozdzial28. Opemcje no komponentach jezyko V M 74 1
I
I
Pracedura AddlOOButtons wymaga zdefiniowania fonnularn! UserForm o nazwie User-
Forml. NaleS nieco powickszyt rozmiar okna f m u l a m UscrForm w porbrmaniu
z domyflnym tak, aby pnyciski sip nniebity. Procedura rozpoczyna sic od u s u n i ~ i a
wszystkich kontrolek z formularza za pomocq metcdy Remove kolekcji Controls, a na-
stcpnie u s u n i ~ i acatego kodu z modutu kodu za pomocq metody Del eteLines obiektu
CodeModule. Nastcpnie w dw&h ~ t l a c hFor .. . Next sq dodawane pnyciski i bardm
proste proccdury obshgi zdarzch. Ponitcj zaprezentowano przykhd takiej pracedury
dla pnycisku ComnandButtml:
Private Sub CcmandButtonl-Cl Ick( )
Msg80x 'To j e s t przyclsk CannandSutton nr 1'
End Sub

W y m w a n i e formulana i nviaganego z nim kodu przed k W p opcracjq gcnemwania


przyciskbw za pommq procedury AddlOOButtwls datwia testowanie r62nych parame-
tr6w. takich jak szerokoft pnycisk6w lub odstqpy pomidzy nirni. Wystarczy mienit
kilka warto6ci, ponownie umchomiC procedure i wbaczyt cfekt. Przed panownym uru-
chomieniem pmccdury rqczne usuwanie kontrolek nie jest konieczne.

Aby wyswietlit fonnulm po dodaniu kontrolek w fade projektmnia, nalety wpm-


wadzit poni- instrukcjp bezpofrednio przed instrukcjqEnd Sub:

Zrozumienie sposobu wySwiet!ania formulana UserFom zam mi spwb czasu. Gdy for-
mula= UserForm zawierajqcy 100 pllyciskbw jest generowany, w rzecywistoki istnieje
w pamiqci VBA, ale nie jest jeszcze oficjalnq cyfciq projektu. NaleZy zatem wykony-
stad metodp Add w cclu formalnego ddqczenia okna UserForml do kolekcji UserFonm.
Wartoit zwracana pnez tq merod? j e t odwdaniem do formularza. WMnie dziei temu
wywdanie metody Shcw moms umicSciC na koftcu metody Add. Tmba jednak parniqtak,
aby przed w c i e m formularza UserForm d h c z y t go do kolekcji UserFoms.

4 Pragramawe tworzenie formularzy UserForrn


(Matnimzagadnieniem pmdstawionym w (ym rozdziak jest wykoqqwanie kodu VBA
do tworzenia formul9ny UserForm w W e wykonywania Zaprumtujq dwa przyklady
-j d c n prosty, drugi dolt skomplikowany. Ich celem jest pnedstawimie r6tnicy po-
micdzy modyfikowaniem formulam w fazie projektowania oraz jego modytikowaniem
w h i e wykonywania.

Prosty przyklad formularza Userbrm


I
P n y k M z tego punktu nit jest zbyt przydatny, ale i l m j c kilka istatnych poj@. For-
mulan UserFwm zostanie wylwietlony i usuniqty. Procedura HakeFonn utwonry go
,w locie" za prnocq technik fazy projektowania, ale operacje b& mi& mjejsce w fazie
wykonywania. Procedura wykona nast~pujqcezadania:
I
1. Za pomoq rnaody Add kolkcji VBCompanents utwrolzy tymczasowy fonnularz
UserFwm w aktyumym skomszycie.
3. Doda p r o c d q otnlugi zdarzenia w module kodu formulana UserForm
Mbrej wykmanie spowoduje wygwietlenie olcna
( C m n d B u t f o n l - C l ick),
informacyjnego, a nastcpnie usunivie formularza z pamitci.

W systemle pomocy majdu]e sie stosunkowo nlewlele InformacJina temat tworzenia


<#. formulany UserForn, totet o p a c o w u ) ~tq procedure, stosowalern gt6wnie metode
mb ib~d6w.

Sub MakeFmO
Oim TempFon As Object ' VBComponent
O l m NewButton As %Forms.tomnandButton
Dim Line As Integer
Dtm TheFon
npplicatton.Y6€.~lnWind~.Vtsible False -
-
Utworzente f o m l a r m UserFonn
Set TempFonn Thi sIJorkbwk.VBPmject. -
VBCcmponents. Wd(3) ' stala vbext-ct-KFom

---
W t h TempFonn
.Propertles('Capticn') ' F o m l a r z tymczasowy'
.Properttes('Width') 200
.Properties('HeigM') 100
End With

-
Dodanie p n y c l s k u CannandButton
Set Neksutton TenpFonn.Designer.COntro1 s
.Add("Fonns.CmndSutton.l'l
-

-- -
WIth Neweuttm
.Cap:ion 'K1ikni.j rmie'
.Left MI
.Top 40
End With
' Dodanie Qrocedury &lug1 zdarzenla d l a przycf sku

-
W i t h TennForm.CodeMcdule
Llne .CountOfLirws
.InsertLines Line + 1. 'Sub CarmandButtcnl-ClickO'
.InsertLines LIne + 2. "MsgBox ""Uitaj! ""'
.InsertLines Line * 3. "Unload He"
.InsertLines Line + 4. 'End Sub'
End W t h

Usunlecie f o m l a r z a
ThisMrkW.Wmject.VBCcnponents.Mve TenpFom
End Sub
Rozddat 28. + Operacle na komponentachjmka VBA 743

Rysunek 28.8.
Ten fonnulan UserFcmn
o m zwiqzany z nim kod
zostal utworzony
.w locie '

Skoroszyt z a w i e r a j w procedurq MakeFon nie wymaga deflniowania odwotania


<?,!ZJM%*
- .-
do biblioteki VBA ktenslbility Library, ponlewai miennq TempForm zadeklarowano
jako og6lny typ Cbject (a nie jako obieM ObjectVBCcmponent). Dodatkowo w procedurre
nie wykorzystano wbudowanych statyrh.

Jedna z pierwszych insbukcji ukrywa okno Visual Basic popmez ustawienie whkiwoki
Visible na wartoit False. Wykonanic tcj instrukcji eliminuje rniganie ekranu, ktore mote
wystilpid podczas generowania formulana i kodu.

Skomplikowany przyklad dynamicznego forrnularza UserForrn


PrzykIad z tego p u n h jest zardwno pouczajqcy, jak pnydatny. Zapmzentowano w nim
funkcje GetOptim (listing 28.7) wySwictlajqctcq fmnulart UserFonn. W formularzu majduje
sip kilka pnycisk6w opcji, kt6rych t p l y q podawane jako argumenty funkcji. Funkcja
Mlaca wartoit reprezentujqcqprzycisk opcji, kt6ry mstal wybrany przez utylkownika.

Function GetOption(Cpkray. Default. T i t l e )


Dim TenyIFom As Object ' YBCcqxment
D i m HRrOptionButton As Hsforms.0ptionButton
Dim Ne*ComnandButtonl As Msfonm.Cann?~ndButton
Dim NwComnandButtcnZ As Msfoms.Cmndhtton
D l m i As Integer. TooPos As Integer
0im M M d t h As L m g
Dim We As String

-
Ukrycie &na YBE w celu zapobietenia miganlu ekranu
P p p l i c a t i o n . V B E . ~ a i n W i ~ . V i s i b l e False

-
Utwarzenie f o m l a r z a UserFom
Set TmpFon

TempForm.Properties('Width')
t
-
Thi sWorkbook . i B ~ r o j e c.YBCarponents.Add(
300
31 vbext-Et-Worm

' Oodanie przyciskh opcji


TopPos-4

-
Malblidth = 0 ' Zapamietuje szemkoSC najszerszef wji

-
For 1 LBwnd(@Array) To U B o u n d ~ ~ r r a y )
Set NMptiPnButton TenpFom.Cmigner.Controls. -
Add('foms.Option8utton.i')

--
With NMIptionButtm
.Yidth 800

--
.Caption Op4rray(i 1
.Height 15
.Left 8
.Top TopPos
.Tag i -- -
.Autosite T n n
-
IfDefault 1 Then .Value T n n - -
If.Width Fbxliidth Then Maxlildth .Width
End With
-
T o m s TopPos + 15
Next i

' Oodanle przyclstu Anuluj


-
Set NWonnandButtml TenrpFonn.Oesigner.Contm1s.
Add('fom.Cannand8utton.l")
-

-- -
With NewCnmandBvttonl
.Caption 'Anuluj'
.Height 10

--
.Width 44
.Left MxWldth 12
.Top 6
End With

' Dodanie prryclsku OK


-
Set NebCmandButton2 TeapFonn.Deslgner.Cantmls.
Wd("fOm.~ndf!attOn.l"I
-

-- -
W I t h NewCarmandButtonZ
.Caption "OK'
.Height 18

--
.Width 44
.Left MaxWidth + 12
.Top 28
End Ul t h
' Dadante pfaedur obslugl zdaneh dla przycl4Cw
Code-"
--
Code Code L 'Sub Cnanan4EJuttonl-ClickO" IMrCf

-
Gxle Code L ' GEWT:ON-RET-VPL-False' 6 vbCrLf
Code Code 6 ' Unload He" h vbCrLf

--
Cale -Code & 'End Sub" A vbCrLf
Code Code & 'Sub Cansnd&ltt0n2_ClickO' & vbCrLf

--
Code Code 8 ' Mn el" 6 vbCrLf
Code Code 1 ' CSmPTIOH-RET-YPL -
False' & MrLf

--
Code Code 8 '
W Code 6 '
-
Code Code I" For Each ctl In Me.Controls' IvbCrCf

-
I f Typer(mIct1) "OptlonButton" Then' 1 vM;rCf
I f ctl Then ~ I O N - f E T R F T V A Lctl .Tag' 8 M r L f

--
Code-&&&' End1f"LvbCrLf
Code Code 6 ' Hext c t l ' & vbCfLf

-
Code Code 8 " Unload Me' & v~Wf
Code Code 6 'End Sub'

Wlth TenpFm.CodeWule
.InsertLlnes .CountWLim + 1. Code
End With
Rozdziol28. Operacie na kornponentach VBA 745

.Properties("Uldtll") --
I f .Pmpertles('Wldth") 160.Then
160
newCmndButtonl.Left
NewCmandButton2.left -106
106
End I f
-
.Pmperties['HeipM') TopPos + 24
End Wlth

a G ~ e t l e n l ef o m l a r z a
VBA.UserFoms.Add(T~Fonn.Nane).Show

' Usunlste f o m l a r z a
Thi sWortbaok .VBPmject .VBtoRponents. Remove YBCanpanent :-TenpFom
'
-
Przekazanle wybranej opcji do prmedury w i u j a c e j
GetOpt ion GUOPTIW-RU-Vbl
End Fvnctlon

Zw&ywszy na lit* dzialah wykoqnmych ,w tle", fimkcjaGet@tlon dziata stosunkowo


szybko. W moim systemic forrnularz wy3wietla sip niemal natychmiast. Po wykonaniu
zadania fmularz UserFonn jest usuwany.,

Zastosowanie funkcji Getoption


Funkcja Getoption pobiera trry argumentyr
w OpArray -tablica hhcuch6w znakdw zawiaajqx elementy. ktdre majq bye
wy9wictlane jako przyciski opcji;
m Default -liczba cslkowita oM1ajqca domyflny przycisk opcji, wybicrany
w momencie wySwictlenia fonnularza UswForm (w pnypadku wartoSci 0 nie jest
wybiemy taden przycisk);
Title -tckst wy4wietlany w pasku tynh h u l a r z a U s e r F m .
Jak dd& lunkcja Getoption?
Funkcja Getmion wykonuje nastqpujye dzialania:
I. Ukrywa okno edytora V W Bmic w celu niedopuszcnnia do migotania e h u
w czasie tworzenia forrnulana UserFwm waz dodawania kodbw.

3. Dodaje prcyciski opeji za p o m p tablicy cymkazywamj do funkcji poprzez


, argument @Array. Do z a p h i a numeru indeksu wykonysEano wlafciwaSC Tag
kontrolki. Ustawienie Tag wybramj opcji jest wartoScia, kt6rqmtatecmie zwraca
funkcja
4. Ddlaje dwa przyciski pol&: OK oraz A.dym.
5. Twmy procsdury obsiugi zdarmia dla wszystkich pnyciskdw poleee$
746 -6 Vll + lnne zagodnienio

7. WySwietla formulan UserForm.Klilaniwie OK powoduje wykonanie pmcedury


ComnandButtonl-Cl ick. Pmedura sprawdza, ktbry przycisk opcj i wybrano.
oraz przypisuje wart046 do miennej GETOPTION-RET-VAL (mienna publicma).
6. Usuwa forrnularz UserFimn po jego zarnkni~iu.

9. Zwraca wartoif miennej GETOPTION -RET-VAL jako wynik hmkcji.


lstotnq mletq lworzenia formularry Us- .w locle" jest samowystarczalnoSC
-
funkcji funkcfajest zaplsarta r jednyn module i nawet nie wymaga odwotania
do biblloteki VBA Extensiblllty Llbrary. Dzieki ternu rnotna wyeksportowaf rnodut
(o name mdOptionsForm), a nastepnie zaimmowab go do dowolnego skorosiytu,
co pozwoli uzyskaC dostep do funkcji GetOptlm.

Spos6b *cia funkcji GetOption zaprezmtowano ponitej. W tym przypadku w formu-


larzu UserForm wyswietla s i t pi@ opcji (zapisanych w tablicy Ops).
Sub TestGetOptionO
Dim Ops(1 To 5)

Gpsll) --
Dim UserOption
'Pdlnoc'

--
Ops(2) 'Poludnie"
Ops(3) 'Zachbd"
Ops(4)
--
'Wschbd'
Ops(5) "Wszystkie regimy'
UserOption GetOptlon(0ps. 5. "Hyblerr reglcn')
MsgBox Ops(UserOption1
End Sub

Zmienna UserQption zawiera numa indeksu opcji wybranej przez u2ytkownika. Jeteli
utytkownik kliknie AnuIuj, micnna UserOption tostanie ustawiona na wartost Fa1se.
FormuIan UserFonn wygenerowany p m z powytst;l W c j p pokazano na rysunku 28.9.

Rysunek 28.9.
Ten formularz UserFom,
zostat wygemwany
za pomocq funkji
GetOption

sp* Fmulam US& dostosowuje svJd1 rozmler do liczby element& taMicy pnekmmej
jako argument funkcji. Teoretycznie funwa GetCptim mote mqt? tablisp dowlnych
mmiarbw. Jednak w praktyce naleiy ogranic* Ilczbe opcji tak, aby utrryrnaf roaiar
okna na sensownym poziomle.

Efekty dzialunia funkcji GetOpfion


Ponibej zaprezmtowano procedury o w z d d dla dw6ch pnycisk6w pole&. Jest
to kod generowany wewnqtrz funkcji Getaption i umieszczony w module kodu tymcza-
sowego formularul UserFonn.

-
Sub CarnandButtonl-Cl ick()
GI~OPTIOH-RET~YAL Fa1se
Unload He
End Sub
Rozddof 28. Operacje no komponentach jezyka VBA 747

Sub CamndButtonZ-Click0
Dim c t l
G€rOPTI(lY-RET-VAL - Fa1se

If TypeNaMct.1) -
For Each c t l I n Me.Controls

-
'OptionButton" Then
If c t l Then GETI)PTION-RET-VAL c t l .Tag
End I f
Next c t l
Unload Me
End Sub

f m u l a n UserFormjest usuwany po wykorzystaniu, nie motna obejrze6 go


<SP4wPonlewat
edytone Visual Basic. Aby obejne6 okno UserForm w e d y t m Visual Basic, nalety
pneksztakl6 ponltuq lnstrukcje na komentarr, wpisujqc apostrof na pocqtku wiersza:
Thi sMrkbook. VBPmject .VBCanponent s . Rmve bCoc~ponent:-Tenp Form
Moduty klas
Dla wjelu programistdw VBA p a j ~ i modulbw
e klas h i tajmnicw. Ta wlaSciwo4C
jest dostqna w j ~ y k uVisual Basic od kilku lat, a w Excelu dodano jq w wenji Excel 97.
W tym tymozdziale przedstawig w s t c p informacje o moduhch klas wraz z przykhdami,
kt5n pomogq lepiej nowmiet t~ wlaSciwoSC, dziqki czemu W e m o m jq odpowiednio
wykonystat we wlasnych projektach.

Czym jest rnodul klasy?


Modul k l q jest spsejalnym typem rmduh VBA, ktbry mo2nn umi&iC w pabjekcie VBA.
W uprouczeniu rnodut klasy urnofliwia programi4cie twwzenic nowych klas obiekt6w.
Jak wiadomo, programowanie w Excelu sprowadza s& do wykonywania dzialafi z obiek-
&mi. Moduiy klas umotliwiajq twonenit nowych obiektbw wraz z odpowiadajqcymi
im w$fciwoSciami, metodami i darzeniami.

W tym mmencie n M n y zapytajq: czy naprawd~m b a two@ n o w obiekty? Od-


powid2 h i : nie tneba, ate czasarni warto to nobit, aby uzyskaC wymieme konySci.
w wielu prypadkach moduiy klas zastqtujq istniejase funkcje lub pmcedury, z tym te
sq wygodniejsze i latwiej siq nimi zanpdza lnnym r a m zdefiniowanie klasy jest ja
dynyrn qosobem wykonania zadania

w PI m&o~owunio zdmd p i o r n u SPJihcjitukich.jrrk urrkywnienie


mkarva (prryklady znajdujasic w mzdziahch 19. i 23.h
wd u h m e r y r u t $ i ~ ] &tr@q8u
i WindowsAPI, m duhurh stmwanie tych
f i d c j i w &ie- m o a a na pmyk1ad utworgrC kt% kt6ra ulatwia wybywanie
lub ustawianie klawiszy Nwmhck lub Copsbck, albo klaq, kt61-aulatwia
d w t do~ rejestru Windows;
750 Czeft VII lnne zagadnienia

w celu umotlhuienia wykonywmia tej samej procedury pnez wiele obiekr6w


-
wformulanu UserFonn w przyktadzie z rozdzialu 15. zadernonstrowano
spos6b u2ycia m o d h klasy w celu przypisania wielu przyciskom polecefi jednej
procedury otwlugi zdarzenia Cl lck;
w celu uhvonenia komponent6w wielokrotnego r
d y
tk ktdre motna taimporrowa6
do innych projekth -rnodut klasy og6lnego pnemanenia mom zaimportowat
do innych projektbw.

Przyktad: utworzenie klasy Numlock


W tyrn podmzdziale zaprezentujq krok po kroku, jak stworzyk pnydatny, chot prosty
modulu klasy. W module tym utworzono klasp Numlock zawierajqcq jednq wtaSciwog
(Value) oraz jednqrnetodq (Toggle).

Wykrycie miany stanu klawisza NwnLock wymaga zastosowania kilku funkcji inter-
fejsu Windows API, a konkretne pmedury r6hiq siq w zaletnoSci od wersji systernu
Windows. M t k o rn6wiqc. jest to zadanie doSC skornplikowane, a modul klasy ma je
uprotit. Wszystkie deklaracje API i kod urnieszczono w module klasy (a nie w nvyktych
rnodulach VBA). K o w c i ? Praca z kodem stanie sip latwiejsm, a nowy rnodul klasy
btdzie m o h a wykonystaf w innych projektach.

Gdy modd klasy zostanie utwomny, za p o m q kodu VBA,ktdry wy4wietla wlaSciwo6d


V.31 ue obiektu, mo2na okreSlif bieqcy stan klawisza ffumLock

M o a a tet mienit stan klawisza NumLoek poprttz mianp wkkiwoki Value. Na ptzyklad
wykonanie ponifszej instrukcji spowoduje wlqczenic klawisza NwnLock
HmLoEl:.Valw - True

Motna dwniet zdefiniod kod, Wry p d q n stan klawisza NmLock, w y k o n p t u j ~ ~


metodq Toggle:
NuKock.Tcggle

Modul Wasy zawiera kad, kt6ry definiuje obi& w@ie z jcgo wlakbdciarni i metoda-
mi. Nastqnie moha utwomyt egzemplarz tego obiektu w module kodu VBA i wykonywak
dzialania z w ~ i w o S c i a r nii metodami obiektu. Aby lepiej zrozurniek proces tworzenia
rnoduiu klasy, przeanalizujcmy instrukcje zapmentowane w kolejnych punktach. Roz-
pocmicmy od utwomnia pustego skoroszytu.

Wstawlanie modutu klasy


Po uaktywnieniu edytora Yisucll Bmic nalety wybrd polecenie Imerr/CIms Modwle.
Do projektu zostanie dodany pusty modul klasy o nanvie Classl. Jeali nie wySwietla
sip okno Properties, nalety wcisn* F4. Nastppnie motna mimie!w p modulu klasy
na NumLockClass (rysunek 29.1).
Ryrunak 29.1. Pusty rnodul klasy o narwie NurnLockClass

Dodawanie kodu VBA do modulu klasy


Teraz utworzymy kod dla w M c i w o i c i Value. W celu *cia lub rnodyfikacji stanu
klawisza NumLock nalety w module klasy u m h f c i t deklaracje funkcji interfejsu Win-
dows API shr2qcych do wykrywania i ustawiania klawisza Nu'umLock [listing 29.1).

' Deklaracja typu


Private Type OSVERSIONINFO
dhOSVersionInfoSlze As Long
Majorversion As Long
MinorVersion As Long
#ui 1dNunber As Long
dwPl atforfnId As Long
szCSDVersion As String * 128
End Type

' Ceklaracje API


Private k l a r e Functiar GetVersionEx Lib 'Keme132'
Alias 'GetVersionExA"
-
(IpVersioninfonztion As OSMRSIONINFO) k Long

Private Declare Sub keyM-event L i b 'user32" -


[ByVal bVk As Byte. -
ByVal bkan As Byte. -
ByVal M l a g s As Long. ByVal M x t r a I n f o PJ Low)
Private Declare Functlon &Keyboardstate Llb 'user32'
tpbKeyState As Byte) As Long

Prlvate Declare Functlm SetKeyboardState Llb 'user32' -


(IppbKeyState As Byte) As Long

---
Deklaracje stalych
Const VK-NUHLOCK &It90
Const VK-SCROLL bH91
Const UK CAPITAL &HI4
-
- -
Const KE~EVENTF-EXTEWECUEY WI
Const KEYEVENTF-KEYUP &?
Const VER-PLATFORM-WIN32-NT
-
Const UER-PLATFORM-WIN3Z-UIMWS
2
1

%+*
C
Kod VBA z a ~ o w ~ wntyrn
y rnzddale utwwzono ne podstawie przykladu
z a m i e s m n e g o w Mtrynle W Microsoftu.

Nastqmie potmbna jest pmccdura pabicrajp bi&iw stan klawisza N u m M Fhx.dw


$n m h w W c i w o k i q Q a l u e obiektu. Dla v h k i w o S c i moha zdefiniowat h l n q na-
w,
ale nama Value wydaje se odpowiednia W celu uqskania stanu klawisza N u m M
,
nalety wprowadzit nastqujqcqpmcedurq Property Get:
Property Get Value( 1 As Soolean
' Pobran~eb i e t g g o stanu
4 D i m keys(0 To 255) As Byte

-
etKeyboardState keystO)
Value keys(YK-WOa:)
End Property
Szczeg6bwe Infonacje o pmaedursdr Property m t n a mat& w dal- -9cl
mxtzlatu. w punkclc .Programowanie IIO1Ciwhl obieLl6wm.
waaaa I
Powytaa procedura, w k t b j do spmwdmia biewego m u klawisza N u m M wyko-
n p a n o fimkcje interfcjsu Windows API GetKeyboardState, jest wywdywana za kaZdyrn
r a m , kiedy w kodde VBA m i & h i e do wi&iwoki Value obiektu. Na pcqkkl
jej uruchomienie spbwodujc pmibza instrukcja VBA:
HsgBox Nunlack .Value

Teraz ustawimy odpowiedni stan klawisza NurnLock wkqczony lub wylqcwny. Mobla
to w b j t za p o m q pmcedury Proprty Let z Iistingu 29.2.
M n g 29.2. U m a n l e adpowtedniego stanu kIawlsza h L o c k
Property Let ValuefbooiVal As Boolean)
D t n 0 AS MYERSIONINFO

-
D i m keys(0 To 255) As Byte
o.du(3SVersionInfoSize Len(ol
GetVersionEx o
GetKeybaardState keys(0)

--
' t r y DieLqcy =an jest o d w e d n i ?
--
I f boolval True &td heys(VK NUnL(XX) 1 Then Exlt Pmperty
I f baalVal False And k e y s ( ~ ~ i i ~D ~Then
l Exit Property
Rozdzid 29. Mod* klas 753

' PrzeTqucnie stanu


I f o.dwPlatfmId - VER-PLATFOM-WIH32-WiNWS Then ' (Wln45)
Przelqczenie stanu klawisza Nlmnloek
- -
keys(VK NWLOCK) lIf(key~(~lK-WK0CK) 0. 1. 0)

E l s e l f o.dwP1atfonId -
~ e t ~ e y b o a r d ~ t teys[Ol
ate

Symlacja wciSnlecla tlmriszz


VCR-PLATFGRW-WIN32-Nl Then ' (WinNT)

keybd-event YK-MOCK. W45. KCIEYENTF-EXTEMXUKEY Or 0. 0


Symlacja zwolnienla klawlsza
keyW event VK NUKOCK. W45. YEYEYEKTF-EXTEMIEOKEY O r
KEY~YEKTF-KEYUP. o
-
End I f
End Property

Proccdura Property Let pobiera jeden argument: True lub False. Po jej wykonaniu po-
nitsza inmkcja ustawia wtalciwoM Value obiektu Mumlock na wart056 True:
HmtOel .Value - True

N a koniec &efiniujcmy proceduq przekpajyq stan klawisza NwnLbck (listing 29.3).


UrHng 19.3. m a d e stsmr k!awis.za NumLock
Sub Toggl eI)
P r r e t p u e n i e stanu
Dim o As OSYERSIONIRFO
-
o .dwOS'Vers~onInfo51ze Len(ol
GetVersionEx o
Dim keys(0 TO 255) As Byte

-
GetKejboardState keys(0l
If o . d 9 l a t f o m I d VER-PLATF~BH-WIU~~~WIMMS Then ' (Wln95)

keys(VK-WaX} -
Prrelpczenie tlWsza Hurlock
-
Ilf(keys('VK-MIMOO:) 0. 1. 0)
Elsel f o.bPlatform1d -
SetKeybarGState keys(0)
YER-PtATFCRJ+-YI#32-hl Then ' (WlnNT)
S y w l a ~ awci <nlwia klawlsza
keybd-went VK-NUMOCK. W45. KETDIEWTF-EXTEHOEOKFI O r 0. 0
Symulac~arwolnienia tlawisza
keybd Gent VK-NUKNK. W45. KEYEYMTF-EXTEMIEEEY Or -
KEYNEW-KEYUP. I)
End I f
End sib

Maada Toggle jest standardow4 p m c d q Sub (a nie pmcsdurq Property Let lub Pro-
perty Get). Zapreantowana pooi2ej instrukcja VBA ptzetqcza stan klawisza N d o t k
papraz wykonanie proccdury Toggle:
Ikmodc.Toggle

Wykonystanie klasy Numhock


M'm i e m moduh klasy NumLwk nal* utwo& egmnplarz obiekat. CzynndC tq
motna wykonaC za pornocq p i e j instdccji, kt69 nalety umieSciC w nvyklym mo-
dule VBA, a nie w module klasy:
Dim Nulock As I(ew ~ o c k C l a s s
754 CzeSc V i l e lnne zogodnisnia :

N m q typu obiektu jest NurlcckClass (m.namq moduh klasy). Nazwa miennej obiek-
towej mote by6 dowolna, ale N d o c k w tym przypadku wydaje sip mhym wyborem.
Ponitsza p d u r a ustawia wlaSciwoft Value obiektu NumLock na wartoit True. Wyko-
nanie procedury powoduje whczenie klawisza NumLwk:
Sub N~n-mockhO

N~mLock.Value True
End Sub
-
D i m Nurrlock As New NunLadrClass I

Kolejna procedura wySwietla komuntkat z informacjq o bie- stanie klawisza NumLock


(True oznacza klawisz wlqczony, Fa1 se -wytqczony):
Sub GetNumLockState(
Dim Numlock As New Nunocktlass
Msg'Box Nunlock. Value
End Sub

Ponitsza procedura p w z a stan klawisza NumLock:


Sub TgggleElunLockO
D i m NumLock As Mew kwock~1atClass
Nunlock .Toggle
End Sub

Sub Toggl ~ o C t Z (
-
Dim W o c k As 891 WoctClass
NumCock .Value Not NNlanlock.Value
End Sub
1
Kornpktny rnodut klasy dla tego prvkhdu jest dostppny na m i e CDROM dc+wzand ,
I
do ksigtki. Skorosqt &era takle rnodul Wasy rmotli!Ma]qcy y V F m l e i vstawianle I
stanu klawlsry CapsLock orar ScrollLock

Dodatkowe informacje na temat modul6w klas


i

Prryklad tapn%ntowany w p o h i m padratdtiale pokamje spofdb twonenia nowej


k l q z jednq wMciwoki~Valwo m jednq met* Toggle. Klasa mote rawierat d o w o l i ~
liczbp wldciwdci, metod i zdamefi. 1I
Nadawanie nazwy klasie oMeM6w
Nazwa madulu klasy, w k6rym definiuje sip klasp, jest r6wnie2 n m klasy. DomySlnie
moduiom klas q nadBwane nazwy Cl assl, Class2 itd. Zwykle nalety im nadawaf nanvy I
bardzicj opisowe. I
I

Prograrnowanie wlaSciwo5ci obiektdw


1
Obickty mogq z a w i d dowolnq Ikzk whkiw&. Zdefiniowanq wIafciwoX m o h a ,
zastosowad w kdzie, wykonystujv standardow notacjp z laopkrl: 1
0biekt.wlabcirof E
1
Rozdziat 29. + Moduly klos 755

W e d y t m Y W Basic dmypnc jest autornatycme wy3wictlanie skladowych obiekt6w


zdefiniowanych za pomocq rnodut6w Mas, co Ihatwia wybdr wlafciwoSci i metod podczas
pisania kodu.

Definiowane wlahiwdci obiektu mogq rniet status tylko do odczytu, tytko do zapisu lub
do zapisu i odczytu. WMciwoSf p/ko do odczytu definiuje sip za pomocq jednej proce-
duty z utyckm sbwa kluczowego Property Get. Oto pnyklad:
Pmperty Get FileNamOnly() As String

-- -
F i l e N a M n l y ""
For i LenCFull Name1 To 1 Step -1

If Char -
Char Mid(Ful1Name. i . 1)
"\" Then
Exit Function
Else
-
FlleNamdSlly Char & FlleNameOnly
End If
Next i
End Property

Pmcedura Property Get &&Ijak W c j a . Kod wykonujc obliczenia, a nastwnie m c a


wart& wMciwaSci udpowiadajqq nazwie procedury. W pokasanym p n y k W i e nanva
prooedury to FileNameOnly. Wartog Nva6conej wMciwo9ci to nazwa pliku wymaczona
na pnistawie Mcucha W w okSlajqcego &ki-, Mryjest zapisany w zmiennej
publicmi FullName. J-li na ptzyklad mienna FullName ma wartog c:lwindowsWIe,&f,
broceduri nvr6ci wartoit myfi&..tx!. Proceduha Fi 1 eNalneOnly jest wywotywana~hmo-
mcncie odwdania do obiektu i dafciwofci w kodzie VBA.

DIa wWciwoici ub d q t u izopiru hvony sic dwie procedury: Proprty Get (do day-
tywmia wartoJci wlaSciwo5ci) m Property Let (do mpisywania wartoSci wkxkiwofci).
Wartoft przypisywana do wMciwo2ci jest przekazywana jako argument procedury.
Ponitej zapaezentowano dwa pryklady procedur:
Dim XLFile As Boolean

SawAsExEelFile XLFlle
End Property
-
Property Get SaveAsExcelFileO As Boolean

-
Property Let S a v ~ E x c e l F i l e t b m l V a lAs Baalean)
XLFiFe boolVal
End Property

.33$?%Jeteli
*
zmlast
MakimrSC Jest typu obiektcwego, nalsty wykonystd procedup Property Set
procedury Prcperty Let.
5mBa
Jako WWWO
E
X obiektu m i n a r6miet wyk- z m i q public- zadeklarowuq
w module k l q . W popnednim pzykladzie m o a a wyeliminowad procedury Property
Get oraz Property Let i zas$pid je deklaracjami podornu modutu:
Public SaveAsExcelFlle As Boolean

Aby u t w o w whkiwo4E tyih do zapisn, nale* skorzystat wyhpnie z procedury


Property L e t (bn odpowiadajqcej jej procdury Property Get). Takje wl&ciwoQi de-
finiuje sic jcdnak bardm mdko.
756 QqfC Wl lnne zagadnienia

W popmdnich pnykIsdach wykorzptywano nniennq poziomu rnodutu typu Boolean


o nazwie XLFi le. Roctdura P r w r t y Get N a c a tp zmiennqjako wart046 wldciwoki.
Jeteli na pnykktd obiektowi n a c h o nanvp ~ i l e ~ yponi%G
s, instrukcja wyfwietli bie-
e c q wartdf wh.kiwoki SaveAsExcelFi 1e:

Z kolei instrukcja Property Let przyjmuje argument i wykotzystuje go do miany war-


toSci wtahiwdci. Na przykhd w celu ustawienia wMiwofci SaveAsExcel Fi le na
wart& True m o h a wykorzystaf nastqpuj$cq instrukcjq:
F i 1eSys. h v e A s ~ l Fl 1e - True

W tym pnypadku do pmedury Property Let pnekazano wartdf True, powodujqc


m i a n t wartoSci wMciwoJci.

W poprzednich przykladach wykortystano m i e n 4 poziomu moduh XLFi le. w ktdrej


byta zapisana rteczywista wartof6 wldciwafci. W module klasy nalety zadeklarowat
zmienne repnzentujqce wartoSci wszystkich zdefiniowanych wlakiwoki.
Padcrss nadawanla n a m pmedumm deflniujqqm daScfwoSci stosuje s k zasady
nadawanla nazw obnvlplvlxe d a zwyklych prDadlr Uwle nIekt6tych nazw (st6w
zasbzeionych)jest nledozwolone. Zatern jeSll podczas tworzenla pcocedury deflniujqcej
w+a6clwoXwystqpl blad sktadniowy, motna sprbbowa6 zrnlenlC nazw pmcedury.

Programowanfe metod obiekt6w


Obiekt nvykle zawiera rnetady, ale nie jest to warunek koniecmy. Metody w klasach
obiekt6w defmiuje sic za pomocq standardowych procedur Sub lub Function, kt6re nalety
umiekif w module klasy. W kodde wywduje sic je, k o n y s t a j ~ze standardowej notacji:

Podobnie jak wsystkie metody w j ~ k VBA,


u metody definiowane przez pgrannistq
w module klasy wykonujq pcwne d z i a h i a Zapmentowana ponitej proccdura jest przy-
kladem mctody zapisujqcej skoroszyt w jednym z dwdch format6w plik6w w nlletnoki
od wartoki zmiennej XLFile. Jak motria sip pnekonak, w treici tej prmedury nie ma
niczego nadzwyczajnego.
Sub SaveFlleO
I f XLFile Then
PctiveUorkbool:.SaveAs FileNane:-FName. -
F i l e F o m t :-xlWorkbooltNonna1
El se
CCtlveUorkbook .Sav& Fi1eNane:-Mame. -
F i l e F o m t :-xlCN
End If
End Sub
Przyklad zaprezentowany w nastqpnym podrozdzide pnyblita widciwo~cii metody
Has definiowanych w moddach klas.
Rozdzid 29. + Modutv klas 757

Zdmenia deflniowane w module klasy


W ka2dym module klasy majdujqsiq dwazdarania: I n i t i a l i z e aazTetminate. Zdanenie
I n i t l a l l z e jest gencrowane w momencie tworzenia nowego egzemplarza obiektu, nato-
miast z d m n i e Terminate w momencie niszuenia obiektu. Zdarzenie I n i t l a l ize moha
wykorzystat do ustawienia domyflnych wartofci wldciwobci. Szablony procedur obshgi
wymienionych zdarzeri zaprezentowano ponitej:
Private Sub Class-InltlallzeO
' TuI@murloiy upmwa&ft kod iniq/alizmjI obfeklu
End Sub

Private Sub Class-Terminate( 1


' Tuqfnaleiyw p m d d kod wybnprmy w pcnwlku niszcmrb obickiu
End $5

Po zakofmmiu wykonywania procedury tub moduh, w ktdrym zadeklamwano obiekt,


jest on niszczony (a zajmowana p r a z niego pamiet mlniana). Obiekt m o a a miszczyt
w dowblnym momencie, przypisujqc do niego wartoSC Nothing. Na pnykhd ponitsza
instrukcja niszczy obiekt o nazwie Myobject:
Set MyObject - Nothing

Pnyklad: klasa CSVFileClass


W przykladzie z tego pbdrozdziatu zdefiniowano klag CSVFi leCl ass zawicrajqq dwie
wwciwafci oraz dwie mctady. WlaJciwdf ExportRange (odayt-zapis) wymacza zakres
arm ktdry ma by5 wyeksportowany do pliku CSV, natorniast wlakiwobe ImportRange
(odczyt-zapis) wskazuje zakres,do kt6rego ma byt zaimportmy ten plik M d a Imrt
importuje plik CSV reprezentowany przez argument CSVFileNam do zakresu reprezen-
towanego p r n z wlaJciwoSt ImportRange. Metoda Export ekspomjc zakres rcprezcnto-
wany przez wtaJciwoX ExportRange do pliku CSV repmentowanego przez argument
CSvFil dame.

Zmienne pozlomu moddu dla klasy CSVRleClass


W module klasy muszqbyc5 d- m i m m e , kt6re odwmmwujq ustawie-
nia wMciwo9ci klasy. W module klasy CSYFll eClass wykwr?ystano dwie mienne slutqce
do zapisania dwkh ustawid whkiwoki. Zmienne te zadeklarowm na poczmltku moddu
-. klasy:
Private RangeToExpocporL As Range
Private IaportToCell As Range

RangeToExpartjest obiekhm typu Range, kt6ry reprearrtuje dms do wyekqortmmia.


ImportToCell jest obiektem typu Range rrpremtujqcym lrmq g6mq komddq zakresu,
do Mrego msimk zitimportowany plik. Tym miennym sq nadawanl: wartoki za pomocq
procedur Property Get o w Property Let, ktdre p h t a w i o n o w uastqpnym punkcie.
758 CzpfC VII + lnne zagadnienia

Definicje wlaScEwoSci Wasy CSVRleClass


Pmedury definicji wlalciwolci dla modulu klasy C S V F ~leCl ass prezmtuje listing 29.4.
Procedury Property Get zwracajq wartog zmiennej, natorniast procedury Property Let
ustawiajq wartoSC zmiennej.

Usling 29.4. Deffnicje wfaSchvoSd dl8 klasy CSW7leCfass

-
Property Get ExportRangeO As Range
Set ExportRange RangeToEwrt
End Property

Set RangeToExport r g
End Property
-
Property Let ExportRarge(mg As Range)

-
Property 6et ImportRange() As Range
Set InportRange I~nportTotel1
End Prope-ty

Set IqmrtToCell rng


End Property
-
Property Let ImportRanwt r g As Range]

Deffnlcje metod klasy CSVFlleClass


Modul klary CSVFi leClass zawiera dwie procedury rcpmcntujqce metdy. Ombwiono
je w kolejnych podpunktach.

Procedura Export
Procedura Export z listingu 29.5 jest wywdywana w rnomcncie wykonywania metody
Export. Pobiera jeden argument: pdnqnazwq pliku, da kt6rego zostanie zapisany wyeks-
portowany zakres. Pmedura zawicra prostq obshgq MMFd6w. Miedy innymi wymusza
ustawienie wlakiwoki ExwrLRarqe poprntz sprawdzenie zmiermej RangeToExport. W celu
Sledzenia innych bl~d6ww procedune zdefiniowano blok obslugj Wd6w.

Sub Export(UYF11eNme)
'
Eksportuje zakres do pliku CSV
Dim ExpBwk As Workbook

I f RangeTtXqwt I s Ikthlnq Then


NsgBox "Hie z d e f i n i w n o obszaru EqortRange'
hit Sub
End If

01 E m r GoTo E r M l e

-
Appl Ication.ScreenUp3atiw -
False
Set ExpBool: Workbmt s .PddlxlMrksheet)
RangeToExwrt.Copy
Rozcfiiat 29. + Mod* klas 759

Ppplication.OisplayAlerts
With ExpRwL
- False

.Sheets{l).Paste
.Save& F i leName:-CSVFileName. F i l e F o m t :-xlCSV
.Close Savc0anges:-False
End W l t h
@1 tcatlon.CutCopylWe False --
npoltcation.Screenupdating True
A~lication.DlsplayAlerts True
E x i t Sgb
-
ErrHandle:

Appl ication.CutCopyMode --
ExpBook .Close SaveChanges :-Fa1 se
':alse

Application.0isplayAlerts True -
Appl lcation.ScreenUpdating True

MsgBox "Error " & Err & vbCrLf & vbCrLf & Error(Err). -
.
v b c r i t i c a l 'B1a.d metody Export'
End Sub

Procedura kopiuje zakres okredlony prrez zmiennq RangeToExport do nowego, tymcza-


sowego skoroszytu, zapisuje skorosryt jako plik tekstowy CSV, a nasttpnie zamyka plik.
Poniewat aktualizowanie ekranu jest wyfqzone, u2ytkownik nie widzi tych dziahi. J&li
wystwi blqd - na pmykiad zostanie wprowadzona nicpoprawna nanva pliku -nastq-
puje przekazank sterowania do sekcji Erriiandl e i wySwietlenie komunikatu o M*ie
zawicrajqcego numer bbdu oraz jego opis.

Procedura Import
Procedrna Inport z l i g u 29.6 impoituje p l i CSY M l o n y przez argument CSVFileNam
C z a h s u okreSlonego miennq ImportToCel 1, kt6nj warto&
i kopiuje jego ' ~ ~ w a r t ddo
odpowiada wlaSciwoki InportRange. Po wykonaniu tej operacji plik jest m y k a n y .
Poniewat i tym razem aktualizowanie e h u jest wykpmne, utytkownik nie widzi otwar-
tego pliku. Pohbnie jak procedura Export, proccdura Impon zawiera pmsq obshg~
Mcd6w.

I f IlnpdrtTDCell Is M t h l n g Then
MsgBox 'Hie z d e f i n i m n o z a k r e a laportRange'
E x i t Sub
End If

I f CNFlleNae "" Then -


HsgfBx 'Mie z d e f l n t w n o pliku & zaimportcwanla'
E x t t Sub
End if

13Error @lo Errtlwdle


Applicatiar.ScreenUpdating - False
-
Appl i c a t i m . M s p l a y A l e r t s Fa1se

-
Workbooks .Open CSVFi leNatne
Set CSVFile ActiveWorkbook
Activesheet .UsedRange .Copy Destination:-ImportToCel l

--
CSVFi 1e.Close SaveChanges:-Fa1 se
Ppplication.kreenUpdating T N ~
Ppplication.0isplayAlerts True
Ex1t Sub
ErrHandle:

--
CSVFi 1e.Close SaveChanges:-Fa1 se
Ppplication.kreenUpdating True
~plication.0isplayAlerts True
MsgBox "Error " L Err & vbCrlf & vbCrLf & Error(Err). -
.
v b c r l t i c a l 'Bqad metody Import"
End Sub

W n l u utwomia eg~emplarzaklasy C N F l l eClass n a l w najpimv zadeklarowaf mienrq


typu CSVF i1eClass. Oto prryklad:
Dim CSYFile As Nm CSVFileClass

Motna tet najpinw zadeklarowaf miennq obiektowg a obiekt utworzyf wtedy, kiedy
W z i e potrzebny. Taka operacja wyrnaga utycia instrukcji D i m i Set:
Dim CSYFlle As CSVFileClass

Set CSVFile -
rvtqmduamkieYimrykod
Heu UVFileClass

W prrypadku zastosowania instrukcji,Dim i Set obiekt nie istnieje do czmsu wykonania


instrukcji Set. W ten spos6b rnotna zaoszczqkif pami@, p o n i m obiekt jest tworzony
dopiem wtedy, kiedy jest tzeezywifcie potrzebny. W kodzie motna urniefcie instmkcje
wanmkowe, kt6re zadecyduja czy obiekt bqdzie faktycmie utworzony. Dodatkowo za-
stosowanie instrukcji Set urnokliwia utworzenie wielu epcmplatzy obiekru. Po utwo-
rzeniu egzcrnplarza o b i e h motna wykorzystywaC wlaSciwofci i mctody zdefiniowane
w module klasy.

Jak rnotna z o b a q f na rysunku 292, edytor Y h u i Baric autoinatycmie wyfwietla skh-


dowe zdefiniowaocgo obiektu klasy; Po wpisaniu nazwy zmiennej i kropki wyhvietla
siq lista wtdciwo8ci i metod obiekht.

Ponitsm pmcedura pokmje sposbb zapisania tamacmego z a h u do pliku CSV


o nanvie t e m p . q majdujqcego siq w tym sarnyrn katalogu, co bieacy skoroszyt:
hrb m n g e 0
Dim CSVFile As New CSVFileClass
On Error Resune Next
With CSVFile
. -
ExportRange kctiwWlndow. RangeToExport
.Export CSVFi1eName:-ThisWrkbook.Path & '\tenp.csv*
End With
End Sub
Rysunek 29.2. E d y t w Visual Baslc automatpmie wySwfetla llste wta5chva5cl i mctod

Zastosowanie mktury With . . . End W t h nie jest obowiqdcowe. P r o c e d u ~r 6 m i e


dobra motna zapisak w nastpujqcy spos6b:
Sub EqmrtARangeO

-
Dtm CSVFlle As NEWCSVFIleClass
CSvfi 1e.ExportRange ActlwWi&u.RangeToExport
CSVFt le.Expf-t 13VFlleName:-Thf s'dorLbook.Path 8 '\temp.csv'
End Sub

Ponhzn procedura pokazuje s p d b importowania pliku CSV,pocqwszy od aktywnej


kodrki:
Sub ImportAFi 1e( 1
Dim U W t l e As New CNft leClass
Cm Error Resune Next
With CNFile
-
.ImrtRange ActiveCel 1
.Import CSVFi1eName:-RttsMbook.Path 6 '\tmp.av'
I f Err o 0 Then Ys-x "Nle mtna zalrrportcwk ' & IhlmrkW.Path &
-\temp .CSV"
End With
End Sub

Nie ma pm&6d, by zdefiniowd wivej niz jden egzemplarz obiektu Na przykhd


poni2szy kod twony tablice mcch obiekt6w CSVFi leC1 ass:
762 CzeJC VII lnne zagadnienia

Sub Export3Fi les( )

--
Dim CSVFile(1 To 3) As Nen CSVFlleClasr
CSVFile(1) .E ~ r t R a n g e Range('A1 :A2D")

-
CSVFi 1e(2). ExportRange Range('01 :B2Du)
CSVFlle(3). ExportRange Range("C1 :C2D")

For r = 1 To 3
CSYFile(i).EXport CSVFi1eNam:-'P11k" L 1 8 '.csv"
Next i
End Sub
S korowidz
IIADR!, 73.767 Addlns, 168,598
#ARG!. 73.268.778 Comments, 600
#DZIEUD!, 73 dodawanie pozycji. 598
#LICZBA!. 73 Fullname, 599
#N/D!. 73 Installed, 600
#NAZWA?, 73 Name,599
#ZERO!. 73 Path, 599
<head>, 93 Titlt, 600
<style, 93 usuwanie pozycji, 599
<rablu, 93 wlaSciwoSci, 599
zdmnia, 602
AddinUninstall. 542
A Additional Controls, 393
Al. 65 AddMenurtern. 655
AbortPmc, 539 Address, 170,702
AbuthgStleetion. 300,301,302 AddShcetAndBunon. 736
Abs, 81 1 ADO, 37,55,579
Accelerator, 375 pobicranit danych z pliku A c c e m 580
Access, 478,580 adm URL. 566
Activate, 294,385,386,490,508,542,543,548, A M M L E x p o n . 542
553.559 AAnXMLlmpon. 542
Activecell, 178 aktualiracja
ClearContents. 179 aplikacji. 133
SeIeclion, 179 modulu VBA. 734
Activechart, 178,485,490 aktywacja
Deseltcq 49 1 aplikaeji. 567
Activesheel 178 Excola, 32
Name, 179 H Y ~ 490 .
ActiveWidw, 17% Alarm, 342
Visible, 491 ALLBOLD, 325
Zoom 403 AllCells, 3 1 1
ActiveWorkbook. 147, 178,486 AlIVisiblt, 213
Nam+ 179 analizq 56
Savcd* 775 Analysis TaolPak, 56
ActiveX. 95, 122 automalycme sumy a@ciowe, 56
ActivcX Data Objects, 37 danych, 37
Add 1aOButtons. 740 funkcji niestandardowj, 264
Addcomment, 177 konspckry, 56
AddConml, 559 narr@zja. 56
AddFromGuid, 732 Solver, 58
AddinInstall, 542 aatystycq 56
tabcle p3-=smwne, 57
838 Oodatti

Analysis ToolPalq 48,56,261,585 Quit, 78 1


And, 205 RangeSelection, 178
MI. 135,287,288 Run, 234,596
aplikacja arkusza kalkulacyjncgo, 105, 106 ScrmnUpdating. 256
interfejs utytkownika, 123 Sekction, 178
kategorie. l 10 StatusBar, 42 1
odbiorcy. 108 Thisworkbook. 178
projektowanie. 'I 17 Version, 697
ronviqzywanie pmblembw, 109 Volatile, 271.325
apiikacje, 39 widciwo$ci, 178
aktualizacja. 133 zdmenia. 555
aktywacja. 567 Application Programming Interfac+ 288
dystrybucja 132 ApplyBunon-Click, 463
jednego u2ytkownika. 112 Areas. 300
komunikujqce sip z barami danych 115 argumenty, 170,227,240,242
Kreator amortyzacji potyczek, 683 ByVal. 242
menu, 639 funkcjc, 268
Microsoft Office. 567 nazwanc, 170
miedynarodowe, 703 nicoknflona liczba. 280
monitorowanie zdmch. 557 opcjonalne, 274
oczckiwanie na zakohczenie. 565 prwedury obshgi rdarnh 540
paski nanqlzi, 609 przekazywanie. 240
pod klucz I 15 tablice. 274
pmjektowanie, 690 w b u d o m e okna dialogowe. 363
shareware, l 12, 134 arkuu. 40
spaghetti, 1I2 aktywacja, 417
system pomocy, 667 aktywny, 40
tcstowanie, I28 blokowanie modiwoki pmwijania. 780
uruchamianic. 563 dialogowy, 40
user-oriented, 683 dialogowy Excel 5195.42
W k o w e . 112 fonnuly. 63
wenje narodowe, 699 funkcjc, 263
wtqczanie obslugi zdarza. 554 kolor raktadek, 766
wygodne dla uZytkownika, 683 kolory. 40
zdarzcnia, 553 kolumny. 40
AppActivatc, 567, 807 korndrki, 4 1
AppEvents-Workbookopen, 556 konspekt, 56
Apple 11.29 kontrolki, 368
Application. 142. 167, 173, 175 Ijczba kolumn, 766
ActivcCell, 178 liczbn wienzy, 766
ActiveChart, 1 78 makra MS Excel 4,42
Activesheet, I7X makra XLM,42
Activewindow, 178 moduty VBA, 40
ActiveWorkbook, 178 pliki XLA. 595
Calculation, 76#5 pliki X U , 595
Dialogs. 361, 792 powipkszanie. 402
DisplayAlerts. 785 pmtwamnic, 3 12
EnableCancelKey, 257 pmwijanic, 402
EnableEvents. 388.538 rozmiar, 41
GctOpenFilename, 354 synchronizajs 313
Goto, 780 wiersze. 40
Help. 680 . . wyki-esy, 41,490
InputBor 787 wyhietlanie tekstu pornaey. 670
International, 699 wyhvierlanic w formulamrch UscrFonn, 446
OnUndo. 467 zdmmia 547
Skorowidz 839

arkua kalkulacyjny, 29, 1 l 1 kwcrcndy, 55


aplikacje jednego &?ytkowniks. 112 Mcuch polqczcnia, 479
aplikacje spaghetti. 112 twoizcnie tabel pnestawnych. 478
formaty plikbw, 87 wybieranie zakredw. 54
historia, 29 zapytania, 479
jednoblokowy budtct, 113 zewnqtrma, 55
Lotus 1-2-3.30 baza wiedzy Micmsotl, 802
modele warunkowe, 114 Beep, 807
MultiPlan, 34 BeforeClose, 542,546
pizeznauony do u2ytku prywatnego, 11 1 BeforeDoubldJlick, 508, 548,553
Quanro Pro, 33 BeforeDragOvcr, 559
SuperCalc, 29 BeforeDmpOrPaste, 559
VisiCalc, 29 Beforeprint, 540.542,545
mkunowa baza danych. 53 BeforeRightClick. 508.548.552. 553
erku~z-wykrcs,523 Beforesave, 542,544
Amy. 276.81 1 BefonUpdate, 387
As. 198 BeforeXMLExport, 542
Asc.811 BcforcXMLlmport, 542
ASCII. 49 BcginGroup, 629.797
asystcnt pakidu Office. 674 bezpieczehstwo. 120
Ah1.811 biblioteki. 187
Author, 173 DLL. 287
Auto DaCa Tips. 157 GUID, 732
Auto Indent, 158 VBA Extensibility, 732
Auto List Members. 157,779 Windows Scripting Hon, 71 1
Auto Quick Info. 157 blokowanie
Auto Syntax Check, 156.190 kombrek, 130
Auto-Open, 344.537 obiektbw arkusza, 130
Au~ofiltr.53, 54.59.79.522 pmwijania arkusta, 780
Autoformatowanic. 401 btgdy. 106. 128,129,243,767
autokorekta 46 #ARG!,26#
Auloksaatty, 5 1 data. 203
automatycrne formui, 73
sumy q f c i o w e , 56 kody, 817
wykrywanie. 622 komunikaty, 244
automatyzacj&37,563,569 obejfcie. 129
OLE, 187,569 obslug& 243
p 6 h e w i m i c . 571,572 prrcchwytyvenic, 243
w c m e wiqmnie, 570 runtime. 185
zm.@zanic Excelem, 576 sktadni, 156,243
zai-qjzanie Wordem, 573 uruchomienia, 243
crutoscnsing, 622 usuwanie, 283
VBA. 817
wartofci. 73
wvkrywania 283
BOOI&,-192, 194
BackBurton. 429 BoundColumn. 414
BASIC, 139
Break on All Emom,243,771
baza danych, 53
BUBBLESIZE FROM-SERIES. 502
A c c t g 478,580
BubbleSort 2 5 j
ADO,55 Builtln, 629
arkurmwa, 53 B u i l t i n D o c u m e n ~ e s325
,
DAO. 55 Button, 368
tiltrowanit danych, 53 Byte, 194
formaty plk6w, 88 ByVal. 242
ChDir, 708.807
ChDrive, 708,807
Calculate, 508,548,553 CheckBox. 122,367,368
Call. 233,237,596,807 CheckVmion, 606
CallByName, 81 1 CHM. 667
Cancel-OnKey, 562 Choose, 8 1 1
CancelBunon. 429 Chr, 811
CanPlaySounds. 341 Chmnienie
Caption. 392.629 arkusza. 59
Category, 702 skoroszytu, 59
CBool, 81 1 Clot. 81 1
cbPreview. 418 Class Modules. 147
CByte, 81 1 Class-Initialize, 539
CCur. 81 1 ClearAllButFormula~649
CDate. 81 1 ClearContents, 17 1
CDbl. 81 1 Click, 378. 559
CDec. 195.81 1 CLng. 81 1
Cell. 169 Close. 149,807
Cells. 179, I81 CloscAIIWorkboo~3 12
Cel IT= 305 CloseBunon-Click. 464
Change, 387.388.404,430,547,548 Code, 146,148
Chart. 142.385.485.486.487. 538 wfanic sh1k6wprocedur VBA, 467
Activatq 508 Collections. 142
Activechart. 485 Color, 176
BeforeDoubleClick, 508 ColorFormat 175
BeforcRightClicl; 508 ColorJnda. I76
Calculate. 508 ColurnnCount, 413
Dcacttvate, 508 ColurnnHeads, 414
DmgOver, 508 ColumnWidrhs, 414
DngPlot 508 COM, 587
MouseDown, SO8 ComboBox, 367
MouseMove. 508 ComboBoxOperatim-Cke, 463
MouscUp. 508 CommandBac, 142.363.640
Rcsin. 508 Add. 618
Select. 508 Bu~ltln.620,621
S e r i e s C h a n ~508 Controls, 625
rdammia, 508 Ddcte. 620
Chart_Acrivate. 509.539 Enabled 620
Chart-Deactivate. 5 10 L e t 620
Chart-MouseMove, 517 Name. 620
Chafl-Select. 509.5 10 Position. 620
ChartlsSelected, 492 Pmtcction, 621,622
ChartObject 486.487.491,507 Top, 62 1
ChartObjects, 168.494 t w o m i e pask6w paleafi. 618
Activate. 490 . Type. 62 1
Delete. 492 Visibk 621
Chmts. 168 w y h r d a n i c obiikt6w. 617
Delne. 492 CamrnandBarButton. 625
Chartspace, 444 Style. 629
dodawanie knmolki. 445 CanmandBarComboBa~625
tworanit wykresu, 445 Style, 629
udostqnianie kantmlki. 444 CommandBarComl, 645,648
ChartTitle. 486,487,492 CommandBarPopup, 625.645
ChartType, 494 CommandBws, t 42,364.61 7,614,646
ComandButton, I21.122,367.368,376.382.395. CMate. 811
438 CVErr, 81 1
CommandTcxt, 479 crss, 46.79
Comment, 172,175, I77 wpmwadzanie. 79
Application, 173 wylwietlanic. 315
Author, 173 czcionki. 159
, Creator. 173 domySlnc. 766
Delete, 174 pobicranie listy, 317
rnctody, 173 CZESTOS~,78
N e a 174 CZY.Bt, 78
Parent, 173. 174 CZY.BIS\D, 304
hcvious. 174 CZY.LICZBA,77.274
Shape, 173 CZY.LOGICZNA, 304
Tcxf 174 CZY.TEKST. 304
Visible. I73 ezytmie plik6w tekstowych, 715
wlaSciwadci. 173 czytelnoic? kodu hMlowego. 170
zbi6r. 174
Comment Block, 192
Connection. 479
Const, 201,'807 DAO. 37.55.579
Context. 433 dam 46.79
ContinuePmdure, 353 WY,203
ConlracuUlSaics. 503 s p d r o b 1900.80
Controls. 390 VBA, 203
CONVERT. 779 wprowadzanie, 79
ConvcrtChartToPichlrc, 5 15 wylwietlanie, 315
Copy. 292 qodmfc 705
Coz 81 1 DATA 203
C O M A 383 Data Acnss Objeccr 37.579
COUNTBETWEEN, 327 Data Interchange Format, 89
COUNTVISIBLE. 328 DataLabelsFmmRange. 503
C P L 568 Date, 194,203, 807, 81 1
CR LF, 718 DateAdd. 8 1 1
CretueADcadChart.516 D a t e A n C i c , 315
CrclucAToolbar. 619 DateDiff, 81 1
CreatrMcnu. 648 DatePaG 8 1 1
CreatcObject, 571,572,576, 81 1 Dateserial, 203,705.8 1 l
CreatePivotTnblc, 473.474.477.479 Datevalue. 81 1
CrcateWorkRange, 463.464.465 Day.81 l
Creator. 173 DBF. 88
CSng. 81 1 DblClick, 559
CSS. 94 DDB. 812
cstr, 81 I DDE, 121,563
csv, 89 Deactivate, 386.508. 542.544.548.553.559
CSVFilcCtsss, 757,758 deaktywacja
E v a n , 758 menu, 653
Import, 759 menu godrpcmych, 663
metrdy. 758
w)ilcrc54 491
wlaSciwoSci. 758 Debug, 252,283
zmimnc, 757 Print 240.283
CurDir, 8 1 1 Decimal 194. I95
Currency, 194 Declare, 807
CumntRegion, 294 Default, 392
CVaa, 81 1 Default to Full Moduk View. 158
DefBool. 807 modyfikacja, 592.795
DefSyte, 807 odwolania do plik6w. 605
DefCur, 807 opis, 794
DcfDate, 807 optymalizacja wydajnohi, 602
DefDbl. 808 podgl~dzarabezpieczonego dodatku. 597
DefDec, 807 problerny, 604
definiowanie nanv. 69.70.72 procedury VBA. 5%
Deffnt. 808 skoroszyt, 60 1
DefLng, 808 skomszyt XLS. 585
DefObj, 808 testowanie skomszytu. 589
DefSng, 808 tworzcnie, 586,588, 590, 593,794
DefStr. 808 wprowadzanie opisu. 590
DeNar. 808 wykrywanie wersji Excela. 605
deklaracja 149 XLA, 59 1.594.795
funkcji. 265 XLL, 591
procedury Sub. 227 X U . 594
stale. 201 znpewnienie tainstnlowania. 604
tablie, 205 DoEvenu, 377.812
zrniennych. 1% dokumenty
Ddete. 174 ukrywanie, 130
DeleteEmptyRows. 303 Word4 573
DeleteHiddenNamq 69 XML. 96
DeletcScaing, 808 Do-Loop. 808
Designer. 738 domySlna
DcsignTimeButton, 739 acionka, 766
diagnmy, 52 drukarka, 339
Dialogs, 361 DOS. 32
DIF, 89 dos~~p
Dim. 198,205,760.808 binamy. 714
Dir. 708,812 do bazy danych 53
DisableAllShoncutMenus. 664 lasowy, 7 14
DisablcCell, 664 sckwencyjny. 714
DisableChartEvents. 513 dostosowywanie. 43. 49
DisplayAlarrn. 560 kontmlek. 392
DisplayAlcrts, 785 menu. 123,642
DisplayGridlinrs, 205 okna Toolbo% 391
DLL,287 park6w. 125
Do Until, 225 pask6w narqdzi. 61 1
Do While, 224,225 VBA IS5
dodatki, 37.92.585 dot, 142
Analysis ToolPak 585 Double. 194,201
automatyzacja, 587 Drag-anbDrop Text Editing, 158
bezpicczaistwo, 588 Dragover. 508,553
COM, 587 Dragplot 508.553
dystrybucja, 592 Drives, 712
dysqbucja paske nmqdzi. 6 16 dmkarka domy3lna, 339
funkcje niestandardowe, 287 drukowanie
-instalacja. 592, 794 liczba shah 315
kolekcja AddIns. 598 t i d e dostqpu z n m q skomszytu, 767
konfiguracja skoronytu, 589 wbudowane wykmy, 5 15
kontrola mmiaru pliku, 603 wyfwietlanie day, 325
konwenja aplikacji XLS, 586 m,I I0
menedter dodatkbw, 587,591 Dynamic Data Exchange, 121.563
Skorowidz 843

dynamicma Enter. 387


rnodyfikacja podpisbw na kontmlkach, 633 EnbyIsValid, 551
wymiana danych, 563 Enum. 808
dynamicme formulane Useff o m , 743 Environ. 812
dystrybucja EOF, 812
aplikacji, 132 Eqv. 205
dodatk6w. 592 Erase, 808
pask6w nanpdzi, 6 15 Err, 244
DZIS, 49,269 Number, 244
dtwiqki, 340, 766 Emr. 244,387,559,808,812
Error Trapping, 160
etapy projektowania. 117
E etykieta. 369
edycja Event, 808
makr. 166 Excel 200D. 36
tabcl przeshwnych, 482 Excel 2002.40.48.49.587
edytor Excel 2003,29,34,36 39
menu, 125,795 interfejs u e o w n i k a , 42
przycisk6w paska o m , 44 ochrona, 58
rejestru. 100 ochrona pncd bpiowaniem, 32
tekstu. I10 pomoc tahniczna. 80 1
VBE. 141 Professional Edition. 56
Visual Basic, 40.61 prze($cmiki wiersza poleceli. 86
cfda falowy. 73 uruchamianie. 85
EIS. 1 15 ustawienia, 100, 101
Eksplorator projckt6w, 146 ~ d m i z innej e aplikacji. 576
eksport =by online. 801
obiekt6w. 148 zgodnoM wcrsji. 58
XML. 96.99 Excel 3.35
zakresu do pliku HTML. 723 Excel 4,35,764
h s u do pliku tekstowgo, 718 Excel 395.35.42
zakrcsu do pliku XLM. 726 Exal97,35,58,642
elementy jptyka V B 4 189 Excel Easter Eggs 805
Else, 215 Excel far Windows. 34
I Elself, 216 Execute, 7 10
EmbChartClass, 5 14 Executive Infopmation System 115
cmulacja Exit. 387
hnkcja S U M 280 Do. 225.808
okna dialogowe Excela, 393 For, 222,223,808
I emulacja funkcji MsgBox, 432 Function, 266,808
funkcja emulujqca, 434 Propeny, 808
MyMsgBox, 433 Sub, 228,808
UserForm-Initialize, 434 Exp, 812
EnableCalculation. 765 ExpandAIISaies, 503
I EnalflcCmcelKey, 257 Export, 734
EnablcChartEveng 513 Export File. 148
Enabled. 629 ExportRangs 718
EnableEvents, 388,538 E x p o r t T o m 724
End 200,808 ExportToXML, 727
End Function, 265,266 Exlcndcd Date Functions, 80
End If. 150 extensible Markup Language, 36, 140
End Sub, 198.228 EXTRACTELEMENT. 33 1
i End With. 154
For Each, 174
Next, 212,808
FsceID, 429,630,796 Forecolor, 175
faktury, 784 Format. 40.8 12
False, 205 FonnatCuntncy, 812
Falsz, 4 1.46 FormatDateTimc. 812
FAQ. 763 FonnarNumk. 812
dodatki. 793 formntowanic, 50
Excel. 764 kom6mk 5 I, 362
formulsrzc UserFom, 788 liczbowc, 50
funkcje, 776 style, 50
mctody, 779 warurukowc, 51.773
obiekty. 779 WykYecrrdw. 493
paski poletdi, 795 FormarPercent. 812
pmcedury. 771 fwmaty. 83
VBE. 768 CSV, 89
wlafciwoki, 779 DBF. 88
rdancnia. 779 DIF, 89
FileAttr. 812 HTML 92
FilcCopy. 708.808 Latus 1-2-3.87
FileDateTirnc. 708. 812 MSO, 94
FileDinlog. 360 plilu baz dmych. 88
FileExists, 321,708 plikr Excelq 697
FilcExists2,710 Pnxmrowe, 47
FileExists3,712 Quanra Pro, 88
FileLen. 708,812 SYLK. 89
FilcNarne. 710 89
FiIeNamd3nly. 321 UlamJrm 47
FileScarch. 320,710 WBI. 88
E x e c u ~ c 710
. WB288
FileNamc 710 WB3.88
FoundFileg 710 WK4.88
LookIn, 710 WKS, 87
NcwSeerch. 710 WQI.88
SearchSubfoldcn, 710 XLS, 93
FileSystemObjcct 71 1.714 XLW,90
Fill, 175 Formula 5Q0,702
FILLCOLOR 325 FormwIaRlCl. 183,702
FillFmat, 175 Formulase, 368
Filter, 812 formulm UserFwm. 35.37,44.121,365,395,421
FilterFilh 721 Activate. 385,386
filtmwanie plikn t&towcgo, 721 aktywacja arkusq 417
Find, 31 1 Caption 437
FindContml, 317,363,626 CornmmdButton, 395,438
FindFiles. 713 CantrolSourcc, 789
FindFonnat, 3 10 Deactivate. 386
FinishButton. 429 dodawmic kontrolck, 366
Fix, 8 12 dodawan~ckomlki Chartspace. 445
Fol~owHyperlii548 dodawan~eprzyciskbw ComrnandButton w fazie
For ...Nut. 22 11,808 pmjektowania, 739
Exit For, 222,223 ddawanit zakladek, 391
Step. 222 dosrmwywanie kontrolek, 392
TO,n l dynamime, 743
edycja kontrolck, 370
emulacja finkcji MsgBox, 432 SprradsW 447
emulacja okien dialogowych Excelq 393 symulacja w W c h d c i Co to jest?, 676
faza projektowania, 738 system pomocy. 671
faza wykonania, 738 szablony, 393
Font 373 tablica konb-olck, 789
gencrowanic w locie, 742 tckst podpowiedzi, 391
Hidz 790 Termjnatc. 386
ikony, 391 testowanie, 376
Initialize. 385,386,415 TcxtBox, 388
klawiaturq 373 tworzcnic, 378,394
klawisze skr6tu. 375 twoncnic Jzablon6w, 393
kolejnog tabulacji kontrolek. 374 ukrywanic, 377
kontrolki ActiveX, 392 umieszczanie konmlck w fazie pmjcjcktowania.
krcatory, 427 738
linic siatki. 371 UserFonn Dduxe, 450
Ihta plikbw, 791 w w a n i e przycisku Zamknij, 789
ListBox, 3%. 404 wielkoit k o m l c k , 370
tadowanic do pami@, 376 wlaSciwoSci, 373
Iqczenic kontrolek, 392 wlakiwofci kontrdek, 371
menu. 395 wldciwog Ta& 389
MultiPagc, 418 wskafnik postqpu radania, 421
niemodalne. 402.435 wskatnik posypu zadaniawykanystujqcy
niszczcnie, 790 MultiPagc. 425
obrazy. 369 wstawinnic, 365
obsluga wielu przyciskdw w proadurn obslugi wybbr koloru, 441
dam&. 438 wybbr wierszy 415
odwolania do komr~lelr,390 wykresy, 505,789
okno powitalne. 398 wytqzanie pycisku Zamknij, 400
Operacje tekitowc, 459 wwidlanie, 375,381,390
pwk p m i j a n i & 370 wyiwietlanie arkuny, 446
pasek tymtu, 792 wySwietlanic W u pamocy, 472
pocz.qtkowa pozycja.793 wy4wictlanic wykrc%w, 442.443
pok~rlo,370 zakladki. 369
pole PPY, 367 zamykanic, 377
pole kornbi, 367 zarnaczanie zakrdw, 397
pole listy, 369 zdarzcnia, 378,385,386,558
pole 1ek;towe. 370 zdobywanic infonnPji nr tmurt zdarza5.385 -
pole wyboni. 367 rmiana wielkosci, 401
polotrnic konbol* 370 fomuty, 46,4863,119,262,174
powiqkszanic arkusts, 402 btcdy, 73
procedury obslugi zdameh, 365,378,382 efekt felowy, 73
programowe, 74 1 fimkcjc, 324
Propvticf 36Cj nanuy, 67.71
pnnvljanic arkusEg 4UZ o b l i d e , 63
pnyciski opcji, 369 odwolania do -k 64
przyciski poleania. 367 o d w h i a do mkrcsu, 64
p-iski przc~cmilcq370 pohdnie, 82
QueryClose. 386 SERIE. 4%. 497
RefEdif 397 fmmuty tabiicowq 74.75
rysunki. 791 kalendmq 75
samodziclny wsknhik pasypu zadaniq 422 S W 78
ScrollBar. 402 wmowanic, TT
SpinBunon, 386.388 wpmwadzmic, 74
sprawdzanie poprawdci danych, 384 zliaanic, 77
846 Dodatkl

FoundFiles 710 GetRegistry, 343


Frame, 367,374,379,392 GetSaveAsFilcnmc, 357
Caption, 423 GctSystemDirectory. 605
FmFile, 812 GctSystemMctrics, 340
Frequently Asked Questions. 763 GetValuc, 322,323,324
FullNamc, 755 Get WindowsDirectoryA. 288,289
Function, 141,149,261,262.264,266,323,808 identytikacja katalogu systcmu Windows, 288
funkcje. 37.48. 152,261,262,265,268,320 Jlf, 2 17
Alarm, 342 ILE.LICZB, 76
ALLBOLD. 325 1LE.NIEPUSTYCH. 76,79.529
analizy danych, 37 InputBox, 2%. 298,347,787
Analysis TooIPak. 778 InRange. 304
argumenty, 264,268,273,778 inspekcji. 48
Array, 276 interfejs API, 290.338
Auto-Open, 344 ISBOLD, 325
bez argument6w. 269 IsEmpty. 225
CDec, 195 IslnColltction, 323
CellType. 305 ISITALIC, 325
ChartIsSelccted. 492 ISLIKE, 330
ContinucProadurc. 353 IsMissin& 275,277
COUNTA. 383 IsNumber, 274
COUNTBETWEEN, 327 IsNumeric, 282
COUNWISIBLE, 328 JEZELI, 261
CreatcObject, 571,572 kategoric, 285,777
CrcatcWorkRange, 463 KOD. 49
CZCSTOSC,78 KOM~RKA,49
CZY.M, 78 LASTINCOLUMN. 328,329
CZY.Btqn. 304 LASTINROW. 328.329
CZY.LICZBA. 77.274 LASTPRINTED, 326
CZY.LOGICZNA, 304 LASTSAVED. 325,326
CZY.TEKST, 304 LBound, 253
DATA. 203 Len, 265
Dateserial, 203 LICZ.JE~ELI, 76.77.79.240
dctiniowanie kategorii, 285 LICZ.PUSTE, 76
dcklaracja. 265 ListFiln, 709
DeleteEmptyRows, 303 LITERY.WIELKIE. 208,269
DelcteHiddcnNamcs. 69 LOS, 240.269.270
dodatki, 287 MAX. 334
D Z I S , ~269
~. MAXALLSHEETS. 334
Error, 244 MonthNama, 277
Exccla, 261 MS~BOX,171,196.210.283,3si,680, n 9
EXTRACTELEMENT, 331 MyMsgBox, 435
FileExists, 321,708 MySum, 281,282
FileNameOnly, 321 nieokreSLona liczba mgumcntdw. 280
FILLCOLOR, 325 nicstandardowe. 261,262 284
fonnuty. 267 NOMIDDLE, 82
GetAColor, 44 1,442 opakowujqce, 289
GetDirectory, 358 opcjonalnc argumenty, 274
GetExecutablc, 338 opis, 286
GetKeyState, 290 PathExisg 321
Getobject, 571,572 PIERWIASTEK. 209
GetOpcnFilmame. 354, I t 0 ponowne wykonywani~271
Getoption. 743, 745,746 prztlienvlic f d . 778
GetProfileStringk 339 PRZESUNIECIE. 529
Skorowidz 847

RANDOMINTEGERS, 335 zasipg, 266


RangeNnmeExists, 322 zastosowanic, 263
RANGERANDOMIZE. 336 zwracanie infonnacji o fonnatowaniu kom6rki. 324
RegCloseKcy, 342 zwracanie tablic jqzyka.VBA, 276
RcgCreateKeyA. 343 zwracanie wartodci Mdu, 278
RegOpenKeyA, 342 FV, 812
RegQueryValueEIck 343
RegSetValueExA. 342
Reverse. 263
RGB, 176.787 generator formularzy, 110
RUN, 764 generowanie
SaveWing, 466 kodu VBA, 736
Seek 716 niepowranalnych numer6w faktur.
ShatExists. 322 Get, 808
SheetName, 327 GetAColor, 44 1,442
SHEETOFFSET. 333 GetAIISettings, 8 12
Shell. 563 GetAnr, 708,s 12
ShellExecutc, 566 GetDefaults, 689
Split, 33 1 GetDirectory, 358
Sqr, 209
GeExecutablc, 338
SQRT, 21 1 GetKeyState, 290
STATFUNCTION, 332 GcrObject. 571,572,812
StaticRand, 271
GetOpcnFilename, 354,356,710
statystycme, 56
FilcSilter, 354
SUMA. 54.76.78.261.280 Filterlndac. 355
SUMA.JE~ELI,76-77
Getoption. 743, 745,746
SUMY.POSREDNIE, 36,79 GeiPmfileStringA, 339
SREDNIA, 54,261: GetRegistry, 343
tablice. 274
GetSaveAsFilmamc. 357
TEM.269
TmtGetValuc, 324 GetSming. 812
GetSysternDimctory, 605
Time. 215
ToggleGridDisplay. 455 GetSystemMarics, 340
TRANSPONUJ, 276 Getvalue. 322.323.324
TypeName, 1% GaWindowsDirecto~y4288.289
UBound, 253 GIF, 94,505
UCase. 208,256 GoSub ... R a m , 808
Union, 304 GoTo, 214,780,809
UpCasz 269 GoToMax, 309
usuwajqce M@y, 283 GroupNamc, 370
VBA, 82,209,261,807 grupy dyskusyjne, 763,802
wbudowane, 208 arkusze kaikulacyjne. 803
WeekDay. 234,543 Micmsoft, 803
wielofunkcyjne, 33'2 wyszuktwanie infmecji. 804
Windows API, 287 w,110
WwkbookIsOpcn. 322 GUID, 732
WorkbookName. 327
wrapper, 289
WriteRegistry, 343
wstawianie. 48,263,267 hasla, 60,130.13 1,769
wykonywanie, 267 kod VBA. 60
wykrywajqce Mqdy, 283 skwoszyt, 60
wykiywanie wcisnipcia klawisza Shift. 289 &Title, 142
WYSZUKAI.PIONOWO,271,532 Height, 373,392,427
wywotywanie z procedury, 267 Help. 680
HelpB~tton~Click, 464 Initialize. 376,385,386.391.41 5,423.559
Helpfile. 433 Input. 715,716,812
Hex. 812 Input C. 716.809
Hide, 377 InputBox. 296,298,681,787,812
HideAIIT~lbam,624 funkcja VBA. 347
HideMenu 654 rnetoda Excels, 349
hierarchia obiektbw, 142, 168 InRange, 304
hiperlqcza. 55, 172 lnspekcja formul. 48.73
HLP.677 instalncja dodatku, 592
Hour, 8 12 InStr, 8 12
HTML,38,55.92 InStrRev. 812
twomnie interaklywnych plik6w. 94 instrukcje, 807
macmiki. 93 Int, 812
HTML Help. 667.677 Integer, 194
wiqzanie pliku pomocy z aplikacjg 678 Integrated Development Environment 729
w i v i e ternar6w pomocy z funkcjami VBA, 679 infel igenme
wyiwietlanie plik6w. 680 paski nafqdzii 622
HyperText Markup Language. 38.92 tagi, 45
intcrakcja zaplikscjami. 563
intetaktywne
I pliki HTML, 95
Id. 626,529,646 sekwencjc okien dialogawych. 427
IDE I29 intcra)aywncwyb'ay, 530
dostcp prognmowy, 730 dane, 53 1
model obiekt6w trodowiska, 730 przyeiski opcji, 531
References, 732 ronvijana lista. 53 1
VBCornponmts. 73 1 twomnie, 533
VBPmjccts. 73 1 z a k s danych. 532
If, I50 interaktywno6&530
...
If Then.215 intcrfcjs MI. 287.288
Else. 215,216,809 interfejs uzytkownika. 42, 121
IIL 217.812 dosmsowywanie, 49
ILE.LICZB. 76 inteligentne tagi, 45
LE-NIEPUSTYCH, 7679.529 menu, 42
Image. 369,505 menu kaslradom. 43
Picture, 444 menu podqcmc, 43
Immediate. 90. 146. 149. 167. 187 niestandardowe o h dialogowe, I22
wykonywanie pmcedur, 239 okna dialogowe, 44
Imp. 205 panel zadah. 46
Impkrnents, 809 paski naqdzi, 43.125
import pneciunij i upu% 45
obiektbw. 148 sMty klawiaturowc, 45
plih tekstowego. 717 Interior, 176
pliku tekstowcgo do zakresu, 719 International, 703
. wiecej ni2 256 kolumn do skomszytu, nl Internet, 55.62
XML,96.97 Internet Explorer, 93. 95
Impan, 734 Intascct. 283
Impart File, 148 IPmt. 813
ImponData, 717 IRM,6%
IrnportLongLinq 721 IRR. 813
IrnportRange, 7 19 IsAddln, 92,795
Indeks, 619 IsArray, 813
intite.txt, 721 ISBOLD, 325
Information Rights Managemf 6% IsDate, 813
i IsEtnpty. 225,813 kolory, 159
IsError. 813 pmhowywanie, 149
IslnCollection. 323 spagetti, 221
ISITALIC, 325 wpmwadzanic. 150, 190
ISLIKE, 330 kody
IsMissin$275,277, 813 b$d6w. 817
IsNull, 813 jmk6w. 700
IsNumbcr. 274 kolcjno9d
IsNumeric. 2 8 2 813 opentorbw, 205
Isobject, 813 tabulacji, 374
kolekcje. 780
CommandBars. 617,644
J Drives, 7 12
JavaScript 94.%,7 11 References. 73 1.732
jcdnoblokowy budtct, 113 VBComponents, 73 I
JEZELI. 261 VBPmjec*s 73 1
jrz~k kolory. 40, 176
BASIC. 139 Colorfndex. 176
HTML 92 RGB. 176
interpretowany, 139 SchcmeColor. 176
JavaScript, 94 wyMr, 44 1
makr. 764 wypetnicnia, 176
V B A 21.52,139 zaktadck, 766
VBScript, 144 kolumny. 40
XLM.34.52, 140 nazwy, 70
XML. 56, % korncntfuze, 172.175, 191.668
Join, 8 13 Comment. 172
ctcionka, 766
dodawanic, 177
K kolor. 766
kakndarr, 75 testowanic, 177
K O M ~ R K49~
katq graficznc, 135
aktualna r o z d z i e l c d , 340 komdrki, 41, 169
formuty, 63
kaskadowe arkurn styldw, 94
infonnacjc o hatowaniu, 324
katalogi 708
lista plik6w. 709,71 I komcntanq 175, 177
tmowanie istnienih 708. 712 nanvy, 67,782
katcgoric okreslanic typu danych. 304
apliksrji arkurm kalkulacyjncgo. 1I0 ostatnia niepusta, 328
funkcji 285 ronvijane listy, 765
KyDown, 387,559 wprowadzanie wmdci, 296
wprowadranie wartoki do nasgpnej
Keypress, 387,559
KeyUp. 387.559 pustej korndrki, 297
Kill, 708, 809 zliczanie zamaaonych k o d d , 299
klasy. 142.749 hrnponcnty
OWC, 55
CSVRleClass, 757
NumLock, 753 sieci Web. 4%
twotzenie, 750 VBA, 729
twanenie cgmnplanq 760 wyhvietlanis 733
klasyfikacja ~ k o w n i k 6 w .108 komunikaty Mp36w, 244
KOD, 49 konsvekty, 56
kod Mdlowy, 141, 167 konmlki, 37,51,122
a y l e l n d t , 170 ActivcX, 95,122,124,368
dycja, 150
Bunon, 368
850 Dodatki

kontrolki kmtory, 427


Chartspace,444 BnckButton,429
CheckBox. 367 CancelButton,429
ComboBox,367 dane pobrane od utytkownike.432
CommandBunon. 367.395 dodawanie ptzyciskbw. 428
dodawanie do formulama UserForrn,366 FinishButton, 429
dostosowywanie. 392 formula-zcUserForrn. 427
dynamicma modyfikacjapodpis6w. 633 importu tekstu,89.717
edycja, 370 konfiguracja kontrolki MultiPagc. 428
Excela, 124 NmtButton,429
Frame,367 programowanie prrycisk6w. 429
Image. 369,505 przyciski. 428
klawiatura,373 tworzenic,427
klawisze skr6~.375 UpdatcControls,429
kolejnoSC tabulacji.374 wykonywanie zadah, 431
Label,369 wykres6w,52. 485
ListBox. 369,396.404 zaletnoici programowe. 430
ti\ezenie.392 krzywe hipocykloidalne.520
MultiPagc, 44,369,418 ksaaQ, 5 1
odwotania,390 kwartalny raporf 455
okno Toolbox,367 kwcrendy. 55
OptionButton. 369 sicci Web. 55
paski polrccri,629
pototenie,370
RefEdit. 370.397
ScrollBar,370,402
SpinBunon,370,388 Label. 369,379,923
Spreadsheet,446,447,448 LabelPmgms.422.424
Tabstrip,370,419 LASTMCOLUMN, 328,329
TextBox. 370.388 LASTINROW. 328,329
ToggleBurton,370 LASTPRWTED. 326
wielkoS6. 370 LASTSAVED,325.326
wlaiciwo9ci. 371 Layout. 559
wldciwoSci wsp6lne. 373 LBound. 253.813
zdobywanie inforrnacjio ~WiwoJciach, 373 LCase. 813
konwersja aplikacji XLS na dodaG,586 Left, 373.813
konwerter plik6w. 88 Legend,492
kopiowanic. I50 Len.265,813
kodu fr6dtowego. 155 Let, 809
zakresu,292 LICZ.IF&LI, 76, n,79,240
zakresu o zminmej wielko$ci,293 LICZ.PUSTE.76
Kreator amortyzacji pon/czek.683 liczba drukowanych stron, 31 5
GctDefaults. 689 liczby, 50
historia, 686 losowe. 271
inicjalizacja fonnulmza FonnMain,686 Walutowe, 50
menu Narydzia, 686 limik mli, 222
obstuga,683 Line Input #, 716,809
odtwananie usblwiell. 688 linie siarki 455
przetwarzanie zd&. 687 LinkedCell.368
SaveDefaults. 690 Linking and Embedding, 35
skorosqt.685 ListBox. 39,121.369,3%. 404.791
tworzcnie arkueg 687 Addltem. 405
UserFonn-Initialize,686 aktpacja arkusza,417
wySwictlanie pomocy, 687 BoundColumh 414
zqisywanie ustawid, 688 ColumnCount,404,413
ColumnHeads, 414 zgodnoSE ze wzoram 330
ColumnWidths. 414 zmienna dlugofC, 202
ControlSource. 404 lqcza
identytikacja wielu zamaczonych pozycji, 409 aktualizacja, 767
identytikacja zamacmnej pozycji, 408 o brazu. 5 1
Listlndex. 404,409
MultiSclect, 404,409
przemieszczanie poycji, 412
przenoszenie pozycji. 4 10 Macintosh, 698
RowSource. 404,405 MacOS, 699
Selected, 416 MakeFonq 742
umieszczanie pozycji, 405 MakeMemw. 573
umieszczanie pozycji po uruchomieniu aplikacji, MakeNumberFormatDispIay, 633
405 makra, 52. 151, 152,229,771
urnieszaanie pozycji w trakcie projektowania blokowanie komunikat6w Excela. 785
405 cofanic skutkbw, 786
urnieszczanie tylko unikatowych pozycji. 407 edycja. 166
Value, 409 klawisz skr6b, 165
wiele lis 410 Lotus 1-2-3.764
wielokolumnowa kontmlka 413 nazwy, I65
wielokmtne zaznaczcnia, 404 pmnwwie wykonywania. 400
wybieranie wierszy arkusra, 415 rejestrowanic. 153
ListBoxl-DblClick 418 t w o q c e wykrcsy, 487
ListFiles. 709 ukrywanie na li3cie makr. 776
Listlndex, 404 unrchamianie cyklicmq 775
ListMenuInfo. 643 wimsy, 770
ListReferenccs. 732 wstrzymywanie wykonywmia, 298
literaty, 241 wykonywanie, 50
LITERY.WIELKIE, 208.269 wykonywanie po wystrlpieniu d a n e n i a 239
Load, 376,809 wykresy. 487
Loc, 813 wylr\czenie aktualisaeji e h u , 782
Location. 491 XLM. 34,42,52, 140,322,764
...
Lock Unlock. 809 zabezpiencnia, 770
LOF. 8 13 rliczanie wierszy zamauonych
Log. 813 przez uQtkownika, 784
Long, 194 m i a n a orientacji sbony, 153
Long Date, 3 16 maksymalna warto* 334
Long Time, 316
maPY
Lookln, 710 obmkowe, 513
Loop, 224 XML.97
LOS, 240.269,270 Margin Indicator Bar, 1-59
Lotus 1-2-3.30 mar(we wy-, 515
Lset, 809 MAX, 334
LTrim, 813 MAXALLSHEFIS, 334
mciExmte. 341
Me, 377,427
rnegaformuly, 48,8 1
larnanie ha&, 769 formuty poSrednie, 82
la~'~cuchy.152,202 m e n e h dodatkbw, 587,591
polrlcacnia, 479 menu, 37,42. 124,640
stah dlugoid, 202 automatyenre dodawanie. 652
wydzieianie n-tego dementu, 33 1 automqezne usuwdnie, 652
zapytania, 479 bezpoirednic w y b i m i e pozycji 363
CornmandBan, 444
mcnu Miaasaft Authenticode. 133
&aktywacja. 653 MimsoR Knowledge Bau, 802
dodawnnie element6w, 641 Microsoft Offia. 32.38,567
dodawanie na pasku menu, 644 Microsoft Office Object Libtay, 732
dodawanie polcccf~,647 Microsoft Oficc S p d s h e e f 446,447
dodawanie pozycji. 647,649 Microsoft Query, 37.55
dostosowywanie, 123.642 Microsoft Script Editor, 96. 144
Excel. 639 Mid, 809,8 13
Format, 40 MIDI, 340,341,766
formularze UserForm, 395 migmja z Excda 5/95,642
ID. 646 Minute, 813
kaskadowc, 43 MlRR. 813
klawim skr6tu. 641,650 MkDir, 708,809
linie siatki, 657 Mod, 204
ListMenuInfo. 643 model obiektowy, 39,140, 142
modyfikacja 640.796 Srodowiska IDE.730
modyfikacja elernent6w. 642 modele warunkowc. 114
N a n ~ d z i a649 modulo, 204
obraz 641 moduty klas. 749
odtwananic 651 CSVFilcClas~.757
paxk poleeef~.640 dodawanie kodu VBA, 751
podmenu, 640,647 Initialize, 757
pola wyboru. 654 nanvy, 754
pozycja 640 prograrnowanie wllJciwo9ci obiekt6w. 754
programowanie, 652 Terminate, 757
xpantor. 640 wstawianie, 750
synchronizacja z arkusmn, 656 zdarzcnia, 757
tworrcnie. 639,645 zmienne. 757
ukrywanie. 653 d u l y VBA. 40.141
usuwanie elemcm6w. 641 dodawanie. 147
usuwanie pozycji 650 funkcje, 272
usuwanie z paska menu, 646 usuwanie. 148.769
utytkownika, 657 zastqpowanie uaktualnimq w m j g 734
VBA 642 zmiennc, 199
Widok, 43 monitorowanit
wykonywanic proecdur, 232 modyfikacji w wybrwym Eakesie komdrek. 549
wartoki, 283
zakrcsu. 549
zdmnia, 652 monitorowanic zdar&. 535
mak zamaczmia, 797 poziomu aplikacji. 557
menu podrrcne. 37,43.126.641,660 Month. 8 13
deaktywaj a . 663 MonthName. 277.8 13
deakrywacja pozycji, 663 MouseDown, 508,553,559
dodawanic pozycji. 662 MouseMovc, 508,253,559,677
msoBafTypePopup. 661 Mousd3vcr, 5 17
-prrywracanicustammd. 664 MouseUp, 508,553,559
tworzcnic, 664 MsgBox, 170.1%,210,283.351,680.779,813
usuwanie pozycji. 663 cmulacjs. 432
wylyzanie. 797 przyciski, 353
melody, 143, 169. 171. 16.4 wai-toki 352
argumenty, 170 MSO, 94
InputBox, 349 msoBarEhnoa, 4 1
pmgramowanie. 756 msoBarFloating. 621
Run, 234 msoBarLcft 620
Rrybomik formantbw, 368
twonenie, 455
tapisywanie wtawieh, 465
nazwane
wmenty. 170
formuly, 528
kom6rki, 72
zakresy, 72
msoF3arPopup. 621 nanvy. 48,49.67,528
msoBarRight, 62 l formula SERIE, 4%
msoBarTop, 620 formuly, 71
rnsoBarTypeMenuBar, 62 I kolumny, 70
msoBarTypeNormal, 621,627,660 kom6rki, 67.72
rnsoBarTypePopup, 661 rnakra. 165
msoBarTypePopUp. 621 moduly k l w 754
rnsoControlBunon. 628,635,648 nadawanic, 67
msoContmlBunonPopup. 635 obiekty. 73
msoContmlCornboBox. 635 obszar obowiqzywanig 70
msoControlDropdown. 635 odwdania, 68
msoControlEdit 635 operatory p c c i ~ i a69
.
msoContmlPopup. 644,648 pmcdury, 229
msoModeModeless, 675 stale, 70
MultiPage. 44.369.374.418 ukryte. 69
efckt pnmhodznia. 419 wierszc, 70
klawisz Tab. 419 zahsy. 67.72
krcatory, 428 zmicnne, 193,200
MultiRow, 419 New. 760
Style. 419 NcwSearch. 710
TabOrientation, 419 Newsheet, 542.544
TransitionEffect, 419 Newworkbook, 555
TransitionPeriod. 419 Next, 174,223
wskatnik p o n g u zadanis, 424 NcxtBuaon. 429
rakhdki. 419 nimodalne oknadialogowe, 435
MultiPlan. 34 proccdura obshrgi zdwmi. 436
MultiRow. 4 19 UpdateBox. 43 6
MultiSelect, 404.409 vbModelesq 435
My Power Utility Pak, 69 nicokre3lona liczba argumentdw. 280
MyMsgBox. 433.435 niepowtarzalnc numcry faktur, 784
MySum, 281,282 niestandardowc
funkcje a r m 265
typy danych. 208
niestandardowe okna dialogowe. 37.44. 121
Mdaftraaie n m , 67 tworzenie, 122
Name, 142,392,702,708,809 NoDupcs, 407
Names, I68 NOMIDDLE, 82
nap& 708,712 Not 205
naprawianie ptik6w, 6 7 notacja
nanpdzja, 456 Al. 65
Execla, 455 WIK1.65
Formulme. 368 Nothing. 177
Operacje tekstowc, 457,458 Now, 813
pakicty, 470 NPer, 813
Power Utility PI&, 469 NPV.813
NumbcrFmat, 702
numcr Workbook, 142, 143
pliku, 716 Worksheet, 142,168
scryjny. 79 zaznaczanie, 49
wersji Exccla 697 Object, 194
NumLock. 750.75 1,753 Object Browser. 186,362
przelqczanic stanu, 753 Objca Linking and Embedding, 45
Value, 753 obliczmi4 48,765
NurnLockClass. 754 formuty, 63
NumLockOn. 754 sumy qJciowe, 79
obrazy, 369
obstuga Mqdbw. 120.243
kod Wd!owy, 245
obickty, 39, 1 4 2 167, 184. 780 On Ermr, 243
aktywne, 142 prondury, 243
Application, 142. 167, 178 przahuytpvanic bl@w, 243
bibliotcki. 187 obsluga wielu jqzykbw, 701
blokowanic. 130 obsiuga zdam6,535
Chan. 142,485,486 argumenty proculury obshgi. 540
Chartobject, 486 Auto-Open, 537
ChartTitlc, 486 monitorowanic modylikacji w wybmnym
CornmandBar, 142.640 znkrcsie, 549
Comment. 172 moniromwenie zdamc6.535
CSVFileClass. 760 open. 54 1
danych ActivcX, 579 procedury obshrgi &a&. 537
Debug, 252 twonmie proccdury obdugi z d a M . 539
Diagram. 52 wcrsje Exccla, 537
dornySlnc wUciwoSci, 171 Workbook-Open, 537
dostgpu do danych, 579 wtqczanic 538
ekspoh 148 zdanenin splikacji 553
En, 244 zdancnia poziomu arkusza 547
Excclq 39 zdarzcnia poziomu skomszytu, 541
FilcDialog, 360 z d m i a wykres6w. 553
FileSearch. 710 obsar
FileSysternObject, 71 1. 714 obowiqqwmla nanv, 70
hierarchia. 142, 168 roboczy, 9l
import. 148 odrona 37,5& 120
Interior, 176 formut, 59
metody, 143,169,171 hasla, 60
nadngdnc, 326 kodu I% 60 &
n w , 33 s k m s ~ y t u130
,
odwolania. 169 Oct, 813
OLE,45 ODBC. 479
Pivotcache, 479 odbiot~yaplikaji arkusLa kalkulaqjncgo. 108
PivotTable. 142 odcqtywanie
pmgrarnowanic m e t d 756 rejcstru SyStEmawego, 342
pmgramorvanie ~WciwoSci.754 zakrrs6w. 305
przeglqdarka, 186 odtwmie
Range. 14L 169,179,207 dZwipk6w, 342,766
Shape, 176 pliku, 341
skoroayt, 40 odwotania. 64,65
Textstream, 714 Al. 65
ThisWorkbook. 150 benvzglpdm. 64,162
UserForm, 147.376 buwrglqdnt do kolmnny, 65
wlaSciwo& 142. 143,169,170 bczwzglpdne do w i e m 64
do arkuszy, 66 On Emr, 243,246,303,564,809
do kom6rki, 64 GoTo, 245
do obiektbw. 169 GoTo EmrHandkr, 245
do skoroszyt6w. 66 Rcsume Next, 244,246,299
do zakrertu, 64 On...GoSub. 809
jqzyka naturalnego. 71 On ...GoTo, 809
micszane, 64 OnActian, 629,644
nanvy, 68 OnKey, 561
WIKL, 65 OnTimc, 360,775
wzglqdne, 64.163 OnUndo, 467
Off~ce2003.39 opcje ochmny, 58
office 97.35 Open, 541,542,714,809
Ofice Web Component 55 OpenText, 320
Office XP, 32 operacjc plikowe. 707
Offset, 164. 179.182 operacje t e k s t o 457.469
OKBunon. 418 ApplyButbn-Click 463.464
OKBunon-Click, 383 CloscButton-Click, 464
okna dialogowe. 37. 44,210 Cofnij, 466
Additional Controls, 393 ComboBoxOperation-Change, 463
argumcnty, 363 Crea~WorkRangc,464
forrnularz UscrFarm. 459
Autoforrnatowanie, 401
HclpBunon-Click, 464
bapogrednie wybieranie pozycji menu. 363
otwmrcie, 461
Chmnienie arkusta. 59 poprawa ~ydajnoki,464
Chronienie skoroszytu, 59 PROGRESS?HRESHHOLD. 462
Dcfiniowanie nazw. 69 RunTextTools. 362
Dialog, 361 skorosq?, 459
Formatowanie kombrek. 362 tworzenie, 458
komunikaty, 35 1 UndoTextTools, 463.468
Mapy XML, 98 UserChoices. 462
rnodalnt, 44 UserFonn-Initialize, 463
nicmodalne, 435 UscrForm I, 463
nicstandardowe, 44 VBA Modulel. 462 ;
Ozwieranic. 354 Workbook-BeforeClm, 461
Pnechodmie do, 361 Workbook-Open. 461
-
Pmchodzenie do specjalnie. 362 wymagania, 458
References. 235 zamykanic, 461
Stosowanie nazw, 69 zapisywmie ustawid. 465
testowanie, 381 zasada dziatania, 458
wbudowanc, 362 OpcraaingSystcm. 698
wprowsdzania danych. 347 operatory. 63,204
Wstawianie funkqi, 284 And. 205
wybieranie katalogu, 360 Eqv, 205
wySwietlanie, 360 Imp, 205
zakladki. 44,369 kolejnoi6,205
0)ma konkatmacji, 771
kamunikatu, 351 kontynuacji wicma, 771
nicmodalne. 402 b p k i , 169
powitalne, 398 logicme, 205
Properties, 372 Mod,204
wprowsdzania danych, 347 Not 205
wybicrania W o g u . 3f7 Or, 205
e danych, 1%
o ~ l a n i typu pmeciph, 69
OldActive, 257 prtypisani 204
OLE. 35,45,100.121. 187,569,729 Workbook, 168
Xor. 205
opis ftnkcji, 286 obraz definiowany przu utytk0wnikq
Option Basc. 206.278.809 obraz przycisku, 630
Option Compare. 809 OdstCpy, 797
Option Compare Text, 256 odtwarzanic. 624
Option Explicit. 156. 197. 22%.602 769. odtwananic ustawieci. 614
Option Private. 809 pliki. 91
Option Private Module, 229 problemy, 61I
Optional. 275 pncchowywanie, 610
OptionBultofh 122,367,369,378 przcnoszenie kantrol& 614
optymalizacja. 35 Prrybornik formant6w. 123
przycisk uruchamiajqcy makro. 615
pwisywanie makm. 635
Orientation, I54 rodmjc. 617
OSQ Presentation Man- 34 Rysowaniz 51
osobisty d u n makr, 768 swobodnie pmmies-e, 44
osatnia niepusta kom6rka. 328,785 mywno osadzanz 44
orwicranie plik6w tekstowych. 714 t v b dostosowywani4 6 12
Outlook 577 twortmie, 609, 613
wysylanie wirdomoki e-mail, 577 ukrywanie, 6 12,624
Outlook Express. 582 usuwanic, 6 14
ourpuLUt, 721 usuwanie kontrotet 628
OWC. 55.444.446 VBE. 145
wkdciwofci konlrolek, 629
wstawianie kontrolek. 614
. P wykonywanie procedur, 237
WOM~.
315 wyf w i e t h i 6~t 2
PageSrmp, 168 wyiwiellanie wszystkich kmml&, 627
panel raberpicczanje pnad modyfikaejg 622
stnowunia, 568 m q d m i e . 610
zadah. 46 rliczanie. 621
mt. 173. 174.327 miana nazwy, 614
Partition, 813 miana obrazu pfzycisku. 630
p c km u .639.640 psoek polecefi, 609
arkusza kalkulacyjngo, 659 numerowanic i-w, 619
dodawanie menu, 644 odwdania do kontrolek 625
u s u m i e menu. 646 usuwanie. 620
komunikaty, 782 VBA, 619
p a ~ nk W i 37.43 wlafciwo$ci, 620
wyszczeg6hianie kontrol& 626
momatyeme wykrywmie, 622
AutoSensc. 623 plwk p m i j a n i s . 370
CommandBars, 617 mmiar. ?66
dodamic kontmkk, 628 p a ~ stank
k 783
dodawanie romijanej listy, 636 Pam, 312
ddqcmic do skoroszytu. 615 PathFxists, 321
Pa1hExists2.7 12
dostosowywanie, 125, 61 1
~ t l e 174.22
. l
dynamiczna modytikacja podpi%w
na kontmlkach, 633
Da Until, 225
dystrybucja 6 15 Da While, 224
For ... Ncn. 221
dystrybucja z doda(kiw 616
dzialania. 609 For Each ., Next, 212
licmik. 222
inspckcja format. 73
inteligcntne. 622 prrcrwarsanb kmn&mk, 302
kopiowanie k o n t r o a 614 PrrnWarraniewykresbw. 494
PgDn-Sub. 561
menu. 126
PgUp-Sub, 561
I Picfirre. 442,444
PIERWIASTEK, 209
usuwanic, 708
WAV, 341
Pivotcache, 474,479 WB1.88
PivotCaches. 473,479 WKS, 87
PivotFields. 473,474 WQI. 88
Pivotltcms, 473 wykonywalne. 85
PivotLayout, 495 wyszukiwanie, 713
PivotTable, 142. 143 wyszukiwanie tekstu. 713
PivotTableCOoseConnection,542 XLA. 591,594.795
PivotTableOpenConnection, 542 XLB, 91.640
PivotTables. 168,473 XLL, 591
PivotTableUpdate. 548 XLS. 40.87.90.I20. 594.795
PivotTableWimd. 473 XLW. 90
planowanre aplikacji. 119 XML 36.96
PlayMlDI. 341 zapisywanie, 716
PlaySound. 341.342 pliki teksrowe. 89.714
pl~ki.85 CSV, 717
arkusza kalkulacyjnego 1-2-3.87 czytanie. 715
CHM. 667 e k s w zaknsq 718
CPL. 568 filtrowanic. 72 1
CSS. 94 impon danych. 717
CSV. 89.759 impon do zakresu, 719
DBF. 88 import wiqxj nit295 kolunm do skomszyq nl
dodatk6w. 92 numer pliku, 716
dosttp binamy. 714 odcrytywanie. 716
dosttp l w w y , 714 otwieranie. 714
dostcp xkwcncyjny. 714 PRN, 7 17
EXE, 85 rcjcstruwwie wykomystania Excela, 720
I FilcSearch 710 TXT. 717
formaty. 87 ustawianic pozycji 716
GIF, 505 zapisywanie. 716
graficme, 369 PlotArea 492
HLP. 677 Plotorder, 502
HTML 55,Q 723 Pmt, 813
kopiowanic, 708 pobieranic
MIDI, 341 warto* z mkniCbgo skaroszyht. 322
MSO. 94 nlmacmcgo takresu. 298
nrprawianie. 67 ponta elcktronicma, 55
nanva 508 podglsd
numer. 7 16 wydruku, 3 15,782
obsraru roboctep. 90 zabezpicezmcgo dodatJ~,597
odfzylywanic. 7 16 podmenu. 640,647
okrc9lmic skojmeh 338 pogmbianie ntwartagei kombrelt z fonrruhi, 549
otwiemic, 714 p o b r l q 370
paskdw rarqdzi 91 pole
PRN, 89 gnrpy. 367
przetwamnie, 319 k m b i 367
mzmiar, 708 listy, 369
startowe, 85 tekstowc, 51,370
struktum 36 wybau 367
SYLK, 89 pomoc, 61, 173
szablonow. 91 technicma 801
testowanie istnicnia, 708,710,712 tryb Offline, 62
TXT, 89 por6mywanie IdMbw.256
porqdkowanie zahsu w spodb losowy, 336
Power Utility Pak. 26, 113, 124,469,834 programowanic. 52,105,291,763
instalacja 834 FAQ, 763
odinstalowanie. 834 menu. 652
Opcracje tekstowe. 457 metod, 756
rejcstracja 834 pobicranie listy czcionck, 3 17
Powcr Utility Pak for Excel, 456 przetqczanie m o l c i wlaSciwoSci typu
poziom b e z p i m ~ s t w a ,120 logicmego, 3 14
p 6 h e wiqmie. 571,572 przetwarzanie grupy plik6w. 3 19
Ppmt, 814 sonowanie, 3 18
Ptawda, 41.46 strukturalne. 222
predefiniowanc stale. 202 VBA, 189
Previous, 174 wldciwoSci. 754
pnzentacja 109 programowe twomnie fornulam/ UserForm, 74 1
Print, 167, 240 Programy, I5 I
Print #. 717,809 Project Explorer. 146
Private, 228,229,265,284,809 Class Modules, 147
PRN, 89 dodawanie modulu VBA, 147
problemy zgodnoSci. 695.696 Expofl File, 148
Pmcedurc Sqmator. 158 Impofl File, 148
procodury, 119, 141, 149, 151,771 usuwanie modu!u VBA, 148
argumenty, 227,240 pmjekt, 146
BubbleSorf 253 dodawanie modulu V B A 147
dcklaracja 151,227 projektant, 106
Function. 141. 149.261.265 wcwnptmy, 107
funkcje, 264 zcsp6t, 106
nazwy, 229 zcwngnny, 107
niejcdnomacma nanwq 235 projcktowanie, 103
obsluga blpd6w. 243 aplikacji, 131,134,690
obshrga zdarzefi, 378,382,537 aplikacji arkusza k a l k u l ~ ' n e g 0 ,117
prywatne. 229 aplikacji uscr-oricntcd, 691
przckazywanie argumenl6w, 240 dokurncntowanie prac, 132
publicme, 228 napy. 117
rcalizacja p r o j e h , 248 interfejs utytkomika 121
SonSheeB, 257 niestandardowc okna dialogowe, 122
sortujqce.. 252 planowanie aplikacji spelniajqccj wymagwia, 119
stmwanie wykonywaniem, 21 4 przekazanie aplikacji utytkownikom, 132
Sub. 141, 149.227.247 system pomocy, I32
tcstowanie, 255 testowanie aplikacji, 128
uruchamianie, 152 wersje Exala, 134
uruchamianic w innyrn skoroszycie, 774 wymagania utytkownika, 118
usuwanie problcm6w, 256 z w i ~ k s m i codpornoki aplikacjl128
wlakiwoici, 149 Properties. 372
wstvnc rtjetmwanie m h 249 Pmperty Get, 755,809
wykonywanie, 229.230 Property Let, 755,756,809
wymagania pmjektowe, 247 Property Set, 809
wywdywanie, 237 Pmtect, 170
wywdywanie funkcji, 267 ProtatSt~ucture,257
w y ~ d y m i zc innego modulu, 235 Pncchodzcnie do, 361
wywdywanic z innej proccdury, 233
msiqg, 228
-
h c c h o d z ~ n i cdo rpejalnie, 362
pmchowyxanie kodu M h w e g o . 149
Pramtowe. 47 pnrchwytywanie biqdbw, 243
PmassFila, 320 prnccirlgnij i upuSt.45
PmcxssRqucst, 676 ptzcgladarkn internetow 93
- Skorowidz 859

pmglqdarka obiektbw, 186


wyszukiwanic z d m , 554 R
pmkazanie aplikacji utytkownikom. 132 RaiseEvmf 809
przckazywanic argumcnt6w, 240 RANWMMTEGERS, 335
pnez odwoianic, 24 1 Randomize. 809
pnez wartoiC, 241 Range. 142, 143.168.169, 179,326.327
przetqczanie wartoJci wlafciwoki typu lo~icmego, Cells, 181
3 14 off~et, Im
Przenid lub kopiuj arkusz, 249 Select, 780
przcnoszcnic Son, 783
zakrcsu, 293 Value. 180
zakresu do tablicy typu Variant 308 RangeNameExins. 322
zawartogci tablic jednowymiarowych. 308 RANGERANDOMIZE. 336
PRZESUNIF$ZIE. 529 RangcSelcction. 178
przetwarzanie Rate, 814
arkuszy, 3 12 ReDim, 206,251,786,809
danych. 55 RcDim F'reserve, 206,786
danych h i m h i c m y c h , 56 Redo, I51
dodatkbw, 597 RefEdik 370,397
grupy plik6w. 319 References, 235,73 I, 732
skoroszyt6w, 3 12 RcfersTo. 702
wykres6w. 4% RcfersToR l C I, 702
zakresdw. 29 1,294 RegCloxKey, 342
n a k u kropki. 207 RcgCreatcKcyA. 343
pmwijanc etykicty, 672 Regisbation Database, 100
pmwijanic arkusza, 402 RegOpenKcyA. 342
pmzroczysta intcgracja. 585 RegQueryValueExA, 343
Przybomik formant6w. 123,368 RegSctValueExA. 342
pnyciski rcjestr sysfcmowy. 85. 100
Marginesy, 782 odczytywanie danych, 342.343
opcj i. 369 odgaipicnia, 344
poleccniq 367 uzyskanic d o s t q y 344
p m l q c n i k 370 zapisywanie danych, 342.343
twomnic, 368 'emlor makr, 153, 160, 161
Ustawienia. 782 edycja makr, 166
Zamknij, 400 klawisz skr6tu, 165
pnyklady kodu VBA. 765 nanva rnakra, 165
przypisanic, 204 odwolania, 162
pnywracanie zawartdci uszkodzonego pliku, 67 odwdania wzglqln+ 163
Public, 201,205, 228,229,242, 265, 809 opcje rcjcstrowania, 165
Publikowanie jako stmny sieci Web, 95 opis makra, 166
punkt wstrrymania, 283 przechowywanie makra, 165
PUP, 26 rejeslrowanic makra, 150, 153
Put, 809 od zanacmnej porycji, 768
PV. 814 rejctrowanie wykonystania E d & 720
Rem. 191.809
Rcmovc, 734
RemovcConml. 559
QBColor. 814 Replace, 814
Quatbo Pro. 33.88 ReplactModule, 735
Q u a m Pro for Windows, 33 Require Variable Declaration, 156, 197
pucry. 37 Reset. 810
QucrjClog 377,386,400,559 ReselAIIToolbaR, 796
Quil78 I Resizc. 4%. 508,553,559
860 Dodatki

R ~ T o o624l ~ Selection, 166, 178,179


Resume, 810 Arcas.Count, 784
Reverse, 263 Rows.Count, 784
RGB. 175. 176,787,814 TypeNamc. 492
Right 373.814 SelcctionChange, 437,498,548, 551,622,623
RmDir. 708.8 10 SelectiveColorl. 302
Rnd. 814 SmdEmail, 578
Round. 814 SendKeys, 582.8 10
RowSource. 404,405 Sendworkbook. 581
rozdziclczaJC kany grafianej, 340 Sentencecase, 464
mzmiar nrkusm, 4 1 seria danych, 500
rozwijana list& 765 sterowanie, 522
RSet, 810 SERIE, 496.497.501
RTrim. 814 Series. 492.501
Run, 234.5%. 764 PlorOrder, 502
Run SuWscrForm, 230 Values. 501
rundll32.exe. 568 SaiaChange, 508.553
RunTextTools, 462 SERIESNAME-FROM-SERIES, 501
runtime. 133.185 Service Pack. 695
RunTimeButton, 739 xrwer WWW. 55
rysowanie. 5 1 Set, 760,810
Set Rng,305
S , SaAlann. 560
SaAttr, 708, 810
~ ~ 1 o d d e l wslcafnik
ny post~puzadania, 422,424 Setup-OnKey, 561
pmdura obslugi zdarania, 423 Sgn. 814
procdura startom 424 Shape. 143,173.I75, 176
moromcrrajjqce sic wykrrsy, 524,528 RGB, 176
modyfikacja serii danych, 526 shreware, 1 12,134
nazwane formuly, 528 Sheet, 385,538
PRZESUNICCIE 529 SheaActivate, 436,437,542,543,555
tenowanie. 527 ShcetBeforcDoubl&lick, 542,555
tworzmie. 525 ShcdBeforeRightClick, 542.555
hworzmic f o m l z naz~ami,526 SheetCalculate, 542.555
SaveAIIWorkbooks, 312 Sheetchange. 542.555
SavcAsExcelFile. 756 SheetDeactivatc, 542, 555
SaveDefaulu. 690 SheetExists, 322
SavcForUndo. 467 SheetFollowHyperlink, 542.555
SaveSenjng 466.810 ShectName, 327
SchemcColor, 175. 076 SHEETOFFSET. 333
ScmUpdating, 256.489 SheelPivotTableUpdetc,542, 555
Script Editor, 96. 144 ShcetScIlntionChange,436,437,542,555
Scroll, 404,559 Shell, 563.814
ScrollArcs 543 ShellExecute, 566
ScrollBar. 122,370,402 ShortcutText, 650
SearchSubfolden, 710 ShowCommandBarNama, 618
Second, 8 14 ShowComponents, 733
Seek. 716.810.814 ShowDriveInfo. 713
stkwmcje v b m h , 536 ShowlnstalledFontr. 317
Selaf 292,508,553,780,783 ShowPagcCount, 3 f 5
Select Case. 218,220,301,810 ShowUscrFomq 790
SeleFtCumntRegion, 295 Sin, 814
Single, 194
I SizAndAlignChaRs. 495
darr~nk386.387
skew 40 zdarunia klawiatury, 387
WY. 40 zdsrzcnia my-, 387
arkusze, 40 SpinUp, 387
automatycme ladowanie, 774 Spiropph. 519
dolqczanie paska nan$dri, 615 Split, 331.814
import wivcj nit 256 kolumn danych, 721 sprawdzanie poprawnoki danych, 384
kolory, 40 SpmadsheeS 446,448,805
makr osobistych, 165 dodawanic kontrolki. 447
ochrona prry utyciu hasla, 60 SQL. 479
pobicranie wsrtodci z s k o m 322 Sqr, 209,814
przelwamic, 3 12 SQRT. 21 1
sprawdmie otwarcia. 556 stale, 70. 152. 192.201. 279
tr6jwyrniarowy, 333 deklmcja, 201
wldciwo3ci. 312 nanvy, 70
wykrcsy. 485 predefiniowans 202
ramykanit, 3 12 xlLandscape. 202
zapisywanie, 3 12 xlponrait, 202
zdarzenia. 541 zasipg, 201
smry klawiatumwe. 45 State. 629
mrzenie, 127 STATFUNCTION, 332
skrvpty, 144.711 Static, 198.20l. 228.266, 810
SLN, 814 StaticRand, 271
slowa klucmwr. 193 StatusBar, 421,782
Smart Tag. 45 S1cp. 222
Solver. 35, 58 sterowanic wykonanim pmccdury
sortowanic, 252 GoTo. 2 14
algorytmy, 319 If ... Thm, 215
arkuszowc, 3 18 IIf, 217
bqbelkowe, 252,318 pyle. 221
szybkic. 318 . Sclen Case. 21 8
tablic. 318 Stop, 810
zliczajqce, 3 18 SlopMIDI, 341
SonSheets 257 stosowanie n m , 69
Space, 814 SW. 814
spaghetti. 11222t SKomp, 814
Spc. 814 StrCanv, 814
SpceialEffsct,423 String, 194,203,814
spcrsonalizowane wiadomdci e-mail. 577 strona WWW, 37.38
SpinBunon, 370,388 s m w . 71 1
AfterUpdatc, 387 StrRcvcnc, 814
BefonDragOvcr, 387 mUktura
BdorcDropOrPaste, 387 danych, 119
Beforcupdate, 387 plikdw, 36, 119
Change. 387 style, 50.629
Enter, 387 Sub. 141.149,198,227,228,247.810
Error, 387 deklaraeja, 227
Exit 387 twomnie pmccdur. 227
KeyDown, 387 SUMA,54,76,78,261,280
KeyPm, 387 m a c ~ c i w a79 ,
KeyUp, 387 SUMA.JaELI.76,77
SpinDown, 387 surnowanie, 76
SpinUp, 387 fonnuty tablicowe. 77
Value, 388 SUMY.POSREDNLE,36,m
SupcrCalc. 29
862 Dodotki

Switch 814 jcdnowymiamwe, 206


SYD, 814 sottowanie. 3 18
SYLK, 89 typu Variant 772
symulacja wiafciwofci Co to jest?, 676 unikatowe, losowo uporzqdkowane
Sync, 542 liczby calkowite. 335
synchmnizacja arkuszy. 3 13 Variant 308
SynchSheetq 313 wielowymiarowe, 206
system modal, 433 TabOrientation, 419
system pomocy, 61.132.667 TabStop, 174
asystent pakietu Ofice, 674 Tabstrip, 370,419
Co to jest?, 676 Ta& 389
etykicty. 671 Tan, 814
formularze UserFom 671 tekst 46
HTML Help, 667.677 padpowidzi, 391
komentarze. 668 TERAZ. 269
komponenty Excela. 668 Terminate. 377,386,559
pola tekstowe. 670 TestGetOption, 746
powiwnie pliku pomocy z aplikacj%678 FestGetValue. 324
przewijane etykicty, 672 lcstowanie
ronvijane listy. 673 aplikacji. 128
tworzenie, 667 beta, 129
WinHelp, 677 f o n u l a n a UscrFonn, 376
wySwietlanie tekstu pomocy, 670 okna dialogowego. 381
dlony samoro~zemjqcegosic wykresu. 527
fomularzy UserFonn. 393 Text, 174
pliki. 91 TextBox, 370,378.374.388
TextStream, 714
T h i s ~ o r k h k .144,IQ8,150.178.385.436.538,539
Timc. 215,810,815
~REDNIA,54.261 Timer. 815
Srodowisko IDE.729 Timeserial, 815
Timevalue, 815
To. 221
Toggle Breakpoint. 283
Tab,814 TogglcButton, 370
Tab Order. 374 ToggleCsse, 464
tabclc p ~ ~ e s t a w n52.57.471
z ToggleGridDisplay, 455
analiza kody 473 ToggleNumLock, 754
CreatePivotTable, 474 ToggleWrapText, 3 14
modyfikacja, 482 Toolbox, 366
Pivotcache, 474 dodawanie kontrolek ActiveX, 392
tworunie. 47 1 dodawanie zaktadek. 391
tworzenie na Mstawic z e w n q m t j dostosowywanie, 391
b a q danych, 478 dostasowywanie konnolek 392
tworzenie wielu label, 479 ikony, 391
ulepszanie kody 473 kontrolki, 367
VBA, 471 ~ c z c n i ekontroldg 392
zliczenie, 79 tekst podpowiedzi, 391 r
zlotone. 474 ToolTipText, 391,629
Tablndex, 3 74 TransitionEffecb 419
tablice. 74,205 TrandtionPeriod, 419
argumcnty, 274 W S P O N U 276 ~
deklaracja, 205 Trim 8 15
dynamicme, 206,786 tr6jwymimmq skorouyt, 333
I True,205 typy danych. 192,193
cryb Boolean, 194
katty gracfime,j 135 Byte, 194
krokowy, 283 Cumncy, 194
twarzcnie Date. 194.203
aplikacji, 39, 131.607.730 Decimal, 194. 195
aplikacji dla wielu wcrsji narodowych, 699 dctiniowanc pncr utytkownika 208
aplikacji user-oriented, 683 Double. 194
dodatkdw, 586,588 Excel 200146
dokumcnt6w Worda, 573 Integer. 194
cgzcrnplana klasy. 760 Long, 194
formulamy UserFonn. 378 Objeet, 194
funkcji, 261 Single, 194
inteligentnych pask6w nandzi. 622 String, 194,203
interaktywnego wykrcsu. 530 Variant, 156, 194, 195,772
interaktywnych plikbw HTML,94 VBA, 194
interfejsu utytkownika. 121
katalogq 708
klasy, 750
kodu Wdlowego. 250.251 UBound, 253,815
kreatordw, 427 UCasc, 208.256.81 5
manwych wykres6w. 5 15 udost~pnianieskorosqtu. 130
megaformul. 48.81 UI Builder, 33
menu. 125.639.645 ukrytc nazwy, 69
menu podrtfmego, 664 ukrywanie
menu utytkownika 657 arkuszy, 130
mod& V B 4 147 dokummtdw, 130
naqdzi, 455.456 formul, 130
nazw. 68 kolumn, 130
niestandardowych okicn dialogowych, 122,347 wicrszy, 130
okna powitalncgo, 398 ulepmny fonnularr dnnych 450
Opcracjc tckstowe, 458 Ulamkowe, 47
paskdw narqdzi, 609,613 Uncornment Block. 192
paskow poleceri, 618 Undo, 151
procedur, 227 UndoTextTo~ls.463.468
proceduy Function. 261 UnhideMcnu, 654
procedury obslugi z d d , 539 Union, 304
przyciskdw, 368 Unload, 376.377.810
samcdziclncgo wskatnika postqpu zadania, 422 Unload Me, 377
samoromerzajqccgo siq wykrcsu, 524 UpCase, 269
skr6tdw klawiaturowych, 127 UpdateBox, 436
stron W W , 38 UpdaleCharl, 498
systemu pomocy. 132,667 UpdateContmls, 429
szablondw, 91 UpdateToolbar, 634
szablon6w formulary UserForm, 393 uruchamianie
tabel pmstawnych 471 aplikacji, 563
wielu tabel pmstawnych. 479 Excelq 85
wykrcsq 52,485 okicn P m l u stcmwmaia 568
wykrcsu knywych hipacykloidalnych, 519 Usenet. 802
wyknsu-mgara, 520 UserForm. 35.37.39.44. 121. 147,365,376.424
zastepatgo P a s h menu, 659 Hide. 377
Type, 142.629.810 Show. 375
TypeNamc. 1%. 815 Unloed 377
UsaForm Deluxe. 450 data,203
insealacja, 450 Default to Full Module View. 158
UscrForm.Tag, 389 definiowanie typ6w danych, 193
UserForm-Initialize, 463 deklaracja, 149
UmlnterfaceOnly, 543,770 Dim, 198
user~riented,683 Dir, 708
ustawienia Do Until 22.3
Excel& 101 Do While. 224
rejatr systcmowy. 100 Docking, 160
usuwanic dodatki, 5%
bfed6w. 283 do% do warto9ci kom6rki zamknigego
modulu VBA, 198 arkusza, 77s
paska nmflri. 624 dostosowywanie. 155
paska polecd. 620 dostosowywanie menu. 642
pustych wierszy, 303 Drag-and-Drop Text Editing, 158
ukrych nanv. 69 Editor, 156
utyrkownik 106 Editor Fonna. 158
klasyfikncja. 108 edytor. 141
koncowy, 106 Else, 215
szkolenia, 108 End, 200
Emr Trapping !60
FileCopy, 708
FileDateTimc, 708
Val. 8 15 FileLen, 708
Valuc. 142 170.180 For ...Next 221
Values. 500 For Eeeh, 174
VALUES-FROM-SERIES, 501,5M, 503 ...
For Each Next. 212
Variant. 156. 194.195.1%. 772 fonnatowanie wykmbw, 493
wydajnoSC. 195 Function. 141.261
VaiType. 8 15 funkcjc, 261,807
VBA, 21,35,52,139.140 funkcjc Anslysir TooPak. 778
Addlns. 598 funkcje wbudowsnc. 208
Application, 142 gcnemwanie kodu. 736
argurnenty, 170 GetAtu, 708
As. 198 GOTO,214
Auto Dam Tips, 157 hierarchia obiebb, 142, 168
Auto Indent 158 ID€. 729
Auto List Membm, 157 If ...Then, 215
Auto Quick Info. 157 Immediate, 149. I67
Auto Syntax C k k , 156 instmkcja prrypisania, 204
blok instrukcji, 221 insmkcjc. 190,807
ByVal, 242 instmkcje wejkia-wyjfcia, 714
Call. 233 interpreter, 190
C h a 142 Kill, 708
Chair. 708 klasy, 142
ChDrive. 70% kod W o w y . 141.190
Code, 148 kody e d b w , 817
Code Colors, 159 komtntara, I'Q 189,191
cofanic Operscji 'IS1 komponenty, 729
cofanic skuIk6w proccdar. 467 komunikaty Mddw, 244
CommandBar, 142 kopiowanic kodu M l o w c g ~ 155
.
Comment, 172 bimchy, 202
Const. 201 makq 155
czcionki. I59 ma!qmslincjr dtim. 149
t Margin Indicator Bar, 159 WE,144
mctody. 143, 169 ~ + ~ u d w ahnkcc j e Excels. 778
minimalizacja okim, 149 wbud-e okna dialogowe, 792
MkDir. 708
mcduly. 14 1
...
With End With, 21 1
wlaf;ciwoSci, 142, 169, 185
moduly klas. 749 Workbook, 142
Name. 708 Workshnf, 142
obiekty, 142, 167,185 wprowadmie kodu Wdlowego. 150,190
obsluga Mpd6w. 243 wykmy. 485
obstugajqzyka, 702 wybwanie Mgd6w skledni. I 56
obstuga zdamh, 535 wy&,enia, 167.204
ochrona kodu p i y utyciu hash 60 wylwietlanie komponent6w p j e k t u , 733
odwolania, 786 rasitg zrnicnnych, 197
odwolania do obiekt6w. 169 zbiory, 142, 167, 168
odwdania do pask6w polcceh, 619 mienne, 143. 192
okrcflanie typu danych, 1% zmicnne obi&owt. 207
On Error, 243 VBA Extensibility. 732
operatory, 204 vbAbo* 352
opentory logimc. 205 vbCance1, 352
Options, 156 VBCornponcn&734
petle, 221 Export, 734
plikt, 707 Import, 734
Procedure Separat~,158 Remove, 734
proccdury, 141,149,227 VBComponenu. 73 1
programowanie. 189 Remove, 769
programow twmmic fomrulany UserFonn, 74 1 M r L f , 317,353
przcchowywanic kodu tP6diowego. 149 VBE. 40,141,144, no
przetwarzanie arkuszy, 3 12 Class Modult~.147
p n e t w m i e dodatkbw, 597 Code, 146
przetwarzanie skoroszypBw, 3 12 Eksplararar projckt6w, 146
przehMnanie zakrcdw,,291 Immedliaae. 146
Public, 201 interfcjs, 145
ReDi m. 206 pasek menu, 145
rrjcsmitw msk, 160 pasck narqdzi. 145
rejcstrowanie ma)o, 153 Project Explorer. 146
Rem 191 projckt, 146
Requin Variable Declaration, 156 umchamianie, 144
RmDir. 708 vblgnorc, 352
Select Case, 218 vbModelcss, 402,435
SetAttr, 708 vbMsgBaxHelpButton. 680
dowa kh~cnrwc,190.193 vbNcwLine, 353
sortowanie tablie. 783 vbNo, 352
s'tatc, 155.192,201 vbOK, 352
Static. 198,2O1 vbOKOnly, 3 17
sterowanie wykonymirm proccdur. 2 I4 VBProjccts, 73 l
I Sub, 141.227 vbReby, 352
tabele p ~ e s t a w n q471 VBSmipt, 96,144.711
tablice, 205 vbTab. 353
Tools. 156 vbYes, 352
hvorzmie nanpdri. 455 Version, 697
typy danych, 192.193 Visible, 173
lypy dmych definiawam pna w!ytkmnika, 208 VisiCalc, 29.89.114
urmeszcmie kontrolek w fonnularzu UserForm Visual Basic.40,61
w Fazle projektowania, 738 -
Visual Basic Panoc, I72
866 Dodatki

Visual Basic Editor. 40 WKS, 87


Visual Basic for Applications, Prwz VBA wldciwoSci, 143, 169, 170. 184, 185
Volatile. 271 Accelerator. 375
VP Planner. 3 1 ActiveCell, 178
Activechart, 178
Activesheet, 178
W Activewindow. 178
WIK1.66 ActiveWorkbook, 178
Walutowe, 50 AIIVisible, 213
wanoSci argurnenty, 170
bl~ddw.73 BuiltinDocumentPmperties.325
liczbowe, 46.50 Cells 181
logicmc 46 Color. 176
maksymalnc, 334 Colorlndwc, 176
WAV. 340.766 Comment, 175
WB1.88 do odczytu i zapisu, 755
WB2, 88 Faceld, 7%
WB3.88 Font 373
wbudowane okna dialogowe, 360,362 FormulaRICI, 183
argummty. 363 ID, 646
V B q 792 Intanationid, 703
wczcsne wiqzanie. 570 kontrolki, 371
WetkDay. 234.543,815 LinkedCell. 368
WeekdayName. 8 15 lokalne. 702
wersjc Excela 120. 134.695 obiektbw, 142
runtime. 133 Offset, 164. 182
wcrsje narodowe aplikacji, 134,699 Orientation, 154
weryfikacja pprawnoki danych. 550 Parcnt, 327
While...Wend. 810 paski pol&, 620
wiadomojci e-mail, 577 programowanic, 754
wiqzani+ 570 PmteaStructure, 257
Widok. 43 Range, 180
Width, 373.392 Rangeselection, 178
Width #. 810 ScreenUpdating, 489
wiersze. 40 Selection, 178
skomslyt. 3 12
nanuy, 70
usuwanie puslych wimzy, 303 SpocialEffect, 423
WindowActivate. 542, 555 Style. 629
WindowDeaclivate. 542, 555 Tabrodex, 374
WindowResize, 542.555 Tag, 389
Windows, 32,168,699 Thisworkbook, 178
rejestr systemu, 100 tylko do odczyhl, 173.755
Windows 3.0.32 tylko do zapisy 755
Windows API. 287 typu logicmego, 314
Windows Scripting Host, 71 1, 714 Vdue, 170, 171
WindowsDir. 289 Wmd. 167,571
WinHclp. 677,680 twomnie arkusza Excela, 576
zxza&anic. 573
wimsy, 770
With, 154. 177, 810 WordApp, 512
Workbook, 142, 143, 168
With ...End With. 21 1
AckiveWorkbook. 486
WKI. 87
Close, 149
WK3,87
Protect, 170
WK4.87.88
wklejanie, I50 Workbook-BefwcClosc, 653
Workbook-Open. 537,539,543,653,775
DDE, 563
OLE, 569
Outlook 577
Outlook Exprcss. 582
Panel stmwania, 568
ScndKeys. 582
Shell, 563
ShellExecutc, 566
wysytanie wiadomoki e-mail. 578
wysylanie wiadomadci e-mail z zalqaniknmi, 58 I
wstawianic
formulam User%- 365
funkcji. 48,267,284
wstpne rejesbowanic ma@ 249
wstrzymywanie wykonywania makra. 298
WWW, 55
wybieranie katalogy 358
Workbooks. 92. 143, 168 FileDialo& 360
WorkbookSync. 556 GetDircctmy, 358
WorkRange. 467 wydajno8C. 120
Worksheet. 142. 168.180.327 Variant, 195
Range. 180 wykonywanie
Selec~ionChange,498 funkcj i.267
Worksheet-Change. 538.549 makr, 50. 152
Workshcet_Selecti~nChange.539 wykonywanie procedur, 229
WorkshcetFunction, 209.778 klawia Ctrl, 231
Worksheets, 168 klikniqcic obicktu. 238
wprowadzanie danych. 46,109,296 n~estandardowemenu, 232
czas, 79 okno Immediate, 239
data, 79 okno Makro. 230
do nast~pmj pustj kom6rki. 297 po wystapicniu zdamenia 239
InputBox, 347 p ~ c i s kpaska
l narydri. 237
sprawdzanie poprawndci danyrh, 3M Run Sub'UserFom, 230
typy danych, 46 wyk~sy.41.52.514
wprowadzanic kodu h5dloweg0, 150 A c t i v e C h 490
kopiowanic kody 155 aktualizacja. 499
rejestrowanic makr, t 53 aktymcja 490
r p e . 150 aktywne. 485
W Q l , 88 an~macja,5 18
wrapper, 289 automatyczne filtrowanic. 522
Write U, 717.810 autornaryczne generowanie, 506
WriteResdRangc, 305 Chart 485.486.487
WritcRcgistry, 343 Chart-Act&, 509
wskaknik post~puzadania 421,791 Chart-Deactivate. 5 10
bez kontmlki MultiPage. 426 Chart-MwscMove. 5 17
MultiPagz 424 ChartSeIech 509,510
pasck smw, 421 ChartObject 487.491
samodzielny. 422 ChartTitle, 487
UpdateFmgres$426 . ConvcrtCh~ToPichm,515
vrsp6lpraca z aplikacjami 563 CreareADeadCharf 516
ADO. 579 dcaktywxja. 49 1
aktywacja aplikacji, 567 DissblcChartEvents,513
AppAdimte, 567 drulr~wmie,515
automatyzacjq 569 EnableChartEvents.513
wybcsy wyntcnia, 167.204
ctykicty, 503 WYSIWYG, 3 1.87
formatowanie VBA, 493 wysylanie wiadomdci c-mail, 577
formularze UscrFonn, 442 zal~cmiki.581
formula SERIE, 496 WYSZUKAJ.PIONOWO.271,532
interaktywne, 530 wyszukiwanie
konwersja w arkusz wylrresu, 490 plikbw. 713
kreator, 485 zdarznl, 554
krzywe hipocykloidalne. 5 19 wySwictlanie
rnakra. 487.489 arkuszy w fmularzach UscrFonn, 446
rnapa obrazkowa. 5 13 day. 3 15
martwe, 5 15 formularry UswFom, 375
modyfikacja danych. 498,499 komponent6w pmjektu VBA. 733
MouscOver. 517 okien dialogowych. 360,381
obsluga kliknivia kolumny. 514 plikbw HTML Help. 680
obsluga zdmef~.5 11 tckstu pomocy, 670
okre4lanie danych. 497 wskafnika postqpu radania, 421
OWC. 446 wykrcsdw w fomularzach UserForm, 443
pliki XLA. 595 wywolywanie funkcji. 267
pliki XLS. 595 formuly. 267
pola kombi. 495) wywolywanie procedur, 233
poloZenie, 485
powii\zanie zadcklmownncgo obiiktu, 5 11
procedury obshgi zdarr.cn, 509.5 11
. z innego modulu, 235
z innego skoroszyru. 235

przetwivranie w p q l i 494
rejatmwanie rnakr, 487 xl24HourClock, 704
samorozszenajqce s i 524 ~ xl4DigitYcars. 705
xria danych, 500 XLA. 37.59 1.594
stcrowanie xriami d a n m 522 XLB, 91
testowanie aktywacji. 492.784 xlColumnSepsrator, 703
twonenie, 52 xlCountryCodq 703
usuwanie arkuszy, 492 xlCountrySetting 703
usuwanie elerncnt6w z koldtcji m b j c c g 492 xlCurrcncyBefo~,704
VBA. 485 xlCurrcncyCode, 704
wyr6wn-vwanie, 494 xlCurrencyDigits, 704
wyiwictlanie ctykict, 503 xlCurrcncyLcadingZms, 704
wySwietlanie telrstu. 5 17 xlCumncyMinusSign, 704
wyhvietlanic w formulam UscrFonn, 505 ~ICumncyNcgative.704
XY. 504,518 xlCunmc$paceBefore. 704
zakres danych, 500 xlCurrcncyTrailing2eraq 704
zapisywanie w pliku. 443 xlDatcOrder, 704
tapisywsnie w pliku GIF, 443,776 xlDateSepamtor. 704
zapisywanie wielu wybcsdw w arkusu-wyltreJic, xlDayCode, 704
521 xlDayLeadingZcro, 705
zdarntnia, 507.553 x l D e c i r n a l S e ~ 703
,
zcgar, 520 xlDialogChartType, 792
miana rozmiar6w. 494 xlDialogFontProperties,362
wyhywanie xDialogFormulaGoto, 361
W d w , 283 xlErrDiv0, 279
wciSnip5a klawiszn Shift, 289 xlErrNA. 279
a y b p a n i e obslugi u k c h , 538 xlErrNamq 279
wymapnia utytkownik 1 18 xlEnNull, 279
wymuszanie deklaracji zmicnnych, 197 xlErrNum. 279
xlErrRef, 279
xlErrValuc, 279
XLFile, 756 zabczpiaztnia mak, 770
xlGencralFormatName, 704 takhikowc o h a dialogowe, 369
xlHourCode. 704 zakoficzmie pracy Excela, 78 1
XLL, 59 1 zakresy, 179
xlLandscapc. 202 aktywacja, 781
xlLeftBrace. 703 Cells, 181
xlLetlBrack*. 703 ekspolt do pl:h HTML.723
xlLiaSeparator. 703 eksport do pliku XLM, 726
xlLowcrCascColumnLener. 703 idcntyfikacja. 294
xlLowerCaseRowLener, 703 kopiowanic, 292
XLM. 34.42.52, 140, 141 monitorowanie rnodyfikacji. 549
xlMDY. 705 monitorowanie pugrubienia zawartoSci k o m k k
xlMaric, 704 z formulami, 549
xlMinutcCode, 704 monitorowanie poprawnofci danych, 550
xlMonthCodc. 704 nazwy, 67.782
xlMonthLeadingZero, 704 odczytywanie, 305
xlMonthNarneChaq 704 okno wprowadzaoia danych 350
xlNoncumncyDigits, 704 okrdlanie typy 300
xlNonEnglishFunctions. 704 porqdkowanie w s+b losowy. 336
xlportrait, 202 prrenoszenie. 293
xlRightBracc. 703 prrenosrcnie zawartofci do mblicy typu Variant,
xlRightBrackct 703 3 08
xlRowScparator. 703 przawarranic, 294
XLS. 40.87.90 przawartanie bm6rek 302
I xlSecondCode, 704 przetwammie VBA, 291
XLStart. 85. 165 Range. 179
xlThousandsSepanrtor, 703 tymcrasowc tablice. 307
xlTimeLeadingZero. 705 w e r y f i k j a poprawnofci danycb. 550
xlTimeSeparator. 704 wypelnianie metodqsiiowq, 306
xlToLeK 295 zapisywanie. 305,306
.xlToRight. 295 z a w i m i e w innym zakmie. 304
xlUp. 295 zaznaczanie, 397,781
xlUppuCascCdumnLenet, 703 z a m a c m i e malcsymalnej wanofci. 309
xlUpperCaseRowLmn; 703 tamaczanic r62rego typu, 294
xlw. 90 zmienna wielkoi& 293
I xlWeekdayNameChars, 704 Zamknij. 400
xlYearCode, 704 ramrotenie okicn, 256
XML, 36.56.94. % zamykanie
dokumenty. % fomulana UscrForm, 375.377
W r t , 96.99 skomsq46w. 3 12
1 imporf 96.97 zapisywanie
I import do listy, 99 plik6w tekstowych 716
! m v y , 97.98
macmiki. 96
njestru systemowego, 342
ustawid narqdzia, 465
Xor. 205 wielu wykrcs6w w nrkuszu-wybesie. 523
XValues, 501 wsrystkich skoroszytbw. 312
XVALUES-FROM-SERIES. 501, 503 wykrcsu do pliku, 443
lvySwietlanie daty, 325
m k n d w , 305.306
Z a p i e jako stronq sicci Web, 95
zaqldzanie
Excelem 576
Word- 573
micg Error, 387,559
funkcji. 266 Exit, 387
proccdury, 228 FollowHypalink, 548
nnicnnych, 197 formularzy UserForm. 385,558
zasoby online, SO1 gcnerowane pnez klawiatuv, 387
mtqpczy P w k menu arkusza kalkulacyjinego, 659 generowane pnez mysz 387
zastepowanie moduiu uaktualnionq wersjg 734 infarmacje, 536
zaznaczanie In~tialize.376,385,386,391. 559.757
kombrek okdlonego formatu. 3 10 KeyDown, 387.559
maksymalnej wartolci zakrcsu, 309 KeyPnss. 387,559
obiekt6w. 49 Key Up, 387.559
ostatniej pozycji w kolumnie~wieazu.785 Layous 559
r6tnego typu rakrrs6w, 294 menu. 652
zakredw. 397 rnodub klas, 757
zbiory. 142, 167. 168. 184 monitorowmic. 535
CommandBars. 142 MouseDown, 508,553,559
Comments. 174 MouseMove. 508,553,559
Controls. 390 Mouseover, 517
Dinlogs. 361 Mouseup. 508.553.559
NoDupeq 407 Newsheet. 542.544
UserFonns, 376 NewWorkbook 555
Workbooks. 143. 168 nienv~apnez obiektami, 559
Worksheets. 142. 168 obstugq 535
zdanenia 378 OnKey. 561
Activate. 385,386,508,542,543,548,553,559 OnT~nw,560
Addcontrol. 559 Open. 541.542
Addin, 602 PivotTablcCldonneaian. 542
AddinInstall. 542 PivotTableOpenConnbctim~.542
AddinUninstall. 542 PivotTableUpdate, 548
AAcrUpdate, 387 poziomu arkusza 547
AAerXMLExporf 542 poziomu skoroszytu. 541
AAerXMLImpon. 542 procedury obslugi, 378. 537
aplikacji. 553 QucqClos. 377,386,400,559
Application, 555 RcmoveConbol. 559
BeforeClosc. 542.546 Resize. 508,553,559
BeforeDoubleClick, 508, 548, 553 Scroll. 404.559
BeforcDragOver. 387,559 sekwenqe. 536
BeforeDropOrPaste, 387,559 Selea 508,553
BeforePrint. 542,545 SelectionChangq 437,548.55 I. 622
BeforeRightClick. 508,548,552,553 ScricsChangc, 508,553
Beforesave, 542.544 ShcetActivatc 542,543,555
BeforeUpdatc, 387 SheelBeforeDoubleClick,542,555
BeforeXMLExport, 542 SheetBefmRightCliclt,542,555
BeforcXMLImpo~t.542 SheetCalcutae, 542,555
Calculate, 508,548,553 Sheelchange, 542,555
Change, 387.388.430.547.548 SheclDeact~Mtc.542 555
Cha* 508 SheeffollowHy~ink,542.555
Click, 378. 559 ShcetPi\otTabkUpdat~542. 555
DblClick, 559 ShectSelectionChange. 542,555
Deactivate, 386,508,542. 544,548,553.559 SpinDown, 387
Dragover, 508,553 SplnUp, 387
DragPlot, 508,553 Sync, 542
Enter. 387 Terminate, 377,384,559,757
Skorowidz 87 1

WindowActivate. 542,555 zintegmwanc M o w i s k o programisty, 729


WindowDtamivate. 542. 555 zlicmic, 76
WindowRcsize, 542,555 fomuiy tsblicowe, 77
WorkbaokActivate. 555 komdrck o z a m o k i mi.ylzy dwoma
WorkbookAddinInstall. 555 wartoSciami, 327
WorkbookAddinUninstall, 555 prak6w narydzi, 621
WorkbookAfterXMLExpo& 555 widocznych komdrek zakresu, 328
WorkbookAfterXMLImport, 555 zamauonych kom6rek. 299
WorkbookBeforcClose, 555 zlotone tabele przestawne. 474
WorkbookBeforePrinf 555 CreatePivotTable. 477
WorkbookBeforeSavc. 555 danc. 475
WorkbookBeforeXMLExport, 555 kod VBA,475
WorkbookBeforeXMLImpoh 555 zmiana
WorkbookDeactivate, 555 r o m i m w y h u , 494
WorkbookNewSheet, 555 wielkoSci formularza UscrForm, 401
WorkbookOpen. 555 zmicnnc, 143, 192
WorkbookPivotTableCloseC~~1a:tio~ 556 dcklaracja, 196
WorkbookPivotTabld)penConnection. 556 globalne, 200
Workbooksync. 556 lokalnc 198
wykresowW507. 553 moduly. 199
wykresow wbudowanych, 512 nazwy, 193,200
wylqczanie obstugi, 538 obiektowc, 207
wyauklwanie, 554 okrdlanie rlrpu danych. 1%
Zoom. 559 poziornu m o d u k 757
mgar, 520 pub1 iczne, 242
zestawianic danych. 57 statycme. 201
zwn- bazy danych 53.55 wymuszanie dcklaracji. 197
zgodnog. 695 zasig, 197
data. 705 maczn~k~
formay plikdw Exacla. 697 H m L , 93
identyfikacja ustawid systernu, 703 XML, %
komputery Macintosh. 698 mak dcfinicj i typu, 772
obsluga wieh j~zykbw.701 Zoam,403.559
problcmy, 696 zwieksmic odpornbki aplikacji. 128
unikanic nawych wldciwofci. 698
wcrsje Exacla. 58
wcrsje namdowe aplikacji, 699
wlaiciwo$ci Iokalne. 702 kMl0
danych ODBC, 479
XML.97.99

You might also like