Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

793

Transcript of Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Page 1: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net
Page 2: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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

Page 3: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 ........................ 56 Nanedzia malizy .......................................................................................... ........................ 56 ............................................................................................... Konspekty .................... .... 56 .............................................................. Automatyczne sumy czeSciowe ........................ 56 ...................................................................... Dodatek Analysis TeolPak ........................ 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 ......................... 63 ......................................................................................... Obliczanie formul

......................... 64 .............................................................. Odwolania do kom6rki lub zakrcsu

......................... 65 ............... Dlaczego warto stosowat odwdmia, k tbc nie sqwzgl@ne? ......................... 65 Notacja W l K l ................................................... ......... ...........................

........................ 66 Odwolania do innych arkuszy lub skomsyt6w ..................................... ......................... 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 .......................... 76 Metody zliczania i surnowania ............... .. ................................................. .......................... 76 ..................... Zastosowanie funkcji LICZ.EZELI lub sUMA.ETELI .......................... .............. Zastosowanie forrnul tablicowych do zliczania i surnowania 77

. . . .......................... Inne narqdaa 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

Page 4: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Spis trefci 5

........................................................................................... Formaty plik6w baz dmych 88 Formaty piik6w tekstowych ....,.......... 89 ............................................................................ Inne formaw ~l ik6w 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 k HTML 92

.......................................................... W jaki sposbb Excel korysta z fomatu HTML? 93 - . Zwiekszanie zlokonoki ................................................................................................. 94

..................................................................... Tworzenie interaktywnych plikdw HTML 94 ....................................................................... Importowanie i eksportowanie plik6w XML 96 - .

Cym 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 I I 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 ~ ~ s z y kalkulacyjnych 108 Odbiorcy aplikacji arkusza kalkulacyjnego .................................................................. 108

Rowiagwanie problem6w przy ugciu aplikacji arkuua kalkulacyjnego ....................... 109 ..- ................................................... ~odstawowe kategorie aplik;cji arkusza kalkulacyjnego 1 10

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 udzia la j~e do nich dostepu ...................................... 114 Aplikacje komunikujqcc sip z bazami danych .............................................................. - a - 115 Aplikacje ..pod klucz" .................................................................................................. 119

........... . i

Rozdzial6 Podstawy projektowania apllkacjl arkusza kalkulacyjnego 117 Podstawowe etapy projektowania 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~tosowanie menu 123

Dostosowywanie pask6w n a q d z i ............................................................. 125 ................ ............................................................................ Tworzenie skr6tbw klawiaturowych 127

.................................................................................... Rozpocz~cie prac projekrowych 127

Page 5: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

6 Excel 2003 PL . Programowanie 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~zyk VBA ......................................................................................................................... I39

Modelc obiektowe ........................................................................................................ 140 Porownanic jqzyka VBA z jpzykiem XLM .................................................................. 140

Wprowadzenie do j ~ k a VBA .......................................................................................... 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

Page 6: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 T ablicc ................................................................................................................................ 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

7 7 1 Wykonywanie bloku instrukcji w ramach pqtli ..............................................................

Rozdziat 9 . Zastosowanle procedur Sub jqzyka VBA ............................................ 227 777 Deklarowanie i tworzenie procedur Sub jezyka VBA

Deklarowanie procedury Sub ..................................................................................... 2 1 7 Zasicg procedury .......................................................................................................... 238

1 7 0 Wykonywanic procedur Sub ............................................................................................ ,,, Wykonywanic proccdury p c q utyciu polscnia Run SublClserFom .......................... 230

7 71-1 L'ruchamianie procedury z poziomu okna dialogowego .Uakra ...... . Wykonywanie procedury pnl, utyciu skr6tu opartego na klawiszu Ctrl ..................... 231

1 2 7 Wykonywanie procedury przy upc iu niestandardowego menu ................................ .._--

71' Wywotywanie proceduty z inncj proczdury .................................................................. 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

Page 7: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 Pqklady 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 . .

Zasi~g funkcj~ ............................................................................................................... 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

Page 8: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 henoszmie zawartojci zaknsu do tabliw WDU Variant ............................................ 308 ... 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 ~ e infonnacje 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

q.3 OkreSlanic ostatniej niepustej kom6rki kolumny lub wicnze .................................... 3 ~ 8 Czy lahcuch jat zgodny z wmrcem? ....................................................................... 330 Wydzjelanie n-tcgo clcmentu Iafxucha ........................................................................ 331

........................................................................................... Funkcja wielofunkcyjna 332 Funkcja SHEETOFFSET ............................................................................................. 333 Zwracanie maksymaQnej wartaQi ze wszystkich arkuszy ............................................ 334

Page 9: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~ku do 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 przy uZyciu 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 370 - Modyfikowanie konmlek fonnularza UserFom ............................................................... 310 - Modyfikowanie wlaSciw&i kontrolki ............................................................................... 311 Zastosowanie okna Properties ...................................................................................... 372 Wspolne wlafciwoki ................................................................................................. 373 Zdobywanie dodatkowych infonnacji o wiaSciwoJciach ............................................. 373 Uwzgl~dnienie wymagah uZylkownik6w p r e f e m j w h k q s t a n i e z klawiatu ry ...... 373

Page 10: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Wyiwietlanic i zamykanie formularzy LjserForm .............................................................. 375 - 7 - Wyiwietlanie forrnularza UserForm ........................................................................ > , 2

Zamykanie formularza UserForrn ............................................................................. 377 -7 ' Procedury obslugi zdarzen ........................................................................................... J , X

Przyktad tworzcnia forrnularza UscrForm ...................................................................... 37% * T Tworzenie forrnularw UserForm ................................................................................. J J X

Pisanie kodu ir6dlowego procedury wvyiwietlaj~cej okno 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 zwi ipue 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 zakmbw 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 UserFo rm 421 WySwictlanie wskaZnika postepu zadania .......................................................................... 421

Twomnie samodzielnego wskainika postqpu zadania ............................... A 2 2 WySwietlanie wskafnika postepu zadania zit p o n w q k o n t ~ l k i MultiPage ................. 424 WySwietlanie wskainika post~pu d a n i a bcz korrystania z konnolki MultiPage ...... 426

Kreatory - intcakt)7rrne sekwcncjc okic r. dialo_eowych .................................................. 427 Konfigurowanie kontmlki MultiPzge w celu utworzenia krmtora ............................... 478 Dodawanie przycisk6w do formularza UserForm k r e a ~ o n .......................................... 418

Page 11: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

12 Excel 2003 PL . Programowanie w VBA . V a d e m e c u m profesjonalisty

........................................................................... Pmgramowanie przyciskbw krmtora 429 .......................................................................... Zalrtnoici prog-owe w k~arorach 430

Wykonywmie zndd 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~zyka VBA 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

v ..................................................................................... I wonenie tabel pestawnych 471 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

Page 12: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 uwwnienia 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<wietlanie wykrcsu 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 i t wbudowanych 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 g o sip wkresu ...............................-........................... 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 ...................................................................................... 5 4 1 Zdancnie Open .......................................................................................................... 541

....................................................................................................... Zdamnie Activate 5 0

Page 13: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 p6he 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~wanie mctody 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

Page 14: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Spis t re ic i ; 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~ncja wydajnoici 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

............................................................................... Jak Excel 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 ....................................................................... Tryb dostosowptania asko ow narzdzi 612 .

Drstrybucja paskdw narz&i u ~ k o m i k a ................................................................. 615 Dziatania z kolekcia CommwdBars ................................................................................... 617 . .

.............................................................................................. Rodzaje pask6w narredzi 617 .................................................... WySwictlenie wszystkich obiekt6w CommandBar 617

......................................................................................... T w m n i e pask6w nanpdzj 618 ............................................................ Odw+wanie sip do paskdw nwqdzi 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

Page 15: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

! 6 Excel 2003 PL . Programowanie 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 [ ~ ~ O ~ S ~ n i p t e ................................................................... 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 Powipn ie 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

Rozdzfol 26 . 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 kdz ie dzialarS na komputcrach Macintosh? ................................................. 698 Tworzenie aplikacji dla wielu wmj 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

Page 16: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~ytywanie i 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 wi~cej n i t 256 kolumn danych do skorosytu 721 Ekspobtowanie zakmu do pliku HTML ...................................................................... 723 Eksportowanie zakresu do pliku XLM .........................................-............................. 726

.......................................... Rozdzld 28 . Operacje no komponentoch Jqzyka VBA 729 Podstawowe informacje o Smdowisku IDE ........................................................................ 729 Model obieww Smdowiska IDE ...................................................................................... 730

Kolckcja VBProjects .............................................................................................. 73t Wyhicdanie wszystkich hmmt6w mojektu VBA .................................................... 733 . . Zastqmwanic rnoduh uaktualnionq wersjq ........................................................................ 734 Wykomstanie icnka VBA do gcnaawania kadu VBA ................................................... 736 ~ $ k o ~ s t y w & k kodu VBA d ~ u m i m c n n i a kontrold 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 UsuFom ................................................................... 741

Prosty przyklad fornulam UscrForrn ......................................................................... 741 Sk0mp:likowany p q k l a d dynamicmego formulana UscrForm ................................. 743

................ ..... . Rozdzkrl 29 Moddy ldas ......................... "- .................. ....... .......-.. 749 Czym jest modut klasy? ..................................................................................................... 749 Przyklad: utwonmie klssy NumLoc k. ........... .. .............................................................. 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&sy CSVFileClass ................... : ................................. 751 Definicje wMciwo3ci klasy CSVFileClass ................................................................... 758 Definicje metod ldasy CSVFileClass ........................................................................... 758: Wykorrystanie obielddw CSVFilcClass ...................................................................... 760

Page 17: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 WWW 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 e CD-ROM 822

............. .............................................. Materialy utworzonc p m z autora tej ksilpki : 822 ...................................................................................................................... Aplikacje 834

.................................... ........................................................ Rozwiwwanie problern6w ..-- 835

Page 18: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net
Page 19: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net
Page 20: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net
Page 21: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net
Page 22: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net
Page 23: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net
Page 24: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net
Page 25: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Skqd sie wziql Excel 2003? Aby w pdni dbc~nit funkcje Excola 2003 zwiqzane z twonenicrn aplikacj i , 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~zy kalkulacyjnych, 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~cze Capkicm nicdawnb by@ ant zupdnie iedostqme. Uwownicy kbfzysta l i 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 obsie bykm nim oczarowany. b g m m YisiCalc wprowaddl standardy Sosowane odtqd w arkllsz~lch kalkulacyjnych, QtmkWa arkusza 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 I I wykrnis w ctlu opracowywania bud~etdw pny wiyciu tej aplikacji. W kanstkwencji c ~ o za nracqct h6dh ~ ~ ~ $ k o w c g o s u k ~ u kamputem Apple I1 m a j e siq p p m YlsiCdc.

-P&hiej na rydcu pojawfIa siq kolejna klara komputcdw owbimh. pmcujqeyeh pod konm 13 -U ~~erscyjntga CPM. Firma Sorcirn s t w ~ r q h arkusz ka1kulacyj ny Su- perCo(c, ktbry r h w i e t zyskat wieIu mlennikbw.

Po pojawkiu siq .ir 1981 h k 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.

Page 26: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 f imie 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 o forrnatu reklarnp prograrnu 1-2-3 zarnieszczonq w dziemiku ,,The Wall Street Journal". Wtedy po raz pierwszy spotkaiern siq z reklarnq , I oprograrnowania w ogdlnie dostppnym wydawnictwie, Program 1-2-3 wpmwadzony do I

sprzedaty przez firme Lotus Development Corporation w stycmiu 1983 roku odni6sf I natychmiastowy sukces. Pomirno ceny wynosqcej 495 dolardw (zgadza siq, w tym czasie j naprawde tyle flacon0 za oprograrnowanie) 1-2-3 pod wzglpdem poziomu sprzedaty zdystansowal VisiCalc i znalazi sip na uczycie list najkpiej spnedajqcych sip produktdw, na ktbryrn pozostawal przez wiele lat.

W programie 1-2-3 nie tyko 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 n-e 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 ba 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

Page 27: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 OW. 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 wahe j funkcji, ktbrej utytkownicy bardzo sip dornagali. czyli moZliwoSci twmenia wysokiej jakoSci dokurnent6w wyjiciowych.

P o c ~ o w o wersja 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@a post& 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-by6 powiqzany z droiszym sprqtcm, natomiast drugi z powszechniej stosowanymi urqdzeniami.

Wersja ReIeuse 2.2 nic stanowih r o m i w ~ ~ i a idednego, 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.

Page 28: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

32 Czg3t I + Podstawowe informacje

W maju 1990 roku Microsoft wprowadzif na rynek system Windows 3.0. Jak zapewne wiesz, system Windows mieni l spodb 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 o to 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-3 for 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-3 dla 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 jpyka 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 m Jq w paklecie Oftice XP. Zostata tak opracowana, aby zapobieg* rnozllwoSci d o m e g o kopiowania, ale nie rozwi~uje macznie 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-3 i 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.

Page 29: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 pf icmego interfejsu utytkownika urnotliwiala pracp z wieloma arkuszami przy Wciu 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. Version 5 zapmentowana w 1994 roku posiadda tylko ja macqcq 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~owacyjnq fimkcje 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 imy Borland ajmujvego sic tworzeniem arkuszy kalkulacyjnych. Gdy pisakm ten rozdziat, ahalnq wersjq programu Quattro Pro byla

Page 30: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~tatrro Pro zajmuje odleglq trzeciq lokatp.

Przez jakiS czas Qua~tro Pro 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. Zasq i l go jqzyk VBA, kt6rernu podwiqcono te ksi@k$.

Tymczam 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~cy p6hiej zaprezentowano jej aktualizacje Version 2.2 I . Pomimo usilnych stam finny IBM system 0S/2 nigdy nie zdobyt popularno9ci.

Page 31: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 s i t na szczycie wszelkich porownan arkuszy kalkulacyjnych publikowanych w najwatniejszych czasopismach brantowych. Pomimo sporej konkurencji ze strony program6w 1-2-3 Release j for 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 ronzeml i 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.

Page 32: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 te t 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 1 1, 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 hguage), a t a k e ma- powania danych do o ~ l o n y c h kombrek arkusza. Ponadto Microsoft wprowadzii kilka funkcji zwipnych z zacqdzaniem prawami, kt61-e umotliwiajq narzucanie ograniczeh r62nym elementom skoroszytu (na omklad w tem spos6b dostep do oh i loneno arkusza mo& ottzymat tyko &kt& u.2y&owkicy). ~ojawiio siq 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).

Z jakiegoS powodu Microsoft zdecydowat sic zeofsrowd dwle podwersje ExDela 2003. Obsluga formatu X M L 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~khcra pliku. 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 .

Page 33: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 Basic for 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~ia menupo&unych. Excel jest jedynym arkuszern kalkulacyjnym, kt6ry pomala dostosowywaf kontekstowc menu podvczne wyJwietlane po klikniqciu prawym pnyciskiem myszy.

paski nanqhi , kt6re mogq~pehiaC funkcjg 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.

Obsbga mctoma&racji. Prry utyciu j ~ k a VBA moha kontrolowat inm aplika~je obsluguj@ce automatyzacjp. Motna na przyklad wygenerowak raport w Wordzie.

Page 34: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 importowuniepliku XML 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.

Page 35: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 .obitkty skomszytbw, ktdn p i i c h o ~ j ~ obiekty arkuszy, a te z kolei obiekty zakresdw. Tego typu hietarchia twony model obiektowy. Excel posiada ponad 200 klas obiektirw, ktbre mogq byt kon~lowane bezposrednio lub za pomocq j m k a VBA. mdy 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 ks i l t . dowieu rie. w jaki rpodb autmatyzowat Mania p o p z kontrdowanie obiekth Excela za pomacq jeryka VBA. Zagadnienie to stanie siq bardzlej nozumiate po rapomanlu siq z zawartoScig kolejnych rozdziMw.

Page 36: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 l iczh 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, na ley 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.

Page 37: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat2. + Program Excel w zorysie 4 1

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

MotliwofC stosowania wielu arkuszy w jednym skoroszycie to du2a zaleta. Dziqki ternu nie tylko zwi~ksza siq liczba dostqpnych komdrek, ale t a b moha ulcpsqC organizacjq pracy. W zamiemhlych czasach, gdy plik skW sic z pojedynezego aricu~q pmjektanci 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~cie karty arkusza moaa 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 i wysokok? &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 wykndw, 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 Jwt rormhr dwm?

Wato 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 c l karty g m f k z ~ J 800 x 600 waz clomy4lneJ wysok& wieruy i sm 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 pemm katdej kombrce. Z pamiqd korrystajq jcdynie uiywane kordrkl.

Page 38: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~du na zachowanie zgodnolci, jednak nie oferuje jut motliwoSci ich rejestrowania. W tej ksi- nie dokonano orndwienia systemu makr XLM, natomiast ~ 6 c o n o uwagc 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 akuv 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

Page 39: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzial2. + Program hcel w zarysie 43

obowiqzujqcymi w systernie Windows niedostppne polecenia menu s@ wylqczane (wyszz- none). natomiast za ~oleceniami otwieraiacyrni okno dialogowe s4 umimzczane nzy kropkl. -. - 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 na~edr i , a 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 k lhqC zakhdkp Paski nurqdzi. Z listy Push naqdz 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.

Page 40: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 narrw Standardowy i Formatowanie bezpolrcdnio pod paskiem menu.

Pnyciski paska narz~dzi mogq 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 te 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~zdzlale 22.

Okna dialogowe

WiqluzdC polecefi mmu Excela wy9wietla o h dialogowe. Okna te q d o g podobne I

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~uartc w trakcie kotzy- stania ze skoroszytu.

1

Niektdre okna dimlogowe konystajq z zakMek, dzipki czcmu jedno okno mo2e p h i 4 I

funkcjc k i h r6211ych okicn. 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 pra~l z nimi, nalety zaj& do N c e k i ksimi.

Page 41: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

RozcMai 2. Program Excel w zarysie 45

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

'n Funkcja ,,pneciWPij i upuse

Funkcja .,przecWij i 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 €Ma okna 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 mom ten obikt do b e g o skom- sytu lub aplikacji i wstawit go jako obickt OLE (ang. Objecf Linking und Embedding).

I Excel oferuje wiele skr6Ww klawiehaowych. R y k ~ w o , aby skopiowad ~amaerony obszar, m o a a wcisnqd kombinacjp klawiszy Ctrl+C. k91i jestd pocz@kujqcym u2yt- 1 kownikiem Excela lub zale2y ci jedynie na zwiqkszmiu wydajnolci, usilnie namawiam

I do zapo~lania siq 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~ciu masz do wyboru kiIka opcji. Jdli na 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).

Page 42: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 Nmedr ia 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.

Page 43: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 nale j zaznaczyC opcje PrrenoJ zamaczenie 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 skop iod zawartoX aktywnej komdrki do wszystkich pozosta+ych kodrek 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 JeJ warto5c1, nalefy pneci$gn@ uchwyt wypetnienia ma)dujqcy sic w naro~lku zaznaczonego 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, nele iy 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, nale j wpisd zero, za nim mak spacji, a nastqpnie utamek (przy utyciu maku /). Excel fomtuje kombrke przy u jc iu 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- sowaf do nawykbw ~ o w n i I c 6 w aplikacji 1-2-3 i akceptuje symbol @, mak plusa (&) lub minusa (-) jako pienvszy mak formuly. Propm po wcihiqciu klawisza Enter au- tornatycmie dostosowuje wprowadzone dane.

Page 44: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 Inspekcja formul.

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 wygenerowaki blqd. Kilka opcji zwiqzanych z t.q sytuacjq wyfwietlil inteligentny tag. I

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.

Page 45: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

~ozdziol2. 6 Program Ewcel w zarysie 49

Rysunek 2.5. Najlepsq metodq wstawiania funk@ w formule jest .?as tosowanie 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 i jest 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

Page 46: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 dhrgi j 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. Jdl i przykhdowo za liczbq wstawisz symbol waluty (np. rf w prrypadku Polski), Excel zastosuje fonna tomie 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

Page 47: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 warsw 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.

Pde 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 y j p W e j iqcre obrmu (jest widoczna rylko po wciiniqciu przycisku Sh@. Polcccnie Wkfej iqcze 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 f niektdrych arkuszy i eliminuje sie potrzebe twomenin niestandardowych okien dialogowych.

Page 48: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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.

Wy kresy 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 Wan% na nim pokazane, a nastqpnie utyciu Kreutora wykresh . 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 w ~ pokpmy 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 ik l ik$ (aby wyGetlic! bkno dialogbwe zawierajqce opcje formatowania wykresu, nalety kliknqt dwukrotnie). Kl ikni~ie prawym pnyciskiem myszki elementu wykresu spowoduje wydwietlmie menu pohcmego.

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.

Page 49: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzial2. + Program Excel w zarysie 53

Ryrunek 2.8. W celu utworzenia wykresu nale2y uW Kreatora wykresdw

Trzecla cz@t tej ksiqtki zostala po9wi~najgrykowi VBA.

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.

Page 50: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 umoWa 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 koku 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

Page 51: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat 2. + Program Excel w zarysie 55

Zewngtnne bazy danych

Aby skonystaf z tabel zewn~trznej bazy danych. z menu Dane naleiy wybrac pozycjr importr,i dane zewrretrzne. a nastepnie ~Vowa kwerenda 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 . Tmen ie kwerendy skn' Web knpomjw 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(=& d0 &Z~&U 4.

Page 52: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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- wania tych danych na okreJlone kombrki. - - ,

c*:, j$ 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 (e . n 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 anal j r ( 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.

Page 53: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzial2. + Program Excel w zarysie 57

Rysunek 2.12 Excel mole automatymle wstawiaC fonnuw obliczajqce sumy c.~+Jclowe 1 konspeMy W l E -13 #co 5769

I))O 1Bfi 174l 1191 1?% 1- I224 4x3 1706 I l?Xl 1 ~ 9 ~ rm I I I O Y I I 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,

7U I t?ZE *u llQ) Pi? (144 nln ~rn sim m n mni (1757

Ta bele przedawne

Jednym z najwydajniejs~ych i 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

Page 54: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

58 CzefC I Podstowowe informocje

-4 Aby uzyskaC informacje na ternat rnanipulowanie tabelami przestawnymi przy uwiu <-> j~zyka VBA, 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 Dodatki. Ovr6cz dodatkbw ddaczonvch do ~akietu Excel 2003, moma m a t dodatkbw - . pobranych ze strony intemetowej Microsoftu. Dodatki opracowane p m z inne firmy moina kuoiC lub vobraC za ~oirednictwcm ich 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 pny 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 stdmrq skoro- szytu i formuly pned nadpisaniem lub zmodyfikowaniem, a t a k e zabezpiecza6 haskm kod j e y k a VBA i skoroszyt.

Page 55: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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

oowego zamaczyt kom6ki formul i upewni6 sip, czy w zakkidce Ochrona okna dialo, Formarownnie komdrek zamaczono opcjp Ukyj .

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 .

Page 56: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 i mote zaletet na ograniczeniu dostppu do skoroszytu tylko do o d b maj~cych haslo. 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 ikn~ t pnycisk 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 ro jeh . Spowoduje to otwarcie okna dialogowego Project Propertier.

W oknie dialogowym P r o j e ~ t ' P ~ e s nalety klkpd Protection {rysunek 2.17). ~aznaczyt opcjq 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 hdz ie 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.

Page 57: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 Wwletlanle ternatdw wmocy w utyciu panelu zadari to nowoe acela 2003. (-1 u'J ~&ertof f tematu pomocy jest pkazybana w oddzlelnym oknie. OczywiScie omacza

to, te obecnle system pornocy wymaga "*la dw6ch okien. Wedhrg mnie osoba.

Page 58: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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.

Page 59: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 w tekstowych,

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&jzic formu@ w tym trybie, Excel korrysta z nastqpujqcych regui:

Page 60: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~przetwonona przed 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 Iu b 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 Bmgipdne 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 .

Page 61: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziol3. + Wybrane zasady stosowanio formul 65

BmgIedne do kolumny. Tego typu odwdanie jest czeiciowo bezwzgledne (mieszane). Po sko~iowaniu forrnuh czeSC wierszowa zostanie dopasowana. . . natomiast cz@C kolumnowa nie ulegnie zmianie. ~rzyktad odwdania - 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 o w 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. P w a d zastosowania w formule odwolafi. Mdre nie 54 wzgledne

Rx+'y2~ta formula 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 pnez 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 s by nieprawid+owe retultaty.

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 wybd pozycje Opcje, a nastqpnie kliknaj zakladkq Ogdlne i iramaczyd opcje Sod o M m i a Wl KI. Po wykonaniu tej operacji Iitery kolumn nnieniqsiq na liczby, a w ~ y n k i e odwdania do k o d n k i mkresh =wane w formuiach zostanq odpowidnio dostosowane.

Page 62: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

66 Czgic I + Podstowowe informocje I

W tabeli 3. l wwarto kilka pnykhrli..* ' Przyjqto. t e formula 7 1 4 ' .

Tabela 3.1. /

Notncjn stnnd

- A l + l

Nie zdziu padku sto: nawiasy k\

ych notacji standardowej i Nix!. '1.

notacji

:st ona taka zfa w pny- sic odwotah wqlcdnych,

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~dzie htwiejsze 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 fornub uzywajqcej odwolania do komorki innego arkusza:

Motna tet utworzyt formub lqccty odwoiujqce sie do kom6rki w i ~ y m skomszycie. W tym celu p m d odwofaniem nalcty wstawiC n a m e skoroszytu (w nawiasach kwa- dratowych), namp arkusza i mak wyknyknika Oto pnyklad:

-[Budiet .xlslAr4uszl!A!+l

Page 63: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat 3. + WySrane zosady stosowcnia formut 6 7

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 tworn 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 Arkusz l tego pliku nale j otworqd pusty skoroszyt i w komirce A l arkusza Arkuszl wprowadzid nastqpujaca forrnute:

-'C \Pl?ki\[Z?y-plik.zls]&rkuszl'!Al

Z&gl ikx ls 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 rozwiazaniern jest 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.~1 s1Arkuszi' !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 vzy , 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 e komb.inacji klawiszy CfriW3) m o a a nadac name kombrkom lub zakresom. Jeszcze szybszy spos6b definiowania nanv polega na u v c i u lisry roiwijanej Pole ncn*?.

Page 64: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~pnie Utwdrz. Na ry- sunku 3.2 zakresowi C3: F3 nadano nazwp Pdlnoc, zakresowi Cc: F4 nazwe Polzrdnie itd. W pionie zakresowi C3:C6 nadano name Kwartall, zakresowi D3:D6 nazwq KwnrtoI2 itd.

Rysunek 3.2. Ercel upraszcza . . . . .

twonenie nazw :_I d - * b ; ~ - 1 0 . a r ~ : r r a g g - h c m _ ~ S : * S . ; i , - ~ - A - bedqcych opisowyml u - ~ 8 5 ~

laricuchami -. A -. B c I 0.-; e F I G i-.H d !

Zastosowanie nazw jest smg6ln ie istotne pny pisaniu kodu w jpyku VBA Wywajqcego odwohli do kombrek lub zakresbw. Jaki iest terra pow6d? Po pnemieszczeniu kom6rki - . lub mhesu, do ktbrych odwohno sip w jnstrukcji jpzyka V B ~ odwdania nie sq auto- matycmie uaktualniane. JeSli na prqkhd kod jmka VBA q i s z e wartoSC w Range( "C4" I , dane zostanq urniesznone w de j kombrce, gdy M o w n i k wstawi nad korn6rkq C4 nowy wienz lub kolurnnp po jej lewej stronie. Po zastosowaniu odwohia 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

Jdl i 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.

Page 65: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziol3. + Wybrane zosady stosowania formut 69

Ukryte nazwy

Niektdre makra Excela i dodatki twonq ukryte nazwy. ZnaJduJq siq 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 kodem Jezyka VBA:

Sub DeleteYiddenNames( ) D im n As Name D im 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+ad dodatku My 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)

Page 66: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~cych nazw 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?ye sic 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.

Nadawanie nazw statym I

Prawie katdy dolwiadczony utytkownik Excela wie, w jaki spodb 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).

Page 67: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 naw. 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 tzec i~ iu kolumny 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.

Page 68: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

72 Czgic I + Podstawowe inforrnacje

Rysunek 3.4. ~Moina nadaC 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 ~ e sic do pojawi sip nastppujqca formuta:

=Arkuszl! 83ZAArkusz l !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:

- ! A I - ! B l

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 nam 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~zq inforrnacjq moie porndc w uozurnieniu, co sie dzleje w tle podczas twortenia i stosowania nazw w skorosrytach.

Page 69: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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, zwbzcza gdy ma to miejsce w kodzie jqzyka VBA. Jednak naleiy parniqtaC, t e polecenie Dejinit,j zawarte w podmenu Nmva menu N~tmv dziala 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 newy 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, do ktbrej sip odwohjg 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 h komdrkach pne- 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 rza pustq kombrkp.

#N/O! Fonnula odwdda sip (pokln io 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 mok 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 l nie obslugu~e w-art&ci rotnych od zera mniejszych od LE-307 lub wi~kszych od 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 obl imiu 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 id .

Page 70: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 kdz ie 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

* Aby wprwadziC form* tablicokq, nalety WisnqC komblnacje klawlszy M+Sh/ft+Enter. i:- 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.

Page 71: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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,

Page 72: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 mdne 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 mdnie j sy 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, I L E . 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.

Page 73: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat3. + Wybrane zasady stosowonia formut 77

Funkcja L I C Z . 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 i argument hnkcji L I C Z . JE~ELI mote 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&cych wartdC 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 l iczh w d i numerycmych (pomijajqc hicuchy tekstowe i puste ko- mbrki), nalety poshkyt sip formulq

Page 74: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~vych wartoici 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") Suma wartoici kombnk zakresu Sprzedai. dla kl6rych *C2:C10) Miesiqc - "Sty" i Region - "P6lnocU

-SUMAt (A2:h10-"Sty")*(B2:B1O~'P6lnoc") Suma wartosci kom6rak zakrcsu Sprzedat, dla kt6rych *C2:ClO) Miesiqc - "Sty" i Region 0 "F61noc"

-SUMA( (A2:AlO-"Sty" )*(B2: BlO-"Pblnoc")) Liczba kombrek zakresu Sprzedai. dla kt6rych Miesiac - "Sty" iReglon - "P6lnoc"

-SUMA( (A2 :AlO-"Sty" )*( (82:BlO-"PbInoc')+ Liczba kom6rek zakresu Sprzedat, dla ktbrych (02:BlO-"Paludnie"))) Region - "P6lnoc" lub "Poludnie" i Miesiqc - "Sty'

-SUMA( (A2 :AlO-"Sty" )*(C2: ClOr200) Sums wartohi kombrck takresu Sprzedat, dla k-tbrych * (CZ :C lC) ) Miesipc - '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 baa 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.

Page 75: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzial3. + Wybrane zasady stosowanio forrnut 7 ?

lnne narzqdzia zliczajqce

Funkcja LICZ .JESELI jest przydatna, gdy stosuje sic jedno kryterium zliczania. W prq- 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 wi~cej informacji, nalety zajrzet do systemu pomocy.

Funkcja SUM. POSREDNIE mote 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 posmga 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 tm- 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 d w 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

Page 76: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

e0 CzgSC I + Podstawowe informacje

Wykonujqc obiiczenia m i ~ z a n e z 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 WW). 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 ju 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 I stycznia 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 kombki 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 odpowiada, a takttakte wymacqC daty wystepujwej siedem dni pbtniej.

@@ Na do)wzonym dysku CDROM majduje sie stworzony przez mnie dodatek o nazwie mended 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 mended Date Functions umoZliwia przetwaffanfe dat spffed roku 1900

Page 77: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzial3. + Wybrone zosody stosowonio formvt 8 1

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~czna edycja 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~dne spacjc.

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

E l J E Z E L I (CZY . W ( O l ) :C1:011 Wli druga spacja nie istnicjc. utywa pierwsz j.

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

H1 -Fl&G1 Lqxy imie z nnzwiskiem.

Page 78: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 Wdego 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. 1 poniewat nie bqdq jut potrzebne. 1 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.

Jedyne ograntczenie w stosowaniu megaforrnut polega na tyrn, te lorrnuty Excela 'SF 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~du na tak du~zlootanoM rnegaformuly 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 ~Srednich 2 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~qzyku VBA 106.7 8.6 MB I

I Rzeczywiste wyniki b d q sip r6aily w zale2rtodci od szybkdci systemu i pojernnoici 1 zainstalowanej parnivi.

I 1

Page 79: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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

Page 80: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat 4.

Pliki Excela Jesli zamierzasz wykonywat pny utyciu Excela zaawansowane zadania. powinienei zapomat sic z r6tnymi rnetodami jego umchamiania, jak rbwniel zrozumict. co sic dzieje w trakcie tej operacji. Warto te t 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 rmzeneniu .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~pnie otwiera pusty skmszy 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 Moha t& okreSlit inny katalog startowy, w kt@m b& przechowywane inne pliki skoroszytbw lub obszaru roboczego przcmacmne do automatycznego Adowania . W celu okreSlenia altematywnego katalogu srartowego nalety podat Scic?kt w polu Przy uruchomieniu ofwdn wszystkie pliki w, majdujqcyrn s i ~ w zakladce Ogdlne okna dialogowego Opcje. W poprzednich wenjach Excela pole nosilo nazwp Inne poloienie pli& startowych.

Aby mien& dornySlne formaty lub rawartog otwieran~h nowych skoroszyth, n a l a a> s tworn 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 k b w stosowanych w wienzu poleced. Zawarto je w ta- beli 4.1.

Page 81: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 ,.czystcW umchomicnie 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 n d z w d p l i k u 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~pnie zamknipcia 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 mote 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 os iggng jak nallepsze rezultaty, kolejne we~ je naleiy instalow& zgodnie z ich datq powstanla.

Page 82: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat 4. + Pliki Excelo 87

Obstugiwane formaty plik6w arkuszy kal kulacyjnyc h

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 n i i 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:

PIiki formmu 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.

Pliki form- WKI sqjednaarkuszowymi plikami stosowanymi przez program 1-2-3 w wersjach Release 2.x for 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.x for DOS, Release 4.x for DOS i Release I .xf i r ~indcnvs . ' ~ogq zawiera~ wipcej n i i jeden arkusz Fonnatowanie jest 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

Page 83: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 Pro for 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 WB3 wygenmwane przez 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

Pfiki formav 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.

Page 84: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 1 oddzielonvch tabulatorami. Excel potrafi odczytywat takie pliki, . . zamieniajqc katdq liniq na wiersz i katde pole na kolurnn$. ~e;t iet 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 te t 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:

I DIF (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 qr6wnie t doff nadkie. Excel potrafi je odczytywaf i zapisywaf.

Pliki tworzone przez Excel Excel zapisuje pliki w kilku formatach, orndwionych w tym punkcie.

Page 85: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

90 Czei 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 roboczego jest 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 fonatu XLW (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

3 3 Excel 4 . 39 Excel 5.95

-4 143 Excel 97.2000,2002 i 2003

Page 86: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~dzic czas. 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 . t nastqpjqcq instrukcje j m a VBA:

Msgbx Am1 ication.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.

Page 87: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 z jezyka VBA skoroszyt dodatku nie jest cq ic iq 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 . xh , 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 n i i 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 bgzie 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.

Page 88: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 na lee 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 ~tzwyczaj mote byt reprezentowany pnez 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.

Page 89: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 e l potrafi mpisywaC pliki HTML zachowujqce interaktywnoSC arkusza kalkulacjjnego. lnnymi sbwy, po wyiwietleniu pliku HTML w pmglqdarce, utydrownik mote - podobnie jak

Page 90: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~nie jrrko 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).

Page 91: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

90 Czeic I 4 Podstowowe informocje

A eo z natzflziem Script Edltor?

W tej ksi@ce catkowicie ignoruJu]e jeden 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 motl iwoi i 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, utywa znacmik6w, ktore definiujq elementy dokurnentu. Znaoniki jezyka XML definiujq elementy struktury dokumentu oraz ich znaczenie. W pneciwi;hiiwie do macmikbw ~ ~ Z . ~ ~ - H T M L , kt6n okreilajq wyglqd dokumentu lub jego formatowanie, macmiki jezyka XML mom WSWC do Aefinio- - - - wania struG i-zawarto~ci dokumentu. W konsekwencji w p&adkh jqzyka XML zawartoSt dokumentu jest 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 -=/wi a 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.

Page 92: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziol4. Pliki Excela 97

Rysunek 4.3. Program Internet Explorer wyfwietla pliki XML w formacie 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 sw 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 Howak</ I~eNamisko~ 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 sa 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:

Page 93: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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.

Page 94: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat 4. + Pliki Excela 99

Na ko~icu mo2na zaimportowaf plik XML. W tym celu z menu Done nale j 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 cz~s to zawierajq 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 u . Dane 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~dwdjny kataiog). 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.

Page 95: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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

Eanm kom6rek majduje sig w rozdzlale 27.

Po wybraniu z menu PFik pozyc)i Zap/sz]ako zauwaiysl te Jednq z opcji Jest Arkusz 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?%.

Page 96: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzjal4, + Pliki Excela 101

Rysunek 4.8. Edytor rejestn, umoiliwia prreglqdanle i modyfikowanie rawartosci rejestm

nr-I arc-owcan ommmm~o)

.r~~mmoiormmmmmmwmltlmm~ 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 m m m m m m l O M l ~ m l l 0 l m m ~ ~ r n ~

m,z.6.aalS.* DgpOml(1)

Jak ju2 wspomnialem, nja 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~ycje Importuj). Aby uZYskaC szczeg6bwe informacje, nalety zajrzed do pliku pornocy dolqczonego do Edytora mjestrv.

Page 97: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

102 C z e i t 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 pay 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 Jest Jeszcze jedno osttzetenie. Przed dokonaniern Jakichkolwiek zmian w rejestrze, nale j zapomat sig z zawartokiq ramki .Zanim dokonasz modyfikacji w rejestrze.. .".

Page 98: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Projektowanie aplikacji w Excelu

Page 99: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat 5.

Czym jest aplikacja arkusza kalkulacyjnego?

W tym rozdziale spr6bujq wyjaSniC, w jaki spodb 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~ramowrmie m f m e ze stasowaniem a r k kaUrulacVinwh jest 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 i6w 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 z innych uiytkownikdw.

Page 100: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

106 Czgit I I + 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 rozwi~anie problemu (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 ldu 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 pny utyciu prostych metod bez dokonyania wiekszych m i a n (przede wszystkim z czasem nieuniknione sqmiany 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. Osoba zaimuiaca sic twomniern aplikacji a r m kalkulacyjnego 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 poten jalnym kandydatem na projektanm.

Page 101: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 tworq 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~wno wewnetrzni, 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 ne - dukowac ilosf czasu traconq na udzielanie odpowiedzi na pytania.

Projekanci aplikacji arkusza kalkulacyjnego zanvyczaj sq odpowiedzialni za nastepujqce zadania, ce s to 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

Page 102: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

108 CzgfC I I + 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 ~odnych rozwatenia, poniewat zar6wno umiarkowani, jak i bardzo dofwiadczeni &ytytkown-icy arkusy kalk;lacyjnych zazwyczaj ptzejawiaj~przynajmniej d&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.

Brrk zsinternowrnir Umierkmrnc Dute uintensowrnle uinternownsie

Nicwielkie doSwiadczenie Utytkownik Ukytkownik UQtkownik / potencjalny projekfant

Umiarkowane dofwiadclenie Brak Uytkownik Pmjckfant

D u t dohviadczenie B ~ a k 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~wiadczenie z zakresuarkukzy kalkulacyjnych, ale wykamjwe wore zaintercsowanie a potcncialnyrni kandydatami na projektant6w. Brak im jedynie doiwiadczenia. Jdl i c$Az iq prawdopodobnie-z~iczasz sip 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 moha 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 maw ddwiadneniem i brakicm zainhmowania prawdopodobnie tworzq najwi~kszy segment 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

Page 103: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzial5. + Czym jest oplikocjo orkvszo kolkulacyjnego? 109

przejawiajqzainteresowania jej 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, cqs to podsuwajq ~ a k o r n i t e pomysly popra- wiajqce jakoSl aplikacji. Aplikacje zapmjektowane z mySlq o tej grupie te t powinny by6 pq jazne 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 ap l~hc j i arkusza 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 ark~~te kalkulacyjne 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 pny 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~anego na 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 umotliwfujqce wprm&anie dunych. W przypgdku powtanajzlcych siq a d d zwiqw~ych z wprowadzaniem danych arkusz kalkulacyjny cqs to jest najwydajniejszym namylziem. Dane mom byt nastqpnie eksportowane w rbaych formatach i -wane w innych progmnach.

Page 104: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

110, Czqst I I + Projektowanie aplikocji w Excelu

B Generutor fonnularzy. 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: I I I

arkurn kalkulacyjne p m a c z o n e wykqcznie do u 2 y h prywarnego, I B aplikacje jednego w o w n i k q

B aplikacje typu ,,spaghettin, I aplikacje utytkowe, I jednoblokowe budtcty, I modele wanmkowe,

I aplikacje przechowujqw h e i udde la jw do nich dam, 1

aplikacje komunikujwe siq z b m i danyeh,

aplikacje ,pod klucz".

W kolejnych podpunktach om4wiq poszc~eg6lne kategorie.

Page 105: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziai 5. 4 Czyrn jest aplikacjo arkuszo kolkulacyjnego? l l i

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 dz i ah 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. Jd 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 ~ledzenia mo&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.

Page 106: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 Wkownika by1 zde- cydowanie dobne wykorystany, poniewat. dziqki temu zawzqdzilern kilka godzii pracy. Aktualnie aplikacja posiada przyciski wykonujqm rnalrra, a ponadm w znaqcyrn stopniu zmniejszyiern Ijczh operacji zwiqnych 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 u V8A itd. Dojdziesz do wniosku, t e realiza j a warcoScio- wego projektu (nawet, jd l i 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 pcqt lar w i @ s o 6 C tego typu apljkacji jes2 rozqfnie ukimmkowanyni aplikacjami jedncgo Wkownika. Jednak z czasem sq pmkaqwane 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 mmie , 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 wysokiej jak& 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

Page 107: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rordziot 5. + Czym jest aplikacja arkusza kalkulacyjnego? 113

to specjalne narqdzia wykonujace powtarmine zadania. JdIi na p rykhd 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 dostepfly jest 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, dzi~ki ktdremu 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 mien ione 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.

Doddd zawierajqce funkcje arkusza

Excel posiada.wkle funkcji arlmsza, kt6n motna stosowa6 w hrmuiach. Mogb sip zda- rzy-5, Ze ptrz&m&J olaeSIon j hnkcji, ale stwierddled, b taka nie istnieje. Co w takiej sytuacji nobid? Wystarcy ~ n z y utyciu 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 terminn j ~ o ~ buubt, mam 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 t sia formuly obliczajqce sumy aec iowe d h wartdci zawartych w bloku.

Page 108: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 pnez 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 wy+mie 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~gp katdemu, 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 pnxhowuJqce dane I udzielajqce do nich dostepu

Arkusze kalkulacyjm q s t o sh@ #do przechowywania 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~vari bazodanowych.

. . 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.

Page 109: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~trmych plikach - nawet posiadajqcych rdhe 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;lezenia sic 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 na l acych 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.

Page 110: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat 6.

Podstawy projektowania aplikacji arkusza kal kulacyjnego

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 Jak w s p o m n ~ w p r p d n h roxlziale, pmjektanci aplikacji arkuszy kahlacyjnych 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.

Page 111: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

118 Cze% II t Projektowanie aplikocji w Excelu

Nie wszystkie wymienione c z y ~ o f c i sq wymagane w przypadku Wde 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 mkownikdw lub charaktm ich pracy.

W jaki spodb oWl iC 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 mom 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 ake konkretne platformy sprzwwe k s t q w e . JeSli stwmna aplikacja bqdzie ugrwana na wolniejsqch systemach, rneba wzi@ to pod uwagq. Zapomaj siq z zawartolciq 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.

Page 112: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzial6. + Podstowv ~roiektowania o~likacii arkusza kalkulacvineao ; I 9

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, twomc 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 y i 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~zyku VBA. Obie metody majq swoje zalety i wady.

Page 113: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

120 CzeSC I I + 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~liemiqrone z 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 dowg 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 q planormy.

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~elokrotne zastmwanie niektorych raz- wiazari, wyjdzie ci to na dobre.

Z wbsnego dohviadczmia wiem, te kokoury uytkownik nie powinien deqdowak o mz- wiapmiu pmblemu. Dla pnykJadu zalir2my, 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

Page 114: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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.

Wmdzenie iezpa VBA do Excela 5 spovlliodowab, k pojektmcl aplikacji opartych na tym arkuszu kalkulaqgnym auuen i zostali do macmej zrniany sposobvl pograrnowania. Dot@ tysiwe osdb utnyrriywab sie z p~jektowania aplikacji 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 najwtaf ciwszego 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 dobrn 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:

niestandardowe okna dialogowe [forrnularze UserFonn),

m kontrolki umieszczaM bezpo$ettnio w arlcusu takie, jak ListBax lub Cmndkt ton.

Page 115: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

122 CzgfC II + Projektowonie aplikacji w Excelu

niestandardowe menu,

niestandardowe psk 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 tw dialogowh oparta na fomulnach UserForm. Jednak w kolejn~h wenJsh 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 u kombinacji 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 korn6r 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 ez utytkownika w oknie dialogo- wym. W wipksdci -4w bpdzicsz jednak pisal malaa j ~ k a VBA, w ~ c u j a c e z niestandardowymi oknami dialogowymi.

o n Szezeg6towe orndwienle formulany UserFam majduje slq w czwartej ce5ci ksiqtki.

m?m 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 pokazm 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.

Page 116: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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

mzm dysku CD-ROM.

h d o p o d o b n i e najcqkiej stosowana jest kontrolka CmndBut ion. Sama kontrolka CcmnandButton nie wykonuje adne j opemcji, dlatego tet z katdq z nich trzeba p o w i ~ k

BezpoSrtdnie z a s t ~ ~ ~ w a n i e kontrolek 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 k nie 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 pol* na rnociyfikowaniu menu Excela lub tworzeniu wtasnego svstemu menu. Zamiast . - tworzyf pnyckki wykonujqce rnakra, rnoma dodad jedno lubkiika nowych menu bqdl ich pozycji. Mre b& wywolywaly jut napisane rnakra. Zaleg niestandardowych menu jest to. te ich pack jest zawszc widoczny. natomiast pnycisk umieszczony w arkuszu z latwokiq moze mikrqt z pola widzenia.

Page 117: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

124 Cr$Se II + Projektowanie aplikacfl w 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 is tbx (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 a VBA

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@zi. Na rysunku 6.2 pokazano a + a d no!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

Page 118: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~zyka VBA. 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/Parki n~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 u tiwonone 2 ;ego potnmmoeq bd; nadal dpiataty po otwrciu skom* w ~rce lu 97 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;lcych sic 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 rymku 6.4 pokazano dostosowane menu p o r n m e pojawiajqce siq po klihiqciu ~ y k r e s u prawym 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 nanpdzi s q b d m popubane w aplikacjach Windows. Excel oferuje s p r y ich zestaw. Zwykle pny~ i sk i pask6w narzpdn spetniajq fimkcje skAt6w do czcsto stosowanych poleceh menu umotliwiajyych ~ o w n i k o m jch 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~malizowanie wi@z&ci operacji c-o wkonywanych w arkuszu kalkula- cyjnym nawet b a poshgiwania sie menu.

Page 119: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

126 Cze5C l i + Projektowanie aplikacji w Excelv

Rysvnek 6.4. Przyktad zmodflkowanego menu podrpcznego

Motna utworyC niestandardowy pasek zawierajqq tylko n w d z i a udos~pnione utyt- kownikom. Jd 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.

,F=$$%* Poczqwszy od acela 97, do paska narzedzi motna tet dodawae menu. \ ! 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' umoifiwia dbdsnie 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.

Page 120: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 swtami klawiaturomi. Na p m k h d kombinacia Cwl+S jest wbudowanym skr6tem klawiatu- rowym ~ x c e i a s 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~i mak&, dlatego m o a a uat kornbinacji CClrl+Sh$+S.

Trzecia cw.% ksi$tki zostata po5wiwona jezykowl VBA stutqcemu do plsania makr.

Rozpoczecie prac projekfowyc h

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 mbwip m e kwestie zwi-e z projektowaniem. ktbrc uwidacmiajq sie, gdy stopierj FunkcjonalnoSci apljkacji staje sip coraz wy?szy i nadchodzi moment pakowania i pmylania produktn.

Page 121: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

128 CZQ~C II Projektowanie aplikocji w Excelu

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~puje w trakcie dziahia aplikacii. a nie wwinno. lub d. co sie nie ~ o i a w i a 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?").

I jeszcze jedna spraw8: pracujqc nad apl~lcacj~ spr6buj prznvidziet wszystkie b@ly i po- mylki i dot62 wszelkich starah! aby im zapobiec lub przynajrnniej powiqae z nimi od- powiednie komunikaty. Takie dziatania nie tylko sq potyteczne dla kolicowego uty t - 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 i - 1

Uszkodzenie arkusza kalkulacyjnego jest do& proste. Usuniqcie jednej istotnej forrnuly lub wart&; c ~ t o powoduje 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

Page 122: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Roz&iat 6. + Podstawy projektowania aplikacji arkusza kalkulacyjnego 129

B@dy w Excelu?

M6gtbyS pnypuszczd, te taki p~duk t , jak 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.

Je 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 wz iesz Swiadomy pr&lem6w, ktdre muszq by6 usuniete, lub udoskonalefi. Mdre mu= zostaC wykonane.

Oczvwi4cie niemdno sic zorientowaC dlaczeeo koniecme iest stosowanie okreSlonvch rntckani~n6w ochrony arkuszy, gdy b-& z i i ch korzystac wtytkownky, a zwlaszcza pocqtkujqcy. Excel oferuje mechanimy ochtony arkuszy i jego elementow.

Page 123: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 naley 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.

Ukrywanie formul 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.

Udosrepnienie skoroszytu Excela w ~rybie i 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 pozyc 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 kl ikniviu rnoina

Page 124: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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+uzqcych do tamania has&. Excel 2002 i 2003 wydajq sie oferowad lepsze zabezpleczenia ni t 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 zale j 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. Twowc 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~ksze wyczucie 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. Twomc 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 Mu1 tipage (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 kdz ie 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.

Page 125: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 kdz ie 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 tp. 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 innw pliku. Motna nawet dla wlasnei wyp;ody stworzyC I - . - - - - wersje papierow Prawdopodobnie najpmstszy sposbb pwhowywania komenta6 i kluczowych inhrmacii o proiekcie polega na zastosowaniu oddzielnego arkusza W kodzje . - ~ l o w y ~ j w k a VBA nal;ty stosowat duta( l iczb komentarzy. ~ i e r s z kodu 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 metdy 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.

Page 126: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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. Ma to ulatwiC uZytkownikom identyfikacje jej twbrcy, zagwarantowad, te projekt nie zostat d y f k o w a n y , i zapobiec rozprowadzaniu wirusbw mah 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 moteu teraz usiaff. nelaksowaf sip i spr6bowaC zapomniet o problcmach, ktbre napotkatei (i mz- wi@eS) w trakcie pra& nad aplikacjq? &szem. w kdk i ch 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~ymi spe- 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).

Page 127: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

134 CzefC I 1 Proiektowanis o~likacii w 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 duech 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.

% Jeszcze wieksze problemy pojawiajq sie w przypadku Excela 2003. Mlcrosott (3, 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

Wersja jezykowa I

Motesz uwatat sip za duego 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.

Page 128: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

I Rozdzial6. + Podstowy projektowania aplikacji arkusza kolkulacyjnego 135

i

Szybkof 6 systemu

Prawdouodobnie zaliczasz sit do doSC zaawansowanvch uMkownikbw kom~utera i masz tendencjp do w. m i q rozs&ego m o d e m i z ~ w a n i a ~ ~ r z ~ & . Innyrni 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.

Po zdobyciu wlekszego dogwiadczenia w zakresle hzyka VBA stwierdzisz, te istniejq a> rnetody pozwaiajqce q iwnat zadanle I metody umtllwiajqcejego rzybkIe zrealizowanie. Naleiy wyrobid w sobie nawyk twonenla wydajnego kodu frddbwego. lnne rozdzialy ks iq ik i z pewnoSciq pomogq w oslqgnl~clu tego celu.

Tryby karfy graficznej

Utytkownicy korzystajq z rbtnych kart graficznych. RozdzielcdC karty graficznej wy- nosqca 1024 x 768 jest 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, jd 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~e pny 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 ~ ~ o z y c j ~ Powiqk- 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.

Page 129: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Jezyk fisual Basic for Applications

Page 130: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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.a sie 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 jpyk 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 jdl i 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

Page 131: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 zwiqmy 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. Utywajqc j 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~to motliwdd 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=° imr Nle pomyl jgzyka makr XLM z jezyklem XMC (an& eLmensibk Markup Language). 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 jqyka 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 k VBA.

Page 132: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdnat 7. + Wprowadzenie do jqzyka VBA 141

Rysunek 7.1. Pmste makm wle.?vku X 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 arg l , arg2) AMTw - argl + argZ

EM Fwction

Page 133: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 Cmandf la r . Zbiory same w sobie te t sqobiektami.

Hierordria obi&w. Pny odwdywaniu siq do obiektu pdm$dnego nalety o w l i d jego lokalizacjp w hierarchii obiekt6w pny 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 :

Instrukcja o d w h j e s i ~ do skomsytu Zeszytl. xl s zawartego w zbione 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~ciwokciami HasTi 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"> .Va lue

Page 134: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Zmienne jwku VBA. Z m i e ~ y r n jpzyka 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, na ley u2yC poniazej instrukcji jezyka VBA:

Interest - Worksheets['Arkuszl") .Range("Al") .Value

Meroc+ obiekrh. Obiekty posiadajq metody. Metoda jest operacjq wykonanq na obiekcie. Pnykladowo jednq z metod obiektu Range jest 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 Jgzyka VBA.

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 dodd lub usunq5 obiekty zawarte w obiekcle Bar. P m kledowo do zbiom Staly mote dodaC wive 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 ~Sc iwoSc 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'l qczony, 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. Oblew powiqzane z barem szybklej o b stugi r6wniet posiadajq metody. Z +atwoSclq rnoina soble wyobmzld dla obiektu Kuchenka metad? Z~i8naClstawieniaTemstatu lub 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~h z DMektaml w rdrn sic ma& dujqcyrni [wtqczenie kuchenki i ptzetqczenie wentyiataa na wywkle obroty). Czy teraz Jest to Jasne?

Page 135: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

1 44 CmIC Ill + Jw Vbd 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 szczcghi , 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 - Vlmaf Basic Editor). Edytor Visual Basic jest oddzielnq aplikacjq SciJle wsp&ipncujqq z Excelem. Gdy na pnyklad otwierasz edytor Visual Baic, Excel zajmuje sic wszystkimi s-mi tej operacji. Nie jest motliwe urucho- mienie edytora Virual Bmic bez upmdniego uaktywnienia Excela.

-J+* <mi Mod* VBA sq -an8 w pllkach skoraszytdw. Nle bvdq widoczne 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 wybM z rnmu Nanq&ia pozycjp Makro, a naswpnie Gdytor YisudBmic,

kli!utcnqC przycisk Edytw Visual Basic na pasku narzpdzi V f m l Bmic.

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 kl ihi j 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 T h t 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 MI. do edytowania skrypt6w nalsanFh u jpzyku b VBScrIpt lub JwaScript i umierwmph 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.

Page 136: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 o w w menu view przypisano sk6t klawiaturowy C~;I+G.

Edytor V I M Basic oferuJe tef menu podwzne zawlerajqce cqsto u2ywane plecenia. PoJa* r 4 ono 0 klikrtl~ciu pawym 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~pnych pask6w 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.

Page 137: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

146 Cz&C I l l + 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 pro jeh . 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 mysy kliknllf w dowolnym miejscu okna Projecr Explorer i z menu pod~ycznego wybrat 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, na lce 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~dbw z 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.

Page 138: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 Eip lmr . Aby mi& pewnoY. 2e jest przetwarzany odpawiednl modut kodu frbdtowego, tawsze nalety w oknie Project Olplomrdwukrotnie klikn* obiekt.

Jd l i o twahf wiele skoroszytdw i dodatk6w. zawartoSC okna Project fiulorer mote byC troehp przytlaczajip. ~ i e jest motliwe ukrycie projektdw zakrtych 4 tym oknie. 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 et pozycja Modutes, kt6ra pmhowuje moduty. hojekt mote te t 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.

~odanie nawego moduiu VBA

A b ~ d o projektu 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.

Page 139: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

1 48 Crgft Ill + J~zyk Visual Bosic for Applications I Usuwanle modulu VBA

JeJli mlety ci na usuniqciu z projektu modulu VBA lub modulu klasy, naleky w oknie Project Exprorer zmaczy 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 moha 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),

Page 140: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~czanie calego kodu irbdIowego jqzyka VBA dla aplikacji w jednym module VBA. Z kolei inni przechowujqkod w kilku r62nych rnodutach.

Page 141: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

150 CzeJC I l l + 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+owego jezyka VBA. Dodatkowo kod musi mieC postat procedury. Procedura sklada siq z instrukcji j~zyka VBA. 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~ny w " - & 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 podkdl i f , te te a e r y wiersze rzeczywiScie twomjedna insrrukcjq.

Page 142: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 jwajq 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 qstepr je 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 kl ikng 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 powi ipnym 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

Na rysunku 7.5 pokazano, jak wyglqda ten modut VBA.

Ryrunek 7.5. Pienvsza pocedvra napisana w jezyku VBA

Page 143: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~pnie wykonaf 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 efektywnlejsze jest 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~dzie j u t tak amkcyjna.

W pmstej procedurze majdujq siq nastpujqce elementy:

deklaracja procedury (pierwszy wiersz),

przypisane n iennym 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.

Page 144: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 wbierz pozycjp Ustawienia sirony. Excel otworzy okno dialogowe Ustawieniu strony.

5. Zamacz opcjp Poriorna, a nastqpnie w cclu zamkniqcia okna dialogowego kliknij OK.

6. Kliknij przycisk Zatrzymaj rejeswowonie na miniaturowyrn pasku narzqdzi (motna te t 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 Mdowy 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 mak apostrok, sq komentarzarni i nie zostanqwykonane.

UsHng 7.1. Kod M&wy makra zmleniajqcego orlentacje strow na podomq

Sub Hakro lO

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

h'ith Activesheet .Pagesetup .PpintTitleEto*s - " .PrintTitleColvnns - "

End U! t h ActrveSheet .PageSetm. Printllrea = "

Page 145: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

154 I

Cz&C Ill + Jezyk Visual Basic for Applications

With Acti veSheet .Pagesetup .LeftHeader - " "

.CenterHeader - " "

.RlghtHeader - ""

.LeftFooter - "" CenterFooter - "" .kiahtFooter - "" . ~ e i t ~ a r g i n - Pppl i ca t ion . InchesToPoints(O.787401575) .Righ:Margi n - Appl icatiw. InchesToPot nts(0.787401575) .TopMargin - ~ p p l l c a t i o n . InchesToPoints(O.904251969) Bot tmt la rg in -.Applicaticn.InchesToPoints~0.984251969) .HeaderMargin - Appl i ca t i cn . InchesToPotnts(O.5) .FwterMargin - App? ica t icn . InchesToPotnts(O.5) .Printt!eadiqgs - Fa1 se Pr in tGr ld l ines - False Pr intbmnents - x l P r l ntNoComnents .PrintCual i ty - 300 .CenterHorlzontally - False .Centervert ical ly - False .Orientation - xlLandscape .Draft - False . PaprSize - x l PaperA4 .FirstPageNumber - x l k t a n a t i c Order - x! DwnThenOver . 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 byb 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

.Orientat ion - x l landscax 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 - xlLandscaire

i l d Sub

Page 146: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 - 2

End Sub

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 mtodq 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+alciwosciami i rnetodami pojawiajqcymi sip w zarejestrowanym kodzie frbdtwyrn. nalezy posluzyC sle systemem pomocy.

Rejestrator makr barddej snneg6lowo mstanie omdwiony w dalszej cq l c l mzdziah. 4 Iapomaj s* z zawartoklq punktu .Rejestrator makr Excelam. MmEfl!

Kopiawanie kodu irhdlowego Jqzyka VBA

Dotychczas ombwikm bezpofrednie wprowadzanie kodu h6dlowego i rejestrowanie operacji w celu wygenerowania kodu jezyka VBA. Ostamia metoda urnieszczania kodu w module VBA 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$ hvoqcym aplikatje Excela, mn6shvo czasu sppdzisz, utywajqc edytora Visual Baric. Aby byk to jak najwygodniejste, edytor Visual Basic ofcruje do46 dute motliwo9ci dostosowywania

Page 147: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

!

1 56 i

CzgfC Ill Jeryk V i a l Basic for Applications i I

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~owym Opcje Excela ktore jest wyiwietlane po wybmiu z menu NurzqdTia pozycji Opqe. Co prawda, obydwa rnajq ta@ samqnazwp (w wersji anslojqzycznej), ale s+u@ do ustawiania rfitnych opcji.

1 Zaklad ka Editor

Na tysunku 7.7 pokazano opcje d o s t w e po klikni~ciu mkladki 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 wi&ana , e-r Yisuuf Basic na po- cqtku kadego hvomnego moduh VBA wnawi nastepujyq insmkcjq:

Option Explicit

Jd 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~stanie przypisany 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.

Page 148: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 o jqqka 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 te t 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 op j i Auto Quick Info oferujqcej pomoc na temat wla~ciwo8cf Range

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.

Page 149: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

1 58 Czgf 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 te t podaf liczbp makdw wcipcia. DomySln~wartdciq jest 4.

Zamlast spacjl do wykonywania wcl& w kodzie frbdlawym utywaj klawisza Tab. s> Powstajq wbwczas Dardziej regularne odstepy. Ponadto u celu urunl~cia wlecla 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 e i 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 q wy3wittlane 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 bdz ie 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

Page 150: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat 7. + Wprowadzenie do jezyka VBA 159

Opcja Code Colors

Opcja Code CoIom urno2liwia wybdr koloru tekstu (th i pierwszego planu) i wskainika, powiqzanych z rbtnyrni elcmentami kodu hbdtowego jczyka VBA. W tym przypadku ghvnq 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 pny 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~I okna dialogowego Opriom. W prawie kbdym pnypadlcu ustllwienia domydlne sqodpwiednie.

Rysunek 7.1 1 . Zaktadha General okna dialogowego Options

Page 151: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 pncciagnqe je 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 ma kr Excela

Rejeswdor mak, o Wrym w s p o m n ~ jut wczehiej, zamimia apcracje wykonywane w Excelu na kod hWowy jeyka VBA. Teraz n+e to ornowiq bardziej s~czegbl~wo.

Pasek narzgdzl Wsual Bask Excela poslada kllka prrydatny~h prrycisk6ur, takich jak Uruchom maim, lare,estmj rnskm, Iatnym@ n ~ t m m i c I Edytw Mstfa! B ~ s C

7 .FA.

Page 152: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 OK. Excel wstawi nowy modul (o nanvie Modu'lel) i rozpocmie rcjestrowanie operacji wykonywanych w arkuszu.

6. Uakfjmij OW dytora 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.

Page 153: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

162 CzeSC Ill + Jeyk Visual.Basic for Applications

Rysunek 7.13. Upoizqdkowanie okien umo2liwiajqce wygodne obsenvowanie procesu rejestrowania makra

1 R.bb3 R W 0 nnwro rarejcsrr- rao4-08-19, aurar .I.- E o n

-1-u-I .*.I- &L1..C.1L.IOrm.l.IIICL - -100- RmL.aO.1-14-1 .¶.I- &CLdCII.~D-LYIICL . -200. u.qC1-u-I .S* ILCS

A ~ c I Y ~ C ~ I I . ~ O ~ Y L C X ~ C L -300- bm 1.16.1 . ¶ c i r S e AerlvcCelI.T~mml.IIlC1 - ~-3~(RI-JlCinI-LICl ¶ c ~ c s ~ ~ ~ ~ . T c . ~ s . B o I ~ ' Rum

Wzglqdne czy bezwrglqdne?

W trakcie reieshowania makr Excel w stosunku do uivwanvch kombrek standardowo uzywa wktok be;wzgI~&ch. Innlnnymi sbwy , 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 re jes t rowie 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 Hzt ro lO Range( "01'). Select Acti -11 .Formu1 aRlC1 - 'Styczen" Range("C1-1 .Se! ect Activecel l .Fonnul aR lC1 - 'Luty" Range("O1") .Se iec t ktiveCel1 .FonulaRlCl - 'krzec'

Page 154: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Ranget "El") .Select PctlveCell . FomulaRlC1 - "Kwiecleh" Range( "Fl') .Select Activecell. FormulaRlCl - 'Maj' Range( 'GI.) .Select ktiveCel1. FormulaRlCl - "Czenriec" Range( '81") .Select

End Sub

I

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 bdz ie ak-tywna. Utycie odwdaf~ bezwzglqdnych podczas reje- strowania zawsze powoduje uzyskanie takich sarnych wynikbw. Je91i jednak zechcesz, aby makro wprowadzato namy miesiqcy, poczqwszy od aktywnej kom6rki. wdwczas podczas rejeswowania q j e s z ohuoiari wzgl~dnych.

Rozdziat 7. + Wprowadzenie do jezyka VBA 163

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.

2. Z menu Narqdzia wybierz p o y c j ~ Mukro, a nastqpnie Zarejestruj nowe makro.

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. Zaznacz k o d r k g 01.

7. Zakodcz rejestrowanie makra.

Po zarejestrowefiiu m h w trybje utywajqcym odwolad wzglpdnych kod hbdlowy kdz ie 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

Page 155: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

1 64 CzpSC Ill + Jqzyk V i w l Basic for Applicdom t

I !

ktlveCel1 .FomlaRlCl - 'Maj' ActlwCell .Offset(O. l).Range('Al').Select ActtveCel 1 ,FormulaRlCl - "Czerwiec' 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 inmkcja 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~pcie wGlCdne. 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 pr im Excel jest zbyt ztoany. Istniejq prostsze. szybsze i wydajniejsze sposoby k o d o m i a operacji. Ponhze 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 iveCe l l .Mfset(O. 01 - 'StyCZeh' k a v e C e i i .Offset(O, 11 - ' ~u ty ' PctiwCell .Mfset(D. 21 - larzec' Actlwtell .Offset(D. 3) - 'Kwfeciefi' k t l v e t e l l .Offset(O. 4) - 'Had" kt iveCel1 .Offset(D. 5 ) - 'Czerwiec'

End Sub

Po -iu k&cji W i t h . . . End Wlth mako m& bye jeszcze wydajniejs~:

Sub Makro4() Wlth ActiveCell

.Mfset(O, 0) - 'Styczd'

.WfsettD. 1) - 'Luty"

.Gffset[D. 21 - 'Harzec"

.DffsettD. 31 - 'Kwiecieri'

.Wfset[D. 4) - 'Haj'

.MfsettO. 5) - 'Czerwiec' End With

End Sub

Page 156: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 nobi 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 uwas , 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 nany 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 e s 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).

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.

t

Page 157: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

166 Czgit Ill J ~ z y k Visual 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 malw 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 whnym 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 Usfawienia strony menu Plik) moke by6 spora ildC kodu Wdlowego jpzyka VBA. W wielu przypadkach zbedne instmkcje kodu trddlowego m o h a usunr(C.

Watne te 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-y zostanie 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

Jedli w trakcie rejestrowania makra korzystasz z okna dlalogowego formatowania, I

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 Font . 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.I tal lc - True End With

Page 158: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 es 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 ie . kSl i 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~kcj i 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 Pnnt . 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 jpyka 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 u VBA 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 musq rozurnicC model ob iehwy 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.

Page 159: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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),

Wl n d m (zbidr wzystkich obiekt6w Ulndm - 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 ~Swiadomisz sobie, te hie- rarchia obiektbw jest doif logiczna i dobra 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. Worksheets jest zbiorem wszystkich obitktdw Wbrksheet mjdujqcych sic w oWlonym 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 zb im. Oto pnyklad:

Jegli erkusr. Arkuszl jest pierwszym arkusam zbioru, m o m pas- sip odwdaniem o nastwjqccj postaci:

Page 160: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdu'd 7. + Wprowadzenie do jgzyka VBA 169

Aby o d w h C siq do drugicgo arkusza obiektu Workbook, nalety uZyt odwdania Workshe- e ts t2l 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 c za pomoq kropki (nazywanej t e t operatorem kropki) nanvy obiektbw. Jak p o s t ~ i s z w 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 ju t 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 a korndrka 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 i mefody Tysiqce dosbpnych wMciwo3ci i metod mogq z latwoSci4 pnytloczyb. WyjaSniq teraz. w jaki spos6b z nich konystat.

Page 161: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

1 70 C z e f t Ill + Jezvk Visual Basic for A~ol icat ions

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 zale j 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. 'a lse

Pierwszy argument zostat porniniety. a zarniast niego pozostawilern puste mlejsce identynkowane przy u2yciu przeclnka.

Kolejna rnetoda MriekszaJqca czytelno6d 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, go 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[Fal se)

InstrukcJa w nastgpufwy sposdb mote tet zostd 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 y j e 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 a VBA o nazwie

Page 162: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 cgs to 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 - 123

End Sub

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 ~ ~ e s t Value. 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~te wszelkie 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~uy kopiujqcej 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 mo~iwof t pdminipcia sekwencji i wprowadzenia instmkcji w jednym wierszu.

Page 163: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

172 C Z ~ E Ill + J@ Viwol BCIS~C for ~ 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

0 biekt 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. M w n e 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&.

Page 164: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 te 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 te 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 Comnt ma szefC wldciwoici. W tabeli 7.1 zawarto ich list? wraz z kdtk i rn opisem W e j z nich. JeSli wia4ciwosC jest VIko do odcy~u, insnukcje kodu Cr6djowego jezyka VBA mogq odczytywaC j e j wanoSC, ale nie mogqjej modyfikowad.

Tabela 7.1. 16ryaJchwJci ob ieh Comment

Wldciwo4C Tylko do odczytu Opis ~ -- ~ --

Appltcation Tak

Author Tak

Creator Tak

Parent Tak

Shaoe Tak

Visible Nic

- --

Zwraca obiekt reprrzentujqcy aplikacjp, kt6ra utwvorzyla komcntarz (jest niq Excel).

Zwraca idenNfikator osoby. kt6ra utworzyla komentarz

Zwraca l i czb~ identyfikuj4qaplikacjs kt6ra stwonyla obiekt. WlaSciwofC nie jest utywana w wersji Excela przcmaczonej dla systemu Windows (dotyczy tylko wersji dlrsys~emu Macintosh).

Zwracn d r @ y obiikt komentarca (m- jest nim obickt Range).

Zwraca obi& Shape repmmhrjqcy ksdah pw@y z komenmmrn.

WlefciwSC ma watt036 True. gdy komentarz jest widocmy.

Metody obieMu Comment

W tabeli 72 zawatto metody, Wrych m o h a utywat w przypadku obiekn! Ccnment. I tym razem metody te realizujqcqste operacje, &re mogrl by6 wykonane ~ m i e na obiekcie Cment , ale prawdopodobnie nigdy nie m y i l a w ooich jak o metodach.

Motesz by6 zaskcczony shvierdzenlem, te Text zamiast da3clwoSciq jest rnetodq. sp* 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

Page 165: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 l iczh 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 te2 w ramach pqtli przehvorzyf 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 in 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:

Page 166: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 Cmen t zwr6ci obiekt Comnent. Na przyktad ponitsza instrukcja odwohje siq do obiektu Comnt powiqzitnego z ko- d r k q A l :

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- shef 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 11 Fonnat.

4 W celu identyfikacji koloru utyj w~Sciwolci RGB (lub w ~ i w o l c i SchemeCol 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

Page 167: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

176 Cz#C Ill Jqzyk Visual Basic for Applications I obi& Corrment

obiekt Shape

obiekt F111 Format

obiekt Co1 orFom t

Pierwszy pszymam, te to bnrdm zagmatwane! Jednak dla pokazania elegancji jpyka VBA p o n h j zamidcibm kod frddlowy zmimiajqcy kolor komentana, zapisany prry utyciu jednej instrukcji:

Motna tet utyLyC wlaSciwoici SchemeCol o 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 czb szczegbibw dotyqcych 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 uiywaJqcego j m a VBA? Kolor zdefiniowany w kodzle tr6dlowym )q*a VBA mote nie by6 tym, kt61-y faktycznle zostanle wyswietlony.

Mote to jeszcze barMeJ zagmetwane. 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 ~WdwoScl RGB 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~y w rzeczy- wistokl sq uzyskiwane. Jednak l lczk kolor6w ogranlcza paleta powiqzana ze skoroszytem.

Pny definiwaniu kolw6w dla cbiektu Range kontecmg jest 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 (0 odpDwlada brakawl m i e n l a ) . WartoSci wtablwotl adpowladajq kolwom palety skomsrytu. Niestety pamedry koleJnotlq Wwietlania 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.

Page 168: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzial7. W~rowadzenie do iezvka VBA 177

Nawiasem rnbwiqc. aby mieni 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~cq komentarz 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~cej dodanie 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

Page 169: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 i cat ion. Przykhdowo obiekt Appl i c a t i on posiada wMciwo3t Act i veCel 1 nvracajqcq odwdanie do aktywnej kom6rki. PonitPza instrukcja przypisuje aktywnej kom6rce wartoed 1:

W przyktadzie pominqknl odwdanie do obiektu Apol 1 cat icn, pniewat 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 i catlon pdada 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 i cat ion 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 bart~bjec t rnajdujgym sic w arkuszu. IeSli wykres nie jest aktywny. wlaSciwo4C bcdrie rniala wartoi t Nathirc

Act iveShset Akpwny arkwz (zwykly lub wykresu)

act? veWindw Aktywne okno

kt i veUorkbmk AkCywn~ skmplyt

!bngeSelection Kombrki arkusza znznaczwe w ohi lonyn okni+, nawa gdy zavlaczono obiekt graficzny

S e l c t l m Zaznaczony obiekt. Mom to by6 t&ie abiekty jak Range, Shape, C h z r t O b j ~ t itp.

Thi s k r k b o k Skomsyt zawicrajvy wykony~gnq procedq

Page 170: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzial7. + W~rowadzenie do iezvka VBA 1 79

Zale~stosowania wi&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 ~ m skomszytem, 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 name 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 dzhhh 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.

Page 171: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~ia zakrcs6w E ~ c e l a (mak spa- cji), Mdry m c a p t z e c i ~ i e dwdch 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:

I Range('Al. A3, A5. A7. A9" I - 4

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:

Page 172: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 mzumiah 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:

Page 173: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

182 CzefC Ill + Jqzyk Visual Basic for Applica:'ons

Instrukcjq tp m o ~ a opisak 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, na lcg 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 m6ciC 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 1 do 40. JeSli wartoSC argumentu przekracza liczbe komCkek zakresu,

diczanie jest kontynuowane tak, jakby zakres byt wlgksry nit w rzecqwisto8ci. A zatern inst~kcja podobna do powyiszej moze zmienlC wartosf komdrki spoza zakresu A1:0?0.

Trzecia skhdnia w ~ c i w o S c i Cells 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:

Page 174: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzial7. + Wprowadzenie do 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~esunipcie w 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~dzie mogla

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" Actfvetell .Offset(l. 0) .Range("AlS) .Select Actlvetell .FomlaRlCl - "3" 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~ochq dziwne, poniewal kombrka nie byla nawet u2yta w trakcie njesh-owania makra. Jest to nietyuow element procedury nj&ttowania, ktdry sprawia, ' kod trddlowy jest nadmieriib zGtony. Po usuniwiu wszystkich odwdafi do zakresu RarPge("A1') makm nadal bedzie nakornicie

Sub Znudyfl kawane 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

Page 175: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

184 Czqlt Ill + Jeryk Visual Basic for Applications

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 ~ m kilka 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 i (np. 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.

Wdne jest, 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 Wlaiciwatci mogq 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*~ych metod ahuotyvania sic do !ego samego ab ieh . 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 c h m e w :

Page 176: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat 7. W~rowadzenie do 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~-rniet calkowitq 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.

Zarefestruj wykonywane 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 u jest 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.

Page 177: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

186 Cze4C Ill + Jezvk Visual Basic for Ap~kations

Rysunek 7.1 5. T~powe okno pomocy doiyczqcej VBA

&$** Okno pornocy pokazane na tysunku 7.15 nle prerentuJe wszystklch 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~ncgo obiektu. Po uaktywnieniu edytora Visual Basic narzedzie Objecr Browser motna uruchomit na jeden z trrech sposobow:

wciskajqc klawisz F2,

wybierajqc z menu Yiew pozycjp Objecr Browser,

klikaj y pnycisk Object Browser na pasku narqclzi Stundard.

Narzedzie Objecr Browser pokamno na rysunku 7.16.

Rysunek 7.1 6. Nanedzie Object Browser jest znakomitym fr6dfern infomacji

Page 178: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 kl ihqt 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 q4wiet l i t 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 FI .

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 edytm 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.

Page 179: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 ju t z imym jezy- kiem programowania, wiele informacji bpdzie ci manych. Jednak jezyk VBA posiada kilka unikatowych cech, dlatego te t 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 For i = 1 To l D D

Total - Total + 1 Next i MsgBox Total

End Sub

Procedura zawiera kilka czpsto stosowanych element6w jpzyka VBA, w tym komentarz (wiersz rozpoczynajrlcy sip apostrofan), dwie mienne (Total o r q i), dwic instrukcje pnypisania (To ta l - 0 i Total - T c t a l + i), smktuq p@li (For . . . Next) i wbudo- wan& funkcjq (MsgBox). Wszystkie te elemmty zostanq ombwione w kolejnych punktach rozdziahl.

Page 180: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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.

Sub OneLi ~ e ! )

x - 1: y - 2 : z - 3 : MsgBox x + y + z End Sub

Jednak kod fr6d)owy jest czyteinlejszy po urnieszczenlu w kaMym wierszu tylko jedne] instmkcjl:

Sub OneLine( ) x - l Y - 2 2 - 3 nsgeox x - 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! " A l ' ) .Value

End Sub

Prry rejestrowaniu makr Excel w s t o ufywa mak6w ~ l e n i a w cdu 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 InstrukcJl Ans-1.2 (bez spacfl), Interpreterjezyka VBA zamleni jq do postaci:

Ans - 1 + 2 Interpreter jpzyka K3.4 zmienia odpowiednfo wklkofC makdw zawerlych w sbwadr kluczowych orsz w namach w(a8ciwo~cI I metod. 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 wprowadmno jako 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 Wd6w 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).

Page 181: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzid 8. + Podstawv ~roaamowania w 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{ ) a Procdura nle wykonuje iadnej operacji na wartosci x

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:

R a n - 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~dnione w jqzyku VBA. W przeciwiehstwie do apwtrofu sbwo klucmwe Rein musi byd umieszczone na pocqtku instrukcji. Aby umieScif go ra innq kstukcjq 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

- Rozpcczecle pr,mdury x - 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

Page 182: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 Mbwego , 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 Jq w 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 Fa1 se), a skoficywszy na dutych wart* Bciach o podw6jnej typu Ocuble (Eapomaj sk z n a s ~ m y m podpunktern). 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 wpbisz w sobie nawyk rmdawania zmiennym jak najbardziej wzumiafych nazw. Jednak jezyk VBA narmca w stosunku i do nazw &iemych kilka zasad:

W namie stos- maki dfanumerycmc, Iiczby i niektbre maki interpunkcji, ale pienvszy'mak musi by-5

Page 183: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzlala. Podstmy progarnowanla w jezyku VBA 193

W j w k u VBA nie jest mroPd2niana wielkoSC mak6w. Aby nazwy by@ bardziej czytelne, progamifci cqs to stosujq maki r6he j wielkoSci (na przykfad InterestRate zamiast I nterestrate).

w W nazwach nie motna stosowak spacji lub kropek. Aby nazwy byly bardziej czytelne, pmgramiki cqs to utywajq maku podkreflenia (Interest-Rate).

W W nazwach nie motna umieszczad ~ a k 6 w specjalnego typu utywanych w deklaracjach (#, S, & lub !).

Nazwy mogqzawierat maksymalnie 254 maki. Jednak nikt rozqdny nie tworzy z m i e ~ y c h o tak dhgich nazwach!

Poniiej mwarto kilka przykiadbw inmkcj 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 miemych 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: Cmi l 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~zyki prograrnowania 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

Page 184: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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@cych okreSlonego 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

Typ danych L inba 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~irfbliteniu 2 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 (Z liczbami) 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

Page 185: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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, konlecme jest 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~dpcych do 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 pomocq jpzyka 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 odgpa 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 Zapisuje czas pazittkouy S t a r t T i m - T imer

a Wykonuje k i l k a ob l i ue r l x - 0 Y - 0 For 1 - 1 To 5000

For j - 1 To 5000 A - x + y + t e - y - x - 1 C - x - y - i

Next j Next i iobiera koricouy c z a s EndTim - T i w r

a Wyk le 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 deklaruJqce typy danych. Omacza to, te zamienlkm Je na komentane popnez urnleszczenie apostrofu na pocz$ku katdego wiersza. W efekcle Interpreter jezyka VBA uiyl domy5lnego typu danych Variant.

Pmame W a n l e pmcedury zaJ6-o 14,7 sekundy, cEj(l bwdu prawie bzy razy dkttej nit wmfniej. Wnlosek lest prosty. JeSli za le j cl, ahy aplikacje napisane w Jezyku V6A dzlataty szybko, naleiy zdeklarowaC mienne!.

Skorosryt zawierajqcy kod frddlawy msjduje sie na d&qczonym dysku CDROM.

Page 186: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

196 CzeSt Ill Jezyk Visual Basic for Appflccltions I

Deklarowanie zrnlennych

lefli nie zdddarujaz typu danych dla zmiennej, interpreter poshky siq domySlnym ty- pem Var i an 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~pnie lhcuch 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~ca pro- 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 eyka VBA. Ponitej zawarto zmodyfikowanq wersje poprzedniej pmcedury:

Sub VariantDwnoZO HyYar - "123' Wsghx TypeNametHyVar) HyVar - Pjvar / 2 Wsghx TypeName(bVar HyVar - "Nynik: ' & HyVar I Hsgbx TypeNarn?(~FyYar) . ~ . . Hsgbx MyVar

End Sub . - . W tej e j j i pa kazdej iashukcji przypisania jest wySwietlany typ danych miennej HyYar. Najpienv mienna przeehowuje Mcuch, nastqpnie jej typ danych m i d sic na Double,

I wreszcie na koncu ponownie anienna jest typu kiticuchowego. ' .

. . i 1

. - - . . +-... . .. ~ . . .. . ... ~ *

I

Page 187: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat 8. Podstawy programowania w jezyku V M 197

Dzicki j~zykowi VBA 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 ma typ danych, nie musi go okreSlaC i mote wykorzystat pamipf w iloSci wystarczaj~cej jedynie do zapisania danych.

Unika si~probfemdw miqzanych r Mcdnie wprowad-onyrni na-?.vami miennych. W tym prsypadku zakhda s i ~ , t e jest uiywana opcja Dpt;on E x ~ i ICI r e wymuszajqca deklarowanie wszystkich zmiemych (zapomaj s i ~ z zawartoiciq nasypnego podpunh). Zal6my. t e utywasz nierdeklarowanej zmiennej o nazwie CurrentRats. W okreilonvm mieiscru orocedw 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 zmimn j 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. mtady w Jak najpmstszy sposdb dem0nStrUjq r6he 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. -

Page 188: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

198 CzqfC Ill + Jezyk Visual Basic for Applications

Tabelo 8.2. T ~ p y zaslegu zmiennych - ---

Zasifg Spos6b dcklsrowsnia zmiaanej w m i e u

Pojedyncza procedura - zmienne lokalne Zawarcie w procedurrc inmukcji D i m 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 u stowa 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~wyczaj sq 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 C i l [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

Page 189: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 zdeklarowaCJq jako zmiennq typu In teger :

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 tm 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 ienna 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 umieSciCprzed pierwszq procedurq moduh (na zewnqtrz wszelkich procedur lub frmkcji). W poni2szym pnykladzie instrukcja D i m jest pienvsq instmkcjq moduh Dostcpem do zmiemej Currentvalue dysponuje mbwno procedura MySuS, jak i YcurSub.

Page 190: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 o d tr6dlowy.l

End Sub

Sub Yoursub( ) [ W tym miejscu znajduje s i t t o d 2rklct)wy. I

End Sub

Wartoid ztnienmj dost~pncj w 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 ienna 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, te zrnlenna jest typu Boolean. W ponitszej tabeli ymienlono kllka standardowych przecC rostk6w typdw dan)ch.

Typ danych Pdros tek

Boolean b

Integer i

Long 1

Single s

Double d

Currency e

Oate/Tim dt

String s t r

ob jea *j

Yar? ant v

Zdefiniowany p m z utytkownika u

Page 191: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat 8. + Podstawy programowonia w jqzyku VBA 20 1

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 ~ e statyczne 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 ste 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 - .0725. Period - 12 Const ModNam as Strlng - "Hakra budletu" Pub1 i c Const AppName 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

Page 192: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

202 CzeJC I l l + Jezyk Visual Basic for Applications

Stosowanic w kodzie k6dlowym stalych zamiast m a l e wpmwadronych wartoki lub taf~cuchdw jest 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 - xllandscape

End Sub

Stah xlLandscape odkrykm w tmkcie njestrowania rnakra. Poza tym informacje na jej temat malaztem w systernie pornocy. Po uaktywnieniu opcji Auto List Members, pny 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

Jeyk 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~echowywania naglbwka 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).

Page 193: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

1 Rozdziat 8. + Podstowy programowanio w jezyku VBA 203

W kolejnym plyktadzie zmiennej MyString prypisam typ String i maksymalnq dhgoe wynostaa 50 mak6w. TYP danych 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 i jest 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 i czas q umieszaane pomiedzy dwoma makami #.

s??. Przedzlat dat o b s l o ~ n y przez lea& VBA lest maunle wlekszv nlt w pmadku Excela, CW,'.' ' - gdzle rozpoczyna s k od1stycGia 1900roku. A zatem dla p&nof& nie naleiy

w arkuszu stosowa6 dat wykraczajqqch poza przedziat dat obstugiwany przez Excel.

Oto k i k a prrykted6w deklarowania zmiennych i staiych typu Date:

D i m Today As Oate D i m StartTlme As Date Const FlrstDay As Date - #1/1/2001# Const Noon - #12:00:00#

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 Mtk ie j daty. Podobnie czas jest wyhvietlany z uwzgl&ieniern systemowego foml~tu czasu (12- lub Z C g o d z i ) . W celu miany ustawieri systemowych nalety w oknie Punel sterowanin wybrat pozycjp Opcfe regionalne i jpykowe, 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 1900 jest 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 I styemla do 28 lutego 1900 ruku.

Page 194: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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%ny w jeqku "81. dodaje do Excela now. funkcje arkusza. M6re urnotliwiajil hvorzenie lonut prz3twarzajqcych daty spczed 1 stycmia 1900 roku.

Instru kcje 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 moglem tcgo lcpiej zdefiniou&. Wiqksz& p pro~ramistycznych opartych 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 u VBA. 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 % - ( y * 2 ) 1 (Z * 2) Filmen - True FlleOpen - Not FlleCpen Range('Rok') .Value - 2004

Wyratenia moga by2 bardm &tone. Aby MekszyE uytdnoX 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 a VBA, funkcje arkusza Excela lub niestanchdowp funkcje jm VBA. Wbudowane funkcje j w k a VBA 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 te t takie same operalory pdwnania, jak form* Exceta. Sq to operator hvndci (-), wiekszy n i t (>I, mnicjsg nit (c), wiqks~y lub rdwny (r), mniejszy lub rbwny (<-) i nier6wnoSci (<>). Pondto jezyk VBA ofemje pehy zestaw operator6w logicrnych pakazanych w tabeli 8.3. Aby uzyskai: szczegbtowe in fmac je o tych ope- ratorach, nalety posIu2yC siq systemm pomocy jpzyka VBA.

Page 195: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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&5 logicma d\vdch wyratcfi

R6wnowatno96 logicma dw6ch wyratcn

lmplikacja logicma dw6ch \r?.ra.tch

KolejnoX stosowania opmtor6w w jezyku VBA jest dokdn ie 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 Fa1 se.

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 . R o w - 1 P o n b z e m n i e wykonuje opcracjp z logicmym operatorem Or. lnst~ukcja ElsgBox 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 te 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

Page 196: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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

Pny deklarowaniu tablicy konieczne Jest podanleledynle g6mego indeksu, Interpreter s> ].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 macim 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 ghy 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 ins tdc 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 ray .

Tablice pojawiq sip w dalszej c@ci rozclziah p r q oka j i omawiania p G w podpunkcie ,Wykonywanie bloku instrukcji w ramach ~ t l i " .

Page 197: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 nv i~kszyt szybkoft wykonywania kodu tr6dbwego.

Z r n i e ~ e obiektowe, podobnie jak 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 mierne obiektowe upraszczajq kod ~ l o w y , nalety zapomad siq z poni2sqprocedurq napisanq bez utywania miennych obiektowych:

Sub WjVarO Worksheets('Arkusz1') .Ranget'Al'l .Value - 124 Worksheets('Arkusz1') .Ranget'Al').Font.Bold - True WOrksheets(*Arkuszl'l .Range['Al') .Font. Italic - True

End Sub

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 mqczyt palce, objqtoX procedury motna mie jszy 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 PIZyPIsaniu obiektu do nniennej Interpreterj@yka VBA mat. mamie 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 Jest czas na przeprowadzenie Jego analizy. Zastosowanle zmlennej oblektowej pozwala aedu.kowa6 l l w kropek. Im mniej kropek. tyrn krbtszy czas przetwarzanla. KoleJna rnetoda zr;jlqkszenla szybkoScl'wykonywanla kodu Zr6dtowego polega na zastosowanlu konsbukcJi With . . . 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 . . -

Page 198: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 Custmrs(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" Custmrs( 1) .Contact - 'Jan Nowak' Custcmrs(l).Regiontode - 3 tus tmrs ( l ) .Sa les - 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. Cwto 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.

Page 199: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzid 8. + Podstawy progromowania w iezyRu VBA 209

W dodatku B zamieszczono kompletnq liste funkcji jezyka VBA wraz z krdtkim opisem a 4 katdej z nich. Wswtkie funkcje zmtaty doktadnie objaSnione w ,mi. wmocy jezyka VBA.

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 a VBA mogq bye na pnyklad zagnietdtane. Oto prosta procedura obliczajqca pny 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 moha 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

Page 200: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 posbwa do wySwletlenla wartogci mienne]. Funkcja ta cqs to 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 kwadra toyh sg opcjonaine):

PsgBox(kanunikat[, przyc~skiIC, tytull[. plikganocyl[, kontekst])

k m n i k a t (wymagany): kornunikat ew ie t lany 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 + vbQuestlon. 'Powledz m i ' ) If Ans - vbNo Then Ex!t Sub

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 uiytkownik kliknle pqc lsk Nie, procedura zakokzy dzlatanle.

cv- m 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.

Page 201: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 ~ k VBA 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 d Wlth, na P~cz$ek przyjrzyjrny 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.FontStyle - "Bold Ital lc" Selectlon.Font.Size - 12 Selection .Font .Under1 1w - 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

.Under1 tne - xlVoderlfneStyleStngle

.ColorIndex - 5 End With

End sub

Page 202: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 z procedurq, 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 d m n y , t a m stmnyz m n u ,ale, rejestrow, wykonywane operaele.

Konsfrukcja For Each ... Next

Wiesz jut, t, zbi& to gnrpa po-nych z soh obiekt6w. 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 lumc 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 ~ x Iten.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 pie razy. /

Page 203: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzid 8. Podstowy programowania w Rzyku VBA 21 3

W popnednim przyktadzie Item jest zmlennq oblektowq, a dokladniej m6wiqc 'sJPii - 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 D i m I tem As Windm Al lV ls ib le - True For Each Item I n Yindars

If t tm .V is ib le - False Then Al lVIstb le - False Ex i t For

End If Next I tem MsgBox A1 1Vls ib le

End Sub

Po ukryciu olcna wart046 wMciwogci A1 1 Visible 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 Ex 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 I f . . . 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 For Each Cell I n Selection

Cell.Valw - UCdse(Cell.'lalue) Rxt Cell

End Sub

W tyrn przypadku obick Selection spehia funkcjp zbiom obiek6w Range, poniewai: ka2da zamaczona korn6rka iest takm obiektem. Procedura S~rawdZa katda korn6rkp i w celu zamiany z a q c h w nicj mak6w na duiz ukywa &cji UCase j&ka VBA, Korn6rki zawierajqce liczby nie sq uwzglcdniane.

Page 204: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

21 4 CzeSC Ill + Jezyk Visual Basic for Applications I

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 konsmkcj~ For Each . . . Next, bqdqcq odrnianq ~ t l i . W tyrn punkcie zostanq omdwione dodatkowe metody sterowania wykonywaniem procedur jqzyka VBA. Oto one:

instrukcja GOTO,

m konstrukcja I f . . . Then,

konstrukcja Select Case.

w ~ t l a For . . . Next.

petla Do While,

petla Do Unt 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 jwka , 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 pmeduq .

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).

Page 205: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziot 8. + Podstawy programowonia w jezyku VBA 21 5

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 sfu ty 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 bdz ie 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 przykladtie jest 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 hdna 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 I f T i m c 0.5 Then Msgbx Y l t a m przed poludniem' Else -

nsgBox 'uitam po poludniu' End Sub

Page 206: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

216 Czee Ill + Jemk Visuol Basic for A~~lications

Wprowaddem lutaj ssakwcncj~ pmniesienia instmkcji do drugiego wiersza. Tak na- prawdq konstmkcja 1 f . . . 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 I f . . . 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 ~ e dnia 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 ~ c ~ zbphych 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

[Elsel f wnwk Then Ca l t e r ~ t ~ w r e ~ i n s t r u k c j e ] ]

[Else [ ~ l ~ f m t r v k c J e I l

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 Wtm 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-c oparty 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 inmkcj i E l 5eIf). Procedura jest wydajna i latwa do wrumienia. Nale2y zauwa2yC, 2e kakdej instrukcji I f odpo- i wiada instrukcja End If.

Page 207: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 ~ e j Quantity, 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~dzie zawierala pusty Mcuch. a nie wartoft licz- b o w hocedua nie wykonuje tadnej i m e j kontmli Mqd6w. Nie sptawdza na przykjad, czy wprowadmna wartoSC liczbowa zrniennej Quantity jest dodatnia.

Sub D~scount l ( D i m (hranrlty As Variant D l m Diwount Cis Double Quantity - InputBox("Wpmdt wartoit: "I If Ouantlty - "'Then Exlt Sub If Quamity - 0 Then Oiscount - 0.1 If Cucntrty - 25 Then Dlscount - 0.15 If Cuamtr ty - 50 Then Dlscount 0.2 If Ouan:?:y - 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 c konstrukcjl If . . . Then. Funkcja pobiera trzy argurnenty I dziaia w sposdb bardro podobny do excelowskiej funkcja arkusza JEZELI. Skladnia funkcjl Jest nastepljqca

I I f (yy~a.?enie, c - ~ t - ~ ~ a z m a - z - w ~ o ~ c i d - T . ~ c ~ t ~ 1 ~ 1 ' ~ z a n a ~ ~ ~ w a r t o f c i ~ ~ F a Ise) 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")

Trreci argument ( c z ~ ~ ~ - m i ~ ~ ~ z ~ w a r t o f c i q ~ F d I s e ) jest zawsze wyllczany, 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

Page 208: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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

wartoft zmiemej Discount mote sic mieniaf kilkakromie. Jednak kohcowa wartoSC jest I

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 ElseIf Ouantity 75 Then

Discount - 0.2 ElseIf Ouantity - 75 Then

Oiscount - 0.25 End If MsgBox 'Upust: " d Discount

End Sub

Zagnietdtone sfn~ktury I f . . . Then uwatam raczej za niepowme. Z tego powodu w?ywarn ich tylko w pnypadku plejmowania PTostYfh decy j i o charakmze dwuwarian- towym. Gdy bzeba wybrat jednq z trzech lub wiekszej liczby altematywnych struktur, cgs to lepsq 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 1 ista-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 < 0.5 Msg - "Witam przed poludnien"

Case 0.5 To 0.75 Hsg - 'Witam po poludniu'

Case Else Msg - "Witam wieczorem"

Page 209: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziot 8. + Podstowy progromowania w j w k u VBA 2 1 9

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 ""

Ex i t Sub Case 0 To 24

Discount - 0.1 Case 25 To 49

Discount - 0.15 Case 50 To 74 ,

Dl scount - 0.2 Case I s - 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~zyka VBA 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 dowolnq lhbq 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, czy l i d m k a ) . Dziqki ternu kod Zrbdbwy jest bardzicj nvarty. Oto prcykhd:

Page 210: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

I 220 CZQJC Ill + Jg~yk Viud Basic for A p p l i c a t i o n s I

I

Sub Oi scnmt3( Dim Want l t y As Variant 0im Discount As Dwble b a n t i t y - Inputbx( 'kprmadi warto i t : " I Select Case Guantity

Case "": E x i t Sub Case 0 To 24: Discount - 0.1 Case 25 To 49: Olscount - 0 15 Case 50 To 74: Oiscount - 0.2 Case I s - 75: Discount - 0.25

End Select MsgBox "Upust: " K Discount

End Sub

Interpreter m a VBA korlczy przetwarzanie konstrukcji Select Case naty-chrniast po vzyskaniv dls pt-qpdku unoW Trve Aby rtqc q k a 6 maksynaba M a j n o e . m , jako plerwszy nalety sprawdz~f najbarddej prawdopadobny pnypadek.

S t n ~ h r y Select Case tet mogq by6 zagniedtane. Ponitsza procedura sprawdza status o h a Excela (maksymalizowane, minimalizowane tub nonnalne), a nastcpnie wyiwietla odpowiedni komunikat. JeSli status okna Excela jest normalny, p&edura spraw&i status

I

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. "

I I

Case xlMinimized: Hsg&x 'Ckno apl l k a c j i j e s t minimalizmane." I

Case x l~onaa l : Hspsox "Qna apl i l tac j l m standardowq uielko5.t .' Select Case k t 1 veWi ndow . Wt ndawStste

Case xlMaxlmlred: nsgbx "Okno skoroszytu j e s t m tsyma l izonane. " Case xltllnimlzed: Ms~Sox "Ckm skoroszytu j es t minimallzcwane." Case x l Normal : HsgBox "Okno skoroszytu ma standardowa wiel to5.t. "

End Select End Select

End Sub i Stopied zagniddtrnia komukcji Select Case m e by5 dowolny, ale nalezy u p i C sic, 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 jes t m a k s p l izmane. " Case xlMinimized: MsgBox 'Otm apl i k a c j l j es t minimal tzrmane." Case x l N o m l : HsgBox "Okno ap l lkac j l ma standardma wielkoft. ' Select Case PctiveUlndm.WindowState Case xlHaxlmlzed: t4sgBox %no skoroszytu j es t malsymalizmne.' Case xltiinimized: bgBox 'Olno skorosrytu j es 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

Page 211: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 1 1 Then GoTo DcAnother Else Exi t 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 enne 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~ciq ramki ,,&ym j&t programowhie ~ktura lne?") . 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 - wrtdfpoudtk~ To rmrt3it-kokowa [Step warto$k-krokul [instmkcjel [Exit For] [~nstmtcje]

Next [licm~kl

Page 212: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

222 CzefC Ill + Jqyk Visual Basic for Applications

hym jsst proyanawanls struhturalne?

Majqc kontaht z m s t a m i , wczeinie] czy pdfniej pmasz pojecle ppgTamowania st~Mvdnego. Dowiesz sig te i , 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 ns t~kc j l GOTO. 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 n e takie, jak If . . . Theo . . . Else i Select Case orst petle For . . . Next. Eo Unt 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 j opcjonalnego 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 poml, 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 imb z przedziah od 1 do 100:

Sub SmXdSquareRwts: D im Sum As Double D im Count As Integer Sun - i]

For tamt - 1 To 1DD Step 2 Sum Sum + Ssr<Cwnt)

Page 213: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 dobq 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 NunToF 11 1 - 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 a natychmiast 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 Ex1 tForDemo() 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 - 1. 0) I f TheCell .Value - MaxVal Then

MsgBox "Maksymalna wartof t znajduje s l e w wlerszu " d Row TheCell .Activate Exi t For

End If Next Row

End Sub

Maksymalna wart066 kolumny jest okreSlana pny 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 Ex1 tForOemo zostah zamiesactona w celu prczcntacji metody kohcmia pr l i For . . . Next. Jcdnak nie stanowi najefektywnicjszego sposobu uaktywniania mjwiqk- szej wartoSci b s u . To samo realizuje nastepujqca instru&cja:

Page 214: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

224 CzgfC Ill + Jgryk Visual Basic for Applications

W popradnich przykhdach zastosowano stosunkowo pmste pqtle. Jednak motna w nich zawmt dowoh~+li&q instukcji, a nawet zngiieZdta6 ~ t l c For . . . Next jedne w drugich. - . - Oto pnyklad zawierajw zagnietdtonc ~ t l c 'For . . . Next inicjalizujqce tablice 10 x I0

Sub NestedLoops( D i m MyArray(1 to 10. 1 to 10. 1 t o 10) Otm 1 As Integer. j 4s Integer. k bs I n t e r For t - 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 1 e. w przeciwiehwie do pqtli For . . . Next, jest wykonywana po spelnieniu okrrJlonego warunku MoZe mieC dwie nwpu jace skMnie:

Da m i l e wrunek] [ instrukcjel [Ex1 t 001 [fnstrukcjel

Lacp

lub

Do C ins tmkc jel [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 i zosta- nie zawsze wykonana pnynajmniej raz

Poniszy p n y M u r n mi Do While opartej na pimvszej skladni:

Sub MileDernoO Do Mile Not IsEmpty[ActiveCell)

Activecell .Value - 0 ActiveCell.Offset(1. 0l.Select

LcoD End Sub

Page 215: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 i aktywnq kombrkq staje siq nastppna komdrka kolumny. Pptla jest wykonywana do rnomentu stwierdzenia przez funkcjq IsEmpty j~zyka VBA, te aktywna komdrka jest pusta.

Kolejna procedua konysta z p@li Do While opartej na drugiej skhdni. Pqtla zostanie zawsze wykonana co najmniej raz, nawet jdi i poczqtkowa aktywna komdrka b~dzie pusta.

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 #l. LineOText 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

Shuktm petli 00 Until bardzo przypomina stmktby ~ t l i Do Whi 1 e. R 6 i c a jest w i d o c h jedynie przy sprawdzaniu warunku. Pqla Do Whi 1 e jest wykonywana, gdy wanmek ma 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:

Page 216: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

226 CzeSC Ill + Jezyk Viwal Basic for Applications

lub

Do [instrukcje] [Exi t 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 Open "c :\dane\pl;i-tekstowy . tx:" For Input As #1 LineCt - 0 00 Unt i l EOF(1)

Line Input #I. LlneOffext Range("Al"1 .Offset(LineCt. 0) - Vtase(Llne9ffextl L?neCt - i ineCt + i

Lcap Close B1

End Sub

Page 217: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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, kbre wykonujq operacje. a nie zwra- cajq wartoSci. J~zyk VBA obsi-uguje tet procedury Function orn6wione w rozdziale 10.

W rozdziale ll. maJduJq s l ~ przyktady procedur, ktdre motna wykorzystaf

Deklarowanie i tworzenie procedur Sub jezyka VBA

P m e h r m jest grupq instrukcji jqzyka VBA majdujqcych sip w module VBA dostcpnyrn z poziornu cdytora Visuui Basic. Modul mott 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 rn ld 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 odgrywajq podobnq role, jak argumenty stosowane w funkcjach arkusza Excela. Insmkcje procedury zazwyczaj wykonujq na argumentach operacje logicme. Wyniki generowme przez procedw zwykle m leqod przekazanych argumentbw.

DeWarawanie procedury Sub

Fhxdura deklarowana pny ldyciu shwa kluczowego Sub musi bye zgodna z nastqpujqcq skfadni~

Page 218: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

228 CzgL6 Ill 4 jgryk Visual Basic for Applications

[Private I Public][Static] Sub nawa ([ lista-argomenthl) [ instrukcjel [Exi 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 ~rocedur we wszystkich modulach skoroszytu. Procedura zastosokana w module zawierajicyn instnrkcje Option pr iva te 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 is ta 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 nstrukc je (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.

igFC Poza niellcznyml wyjqtkami, wszystkie instrukcje j m a VBA majdujqce siq w module rnuszq by6 zawarte w procedurach. Wylqtkarni SQ deklaracje miennych na poztomle 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~g m 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 o je uwzglqdniajq Obie ponitsre pmcedury q publicme:

Page 219: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdu'al?. + Zostosowanie procedur Sub iezyka VBA 229

v

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). Nale j unikaC nic nlemaczqcych nazw takich, jak ZrbbTo, Uaktualnia C I ~ Naprawia. Niekt6rry p7ogramiSci poslugujq sig w nazwach zdaniami ~ tp l~~ jqcym i pocedup (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 t r6diouyl

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 ry )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~chomienie procedury przez utytkownika z poziomu okna dialogowego Makro.

W ponihzym pnyldadzie zdeklarowano prywamq pmcedurp o nazwie MySub:

Pr ivate Sub MySubO a [n tymrnie jscuznajdujes igtodfr6dlowy~ End Sub

Umieszczenie ponlke j lnstrukcjl pned Penvszq pracedura Sub wymusi, aby wszysdtie procedury rnoduhr bf i pywatne - n a w t te. M6re zdedeliarowano la wmocq slowa wuczowego Public:

& t ion 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,

Page 220: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 ~ ~ ~ h tych d i 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 W wlelu ~rzvoadkach ~ r 0 ~ e d u r a nie bedzie drialata mmwnie do momentu is* -~

. -. 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).

Jd 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~liwiajqce wybranie 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 te 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.

Page 221: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

I

Rozdzial9. + Zastosowanie procedur Sub jezyka VBA 23 1 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 M a b a .

2. W y b d odpowicdniq procedurq z listy widocmej w oknie dialogowym Makro.

3. Kliknqe przycisk Opcje (rysunek 9.2) w eelu wwiet lenia 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, sMt klawiaturowy b@ie miat postat Czri+S. Z kolei jeSli zostanie wprowadmna litera 5, da6t klawiahnowy kdzie mkd pos& Ctri+ShrfiS.

Page 222: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

232 CzeJC Ill + Jqzyk Visual Bc~sic for 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 Jednej z pmdeflnidwanych kombinacjl klawlsry stosowanych v Ucdu, pletwueh.r*o bqdhl mlMs komblnqa zdefinionna * ~ n e z clebie. Pnvktadowo kombinacja CMtSjest predefinlowanym skrdtem klawlaturowym Lceia zapisuJecym a ~ y w n ~ gkoroszyt. JeSli jednak taka sama kombinacla zostanle pnypisana do procedury, jej wcibnivcie nie S ~ ~ W O ~ U J ~ jut 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 ~ h opart)~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 rzyp id mu m h @nyjqkm, b nowa pozycja o namie Ohvdrzplik klienta majduje sip w menu Dane, natomiast procedunr nosi n m p OpenCustmrFi 1 e):

1. Z menu Widok wybierz potyejq Pmkimn&i, a nastppnie Dostafllj. Excel wy4wictli okno dialogowe Dostosowywanie, po czym zastanie pftxlqczony wspecjalny tryb dostosowywania W trybie tyrn menu i paski naqdzi nie qaktywne, ale mom by6 dostosowywane.

2. Kliknij zakladkq Polecenia okna dialogowego Dmtmowywmr'e.

3. P&d listp Kategorie i wybien pozycjp Makra.

4. W l ih ie Polecenia przecimij p i m q p o z y c j p (Niestmdardowy element menu) dadoh 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 pl lk kllenta.

7. W oknie dialogowym P ~ i a mubo z listy malu wybierz procedu~ OpenCustmrFI le.

Page 223: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~t okno dialogowe Przypist mokro, a nast~pnie przycisk 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 Dostosuj tawartego w podrnenu Paski n a n w menu Widok sq trwate. Wybranle nowej pozycji menu spawoduje ratadowanie skorosqtu. JeSI1 nie jest jeszcze otwarty.

Aby dowledzld sic, w Jakl sposdb u w jqzyka VBA do stworzenia powj i menu

Emm do,,,",.

Wywdywanie procedury z innej procedury

Jedna z najcqhiej stosowanych metod wykonywiia proccdury po lqa na wywolaniu jej z innej procedwy. Motna wyr6h i t trzy nastqpujqce jej warianty:

wprowdzenie nazwy procedury, a za niqjej argumentbw udli s q wymagane) oddzielonych przecinkami,

q c i e sbwa kluczowego Cal l maz. z n a m q procedury i jej argumentami CjcJli .q wymagane), zawartymi w nawiasach oimgtych i oddzielonymi przecinkami,

Page 224: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 ie 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 e , niekthy 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 ~ozypisywana do 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~cuch reprnentujqcy nanvp p m d u r y . Metoda Run wywotuje nastppnie odpowiedniq proc* (hleekenC lub D a i 7 ~ ) .

Page 225: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 - VeetEnd' Case Else: SubToCall - "Daily"

End Select 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 wywohiu prywamej procedury z innej procedury, obie musq 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 mo t l iWf r m m n i a interpretera j~zyka VBA 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, na i ee utyd jednej zponifszych instrukcji:

ModuIei .~ysub Cal l 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

Page 226: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 i W o w a n y jak oddzielna biblioteka obiekt6w. W celu stwomnia odwdania do skomqtu, 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 e wedlug 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 odwdafi wyiwidlona w oknie dialogowyrn References zawicra tet biblioteki obiek-tdw I

- .

i kontrolki ~ c t i ; e ~ zarejestrowane w systemic. ~ k o r o s z ~ t ~ Excela 2003 zawsze zawie- raja odwdania do nasgpujqcych bibliotek obiekt6w: i

i 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 wySwletlane wsmlkle dodane odwotanta do lnnych skorosrjt6w. S$ one urnieszczone

i !

ponltej elernentu o nazwie References.

Jcfli na prcykEad s ~ a r i y l e b odwolanie 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:

Page 227: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

. Rozdziai 9. Zostosowanie procedur Sub jezyka VBA 237

Dkcmgo wywolvje slp lnne pmcedury?

Je§ll JesteS ~ u J q q m programistq, motesz ZastanawlaE sig, dlaczego Ma9 w ogdle vydu je 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 C a l l GetUserOptions Cal l PraessData C a l l Cleanup Call ClaseItDown

End Sub

Popnez wywolywanle lnnych pmcedur elirninuje slg tet nadmiamwold. Zaldbny, i e zale j ci na wykonanlu opeacji w ddesi@u r6hych mlejxach procedury. Zamlast dzid~iokmtnie wprowaW 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 ideniycma jak 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.

Page 228: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

238 CzgSt I l l + Jgzyk Visual Basic for Applications

3. Przewih liste Kategorie i wybim 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 mysq 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~cznego wybien 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.

<SF** Nowy pnyclsk paska narqdzl b@de rawsze widoczny - nawat wtedy, gdy nie 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. Dowolnemu obiektowi motna pnypisak makro. Tego typu obiekty znajdujq s i ~ na mech paskach nandzi : 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, c ty pasck n-zi Formulane jest widoczny.

2. Kliknij konmlke Prryeisk z paska nartpdzi F m u l a r r e .

Page 229: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 o wybierz poycjq Pr,~ypisz makro.

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 te t 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

Page 230: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 n t .

Rysunek 9.5. Wonanle pmcedury popner wprowadzenle jej nazwy w oknie Immediate D I I WLrUII I x Sirllq

arscrm0 - .h 1°C c u r .- a e t r r w - ce.wIIRlcrrlq) D.DW.JCM a)11111lq

Przekazywanie argument6w procedurom

Agumemfy pfzekazujq dane, kt6rych proadura utywa w M e pmtwamnia instmkcji. Cztq 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.

Page 231: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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-y majduje sip w nawiasach okrztglych instrukcji Sub. Po zakofictcniu dz iah ia procedury PrccessFile, jako nastppna jest wykonywana in- srmkcja majdujqca sip za instrukcjq Cal l .

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 1 le(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 pnez 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 pnez 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 pnez 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 Dim @Value bs Integer MyValue - 10 3 1 1 ProcesstMyValut) Msgbx HyYal ue

End Sub

Sub Processt YourValuel Yourvalue - YourValue 10

End Sub

Page 232: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

242 CzefC Ill Jezyk Visual Basic for Applications

JeSli nie chcesz, aby wywdywana procedln-a rnodyfkowata jalqkolwiek zmiemq przeka- zywanq jako argument, rno~esz tak 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 - YourValue * !O

End Sub

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 pmz 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 Publ ic (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] HonthVa 1 = 4 Call PrxessKonth(MonthV31!

a [W tw miejscu znajdule s l e rod 2rddicwyI

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.

Page 233: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 pny uiyciu typu String:

Sub Prccess(1terations As Integer. TheFile A s 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 Sub, Jak i Function. W praktyce argurnenty cqJciej sq stosowane w przypadku procedur 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~te przed 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~y obstugujqcy 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 W dodatku C zawarto wszystkie kody Mgd6w jbzyka VBA wraz z ich opisem.

miam0 Pnechwytywanie .Mqd6w

Aby okreSlit, co sie stanie po wystapieniu bipdu, na lev u v t instrukcji On Error. Za- sadniczo dostqpne sq dwie mofliwoSci:

Page 234: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~scskoaenie do 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 prom 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 ~~Ia fc iwdc i E-r .!lurrtxr. Wtaiciwoic N ~ ~ e r jest 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 a VBA, a na rysunku 9.7 ten sam b+qd wyfwietlony w &ie. Bardziej zrozumiav opis mote onywikie sprawit. t e komunikat i

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

,-&* Odwolanle do obiektu Err jest rbwnomscme w l u jego wtaSciwSci o nazwie \0, Nmkr. A zatern ponitsze dwie instrukcje dajq taki sarn efekt:

Ms&x Err

Page 235: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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

Naley 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 If Err 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 mtanie wyiwietlony odpowiedni komunikat.

Kolejny pnyktad demomtuje abduge W 6 w wykonywanqpopm pnskok do etykiety:

Sub E r r o r D m [ ) On Error GoTo Hand!er Sele:tion.Value - 123 Ex i t Sub

Hand:e'r: MsgBox 'Przypisanie w a r t o k i do saznaczenid n ie j es t mtliwe."

End Sub

Page 236: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

246 Czegt I l l + Jezyk Visual Basic for Applications I

Procedura ptbbuje przypisak wartoit aktualnemu zaznaczeniu. JeSli wyswi 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@d nie 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 CheckCorFi l 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 1 eName - "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~artego skomzytu 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 Din x As Workbook i i leNm - "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

Page 237: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~cych zapoznat 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.

Page 238: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 ~ e j nie 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 ~ 4 % r 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 wprowadm 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,

Page 239: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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,

spodb sortowania listy,

B s p s d b upopdkowania arkuszy w oparciu o posortowanq listq.

Gdy nie dysgnujesz wszystkirni infonnacjarni na ternat okreSlonych mtod Pub wtaSciwo&3, rnotesz ich poszukaC w tej ks iqte 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~lku powigzanych 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 te t argument identyfikujqcy pobtenie ar- kusta. P6hiej uaktywnifern rejestrator makr, aby qrawdzit, czy polecenie ~rzenie i lub 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 mjdu je 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:

Page 240: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~dzie umieSciC nazwy arkuszy w tablicy taricuchdw, a nastqpnie posortowac je prry utyciu instrukcji jgzyka VBA.

Wstepne przygotowania 1 Teraz rnam jut wystarczajqcq wiedzt, aby rozpoczqt t i v o m i t kodu bodtowego z prawdziwego zdarrenia. Jednak zanim to nastqi, musq przepmwadziC wstepne pry- 1 gotowania Aby od~vorzyf to, co jutmbilem, wykonaj n a s t v u j ~ e operacje:

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.

Page 241: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 utykS 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~echowywanie kaMego makra w oddtielnym module. Dzi~ki temu 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 inmkcj i ReDim, mogq p h i e j nieniC romiar tablicy. talc aby przechowywala wlafciwq I iaba elementciw.

Page 242: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

252 czee 111 + JsWk ~ I S W ~ Basic for Applications 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 ah poprawnie, rnoZna usunqt funkcje MsgBox. Po jakimt czasie takie okna komunikatdw staj@sit irytujqce. I

Zarniast funkcji Msg8ox rm!na w trakcie testowenla hvorzonej apllkacjl rastosowa6 s2 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 Jest o 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 Sor 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-cej nie powinien ciq miechpdib, gdyi? daSk latwo motna m a l a powszechnie utywane pmcedury, a nastcpnie pizystosowad je do wknych wymagak OczywiOcie internet to znakomite Wdlo tego typu danych.

Tablica moZe by5 sor&owana na 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.

Page 243: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzial9. Zastosowanie procedur Sub jezyka VBA 253

W celu sprawdzenia ka2dego elernentu tablicy metoda sortowania bqklkowego wyko- rzystuje ragnietdtonq p@le For . . . Next. Jd 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 hbb leSor t (L t s t0 As Strjng) ' Sortuje elenenty tab l i cy 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 I f L i s t ( i ) > L i s t [ J ) Then

Tmp - L i S t [ j ) L i s t ( j ) - L l s t ( i ) L i s t ( i 1 - Terrp

End t f 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 &Dim SheetNms(1 i o SheetCount) For i - 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% Str ing F i r s t - LBaund(List1

Page 244: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

254 CzgSC Ill 4 Jqzyk Visual Basic fo r A p p l i c a t i o n s I

Last - UBound(List) For ! - F i r s t To Last - 1

For j - 1 A 1 To Last I f L ls t (4 ) z L i s t ( j ) Then

Temp - L i s t ( j ) L i s t ( j ) L i s t ( i : L i s t ! i ) - Tenp

End I f 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 tdq zarejestrowalern, gdy pnenositern arkusz skoroszytu, tak aby stat siq jtgo pierwszym arkuszem? Oto ona:

Sheetst'Arkusz3") .rove Before :- Sheets( 1: I 1

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:

F j r 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+owego procedura SortSheets wyglqda nastcpujqco: I Sub SortSheets()

Din SheetNamest; k Str ing 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( i 1 - A c t i v e l i o r l h ~ .Sheets{i). Name

Page 245: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 ak tmego 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 znen la r o n i a r tab l icy przy u tyc iu i ns t rukc j i ReDim Sheetcount - ActiveUorkbwk.Sheets.Count ReDls SheetNames(1 To S h e e t h n t )

a Wypetniente tab l icy namami arkuszy For i - 1 To Sheetbunt

SheetNames(1) - hctiveUorkbodk.Sheets(i) .Name Next i

brtowanle tab l l cy 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 - wew 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

Page 246: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

256 Czge Ill + J ~ r y k Vlsual 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

PO wykonaniu 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~gtku procedury 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 e problemu z proceduq Bubbl eSort. Aby w nazwach arkuszy wyst~powaly same 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 taf1cuch6w w 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 e aktywny. 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

Page 247: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat 9. + Zastosowanie procedur Sub iezvka VBA 257

Stwierdzitern, 2e mogp nie stosowad insbukcji On Error Resm Next. P o n h instrukcja jest batdziej bezpoSredni~ metoda okrei lani~ 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 lsgbx ActiveWcrkbcak.Name 6. " j es t chronlony.". - v b t r i t i c a l . "Nie jes t mFl iwe p o s o r t w n i e arkuszy."

Ex 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 icat lon. EnableCancelKey - xlOisabled

Po wytqczeniu kornbinacjl CM+Break nalety zachowaC duta ostrotnoX. JeSll kod < fr0dlowy zacznle wyk0nyl.C nieskotkzong pt le . 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

If PctivdJorkbool: I s &thing Then E x i t Sub ' Brak attywnego skorcszytu

Page 248: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

258 C z g f C Ill + Jezyk Visual Basic for Applications

SheetCount - ActiveWotkbook .Sheets .Count

a Sprzwdzenie, czy jes t chroniona struktura skoroszytu If ActiveW~rkbook.ProtectStructure Then

Msgbx ActiveWorkbook .Name 8 " j es t chroniony .'. - vbcr l t i ca l . "Nie jes t mZl iwe posortowanie arkuszy. "

Ex i t Sub End If

Wy?qczenie kmbtnacj i k l awiszy C t r l 9 reak Appi ication.EnableCancelKey - xlDisabled

Uzyskanie 1 tczby arkuszy SheetCount = AttiveWorkbook. Sheets .Count

Zniana rozmiatu tab l icy ReOim SieetNames(1 To SheetCount)

' Zapisanie odwolania do aktywnego arkusza Set OldActive - Activesheet

Wypelnielie tab l icy nazwarni arkuszy Fcr i - 1 To SheetCwnt

SheetNamesC 1 I - Ac:iveWorkbook.SheetsIi 1 .Name Next 1

' Sortmanie tab l icy 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

Pct ivWrkbwk.Sheets(SktNames( i ) ) .Move - Before:-ktiveuorkbook .Sheets(i

Next 1

' Ponme wtpczenie poczq tkw aktpmego arkusza 0 l d k t i v e . k t i v a t e

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 ia logowyrn Mob0 (w ce lu j ego otwarcia nalety wcisn@ k o m b i n a c j ~ k lawisEy AIt+F8) lub wciskajqc kombinacje k lawiszy Ctrl+Shz@+FB.

Maho m o t e t e t zostaC przypisane do nowego przycisku paska narqdzi lub pozycji menu. Procedllry ponvala jqce wykonad to zadanie om6dono w u e h i e j w tym mzddale.

Page 249: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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. I jeszcze nie widzialern, teby to rnakro wyfwietlalo kornunikat blcdu jczyka VBA.

% <!, Z procedurq w d a l s m ciqgu jest mlqzany Jeden poblem. Polega on na tym. i e sortowanie jest proste i rnoie nie zawsze .loglcme". Pnykladowo po wykonaniu sortowania arkusz Arkusr l l 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.

Page 250: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat 10.

Tworzenie procedur Function Funkcja jest procedurq jpzyka VBA m c a j q c q wartosir. ~unkcje rnogq 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 ~ e ten rozdziat.

W rozdzlale 11. znajdujq si? pnydatne i praktyczne pnyktady zastosowania procedur a 4 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~zyka VBA,

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 li jed- nak taka Biczba fimkcji ci nie wystarcm, utywajqc jjezyka VBA, motes2 stworzyf funk- cje niestandardowe.

Ma jv 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

Page 251: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

262 CzefC Ill + Jezyk Visual Basic for Applications

VBA. Czqsto na pnyklad w macqcy 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. k tbq mo2na po prostu wywdaC z procedury. Niestandardowa funkcja eliminuje koniecmo4d powieiania tego samego kodu tr6dloweg0, a tym samym redukuje l iczk 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 twom 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)

D im StringLength As Integer. 1 As Integer Reverse - "" StringLength - LentInString) For ! - StrlngLength To 1 Step -1

Reverse - Reverse 6 nid: I~St r ing . i . 1; Next i

End Function

Dzialanie funkcji wyjdnip p6hiej w podpunkcic ,,Analiza funkcji niestandardowej".

Page 252: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 twteca swoj 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*. PO wykonaniu 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@fbnih.

W kilku pnypadkach W i e funkcji Reverse doprowadzi do zaskakujqcych wynikbw. Jdl i argumentem funkcji bqdzie wartoSd, jako jej wynik uyska sip niesformatowanq Warroik. Gdy argumentem b~dzie wartoe 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 mom by6 te t zagnieMtane i @czorte z innymi elementami formuf. Przykladowo p o n k formula (km2ytecz.a) dwuhmie utywa funkcji Reverse. Wynikiem jest pocqtkowy ldcuch.

Page 253: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

264 Cz$& Ill Jgzyk Wsual Basic for Appllcatlons

Zastosowanle funkcjl w procedurze jgzyka VBA

Nicstandardowc hkc jc . sq 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~pnie utycva 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 h wprowadmy 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~kszofci pnypadk6w 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.

Page 254: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziot 10. e Two~enie procedur 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 Len jpzyka VBA okrtSla dlugoSC wpmwadzonego hicucha i przypisuje j q zmiemej StrlngLength.

Kolejne my instrukcje t w o p ~ t l e For . . . 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 l i w 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. Laricuch jes t 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~mct ian l [instrukcjel C n a m - wateniel

End Function

Znaczenie element6w skladni jest nastqujqce:

Pub1 i c (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 h powstatvch modulzch

P r l vate (opcjonalne): stow0 kluczowe powodujqce, te procedura Function bedzie dost~pna tylko dla innych procedur tcgo samego modulu.

Page 255: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

266 CzeJt Ill + Jezvk Visual Basic for A ~ ~ l i c a t i o n s

I Stat1 c (opcjonalne): slowo kluczowe powodujqcc, te 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.

I 1 i s t a argument& (opcjonalna): reprezentuje listp jednej lub kilku miennych 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 ns t rukc je (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 sbwo 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 ~ e j majqcej 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 prz~ procedury z innych moduh5w lub arkuszy. Oto kilka infonnacji o zasipgu funkcji, o k twch nale2y pamiqtaC.

w JeSli nie wstanie zdeklarowany zasitg hnkcji, domfllnie b-e zastosowany zasiqg identyfikowany przez slowo kluczowe Pub1 ic .

Page 256: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

I

Rozdziol 10. + Tworzenie procedur Function 267

Funkcje zdeklamwanc pny 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~pujwq instrukcjp:

Total - Smrray(HyArray1

Instrukcja wykonujc funkcje SumArray, pobierajqcq argument HyArray, nvraca jej wynik i pnypisuje go zmiennej Total. M o h a te 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 I Wywolanie funkcji poprzez umleszczenie jej w formule arkusza

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.

Page 257: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

268' C Z Q ~ 111 + J ~ z y k Viuol 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 stwomie 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 kdz ie 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.

Jefll lomwta utywa nbstandardowe] bnkcji i z k c a wartog b@du #AffG!, omacza to, Sfi* 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] cef ci rozdziatu.

Przyklady funkcji

W tym punkcie zaprezmtujp kilka pnykladbw efektymego stosowania argumentdw funkcji. Nawiasem m6wiqc, zawart06t punktu dotyczy tet procedur Sub.

Wszystkle W d y w r n l e m e w tym punkcle majdujq sie na ddqczonym dysku

Page 258: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziof 10. + Twonenie wocedur Function 269

-

Ponowne wynaklenis kola

Wy+qcmie dla 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 )

D i m StnngLength As Integer 0-rn i PS Integer D:m ASCI IVa l As Integer O l m Cr~arval As Integer

StringLength - Len(1nString) UpCase - Instring For i - 1 To Stringlength

ASCI IYa l - 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 Wpadku tego zadania, ale bez obaw rnogg powiedzid, ie nlestandardowa funkcja pod wgl@ern srybkoSci 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-obiektu Applricat i on. 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* jest dolqczenle pry pustych nslriudw o k ~ ( y c h , Co -a, 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

Page 259: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

270 CzqfC Ill Jezyk Visual Basic for Applications

Aby zastosowat funkcje w innej procedurze, konieczne jest przypisanie jej zmiennej, u2ycie w wymeniu lub uec ie jako argumentu innej funkcji. W poni2szym pnykhdzie wywowana jest funkcja user; warto&! 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 fornub 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 sp* rniesiecmej. Pracownicy osiagajqcy wiqksqspnedat otnymujqwy2sze prowije. . ,

Page 260: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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+adzle zaprezentowanyrn 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 jqmzumie 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- wiz 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

Page 261: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 * T ier1 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 jd 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 Wwiet la 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 e do momentu klikni-ia pnez 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 Str lng . , .: , , . . .

* Probba o padante w a r t o ~ c i sprzeda& Sales - Val (Input&x( "Wpmadi warto i t sprzedaLy :'. "Kalkulator prwizji od

sprzedaty' ) )

' Twrzenle k m n i k a t u

Page 262: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzial 10. + Tworzenie procedur Function 273

Msg - YartoiC sprzedaly:' a vbTab & Format(Sa1es. 'b.XXO.00 z1") Msg - k g & vbCrLf & ' P m i z j a : " & vbTab Msg - lrsg & Formt(Comnisslon(Sa1es). "#.#O.OO 21') Msg - 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 Cmnissior l 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 Se 1 ea CcmnissionZ - Carmisalon2 + (Comnlsslon2 * Years / 100)

End Function

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 jqce 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:

Page 263: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 - SumArray + Item Next 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 D i m Nurns(1 To 100) As OouSle Dim 1 as Integer For i - 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 jest typ Vznant), mote te t zostad utyta w tworzonych formuhch arkusza. Pnykladowo I

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:

Page 264: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 te t 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(App1 icat ian .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 sbsstng zadernonstrowanej w powytszym przykiadzie.

Ponitej zamieszczono kolejny prryklad niertandardowej funkcji stosujqcej opcjonalny argument:

Functlon OrametRng As Variant. Opt imal Recalc As Variant - Fa1 re) L o s a ~ wyblera z zakresu jedna komSrke

1 ' Gdy Recalc ma w a r t o g True, funkcja s ta je s i t n letnrala A ~ p l i c a t i o n . V o l a t i l e Recalc

OkreJla l o m wybranq km~5rke Draw3e - Rng(Int((Rng.Count) Rnd + 1))

End Function

Z wprowadzonego zakresu funkcja losowo wybiera j edq 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 Fa1 se lub zostanie porniniqty, funkcja nie zostanie

Page 265: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 $4 poprawne (dwvie pienvsze dajq taki Sam wynik):

IDraw(A1:AlOO) =Draw(Al:A100. Fa1 se) -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 wian towq 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 is twd" . '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 mbi f , aby wygenemwt pionowq liitq nazw rniesiccy? Nie stanowi to p w blernu W tym celu wystarczy zamacqf pionowy zakres, wprowadzii poni tsq 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:

Page 266: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

I Rozdziai 10. + Tworzenie procedur Function 277

Funct im MonthNancs(Optlona1 MIndex) Oim AllHalnes As Variant A11Naws - Array{"Styuefi'. "Luty'. 'Marzec'. -

"Kwlecleh". "Maj". 'Czerwiec'. "Llpfec', "Sierpieh'. - "Urzesieh' , "Paidzlernl t' . -L i stopad'. "Grudzieh')

I C 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 - ( (MI~dex - 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 poziomq tablicp 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& mprnenfu jest w i b fub r h n a I, funkcja zwraca nazwq rniesqca odpawiadajqcq wartoSci 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 1 Names 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:

Page 267: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

278 CzeSC I l l + J ~ z y k Visuol 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. kt6q 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 i n s t ~ k ~ j a nle zostanie utyta, dolna granica domySlnie bdzie miata warto5d 6.

Funkcja zwracajqca wart046 Medu

Czasami chcemy, aby niestandardowa funkcja zwtacah okref lm 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 kdz ie zawierat bricucha, to funkcja powinna mr6ciC warto36 b l d u (#BID! 1.

Page 268: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 - " # I D ! "

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~dbw formut 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 sTex 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 es 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 & f l id(InStr lng, 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.

Page 269: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 hdqce 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 h wielokomdrkowymi 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 SlmpleSum zamieszczonej w voprzednim podpunkcie, funkcja MySum doskonale ernuluje

v . . . . - ~

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:

Page 270: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

I i Rozdziot 10. + Twotzenie procedur Function 28 1

Zawiera ona wszystkie typy argummtbw, ktdre ponitej wymieniono zgodnie z kolejno8ciq i ch utycia:

r odwotanie do pojedynczcj kornbrki,

m litera),

lahcuch dajqcy sip przeksaalcit na war to i t liczbowa.

brakujqcy [pusty) argument,

warroSC logicma PRAWDA,

w wyratenie uqwajqce 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. ce 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 ce l l In TempRange

Select Case TypeNm(cel1 .Value) Case 'Double'

MySm - HySm + cel l .Value Case "String'

Mysun: - UySm + EvaTuate[ce?l.Value) Case "Error'

Select Case cel l .Text Case '#ZIELIO! "

RySum - (NErr(xlErrDiu01 Case ' tN ID"

NySum - CVErr[xlErrNA) Case 'IAPrlh?"

MySum - CYErr(x1ErrNam) Case '+ZERO!'

@Sum - CVErr(x1 Errtiull)

Page 271: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 Exi 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 - args( 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~pujqcych kwestiach:

Brakujace argumenty (identyfikowane przez hnkcjq 1sU:ssl ~ g ) sq po prostu 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 pny 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 (fakcycma wart& 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~zyka VBA.

Page 272: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 MySum jest macmie wolniejsza od funkcji SUMA, ale p ~ d k o 4 t dzialania 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 spodb 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 dobrn ci manych wyskakujqcych oknach komuni- kat6w. Po wystrlpimiu b w u formula PO pmtu 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 h lokaluacjach. 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.

~~eTesIowaniepmcedurypap~~ wywdanie jej z procedury Sub, a nie zfornub arkus~a. Bkdy u~chomieniowe sq wyiwietlane w standardowy sposdb. Motesz wunqt ljeSli wiesz, jak to'zrobit) lub uaktywnit debugei.

Ustawienie w funkcjipunktu wstqmania i wykonanie je 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~pnie z 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 h fymcz(~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:

Function VwelCornt(r) Count - 0 For t - 1 To Lentr)

Ch - UCase<Mldtr, d . 1)) If Ch Like "[AEIWII" Then

C a n t - count +I

Page 273: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

284 CZ@e Ill + Jezyk Vinral Basic for Awlications

Debug.Prlnt Ch. 1 End I f

L x t 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 dz iahia hnkcji, gdy je j argumentern by1 ldcuch Miss iss ipp i .

Rysunek 10.5. Okno Immediate

Okno dialogowe Wstawianie funkcji

umo2llwfa wy5wietlanle wynikdw w Vakcie wykonpvania hmkqji

Okno dialogowe Wstmianicfinkc/i Excela jcst bardzo pnydame. W trakcie tworzenia fonnuiy arkusza umotliwia wvbranie z lisw okreflonei funkcii arkusza (rvsunek 10.6).

I 2 I 5 I I I 14

W celu-uhtwienia lokalizacji o k l o n e j fink$ p ~ ~ ~ o ~ j;wedtug G y c h katcpri'i. Okno dialogowe Wstmianiefunkcji wySwietla tet nies~indardowe funkcie arkusm i urosi utytkownika o podanie argukent6w f;nkcj i.

-

Rysunek 10.6. Wstawianie do formuty niestandardowej funkcji

@ ! Nlestandardowe lunkcje 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 wyswietlana jego nanva.

Page 274: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozddat 10. + Twmenie procedur Function 285

W wersjach Ewcela starszych od 2002 okno dialogowe Wstawlanie fvnkcji nosifu * nanq 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

t i & * PDwytsza instrukcja musi zosta6 wykonana tylko raz, a nle kaidoramwo pfq otwieraniu 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 -~stcrwianie funkcji. ~ a t e ~ o ~ i e re pojawiq 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

Page 275: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

286 Cz@C I l l 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. I

Rysunek 10.7. 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 Makra 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. I 5. Aby ohvorzyt okno dialogowe Opcje makra, kliknij przycisk Opcje.

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

Ym nu.: I .-

Page 276: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 in fkac 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 Cqs to 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.

ZaMhy , 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 [email protected]/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

hzyk 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.

Page 277: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 ~islrol Bmic, lak UserForm, Arkuul i Thisworkbook), koniecme kdzie zdeklarowanie knkcji interfejsu API p n y utyciu s l o w kluczowego Pr i va te .

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 1 pBuffer, natorniast dhgoSC jej Mcucha miennej nSize.

Page 278: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 Str ing * 255 D i m Win01 r As S t r ing WinPath - Space(255) Win01 r - LeftfWlnPath. GetWi~dcwsOi rectoryA -

(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 ing Zwraca dcietke katalogu s y s t m kindows Dim WnPath As Strim 255 WinPath - Space(255) Ylndu+~sOlr - Left(WlnPath. GetWlndowsDi rectoryA -

( W i nPath. Len(WinPath1)) End Function

Po zdeklarowaniu funkcji motna jqwywolat z innej procedury. 00 przyklad:

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&rym jete6 zainieresowany.

Page 279: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 Cl ick wci8niqo klawisz Shi/i. Dla klawisza Shift zdefiniowalern stafq ( p q utyciu w&o~ci szesnastkowej), a nastepnie poslutylem sic niq jako argumentem funkcji GetKeyState. JeSli funkcja GetKeyState mrdc 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 e Function GetKeyState L i b "user32' (ByVal nVirtKey As Long) As Integer

Sub Button_ClickO Const V < SHI:T As Integer - &HlO If G ~ ~ K $ ~ s ~ ~ ~ ~ ( v K - s H I F T ) c 0 Then

MsgSox "Klawlsz Sh i f t zostal wci9nlety ." Else

HsgBox "Klawlsz Shif t n ie 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 knkcj 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 u stosowania 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.

Page 280: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat 11.

Przyktady i metody programowania w jezyku VBA

Wierq, te 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 fm je 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 wi~edy na 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 prograw. 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 ni i pneuytanie ksiqiki z b wierajqcej teoretycme opisy.

Page 281: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

292 CzqJf Ill + Jqzyk Visual Basic for Applications

i <- Rzyk)ady ddy~~p3 pzehmmnla zakres6w sq dostepre na dotqcmnym dysku CDRaM.

Kopiowanie zakresu

Rejestrator makr Excela nie jest ju t 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 lcat ion .CutCopyHode - False

End Sub

Najpierw jest zaznaczana i kopiowana kornbrka A l , a nastcpnie. po zaznaczeniu korn6rki 81, procedura wykonuje operacjp wklejania. Jednak w j p y h VBA nie jest konieczne zamaczanie obiektu, kt6ry bdz ie 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 l . xls 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[ Mrkbwks[ 'P l lk l .x ls ' ) .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( "Pl lk1,x ls ' ) .SheetstmArkuszl') .Ranget'Al') Set RngZ - Wor!&mks("Pl l k 2 , x l s") .Sheets('ArkuszZ') .Rangel'Al') Rngl. Copy Rng2

End Sub

Page 282: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 okre l la jwh 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 kdz ie wyrnagane umgl~dnienie dodatkowego kodu Wdlowego.

Rysunek 11 .l. Lids wlerszy zakresu Uanjch mienia s.ie kaidego tugodnia

Page 283: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

294 CzeE Ill 4 Jezyk Visual Bosic for Applications

Poniaze rnakro demonstruje, jak skopiowat zakres z arkusza Arkuszl do arkusza ArkuszZ (pocuwszy od komorki A l ) :

Sub CopyCurrentRegronZO Range("Al').Currer,tRegion.Copy Sheetst"Arkusz2").Range('Al")

t

End SuS

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. I Jefli 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 two~y5

rnakro przy uiyciu rejestratora, a nastqpnie jego kod ir6dtowy zrnomkowaf w celu zwiekszenia efektywnogci.

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.

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 ) .

I I I

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~amaczanie r6inego typu zakresirw i identyfikowanie ich

WiqkszoSt operacji wykonywanych p m z instrukcje jpzyka VBA bqdzie opierab sic na zahsach. Instrukcie umotliwiaia definiowanie z a M o w tub identyfikowanie zakres6w. .. ., - w.cetu wykonywania operacji na kornorkach do nich naleacych.

Page 284: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~le komblnacji 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 s ic od aktywnej komdrki i koticqcy 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 zakres ,era jednq Iub w l e j pu-h komdrek. metoda End mote nie wygenerowaC oczekiwanych wynlk6w.

Na 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 ins tru kcji iezyka VBA

EL in:--- " , , ".-lp-. rP+--m--w "

. . . . . . . . . I . . . . . . . . . . . . . . . It. : b I

Ponitsze makra o nazwie SelectCurremtRqim majduje s i t w prqlctadowym skomycie i syrnoluje wciSnipcie kombinacji klawiszy Ct.I+Shi/i+ *:

9 ~ b SelectCurrentRegion( I PctlndeCel 1 .CurrentReglon.Select

E-d Sub

Page 285: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

29 6 CzeSC I l l 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 - Trus

End Sub

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 - InputBox('Wrwdt wartobt.'l

End Sub

Na rysunku 11.3 pokazano okno umotliwiaj~ce wpmwadzmie wartdci.

Jednak z proceduq zwiqzany jest problem. Jefli utytkownik kliknie w oknie pnycisk Cancel, procedura usunie wmlkie dam 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

Page 286: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat 1 1. Prryldady i metody 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 If Msg - "Poprzednio wprowadzona warto i t by1 a nieprawidlowa . " Msg - Msg & vbNewL1ne Msg - Msg d "Uprwadf wartofC z przedzlalu od " & MinVa: & ' do ' & HaxVal

LOOP &ti veSheet .Range( " A l " ) .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 uwko wnika

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

Czpto 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 Ent ry l As Str ing. Entry2 As St r ing Do

NextRcw - Raw("A65536') .End[xIUp). acw + l Ent ry l - InputBox("h'prorradi imle') If Ent ry l - "" Then Ex i t Sub '

Entry2 - InputE'ox("l4prmadi kwote"? I f Entry2 - "" men Ex i t Sub Qlls(NextRar. 1) - En t ry l @l l r (NextRw. 2) - Entry2

Loop End Sub

W procedune nie zostal o M l o n y warunek zakohczenia Mli. W celu jej opuszczekia U~$WII insbukcji Ex i t Sub, k t k jest wykonywaqa po klikniwiu przycisku Cmcel w oknie umotliwiajqcym wprowadzanie danych.

Page 287: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

298 CzeSt I l l Jpryk Visual Basic for Applications

Ryiunek 11.5. Makro wstawiajqce dane do nastepnego pus tego wiersza arkusza

i J J ! d : ' . - . . iuu - 1 0 - . B I U l L f a d * L , - 3 - A - 4 A l l - s

c j D I E I F I G-?--.L.-! !.-.A

K-011

910 !

I m i I

4 1 1 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 e pusta, jako nastqpny pusty wiersz metoda wymaczy wiersz 2.

Wstrzymywanie wykonywania rnakra w celu pobrania za kresu zaznaczonego przez uiytkownika

lstnieje rnotliwo9C stworzenia rnakra wsbzyrnuj@cego praq 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~ge As Range

Page 288: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 o worowadzenie danych On Error Resume Next Set UserRange - Agpl icaf7,n. Icwt@ox( -

Prompt :-Prompt. - T 1 t i e : - T i t l e . - 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 ? If UserRange Is Nothing T3en

MsgBox "Wcifnieto przycist Anuluj." Else

UserRange. Range( ' A l " ) - (lu:>~t End If

End Sub

Okno urnotliwiajace wprowadzanie danych pokazano na rysunku 1 1.6.

Rysunek 1 l.6. W celu wstnymania pracy makra u& okna

Podanie argurnentu Type o wartofci B ma kluczowe znaczenie dla powytszej procedury. Na leb 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 Wciiniefo pwcisk 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~ng oblektu 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:

Page 289: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

300 CzeSC Ill Jezyk Visual Basic for Applications

JeSli aktywny arkusz zawiera zakres o nazwie dane, ponitsza instrukcja z m i e ~ e j 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 te t przy utyciu wlaSciwoSci R o w s 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 wi~ce j calych wierszy,

c a b nrkusz,

dowolna kombinacja wytej wymienionych typbw, czyli zaznaczenie wielokrome.

Poniewa2 istnieje kilka typ6w zaznacnfi, w trakcie p~etwarzania zakresu 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 - 1

AreaType - 'Kan6rira"

Page 290: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzial 1 1. + Plzyktady i metody programowania w j$zyku VBA 30 1

Case RangeArea.Count - Cells .Count AreaType - 'Arkusz'

Case hngeArea.Rows .Count - i e l i s . Row5 .Count AreaType - "Kolurma-

Case bngeArea.Co1 umrrs .Ccunt - Ce 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 bdz ie r6wniet dziatad, gdy Microsoft kiedykolwiek zwiekszy liczbe wierszy arkusza.

Skoroszyt majdujwy sie na dolqczonym dysku CDROM zawiera procedure IbMRangeSeI~ticn. k t6n 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

Page 291: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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+a pozostalych 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 l f TypeNane(Selection1 <> "Range" Then E x i t Sub Cor.st RED!NOEX - 3 Apol i c a t i o n .ScreenUpdati ng - Fa1 se For Each cell In Selection

I f cell .Value c C Then cel I. 1nterior.ColorIndex - REDItGEX

Else ce 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 : l a <mOrki na czerwony

D i m c e l l As Raege D im Fornulatells As Range Dim Constantcell s 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)

Page 292: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 FomlaCe l l s I f ce l l .Value c 0 Then

c e l l . I n te r i o r .ColorIndex - REDINDEX Else

c e l l . 1ntenor.ColorIndex - xlNone End If

Next cell End If

' Przetwarza k d r k i stalych I f Not ConstantCel l s 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

c e l l . lnterlor.Color1ndex - xlNone End If

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

Page 293: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

300 C z e e Ill Jewk Visual Basic for Appllcotions

JeSli aktywny arkusz zawiera zakm o nazwie dane, poni2sza instrukcja zmiennej Cell - Count pnypisze liczbq jego kornbnk:

CellCount - Range( "dane') . b u n t

Motna tet okreSli6 l iczb~ 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 l iczh 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,

c i@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 pnez wiele zaznaczeb. obiekt Range hdz ie 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-. - 1

AreaType - "Kombrka'

Page 294: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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.: - Cell s .Columns. Count AreaType - 'Wiersz'

Case Else AreaType - 'Blok"

End Select End Function

Funkcja jako argument pobiera obiekt Rznge i m c a jeden z p iwiu laricuchdw opisujqcych obszar - K m r k a , Arkusz, Koluma. il?ersz lub Blok. W celu okreflenia, ktore z piqciu wyra2ed por6wnuj~cych ma wartoiC True. funkcja korzysta z konstrukcji Select G s e . JeSli zakres sktada sig z jedncj komorki. funkcja zwrdci Lricuch Kmdrka. Jeil i 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 lhcuch 0104.

fa** W wyraieniach p 0 r d ~ n ~ j q q Z h nie sa stosowane wartoScl bezwzgledne. Przyktadowo 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+aczonyrn dysku 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

Page 295: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~echowu jq wartoY 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 If TypeName(Se1ection) cz "Range" Then E x i t Sub Const REDINDEX - 3 A ~ p l ication.ScreenUpdating - False For Each cell I n Selectton

If cell .Value < 0 Then cell .lnterlor.ColorIndex - RE3INOEX

Else cell .lnterlor.ColarIndex - xlNone

End I f 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 ec 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( ) ' Je i l i wartoit jest ujemna. zmienia kolor ;la kcmort i na czemny

D l m cell As Range D l m Fonnul ace1 1 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. r lNmbers)

Page 296: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozddot 1 1. Przyktady i rnetody prograrnowania w jezyku VBA 303

On Error @To 0

' Przetwarza kambrki f o m l I f Not FomlaCe 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

c e l l . Interior.ColorIndex - xlNone End I:

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 . In ter io r .ColorIndex - REOINDEX Else

c e l l . 1nterlor.ColorIndex - xlNone End I f

Next ce 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 1 s generuje btqd, gdy tadna komdrka nle spetnia klyterlum. Instmkcja zajmuje sie tez obstugq wszystklch przypedkbw, w ktchyh podczas wykanywania proceduv 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 wwc iwdc i UsedRange obicktu Worksheet.

Sub De le teEnp tybd 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 Rws{ r l .Delete Next r

End Sub

Page 297: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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. Jdl i dln ~ ~ k d l o n e g o wiersza funkcja zwr6ci wartost 0, oznacza to, te jest pusty. Procedura p n e m wierszr od doh 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 braca Trw, je<li rngl jes t 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 If

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:iq Parent 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 komhe . Naleky do nich zalicqd takie funkcje, jak CZY .TEKST, CZY .LOGICZNA i C 2 Y . W . Dodatkowo jpzyk VBA zawierafimkcje IsErrpty, Isbte i IsNmric.

Page 298: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat 1 1. PnyWody i metody progromowania w 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 g6rnr j 1-j kondrki zakresu

D i m TheCell As Range Set TheCell - Rng.Range( "Al") Select Case True

Case IsEttwty(TheCel1) CellType - 'Pusta"

Case Appl ic8ation.MrksheetFunction. IsText(TheCe11 I Cel lType - 'Tekst"

Case A w l ication.WortsheetFunction. I s log ica 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'

Case IsNumeric(TheCell1 CellType - 'Liczba'

End Select End Function

Nalety zwr6ciC uwagp'lla instrukcjp Set Rng. Funkcja Cel i Type 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 i i r i teReadRange 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 Str ing. RwdTime As St r lng Dim Msg As Si r ing

Page 299: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net
Page 300: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat 1 1. + Pnyklody i metody progromowania w jezyku VBA 307

&pi lcatlon.ScreenVpdatlng - Fa1 se For CurrRaw - 1 To CellsDarn

For CurrCol - 1 To Cel izkross ActiqteCell .Offset(CurrRow - 1. CurrCol - l).Value - CurrVal CurrVal - CurrVal 1

Next CurrCol Next Cur-Row

Wytwietla czas trwanla operacji t ~ p l lcat lon. Screenupdating - True MsgBox Fomat(Timer - S tar tT im. "00.00") & ' sekund"

End Sub

Pnyklad z listingu 11.5 demonstruje szybszq metode uzyskania tego sarnego efektu. Kod h o d l o w y wstawia do tabl icy wano ic i , a nastppnie za pamocqjednej instrukcji przenosi zawartoSE tablicy do zakresu.

Llsting 11.5. ~ o q v s t y w a n l e tymczasowych tabllc w celu szybszego wypelnienia zakres6w

Sub ArrayFillRange( ' Wypelnieme zakresu poprzez t ransfer e l m n t h tab l l cy

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 ta r tT im - Timer

Zmiana wymiatxk tynczasowej tab l i cy ReDim TmpArray(1 To Cel l s D m . 1 To Cel lsAcmss)

a Zdefinlowanle zakresu w arkuszu Set TheRange - Range(klls(1. 1). Cells(Cel1sOam. CellsAcross))

Wypehienie tymczasowej tab1 i cy CurrVal - 0 Ppp.1 icatlon.kreenUpdatlng - False Far i - 1 To CellsDown

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 tman ia operacj i Application .ScreenVpdating - True nsgbx Format(Timer - S tar tT im. 'W.00'1 & " sekund"

End Sub

Page 301: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

308 C e f C Ill + Jezyk Visual Basic for A~plicat iom

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~cl zakresu 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~h do tablicy typu Varlant x - Range('Al:LSO") .Value

' Wykonanie pe t l i dla tablicy typu Variant For r - 1 To !J&und(x. 1) . - For c - 1 To UBaund(x. 2)

Page 302: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozddof 1 1. Prryklady i metody programowanio w jezyku VBA 309

Unotenle przez 2 I f IsNumeric(x(r, c ) ) Then x ( r , c) - x(r , c) * 2

Hext c Next r

' Poncwne umleszczente w arkuszu zawarto9ci t ab l l cy typu Variant Range('A1:LSQ") - x

End Sub

Procedura dziah zadziwiajqco szybko.

Zaznaczanfe maksymalnej warfof ci zakresu

Procedura GoTdfax z listingu 11.6 uakpnia komdrkq zakrcsu zawierajqcq jego mak- syrnalnp wartofd. Procedura majduje rnaksyrnalnq wart036 spoSr6d wartofci wszystk ich 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 Kokzy dzialznie, j e i l i n le zaznaczano zakresu I f TypeName(Se1ection) - 'Range' Then Exi t Sub

' Jet1 1 zaznaczono jednq tan5&e. przeszukiwany jes t ca?y artusz. ' W przeciwnym razle przeszuklwany jes 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 : -x l~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.

Page 303: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 maczen iu korn6rek

d . d

moms je w iowolny sposbb zmodyfikowaf, narprzykhd zmieniC formatowanie, usunqc I

itd. Na 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+a w starszych wersjach aplikacji.

Z powod6w znanych tylko firmie Microsoft nie powiedzie sip rejestracja makra u2y- I

wajqcego przycisku Format z okna dialogowego Znajdowunie i zamienianie. 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 es t utynany Excel 2002 lub nowszy

I f Yal(Apolication.Version) < 10 Then Vsg8ax "Wymagany j es t program Excel 2002 l ub m s z y . " Ex i t Sub

End I f

D im F i rs tCe l l As Range. FourdCell As Rznge 31m A11Ce7ls As Range

OkreSlenie sprawdtanego formatwania With Pppl icat i0n.FindFomt

.Clear

Page 304: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzial 1 1 . + Pnyktady i metody programowanla w jezyku VBA 31 1

.Interlor.ColorIndex - 6 ' kolor i b l t y Fon t .Bold - True

End Wlth

' Szukanie pierwszej pasujacej komdrki Set Fi rstCel l - Activesheet .UsedRange.Flnd(what :-"", searchformat :-True)

J e l l t n ie zostanie maleziona tadna kmbrka. przetwarzanie zostanie zakohczone If FirstCel l Is Nothing Then

HsgBox "Nle znaleztono radnych pasujacych kodrek . ' Ex i t Sub

End i f

a I n i c ja l i zac ja Al lCel ls Set Al lCel ls - FirstCel l Set FounUCel 1 - Fi rstCel 1

Uykonywanle pet11 do m e n t u ponownego malezienia F i rs tCe l l Do

Set FoundCell - Activesheet .UsedRange.Find - (After:-Foundcell . what :-"'. searchformat :-True)

I f FoundCell I s Nothing Then Ex i t Do Set Al lCel ls - Urnon(FoundCel1. A l lCe l ls ) I f Foundcell .Address - FirstCel l .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 i obiektu F indFomt . 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 1 Cell 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 ~ h sle specyflemym formatowaniem. bwgcyrn wynikicrn zastosowanla funkcjl iarrnatwnnla rarunkowego Excels.

Page 305: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

312 CZQJC 111 + Jpzyk Visual Basic for Applications

Przetwananic skorosryt6w i arkuszy Kolejne pnyklady demonsrmj~metody przctwammia 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

I f 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 i pnetwana zbi6r Workbooks, zapisujqc i zarnykajqc wsqstkie skoroszyty:

Sub C;oseAl lUorkboks( ) D l m Baak As Workbook For Each Bodk In MtWmoks

I f Book .Nm 0 lh1sWortbook.Name Then Book . C l ose savechanges :-True

End If 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 daq i czas wykonania ostatniej operacji zapisu skoroszycu:

Page 306: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

. Rozdzial 1 1.4 Pnytbdy i metody programownia w jezyku VBA 313

Sub LastSaved( Dim SaveTime As Str ing On Error Resume Next SaveTlme - ActiveWorkLwk.Bui1 t inCocu~rentP~per t ies"Last Save Time") .Value I f Savel'lme - "" Then

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~me i wygwietla odpowiedni kornunikat. Jdl i 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 if TypeName(Act~ve5heet) 0 'Worksheet' Then Ex i t Sub Dim UserSket As Worksheet, sht As Worksheet D i m TopRw As Long. LeftCol As Integer D l m UserSel As Str ing

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

Page 307: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

314 CzgiC Ill + Jezyk Visual Basic for Applications

Zapisuje info:rmacje z aktpnego arkusza TooRow - ActiveWindw.Scrol lRow LeftCol - ActiveWindow.ScrollColunvl UserSel - ActiveWindw.RangeSelection.Address

Wykonuje ~ t l e dla arkuszy Far Each sht I n ktiveWor4book.kbrksheets

I f sht .Vls ib le Then ' w i j a ukryte arkusze sht .Act ivate RangeIUserSel) .Select PctiveWindw.Scro1 IRow - TopRow PctiveWindow.Scro11Col umn - LeftCol

End I f Next sht

' Przpraca oryginalne ustawlenie aktymego arkuszl Usersheet .Act ivate 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 Select ion:

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+qczanie jest 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~te z wszystkich komdrek zazna- czenia. Ta pmsta procedura na3laduje zachowanie Excela, co zazwyczaj jest najlepszym rozwiqzaniern.

Page 308: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 u tyC 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 l iczk 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 l iczh 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 + 11 ' - (sht .VPageBreaks.Count + 1 )

Next sht MsgBox "Uszystk~ch stmn - " 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

Page 309: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

31 6 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 Str ing O i m Greeting Ps S t r ~ i l g Sim F~llName As Str ing. Fi rstN~ms As Str ing D:m SpaceInName As Integer

TheOate - Fonnat(0ate. "Long date') TheTime - Fonnat(Time. 'Long time'!

' Ckrei lenie 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"): Greeting - 'Dobry wieczdr " Case Else: Greeting - 'Dzieh dobry "

Erd Select

Dodanle do povitanta tmlenla ulytkownita Fu1 I Ume - Appl i ca t l on .UserName Space!nNm - InStt(1. FullName. ' 1)

' Obslusa przypzdku. gdy nama n ie zawiera spacji I: ~ c ~ ~ ~ N E I T I ~ - 0 Then SpaceInName - Len(Ful1Nam) F: -5:Name - Left(Fu1 lName. 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. Jdl i 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 zabdce @&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~puje spacja. Gdy I

Page 310: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziot 1 1. Prryktody i metody programowanla w jqzyku VBA 3 1 7

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 Greet ing 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 Findcont ro l . 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 kontro lk l 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 FmtL is t - TempBar.Controls.Add(ID:-1728)

End If

Unieszcza ~ c i o n t i w kolunnie A Range("A:A") .Cl earCcntents For i - 0 To Font l i s t . L i s t t a a t - 1

Ce l l s i t + 1. l? = FontL is t .L fs t i t + 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 = FontL is t .L is t [ 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

Page 311: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

318 CzeJe Ill J ~ z y k Visual Basic for Applications

OpcJonalnle rnotne 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 u VBA proceduw sortujqcq. W tym punkcie ombwip cztery r6ae metody sortowania: arkuszowe, bqbelkowe, szybkie i zliczajqce.

Sortowanie arkmowe polega na przeniesieniu zawartoici tablicy do zakresu arkusza, posortowaniu jej, 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 prostq metodqsortowania (zastosowano jq tef w ~rzykhdzie demonshu im sortowanie arkusza w rozdziale 9). Co ~rawda. - . * metoda sortowania bqbelkowego jest lama w kodowaniu, ale makczej powolny algorytrn, zwiaszcn gdy pnetwarzaniu podlega duta liczba elementbw.

Sortowanie szybkie w por6wnaniu z bqbelkowym jest 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 majduJe sig 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 pny ubc iu 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 ni 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, sortowanie jej i ponowne wczymnie danych do tablicy. JeSli tablica jest jut prawie posortowana, sortowanie arkusmwe b d d e jeszcze szybsne.

Page 312: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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

L iaba elementbw Sartowanie Sortowsnie Sortowanie Sortowanie

tablicy bqbelkowe przy szybkie p n y zlinsjqce przy arkuszowe ExcelP u j 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

5 OM 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 prry wiekszych (liczqcych ponad 5000 element6w) m o m o nim zapomniet. Jefii aleo- . - - - rytm s o r t o w a n i a ~ z ~ ~ k i e ~ o ' u m a sip za najlepszy, iortowanie zliczajwe i tak dystansije 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 1 1 .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 '\'

Page 313: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 - Fi lepath

.FileName - FileSoec

.Execute Konczy wykonyuanie. j e l l i n ie zosranie znzlenony taden pl i k I f .FoundFiles .Coon: - 0 Then

Msgbx "Hie zna\eziono zaanego pl iku' Ex 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 maJduJqqch sig 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~ektu Filesearch, 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 pny utyciu ~ t l i For . . . Next. W trakcie przetwarzania wewnqtn ~ t l i jest 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 ku

Workkooks .OpenText F i 1eName:-Fi leName. - Origin:-zlWindows. - StartRon:-1. ~ a t a ? y p e : - x l ~ ? x e d ~ i ~ t h , - Field1nfo:- ~ r r a y ( ~ r r a y ( i j , 11. Array(3. 1). Array(l2. 1))

a Wprcwadzm!e f o m l padsumowujqcych ilange(,'Dl') .Value - "A" Lnge('D2') . V a l ue - "8" Cnge('D3') .Value - "C" Lnqe('El:E3'). F o m l a - "-COUNTIF(B:B.Ol)" Range!"Fl:F3").Fomla - "-SUHIF(E:B.Ol.C:C)'

End Sub

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 Wstmimie funkcji Excela.

Page 314: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziai 1 1 . Prryktody i metody progamowania w jqzyku VBA 32 1

Funkcja FileExisfs

Funkcja pobiera jeden argument (Scietka pliku wraz z jcgo n m i mraca wartoSC True, j e i l i plik istnieje:

Private F u n c t ~ m F l l eEx is t s ( fnm) PS bo lean ' Zwraca warto l t True. j e f l i i s t n i e j e p l l k

Fi leExists - (Dlr(fnarr~1 <> " " )

End Function

Funkcja FileNameOnly

Funkc ja pobiera jeden argument (kietka pliku wraz z jcgo nazwa) i zwraca tylko nanvq pliku (innyrni slowy - usuwa fcietkq pliku):

Private Functian FileNametkrly(pname) As Str ing Zwraca n a w p l i k u pobranq z l akucha ztotonego ze Scietki 1 nazwy p l l k u D l m % As Integer. length As Integer. temp As Str ing 1 ength - Len(pnant9 LRnp - ". Fsr i - length To 1 Steo -1

If Hidtpnam. i. 1, - Application.PathSeparator Then FileNameOnly - temp Ex 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 Str ing FileNameOnlyZ - D l rtpnane)

End Function

Funkcja PathExists

W c j a pobiera jedm argument (ki& p l h } i nvrsca wartoSf True, jdli fci&a ismieje:

Pr ivate Function PathExiststpnm) As b o l e a n Zwraca warto l t True. j e l l 1 i s t n i e j e Scietka I f Dir(pname, vbDlrectory) - '" Then

PathExt s t $ - False Else

PathExists - tEetAttr(pname) And vWirectory) - vbDirectory End If

End Function

Page 315: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

322 C z ~ f e Ill + Jezyk Visual Basic for Appllcatiom

Funkcja RangeNameExists

Funkcja pobiera jedm argument (nazwa zahsu) 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 eS l i i s t n i e j e nazwa zakresu

D i m n As Name RangeNaneExists - Fa1 se For Each n I n ActiveWorkbook.Names

I f UCasetn. Name) - UCase(nnarne) Then RangeHameExists - True Ex1 t 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 Funct iw SheetExi stsIsname) As Boolean ' Zwraca warto i t 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 es t otwarty D i m 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 zam kniqteg o skoroszytu

J ~ z y k VBA nie umotliwia pobrania wartoSci z zamknieego skoroszytu. Jednak mo2na skorqstaC z tego, te Excel obsiuguje Iwza do plik6w. Zamieszczona ponkj funkcja GetVa 1 ue 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.

Page 316: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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. I tem As Strir,g) As Boolean 31m Obj As Object On Er ro 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 n GetValue[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 le ) - "' Then

GetValue - ' P l i k nie zosta? znaleziony ." E x i t Function

End [ f

Zdefiniwariie argumentu arg- " ' " I path 8 ' [ ' A f i l e A 'I' &sheet & " ' ! " & -

Range(ref) .Range('Al") .Address(. . xlRlC!)

a Mykcnanle matra XLY GtValue - ExecuteExcel4l"zcro(arg)

End Fsnction

Funkcja Getvalue pobiera cztery arpurnenty:

path - Scietka zamkniqtego pliku (np. "a: \p l i k i "1; I f i l e - nazwa pliku skoroszytu (np. "budtet .xl s "1;

sheet - nazwa arkusza (np. "Arkuszl '1; re'- odwdanie do komorki (np. 'C4").

Page 317: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 i k i \Budtet na dysku C.

Sub TestGetVal ue() 2 - 'c:\XLPliki\Bud2etW f - '99Budtet.xl s" s - 'Arkuszl' 3 - 'Al' nsgaax GetValue(3. f . s , .?>

E?c! Sub

Kolejna procedura odcqtuje z Zamkni~tego pliku 1200 wartofci (zajmujqcych obszar 100 wierszy x 12 kolumn), a nastepnie umieszcza je 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 z pozycjami edytora Viszral Basic takimi, jak This Workbook, Arkusrl Lub LkerFwml.

Pnyktady z tego podrozdzlalu sq dostqpne na ddzonym dysku CDROM.

Funkcje zwracajqce informacje o Fomatowaniu kom6rki

Niestandardowe fhnkcje nmacaj;\ce informacje o formatowaniu komQki sq przydatne, gdy tmba 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:

Page 318: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozddot 1 1. Przykiady i metody programowonio w jqzyku VBA 325

i j Funkcje te nie zawsze sq a u t o m a ~ l e aktuallzowane. 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 zosta la 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 hrsyw~:

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. ~olejnafunkcja zwr6ci warto4C True tylko wtedy, gdy wszystkie znaki z kom6rki h d a pogrubione:

Function ALLSOLD(cel1) As Boolean Zwraca wartoft True. j eS1 i wszystkie znaki z k d r k i sa pogrublone I f lsNulI(cell.Font.Bold) Then

ALLB(XD - Fa1 se Else

ALLBOLD - cell .Font .Bold End I f

End Functicn

Funkcja FILLCOLOR nvraca liczbp calkowitq odpowiadajqcq indeksowi koloru wnqtm kom6rki (kolorjej wypelnienia). JeSli wnptrze kom6rki nie rostanit wypdnione, funkcja twr6ci wartoe 4 142.

Functlon FILLMXOR(cel1) As Integer Zwraca l i c zk c a ~ t c w l t a cdpowiadajqcq 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 Bui l t inDocmntPropert l~ obiektu Korkboak. PoniBza funkcja zwraca date i czas wykonania ostatniej opeperaji zapisu skomszytu:

Function lAVMEO( ) A~plication.Volatile LASTWD - Thi sWarkbwk. &ItltinOoamntPmpertiest'tast Save Time')

End Fqmction

Page 319: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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: I

Function LASTPRINTED( Appl~cation.Volatile LASTPRINTED - ThisUorkbook. Bui ltin0ocumentProperties( "Last Print Date"

End Function

Jell i 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 Mdu . !

Funkcje LASTSAVED i LASTPRINTED zostaly zaprojektowane z myf lq o przechowywaniu ich w skomszycie, w k b y m sq u tywne. W niektbrych przypadkach funkcja mot. m- [ stat umieszczona w innyrn skoroszycie (np. personal.xls) lub dodatku. Poniewat obie i powyaze funkcje odwolujq sip do w~aSciwoSci Thi sWorkbwk, po zapisaniu ich w innym skoroszycie nie k d q dzialaly poprawnie. Ponitej zawarto wenje tych funkcji o bardziej uniwenalnyrn przeznaczeniu. Funkcje utywajq wlaiciwoici Appl i cat1 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 ca t i on

obiekt Workbook I

obiekt Worksheet

obiekt Range

Page 320: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

1 Rozdzid 1 1 . + Pmyldady i rnetody prograrnowania w jezyku VBA 327

Pnodkiem obiektu Range jest obiekt Worksheet, Wqcy 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.

Funct im 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 Stnng 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 ~ o n powiqzanego z okrcSlonq korn6rkq. Oczywiicie fbnkcja zawsze zwrbci wartosc M i i t o s o f t Exc 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, ">-' b num2) - -

.CountIf(InRange, '>" 6 numl) 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 dwne 20:

-COUNTBEIWEM(Al:AlC~O, 10. 20)

Page 321: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~dqcy zakresem 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 i cza widoczne komClrki Din Cellcount As Lsng CIg c e l l As Range Appltcatton.Vo1at;le Ce; 1Cwnt - O Se 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.Hidden And -

Not c e l l .EntireCalum .Hidden Then - Gel lCount - Cel lCount + 1

Era I f Next cell CGUNl'tISIBCE - Cellcount

End Function

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 lifcle pnydatna jest tet funkcja MY .PO$REDNIE Excela (z pierwszyrn argumentem 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 Jedynle widoczne 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

Page 322: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 ostatn ie j niepustej kandrki kolunny Dlrn LastCel l As Range Appllcatton.Vo1atile With rg. Parent

With .Cells(.Rws.Count. rng.Colunn) If Not IsEmpty( .Value) Then

LASTINCOLVHN - .Value ElseIf IsEm~ty(.End(xlUpIl Then

LASTINCOLUMN - " Else

LASTInCOLUnN - .End[xlUo).Value End I f

End U i th End W l th

End FunCtim

Funkcja jest raczcj skornplikowana, dlatego wyjdniq dokhdniej jej dzialanie. Metoda Appl icatton.Vo1 ati le powoduje, h funkcja zostanie wykonana kdorazowo przy ob- liczaniu arkusza W ~ S ~ ~ W O S C ~&.tount r&ca liczbq w ~ m z y arkusza. ~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 n klawisza 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 tawartn i t os ta tn ie j n l cp tu te j k d r k i wlersza Lppl1catian.Volatl l e U i th rng.Parent

With .Cells(mg.Rcu. .Coltnms.Wnt) I f Not IsEmpty(.Value) Then

Page 323: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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

LASTINROW - .End(xlTdeft ) .Value End If

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 qodny ze zdefiniowanym wzorcem. Jak widac z DO-

n i t s ~ e - ~ o kodu 2r6dlowego~ funkcya wjafciwie odgrywa rolp Srodka ~rnotl iwiajqcl~o wykorzystanie w twomnych forrnuhch wszechstronnego operators Like j~zyka VBA:

Functlon ISLIKE(text As Str ing, pattern As String) As Boolean ' Zwraca wartoi t True. j e s l i pietwszy a r g w n t jest podobny do drugiego

ISLIKE - tex t L ike 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 l ikie-znakh

Ponitsza fonnula zwraca wartoX TRUE, poniewat z wzorcem *jest zgodna dowolna liczba makbw. Formula zwraca wartoSC TRUE, jcSli pienvszy argument jest dowolnym +tllicuchern tekstowym 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 bdz ie hicuch JednostkalP:

Nastcpna formula m c a wartdt WE, poniewa2 jej pierwszy argument jest pojedynczym makiem zawartym w drugim argurnencie:

- IRIKE("a". "Caeioul")

Page 324: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 te t 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 EXTRACTELEMENT jpzyka 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~zyka VBA zwracajqcej tablic~ typu b a n s n t . ktora zawiera kddy 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:

Page 325: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

332 Cz$ft Ill + J$ryk Visual Basic for Applications

Function EXTRACTELMNTZ(Txt. n. Separator) As Str ing ' Zwraca n- ty element laftcucha tekstouego. w ktbrym elementy cddziela -

otre j lony znak separatora Cirn 7 x t l As String. T e n a E l m t As St r ing O i m ElementCount As Integer, i k Integer

T x t l - Txt Jedl'l separatorem jes t rDacja, zostanq usuniete zbedne soacje if Separator - Chr:32) Then Trtl - A~~ l i ca t l on .T r :m iTx 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 I n i c j a l i zac ja ElementCount - 0 T m o E l m n t - "'

' kydzlelenle katdepo el em en:^ Far I - 1 To Lenf'xt!)

Cf 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 Ex1 t Function

Else TempElmnt - ."

End I f E! se

T R n p E l m t - Tm~Elffnent 6 MidtTxt l . 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& te pojedyncza funkcja a r b zachowuje sit jak wiele fitnkcji. I

Ponitej zawarto kod M t o w y niestandardowej funkcji o nazwie StatFunction pobie- 1

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

!

Wynik formuly zaleky od zawartofci kombrkj ,424, kt6ra powima byd takim Earicuchern, I

jak Average, Count, Max itd Metoda motc zostaC zastoscrwana w pcqpdku innych funkcji.

Functlon STArrUMTIW4(rra, w) . Select Case VCasetop)

Case 'YJM"

Page 326: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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"

S T A T W I O N - '&rksheetFunctlon.StDev[mg) Case El se

STATFWYCTION - CVErr(xlErrN4) End Select

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. Odwohia do arkusq nie sq rnodyfikowane tak jak mialoby to miejsce w prawdziwym tr6jwymiarowym arkuszu.

W tym punkcie mtak om6wiony przyklad funkcii i ~ k a VBA 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 odwoh ie do 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 SHEETOFFSET j~zyka VBA:

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 D im wks As W o r t s h t Appl icat icn.Volat i le I f IsMissing(Cell1 Then Set Cell - Applicatlon.Caller m s h m - 1 For Each rks In Pppl icat ion.Cal ler. Parent-Parent .Worksheets

If Ppplicatlon.Ca1ler.Pam.Hame - wks.Name Then

Page 327: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

334 Czeft5 Ill + Jqzyk Visual Basic for Applications

SHEETOFFSET - Worksheets(WksNun + Offset) .Range(Cell(l) .Address) Ex 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 Str ing Dim Wksht As Object nppl icat ion.Volat i le 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

If Wksht .Range(Addr) > MaxVal Then MaxVal - Uksht .Range(Addr) .value

End If End I f

Next Y s h t I f MaxYal - -9.9€+307 Then MaxVal - 0 MAXPLLSHEETS - MaxVal

End Fwlctlon

W celu uzyskania dostppu do skoroszytu inshukcja Fcr Each ukywa nastppujqcego wy- ra2enia:

c e l l .Parent.Parent .Hortsheets

Page 328: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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, jeSl i warto i t o b i l t u FuncRarge jes 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 tab l icy 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

Page 329: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

336 Czeft Ill + Jezyk Visual Basic for A p p l i c a t i o n s

Sortowanie tab l lcy 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(2. j) - ValArray(2. i) ValArray(1. I ) - Temp1 ValArray(2, i! - Ten72

End If Next j

Next i

wienie do t a ~ l l c y V loscwo uporza6kwnych narcobc~ 0

to r r - 1 To RCount For c - 1 To CCount

i - 1 + 1 V(r. :) - ValArray(2. 1 )

Next c ~ e x t r kANrnlNTEGER5 - V

End Function

Porzqdkowanie zakresu w losowy spos6b

Funkcja WERPINMmIZE pobicta jeden 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 t1 t wart056 obiektu r g jest zbyt Curs Ce l lBunt - rng .Count if Cell tount > 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 tab l l cy ValArray 10s-i w a r t d c i m i i wartofciami obiektu m g For i - 1 To EellCount

ValArray(1. i - Rnd ValArrayt2, il - rg(i)

Page 330: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzial 1 i. + Prryldody i metody progromowania w jezykv VBA 337

I Next i

Sortswanie tabl icy ValArray wedlug wymiaru o losme j wartodci For i - 1 To Cellcount

For j - i + 1 To Cellcount If ValArray(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 - ValArray(2. 1)

ValRrraytl. 11 - T m ~ 1 ValArray(2. 1 ) - Temp2

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 1 - 1 + 1 V(r. C ) - ValArray(2. i)

Next c Next r RANGERMOn lZE - V

End Function

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.1 2. Funkcja RANGERANDOMIZE zwraca zawartoSf komdrek zekresu w p~zypadkowej kolejnogci

Page 331: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

338 Czq l t Ill + Jeyk 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.

-$?I* Deklaracje ufywanych funkcjl API sq uzaletnlone od wersjl Excela. Jelli korrystajqc <-Y 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 f l w rozdziale 25,

Okrejlanie skojarzeh plik6w

W systemic Windows wiele typbw plikbw jest kojanonych z okd lonq aplikacjq. Po. wykonaniu takiego skojarzenia, poprzez dwukrotne klikniccie pliku motna go otwonyd w powiqzanej z nirn aplikacji. !

Funkcja GetExecutable w cclu uzyskania pehej kittki apl~hc j i skojarzonej z o ~ l o n y r n plikiern konysta z hnkcj i interfejsu API systernu Windows. Pnyjrnijmy, te w twoim svstemie maiduie sie wiele ~ l i k b w o 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, pa jego dwukrotnym kliknicciu, moha utyC funkcji I

Deklaracje funkcjl lnterfejsu API systernu Windows muszq mstad umleszczone na pocrgtku rnodutu VBA.

Private Declare Function FindExecutableA Lib "she1132.dll" - (ByVal IpF i le As Strlng. ByVal 1pDirectory As String. - ByVal IpResult As String1 As Long

unction GetExecutable(strFi1e As String) k String D im 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.

Page 332: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat 1 1. + Pnyklady i metody programowania w jezyku VBA 339

Ryrunek 11.13. OkreSIanle Scletkl aplikacji powiqzanej z akreBlonp plikiem

I Okreilenie inforrnacjl dotyczqcych dornyilnej drukarki 1

W kolejnym pnykladzie konystam 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 utyc iu czytelniejszego formatu:

Private Declare Function GetProfileStringA Lib "kernel32 - (ByVal IphppName As String. - ByVal lpKeyName As String. - ByVal 1pOefault As String. ByVal IpRetumedString As ~ t r : ng. - ByVal nSize As Lorg) As Long

Sub DefaultPrinterInfcO D im s t r t P T As String 255 D im Result As Strlng C a l l GetProft leStr iqA -

("Windows'. "Devtce" . '". strLPT. 254)

Result - A~plicatian.Trim(strLPT) ResultLength - LentResul t )

C a n a l - InStr(1. Result. " . " . 1) Canna2 - I n S t r ( h m 1 + 1. Result. " . " . 1)

Pobiera name drukarki Printer - Left(Resu1 t . Cam1 - 1)

M i e r a informacje na t e m t stermmika Driver - Uid(Resu1 t. 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 kmn ika 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 fomc je dotyczpce domy5inej drukark:"

End Sub

Co prawda, daSciwoSC Act%vePrinter obiektu Appltcation Nlraca n a w dornySlnej drukarki i urnazliwla jeJ mian?, ale nie istnieje bezposrednia metoda okre9lenia. jaki sterawnlk I pat urzqdzenia jest ulyvany. Z tega ladnie powodu funkcla Ge'.Prof~leS:r~m$ jest prrydatna.

Page 333: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~ci karty graficznej

Zamieszczony w tym punkcic kod korrysta z funkcji intcrfejsu API w celu okreflenia aktualnej rozdzielczo~ci karcy 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 ib "user32" -

(ByVal nlndex As Long) As Long

Public Const 94-CXSUIEEN - 0 3uallc Const W-CYSCREEN - 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 - 'Aktualna rozazielczoli. karty graficznej: "

Msg - Msg & vibl idth & " X ' 8 vldHeight Ms&x Msg

- 0 Sub

Na rysunku 1 1 .I5 pokazano okno komunikatu zwrbcone przez p o w y a q pmedur$ uruchomion~w systemie 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.

Page 334: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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(WAVFi1 e. 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 le )

End sue

Page 335: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

342 CzefC Ill + Jezyk Visual Bas ic 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 ing . ByVal hModule As Long. ByVal &Flags As Lcngl I\s L o w

Function Alarm(Cel1. Condition) Gtm WAVFlle As Str ing 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 Or ShQ-FILENPME) Alann - True Ex i t Functlon

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 Fa1 se.

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 ib 'ADVAPI3Z.DLL' - (ByVal hKey As Long. ByVal sSubKey As Str ing, - &Ref hkeyResult As Long) As Long

Private Declare Function RegCloseKey L ib "PDVPPI3Z.OIL" - (ByVal hKey As Long) Ps Long

Private Declare Function RegSetValueExA L f b "AOVPPI32.OLL" - (ByVal hKey As Long. 8yVal sYalueName As Str ing. - 0.vVal &Reserved As Long. ByYal &Type As Long. - @yVal sValue As Strtng. ByVal &Size As Long) Js Long

Page 336: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat 1 1. + Pnyktody i metody pragramowania w jezyku VBA 343

Private Declare Function RegCreateKeyA L ib "ADVAPI32.DLL" - (ByVal K e y As Long. ByVal sSubltey As Str ing. - ByRef hkeyResult As Long) As Long

Private Declare Function RegQueryValueErA L ib "POVAPI3Z.DLLW - (ByVal Mey As Long. ByVal sValueName As String. ByVal Meserved 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 akpmym 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 Wr i teReg is t r y zapisuje wartoid w oh3lonej lokalizacji rejestru. Jejli operacja zakoliczy sig powodzeniem, funkcja h c i wart0915 True. W pmciwnym razie m 6 c i wartoSt False. Funkcja WriteRegistry pobiera nastepujqce argumenty (wszystkie sq lahcuchami):

Page 337: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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.

R o c t K e y - lancuch reprezentujqcy odgatpzicnie rejestru. kd re 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);

ReqVa l - 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.

Sub i2uts-0pen:) RcotKey - "hkey-current-user' PET^ - ~~ofiware\mi~ro~oft\office~ll.P\Excel\LastStarted' RqEntry - 'DateTime" RegVal - Nu#( I f JrlteReqistry(RootKey. Rth. 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 rejam jest autornatycmie uakhralniane kaMorazowo pm, whamianiu Excela.

Page 338: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Zastosowanie formularzy UserForm

Page 339: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~hzoSC w 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&;

I p7ikgcwrocy. tontekst (opcjonalne) - plik i temat pomocy.

Page 340: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 rst jcace As Integer D3 Unt,,l UserYaw <> ""

Usersame - Inplr:80x("?odaj i m l e 1 nar*?sko: " . - "laentyfikacja")

L X P 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 pomcq funkcji Val jezyka VBA. M o h a tet zastosowat metode InputBax Excela, ktdra mstanie om6wima jako nastepna.

Page 341: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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;

ty tu 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). Jd 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 proc tdm Eraseknge stosuje m e t o e InputBnx. Utytkownik m a rvznie wprowadziC adres ;takrrsu lub zamaczyt go w arkuszu za pomocq myszy.

Page 342: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 mtanie 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 ~ jest automatycme sprawdzenie wprowadmych danych. Jd 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).

Page 343: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziol 12. Alternatywne m e t o d y tworzenia niestandardowych ok i in 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) - wyrecnia 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

vbAbortRetryl gnore

vOVesNoCance1

vbYesNo

vbRet ryancel

vbCritica1

vbbestion

vbExcl amatlon

vblnfornatjon

WySwictla pnyciski OK i Anuluj.

W'ylwietla pnyciski P c e w i j , Pondw prob( i I ~ ~ o ~ u J .

Wylwietla pnyciski Tak. Nie i Anuluj.

Wylwietla przyciski Tak i vie.

Wyfwictla pnyciski Pondw pr6k j Anufuj.

Wyfwiala ikonp komunikatu krytycznego.

Wyfwietla ikon$ pytania.

Wflwictla ikonp kornunikatu osrmgawczego.

Wylwicrla ikone komunikatu informacyjncgo.

vboefaul tButtonl 0 Dornyflny jest pienvszy przycisk.

vM)efaultButton2 256 DornySlny jest drugi p ~ c i s k .

vt&faul t8uttm3 512 DornySlny jest trzcci przycisk.

vb0efaul t b t ton4 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.

Page 344: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 hdz ie 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~ty przez utytkownika Ponhza przyktadowa procedura wyJwietla komunikat i nie zwraca wyniku:

Sub HsgBoxOmO 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 ~ t zrniennej. 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 lkn le ty 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 Exi t Sub

a [rod tr6dlmy wykmjwany, gdy zostanie t l i k n i e t y przycisk Tat! 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~zenia stale pnypidem zmiennej Config.

Page 345: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzial 12. + Altemotywne rnetody tworrenia niestandardowych olden 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)

If AnS - vbYes Then ContinueProcedure - True - Else ContinueProcedure - False

End Function

Funkcja Cont 1nueProcedure mote zostat wywdana z innej procedury. Przykhdowo po- nihza inswcja wywhje 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 Exi 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 Mul t i l i ne0 Dlm Nsg As S t r f q Msg - "To jes 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@qce tekst l ~ ~ ~ q 1 5 1 m O P

n l M n n B a X sformatowany w T LV B P I + I

przy uiycu znakdw s x n ~ ~ r z ~ a , ~ w ..,a r w I . 47

tabulacji i makdw a - r n 1 6 m L m a 31 s t . 3 . S . S

podziatu wiersza ) 1 W ' I . . . . I s 29 ol % - . r ( l ' , . ~ I m n 12' - Y 21 11 - B W . . g m n m . n 1 1 s

F - 6 . ' 13 41'. I?'.* 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

. I I w n * 19 m 1 6 1 3) - . , , . + g . . .

Page 346: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

354 Cze-36 IV Zastosowanie formulany UserForm

Sub ShowRangeO Dim Hsg As Strl ng Dim r As Integer, c As Integer Msg - ""

For r - 1 To 20 For c - 1 To 8

Msg - Msg b Cellscr. c ) & vbTab 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 q liter6wki. Lepsq pmpozycjq jest zastosowanie metody GetOpenFi 1 ename obiektu Appl I cation, ktbra gwa- rantuje, t e aplikacja pobiene prawidbwq name 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 f 7 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~cuch Onudrz,; !

BuetonText - stosowany tylko w przypadku srjtemu Macintosh,

MultiSeJect -j&1 argument ma wartog True, wybtanych mote bye wiele plikbw; wartobciq dornyilnq jest Fa1 se.

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. ..

Page 347: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdz ia 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 1 eFi 1 t 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 ? 1 t poskty#em sic sekwencjq jqzyka VBA kontynuujqq instrukcjq w nastqpnym wierszu. Dzipki temu latwiejsze bpdzie modyfikowanie tego racnej ztotonego argumentu.

F i l t - "P l l k l tekstowe :* . tx t ) .* . tx t . " & - "P l i k i arkusza kalkulacyjnego firmy Lotus (*.?m).*.prn." 5 _ "P l i k i u tpa jace przecinkz jako separator8 :*.csvl .* csv." 8 - 'P l ik 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 Mu1 t 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 Str ing C i m F i l ter Index As Integer C i m F i l e N m As Var:ant O i m T i t l e As Str ing

Zdefinimanie l i s t y f i l t r t n r p l i t 6w F i l t - 'Pl ik i tekstcme ( * . t x t l . * . t x t . ' & -

' P l i t i arkusza kalkulacyjnego firmy Lotus i*.prn).*.prn." 8 - 'Pl lk i u t p a j t c e przecir ta 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 tu lu okna dlal@owego T i t l e - "Wybierz p l i k do zaimpor:mama"

a Pobranie p a m y p:iku Fi letlame - A ~ p l ication.SetOpenFi lenaae( -

F i 1eFil ter:-Fi l t . - FilterIn6ex:-F11terIndex. - Tit le: -Ti t le1

' 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 - tu . " Ex l t Sub

EM If

WyMetlenie pelnej Scieiki i namy p l i k u MsgBox "Xybra7e5 pl i k : ' & F i lettame

End Sub

Page 348: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

356 CzpJe IV + Zostosowanle formularzy UserForrn I Na rysunku 12.6 pokazano okno dialogowe pojawiajqce sip w trakcie wykonywania procedury.

Rytunek 12.6. Metoda Getopenfilename wyfwietla okno dialogowe dostosowane do wtasnych v a g a f i 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 hdz ie 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

Zdefiniwanle l i s t y f i l t rdw p l i k b F: l t - "Pllkf tekst~we (*.ta).*.tanm 8 -

'Pllkl arkusza talkulacyjnego finny Lotus (*.prn).*.prn.' & - " P l i k i utywajace przecinta jako sewratora [*.csv).*.csv." & -

"Pl ik i PSCII (*.asc).*.asc." .I - 'Wszystkie p l tk t (*.*).*.*"

Donyilnie wy6wietlany jest f i l tr *.* F' l terIndex - 5

Zdeflnlwanie tytulu &na d la lcqwgo T!tle - 'Wybierz p l lk do zaiwportwnla'

Page 349: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziaf 12. Alternatywne rnetody tworzenia niestandardowych olden diologowych 357

Zakokzenie pracy. je$di w oknie dialogowyn Zostanie kl iknlety prZyClSk Anuluj If Not IsArray (F i 1 eName) 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 vbCr l f 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 GetSaveAsFilename jest 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 1 eFi 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- F 1 l 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.

Page 350: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 rec to ry pobicra jedm opcjonalny argument, kt6ry jest l ~ c u c h e m wygwietla- nym w oknie dialo~owyrn. Jdli argument zostanie pominiqty, kom~mikatern wyiwietlonym - . - - w oknie dialogowym b~dzie lancuch 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-bi tme det laracje In ter fe jsu API Oeclare Functton SHGetPathFranIOLi s t L l b 'she1 132 .dV ' -

Al ias "SHGetPathFromiDListA" (ByVal p i d l As Long. ByVal pszPath As Str ing) As Long

Declare Function SHBr~eForFo lder L ib 'shel l32.dl l" Al ias "Y(8mseForFolderA" (IpBrowseInfo As BRIMS~INFOI AS Long

Public TJW BROWSEINFO hhner As Long p i d l b t As Long pszDi splayNam As Str ing IpszT i t le As Str ing ulFlags As Long lp fn As Long lParam As Long i Image Ar; Long

End Type

Page 351: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

I Rozdziat 12. + Altemotywne metody tworzenio niestandardowych oklen dialogowych 359

Oto kod M b w y funkcji GetDi rectory:

Function GetDirecttry(Optiona1 Msg) As Str ing Dim bInfo As B R M E I N F O Dim path As Str ing Dim r As Long, x As Long. ws As Integer

' Katalog gl6wny - Pulprt bInfo.pidlRoot - 08

' Tytul ckna dial-o I f IsMissing(4sg) Then

b1nfo.lpszTitle - "'Aybieranie katalogu" Else

bInfo. lpszTl t le - Msg End If

Typ zwracanego katalcqu bInfo.ulFlags - 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 GetDlrectory - "

End If End Functton

ProsFa procedura zaprcrcntowana ponitej demonstmje spos6b utycia w kodzie hdlowym funkcji GetDi rectory. Po umchomieniu procedury zostanie otwarte okno dialogowe. Po kl ikni~ iu OK funkcja MsgBox wyiwietli peha fc ie tk~ wybranego katalogu. JeSli utyt- kownik kliknie pnycisk Anuluj, w oknie komunikatu pojawi siq bricuch .4nrrlowano.

Sub GetWolderl() Dim Msg As Str ing D i m UserFi l e As Str ing 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

,s$$%* Nlestety nie istnleje prosta mtoda okreslenia katalogu domySlnego luo startowego. iQ, mmm

Page 352: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 1 eOlalcg.

Obiekt FileOialog pojawlt sle w k e l u 2002. W zwiqzku z tym metoda nie mote b$

@p!&g zastosowana w ~ p a d k u starszych wersjl Excela.

Ponitsza procedura wytwietla okno dialogowe umotliwiajqce utytkownikowi wybranie katalogu. Nazwa wybmnego katalogu (lub Mcuch AmIowano} jest nastcpnie wy4wietlana pny 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~~ .Fi1eOialog(msoFileDlbl~FolderPlcker)

.InltlalFil&m - Application.DefaultFi1ePath 6 "\'

.Title - 'Prosze okreflit lokalizacje kopii z a p a s w j . '

.Show I f .SelectedItems .Count - 0 Then

Msg6ox "Anul m n o . " Else

nsqaox . Select*Items(l) End If

End M i th End Sub

Poprra ustawienie wart& dla w ~ i w o . 4 c i In1 tlalFilename obiekt F11 eDialag umotliwia oh i l en 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 twim 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:

Page 353: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

I Rozdzid 12. Alternatywne metody tworzenm niestandardowych okien dialogowych 361

1 poprzez wykorzystanie zbiom Dl a1 ogs obiektu Application,

poprzez bezpoSrednie wybranie pozycji menu.

Obie metody zosta11qom6wione w 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]~zyke V 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 a VBA 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 Specjufnie jest nieaktymry. Klilcnigcie tego prrlcisku norrnalnie powoduje

Page 354: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 okna dialogowego Fomatowanie kom6rek

I - d ... - .... - . - 1 . . . . . . . . . . . . . . . . . . . . . ._ _~ I-& G I l n a

. . . -. .. - .. - - .... ; ' , . Doah C ,

. , .: , .. ,. 1 .....

0 ; ' - -. . , , , , .... ,- . ., . . . tdr

k T n - -.! ' ,

t .......:... , *' -Mu" . *: o m - ... ., . . 0-S- :O-,-; d m 1 O r ~ b a a

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~puje tadna 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 wykonaQ nastppujqce 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~ego okna 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.

Page 355: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

I Zastosowanie argumentbw z wbudowanymi oknami dialogowymi

WipkszoSC wbudowanych okien dialogowych akceptuje tet argumenty, M6re zazwyczaj odpowiadajq ich kontrolkorn. Przyktadowo zakladka Ochrona okna dialoeowego For- - - r n a t o ~ a n i ~ komdrek (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 s i 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 CmanlBar mstanq orndw~one w mzdziatach 22. i 23. ce mma I

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("Przejd i do. . . " 2 . Execute

Po wykonaniu instrukcji zostanie otwarte okno dialogowe Przechoh-enie do. Muzq byc podawane pehe nanvy pozycji menu (z uwzgl~dnieniem trzech 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.

Pnyktady rarnieszczone w tym punkcie ujrwajq odwoiah do kontrolek t m n d e a - s* 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 mtody FindContml wraz z argumentem Id identyfikujqcym polecenie. W cetu uzyskanla dodatkowych infcrrnacji nale2y zajrzeC do rozdziaiu 22.

Page 356: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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

Page 357: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 ugc iu 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 UserFan

z Utwomic 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. Utwomie p d u r obslugi zdamfi dla konmlek majdujqcych sip na formulam. Pracedury te p o w i ~ y m 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 UserFm. Kolejnym u~mmmym formulmrn UserForm q nadawane domyilne nazwy UserFannl, UserForm2 itd.

Page 358: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 c nie oferuje poleced menu dodajqcych konklki. je~li bkno 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 hvomego okna dialo- gowego. W celu okrcflenia w iekok i konvolki m o m jq kliknqi, a nastepnie pmciagnqt kursor myszki w obszarze okna dialagowego. . .

Page 359: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 nam 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 @ole kombi) 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 hdz ie 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.

Page 360: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

368 Czeft 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 ni i 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 tmhg 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 narmd 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 ~czumienie rbhic 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,ontrolki ActiveX wyhietlit okno Pmperties, naleiy jq klikn* pral~ym ~ l s k l e m rnyszy i z menu podrpcznego Wra6 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

Page 361: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 - - - firmy. Obraz jest przcchowywany w skorasycie. Dziqki temu w sytuacji, gdy skomszyt zostanie pnestany komd innemu. nie kdzie koniecme dolquanic kopii pliku graficmego.

Nlektdre pllki graflcme sq bardzo dute, dlatego zastosowanle ich mote znacmie ,?wi,k@ 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 kx sq bardzo elastycme w zastosowaniu. Na przyklad rnotna okretlid zakres zawierajqcy pozycje kontrolki L l stBox. Zakres ten mote skhdad si t z wielu kolumn. Pozycje kontmlki L i stBox mogq t& zostat zdefiniowane pny 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~ukia pozycji 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 z prrynajmnicj dw&h opcji. Po wybraniu kontrolki OptionButton pozostak takie same kontrolki majdujqce sip w grupie y wylqdzane.

Page 362: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 smwana , 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 najprzydatniejsta jest w prrypadku wybierania wartofci, ktdra zawiera sic w szerokim zakresie motliwych wartofci.

Kontrolka SpinButton

Kontrolka SpinButton (pokrctb) umotliwia utytkownikowi wybranie wartofci popmz klihiecie dw6ch sbzalek. Pierwsza z nich zwieksza wartoJt. natomiast druea mnieisza ~ontrolka SpinButton czpto jest stosowana w pdqczeniu.t kontrolkami-~extE!ox lub Label, kt6re wySwietlajqaktualnqwartoJC zwiqzantz tq konholkq.

Kontrol ka 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 pomoq myszy.

Page 363: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

lstnleje motllwoSE zamaczenla wlelu kontrolek. W tyrn celu nde& wcisnqd klawisz as .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 na leq 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%ce kilka 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&ci kontrolki Ka2da kontrolka posiada kilka wl&ciwolci okreilajqcych jej wyglqd i zachowanie. WMciwoSci kontraki mom byf modyfikowane na dwa sposoby:

pay utyciu opcji okna Properties - w trakcie projektowania formularza UserForm,

Page 364: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 Baic 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&wietla je 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 t i podat n o w wartoft. Niektdre w~aSciwo5ci m o m oferowak skodczonq liczbq wartoki wybieranych z listy. JeSli tak jest w oknie Properties pojawia sip przycisk ze m # k q skierowanq w d&. PO klikniqciu

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 - fmTextA1 igncentor 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 wbkiwof 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.

Page 365: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat 13. + Wprowadzenie do fom~llarzy UserForm 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 bgz ie 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 macqca nanva, taka jak obOrientacjaPozicma, rno2na u ty t nastppujqcej i n s d c j i :

I obOrlentacjaPozlm .Value - True

I Pornacne Jest s t o m n l e nazw Identyflkujrnh r6wniet typ obiektu. W poprzednim pnykiadzle @kin laficucha ob. aby potwierdrlc?, Le jest s t o m a n e kontrolka Optlon8utton.

. - opt1 onEiuitm 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 o ~ c i Left.

I ; Zdobywanie dodatkowych infarmacjl a wtaichvofciach I I

i Najlepsza metoda zdobycia w i e d y o wla9ciwokiih konbolki polega na W c i u systemu I 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 ~Zytkownik6w preferujqcych klawiatwq, konicczne jest zapo~lanie sic z dwoma zagad- nieniami - klawiszami skldtu i koIejnoSci~tabulacji.

Page 366: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

374 Cz&& N + Zastosowanie formulam UserForn

Rysunek 13.5. I

System pomocy zawiera informade o kaidej wfafciwoSd wszystkich kontrolek

Mulaselect Proparty S..AI*O esuroh wbsn :

I- r ~ k r tn. *hapnnarmm n . * a m r .

W.nmI.h)I.M*l..dl h ""m..4.rt - *r- ha, h,. rm: -.

..&.a ".a *!.a

~ # . T I m . * . e a m m h h n h m d u m .

n , . . ~ r " . r ' " . n ?

v * r m a w h o

munram* Onr .I. err un b. u- (ddaull. -- r m ~ * . t r r a u n r d h n q u h ~ d.nmhed n mm in he hC - lmnnp Dnl* nd dam h. MI, c? mselq 1"In M m. .I h. .rm" k.,,. "wed, h. d - n Inm ha mvio~h r#hamd mrn ah. m m m . wwnnp C ~ L and dun# s. mu. ~1.m ar 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 te 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 mien 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~ci TabIndex 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 iwoSc i TabStop 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*lm6e tabulacji. Aby stworryC kolejnoa tabulacji dla grupy kantmlek Opt~onButton znajdujqcych siq wewnqtn kontrolkl Frame, przed wybraniem z menu View pozycji Tab Order naleiy zaznacz$ kontrolke Frame.

Page 367: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzial13. Wprowadzenie do formulorry UserForm 37 5

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, nale j 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 name UserForml, poni- pmcedura Wwiet l i okno dialogowe w nim zawarte:

Sub ShowFornO UserForml .Shm

End Sub

Page 368: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 CmndBut ton 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 formulaq 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~pnie go 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 procedury jpzyka VBA: r wybranie z menu Run polecenia Run Sub/UserFom, M wciSniecie klawisza F5, B ldiknlvie ~ z y c i s k u Run Sub/UserForm znajdujqcego sie na pasku narzedri Standard.

Wszystkle wymienlone rnetody genetujq zdarzenie In i t ia l i ze powiqzane z forrnularzem User- Form. Po wySwietleniu okna dlalogowego w trybie testowym moina sprawdzid kolejnoff tabulacjl I klawlsze skdtu.

Page 369: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 Mlowym 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 ~ q hnkcjc 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 zamhip iu f m u l a n a UserForm instmkcje kodu tr6dbwego nie b@q dysponowaly dost~pem do 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 Pub1 ic) w sgnda~iowym module jqzyka VBA. Warto4C motna tet umieScit w kom6rce arkusza.

@.$$ Formularz Userfirm jest automalycmle usuwany z pemlgd, gdy utytkownik kliknie prrjclsk Zamknij (ikona X znajdujqca siq na pasku tytutu formulam). Operacla ta powuduje tet wygenemwanie zdanenla QueryClose powlqzanego 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 instru kcji:

Jd 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:

Page 370: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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

W mzddale 15. wyjagnig, w jaki sposdb wySwietllC wskatnlk postgpu, ';@ 4 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 (E! Kod fr6d)owy procedur obstugl zdanerl rnusl zostd urnleszczony w oknie Code 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.

Page 371: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 UserForrn jest 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~pujqcych wlaSciwoSci:

WaSciwodt WartoSC

Nane OpticnYaie

TabIndex 0

Page 372: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

380 Cz@C IV + Zastosowanie forrnulatzy UserForm

a. Wewnqz kontrolki Frame umie9C kolejnq kontrolkp OptionButton i ustaw wanoQci dla jej nastqpujqcych wldciwo9ci:

Accel arator K

Caotion Kobieca

Tab Index 1

9. Wewnqat kontrolki Fram urnie.46 jeszcze jednq kontrolkq OptionButton i ustaw wartoSci dla jej nast~pujqcych wiaSciwoSci:

Accelarator

Caption

tI

Nieznana

Nam Opt: onUntnovn

Va 1 ue True

lo. Poza obszarem kontrolki Frame umieSC kontrolkq CmndButton i ustaw wartofci dla jej nastppujqcych wldciwoSci:

Caption

Default

Nar~

Tab1 ndex

OK

True

OKButton

3

11. UrnieiC kolejnq kontrolke ComndButton i ustaw wartdci dla j e j nast~ujqcych wlaSciwoSci:

Ceptlon

Cancel

N2m2

TabIndex

Anul u j

True

Cancel Button

4

W przypadku tworzenla kilku pdobnych kontrolek od dodawanla nowe] kontrolki labiejsze nab okaza6 sip skoplowanie jut istnlejqcej. Aby skoplowaC honfmlhg. w trakcie jej przeciqgania nalety trzymaC wcihiety klawlsz Ctrl. Po wykoclanlu tej operacji rnozna zrnodyfikowaC wartoScl wtaSciwo5ci skopiowane] kontrolki.

Page 373: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~rolki Prryciskpolecenia 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 o wybierz Obieb CommandBurtodEdit. Po wykonaniu tej operacji motliwa bpdzie edycja opisu kontrolki ComndButton.

4. Dwukrotnie kl ihi j 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 i ck 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

I Nastqpnym lcrokiem jest pitehstawanie prmdmy wy9detlajwej akno didogowe.

! Po zak06cmniu trybu projebwania k l i w c i e przycisku spowoduje wyOwictlenie for- mu lam UserFonn (rysunek 13.9).

Page 374: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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, nale j kliknqt pnycisk paska narwdzi Pnybornik formantdw o nanvie Zakoficz tryb projektowania. Aby dokonaC jakichkolwiek modflkacji kontrolki Ccmnandhttcn, konieczne kdzie ponowne przetqctenie Excela w tryb pmjektowania.

Po wygwietleniu okna dialogowego w polu moha 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 pmeduq 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 i wstawienie w nim pustej procedury o nazwie Cancel Button-Cl ick. Nalety zauwaZyC, t e nazwa procedury jest zlotona z n a y obiektu, znaku podhi lenia i namy obshgiwanego zdanenia.

3. Zmodyfikuj procedure do ponitrnej postaci:

Pr iva te Sub CancelButton-C1 i c t 0 Unload Vserionnl

End Sub

Page 375: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 u przez 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 cz~sc i okna 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 ick ( ) ' 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 i m ? 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 ( I L E . 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.

Page 376: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

384 CzefC IV + Zasto~owonie formularzy UserForrn

Rysunek 13.10. Informaya wpmwadzona w fornulam Userform jest 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 mstd 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. Jdl i pole kontroki TextBox jest puste, pojawi sip kornunikat, po czym zostanie ponownie uaktywniona konholka Texrbx. lnsrmkcja Ex i t Sub koriczy p m c e d q bez wykonywania dodatkowych operacji.

Sprmdza, czy wpmadzono irnie I f TextNam.Text - "" 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 maywis te j aplikacji prawdo- podobnie trzeba Wie p 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 e zastosowanie dodatkowych kontrotek formulamy UserForm.

Page 377: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziof 13. + Wprowodzenie do f m k ~ r r y UserForm 385

Zdarzenia powiqzane z formularzem Userform

Kaz&la konmka formulam UserFom, a taktc sam fonnularz odpowiaddjq na zdarzenia okrellonego typu. Zdarzenia te mogq gmerowat utytkownicy lub Excel. Na przykiad klilcniqcie konnoUri CmndBu t ton powoduje wygenerowanie powkpnego z niq zdarzenia Click. Motna napisat kod h6dtowy wykonywany, gdy wystrlpi okrdlone zdarzenie.

Niekt6re o p ~ ~ ~ c j e generujq wiele zdarmi. Na p r z y w klihiqcie ~ c i s k u strza4ki 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 e i Activate. Tak naprawdp zdarzenie I n a t l a l l z e wystqpuje w chwili tado- wania do pami~ci formularza 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.

Page 378: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~dzie te 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:

I n i t i a l i z e - 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 deaktpacj i formulana UserForm, ale nie jest generowant w pnypadku ukrywania formularza;

B 0ueryClose - wystepuj~e przed 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 In i t ia l ize I Activate (W takiej kolejnofci). Insltrukcja Load generuje tylko zdarzenie In l t i a l i re. 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 sb 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 bl i tcj zdancnia powiqzane z kontrollq Spi nlutton.

I

Na dolqczonym dysku C:DROM znajduje sl? skorosqt demonstrujqcy sekwencje zdamefi wystgpujqcych r zwiqku z kontmlkq SpinButton I zawlera]q~n jq 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 wsystk ie zdarzenia powiapne z konmlkq Spi r8utton.

Page 379: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 Y ~ Y U P Wyst~puje, gdy utytkownik zwotni klawisz gdy obiekt jest uaktymiony. ~ SpinOorm Wystqpujc, gdy utytkownik kliknie przycisk s&ki kontrolki Spinautton skierowanej w d6l lub w lnvo.

1 SpinUp Wyst~pujc, gdy utytkownik klilmie pnycisk svralki kontrolki SpinEutton I 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 wcisnd klawisz Tob. a nastepnie zastosowad klawisze s tnalek 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 nBu t ton1 &wia 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):

Page 380: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

388 Cz&C IV Zastosowanie formulorzy UserForm

Motna by przypuszczaf, tc popnez ustawienie dla wtaiciwo~ci Enabl 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~Button z 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 i Value 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 ikn i~ ie kontrolki SplnButton, co powoduje nvipkszenie tub mnicjszenie wartotci wytwietlantj w kontrolce TextBox. Na rysunku 13.12 poka- zano prosty przyktad. WartoBciq whk iwok 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.1 2. 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 o po 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~inButton lub gdy zmieni wartosf iei wldciwo3ci Value

Private Sub SpinBlrttml-Change( ) Text8oxl.Text - [email protected]

Enb Sub

Procedura prypisuje jedynie wMciwoSC Value kontroki SpinButton ~IagFiwoSCi Text kontmlki TextBox. W tym pnypadku kontrolki posiadajq domyflne nanvy (Splnkttonl i TextBod). JeSli u?~&~wnik bezpoSrednio 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~ca procedura:

Private Sub TextBoxl-Change( ) W a l - Yal (TextBoxl .Text I f N e d a l - SpinButt~onl .Win Pnd -

Page 381: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

NewVal <- SplnEuttonl.Hax Then - SplnButtml .Value - MewVal

End sub

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, kfbry nie 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 (konhmoka o 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 lck ( ) ' Wprwadzenie wartoicl do aktywnej konbrki

[ f CStr(Splnhtton1 .Value) - T e x t b x l .Text Then Activecell - 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 Usef i rm i kontrolka posiadajq MablwoSC Tag. WChvo# 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 ~ a OCIWOM 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:

Func t lm EmptyCount( ) O l m c t l As Control EaptyCount - 0 For Each c t l I n Userfnnnl.tontrols

If TypeNae(ct1) - 'Text&" Then If c 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 bake konystanfa z formularzy U s M u n prawdapodobnle pz53dsl d M myfl inne zastosomia w)alciwoScl Tag.

Page 382: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~cuch p 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 cbbunt 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

Page 383: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 - "Jan Nwak' UserFonnl.Shw

End Sub

W pnypadku kolejnej metody ustawienia dornyilnej wartdci wyko~tystuje sic zdarzenie I n i t i a l 1ze p o w i ~ n e z 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 :

Pr iva te Sub UserForm_Ini tialize() TextBoxl .Value - "Jan NMrarc"

End Sub

Gdy odwoh ie 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~ki temu po mianie nazwy fomularra L'serForm nie kdz ie konieczna modyfikacja odwdari do niego zawartych w kodzie trbdlowym.

~ostosowywanie okna 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 mieni 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 kdz ie 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 mieni t tekst wyiwietlany na zaktadce.

Page 384: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 kontrolke CornnandButton p r r e c i ~ q t do okna Toolbox. W efekcie zostanie utworzona nowa kontrolka. Aby zmieniC name nowej kontrolki lub je j ikon?, naleq kliknqf j q prawym przyciskiern myszy.

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. Pny 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 i jednakowo ad siebie oddalone konmlki OptionButton. W celu stwornnia wlasnej wersji kontrolki Frame rnotna nasepnie do okna Toolbox przecimqf obiekt Frame.

IstnieJe motllwoSt 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.

Na dotqczonym dysku CD-ROM majduJe sie pllk newmbPls.pag zawierajqcy kilka a dasfaowanych kor~trolek. Plik ten mole zostat zalmportowany do akna Tdbox jsko now 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.

Page 385: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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

Twoqc kolejne formularze UserFwm, cfqsto stasujesz takie same kontrolki. Na przyklad ka2dy fonnularz UserForrn mote zawieraf dwic kontrolki Co~mndButton spehiajqce funkcjq pmycisk6w OK i Anuluj. W poplzednim punkcie wyjdailem, w jaki sposbb stworzyf nowq kontrolkp h c ~ q oba 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~kszenla twoich 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.

Page 386: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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?

Cy 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 poppowane (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)?

Page 387: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat 14.

Przyktady formularzy UserForm

W tym rozdziale zaprezentowano wiele prrydablych pnyklad6w dernonstrujqcych kilka dodatkowych metod zastosowania formulanv UserForm. lsmieie rnoAiwoSC dostosowania omowion~ch rnetod 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 two~en ia menu - 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 pe4 iqq 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 C a l l Hakrol Unload Me

End Sub

Procedura wywohje jjedjnie makro Makrol i zamyka formulan. LL~erForm. Z imyrni przyciskami s$ powiqane podobne procedury obshgugi zdanm.

Page 388: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

396 CzgSC IV 4 Zastosowanie fomlarzy UserForm 1

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 i ze. 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

Pr iva te 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 Ulth

End Sub

Z pnyciskiern Wykonaj jest tet p o w i p n a procedura obshgi ndarzenia C1 ick:

P- ivate Sub Executeeutton-Cl ick 0 Select Case ListBoxl .L lst I&x

.Case -1 HsgBox *Aybierz makm z l i s t y .' Exit Sub

Case 0: Cal' Macro1 Case 1: Call Macro2 Case 2: Call Macro3 Case 3: Call Macrd Case 4: Call Macro5 Case 5: Cal l 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 hdz ie -1. Nast~pnie jest wykonywane odpowiednie makro.

Page 389: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzid 14. + ~tzyklady fomwlarry UserForm 397

OcrywiSde Excel urnotliwia tworzenie menu I paskdw naredzi z prawdziwego @ f l 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 ~ d i t nie 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?+f nie 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 Mcuch tektowy nprezentujqcy adres zakresu. Pny uZyciu ponhze j instmkcji hticuch m o k zosmt ramieniony na obiekt Range:

Set UserRange - Range(RefM1 t l . Tu 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 - In1 ti a1 t ze nastwujqcej instmkcji:

Nie naiefy zakMaC, tt konntroka Ref Edi t zavme nvr6ei m w n y adm zakresu. Zamaczenic my- z a h s u nie jest jedyq metodqumieszczania adresu

Page 390: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

398 CzefC IV Zastosowanie fomulany UserForm

w kontrolce. Utytkownik mote wprowadzib dowolny tebt, jak rdwniee modyfikowa6 lub usunqt! laf~cuch zawarty w kontrolce. W zwiqku z tyrn 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.

On Error Resume Next Set UserRange - RangeCRefEdt t l . T e x t ) I f Err - 0 Then

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 pnez utytkownika, nale2y wybrat! gbrnq lewq korndrkc zakresu, ut)waj@c ponitszej instrukcji:

Set OneCell - Range(RefEdit .Text). Range( " A l * )

W rozdzlale 12. oplsalem, Jak przy utyciu funkcjl inputBox jezyka WA umotliwiC a 4 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 ohem 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 edytora KsucrI 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).

Page 391: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzid 14. + Pnyklady formubrzy UserForm 399

Ryrunek 14.4. Okno powitatne jest w e z chwie E F S ~ ~ U , w " , P , ; - wySwletlane w tfakcie B ! . . c o i E - F 1 G i - H - - _ I J Y

4. Pon i t sqp rocedu~ umieX w module kodu h6d+owego powiqzanego z obiektem ihiskrorkbook:

Pr ivate 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~ciosekundowe op6Znienie):

3r lvate 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 Ki l lTheFonO Unload UserFoml

End SvS

PO otwarciu skorosrytu jest 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;rl usriwa 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

Page 392: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

400 Cze36 IV + Zastosowanie formulam, UserForm

Dzigki temu u2ytkownik poprzez wcifni~cie klawisza Esc kdz ie 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 czem kod iddbwy bad& caty czas przetwarzany. W tym celu nalety u q f ponijszej procedury:

Private Sub Workbook Open0 UserForml. Show v~ttodeless

a W tym miejscu zna jduja sic lnne instrukcje End Suh

Wy!qczanie przycisku Zamknij formularza UserForm

Klikniecie przycisku Zamknij (ikona X w prawym g6mym naromiku) powoduje za- mkniecie formulana UserForm. Wvste~uia iednak 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 omu lma L'srrForm jest nykonywana przed jego mmknipciem, czyli po wystapieniu zdarzenia CueryClose:

'rivate Sub UserForm-QueryClose(Cance1 As Integer. Closettode As rntegerl If C : o s W e - vScanControlttenu Then

Hsgbx "Aby zamknqt okno, t l i kni j przycisk OK.' Cancel - True

Enb I f Erg SLitJ

Procedwa UserForm_OueryClose utywa dw6ch argument6w. Arpment CloseMcde zawiera wartoid idmtyfikujqcq pnyczyne wy-ienia z d m i a OueryCl ose. 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 i formulan 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%wletlenlem formulana UserForrn naleiy wykonaC nastqpuJacq instrukcjg:

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.

- . &

Page 393: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~ciu pncz 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 W m e t l e n b dodatkowych opcJ

W trakcie t w o m i a formulam UserForm n e l q ustawit dla n iqp jak najwieksy mzmiar. tak aby motliwa byta praca z wszystkimi kontrolkami. Nmpnie 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~hipciu kontrolki CmndButton o nazwieGptions8uttcn:

Private Sub OptimsButton CltckO If ~ptions~utton.~apt~un - '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.

Page 394: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

402 Czgfe IV + Zostosowanie fomwlony 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 nastqpuJqcej Instrukcji:

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. Na rysunku 14.7 pokazano pnyktadowe okna dialogowe. Po ~ S w i e t l e n i u formula- rza UserForm uzytkownik mote. modyfikowad warto46 wskahika powi~kszenia arkusza (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~pujqcej procedury UserFom-In1 tlal ize:

Private Sub UserFonn_Initial ize() 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 k i th 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

Page 395: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 Wi th

End Sub

Konystajqc z wartoici okreilanych w akrywnym oknie, procedura rnodyfikuje rome wMciwo4ci kontrolek Scroll Bar .

Po uaktywnieniu kontmlki ScrollBarZoom jest wykonywana procedura Scro l lBErZm- 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 With ActiveHindu#

..?om - ScrollBarZm.Va1ve Label Zwm - .Zm & ' X "

End With End Sub

Pnewijaniern arkusza stemjqdwi3e ponitsze procedury, kt6re dla w+aiciwosci Scro' 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

Page 396: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

404 Czf$C IV + Zastosowanie formulany UserForrn

Private Sub Scrol1SarRc.s-Change() Activellindow.Scrol1Rw - Scrol IBarRows. Value

End Sub

9;- Zamiast zdanenia Chanae zastosowanego w popnednich procedurach motna utyC L . . , ~ 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 ~lnkc ie d o w q tet kontrolki C3woBox.

Kontrolka LlstBox

Ponitcj wymieniono kilka ngadnieh. o ktdrych nalety pamiqtaf, stosujqc kontrolki Li stbx. Szerzej zostanqomdwione w nast~pnych punktach.

r Pozycje kontrolki Li stflox mogq byt pobrane z zakresu komdrek (okreglany ptzez wlaiciwosd Rowsource) lub dodane pny 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+aSciwoSci ControlSource jej wtdciwoft Value mote zostat pdqczona z kom6rkq arkusza.

Motliwe jest wyiwietlenie kontrolki L i stBox bez zmacmnych poqcji (wartoicia wlaJciwodci List Index hdz ie -1). Jednak po wybraniu pozycji utytkownik nie bqdzie m6gt usunqt zamaczenia, bdz ie m6gl tylko zmienid zaznacmq 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, jak jej 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.

Page 397: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

P%W Aby uiyska6 szczegMowe informacje na temat wta§dwo§cl i rnetod kontrolki ListBox. \*! ImEa 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 zamieszczonyc h 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 projektowania w konbolce ListBox urniefcik pozycje, musq one byC p m - chowywane w mkmie arkusza. W celu oknSlmia zala-esu zawierajgcgo 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.

Ustawldw wart046 wta*cfwcfd Ru&um, nale2y w@ednld na- arkusza. ern 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 phi kwallflkowanego odwotania do zakresu uwzglgdniajqcego name :skorosw. Oto prryktad:

Lepszym rozviiqzanlem Jest nadanle namy zakresowf I utycie jej w kodzie Wdtowym. Dzieki ternu na pewno zostenie utyty whhtwy zakres nawet wtedy, gdy powyiej niego wkownik usunie b d d doda wiersze.

Urnleszczanie pozycjl w konkolce UstBox po uruc homlenlu 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 Mkwy, Mry za pomocq metody Addl tem umi&i pozycje w konmlce L f SiBox.

Page 398: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

406 Cze9C IV + Zastosowanie famwlany UserForm

Rysunek 14.8. Ustawlanie wertotolcl WaSclwoSci RowSoune w lrakcie projektowania

WartoSC wlaSciwoSci RowSource zarniast pny utyciu okna Properties mote byC usta- wiona za poSrednictwem inmukcj i kodu fr6dlowego. Przykladowo ponitsza procedura ustawia wartoSC wlaSciwoSci RowSource kontrolki ListBox ieszcze ~ rzed wyBwietleniem formulam UserForm. W tym pnypadku pozy-cje kontroiki s q p&choGwane w ko- mbrkach zakresu Kategorie majdujqcego siq w arkuszu Budtet:

UserForml. ListBoxl .RawSource - 'Budtet!Kategorie" UserFonnl . Show

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 is tbx

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

Page 399: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

W powytszym kodzie trddwvym dla wta5ciwoSc.i RwSaurce ustawiono pusty taricuch. I Ma to na cslu uniknlqcie mo*liwold wyntqpienla Mpdu, JeSli w 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 w zbiorze klucza, ktbr), nie jest unikatowy, pojawi s i ~ Mqd i pozycja nie zostanie doda- 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 i kod k4dlowy przetwarza kat* korn6rkp zakresu i pr6buje do zbioru NoDupes dadah prrechowywane w kombrkach wartolci. WartoX kombrki jest tet utywana przez argument ~ J K Z t'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 L is tBzx . Formu- larz L'serForm mwiera let kontrolke Label vry3wietla;qcq liczbc unikatowych pozycji.

Page 400: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

408 Cz@C IV + Zastosowanie fomwlarzy UserForm . i i j

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.Li st80xl.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+qcmnym dysku CDROM.

ldeniyfikowanie zaznaczonej pozycji

Po wykonaniu procedur z popnednich punkt6w wygwietlany jest fmularz 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.

Page 401: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 poqcj i kontrolki L i stBox:

VsgSox L is tBoxl .Value

JeSli nie zostala zmaczona tadna pozycja, instrukcja wygenemje Mqd.

Aby zarniast zawartoici o b i l i e jej lokalizacjp na likie, moha utyC wtdciwo4ci ListIndex kontrolki ListBox. Poni2sza i nmkc ja 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 pozycJi kontrolki 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 x jest 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(u1 t i Sel ectHul ti 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- zam acnxle pozyle kontrolld ListBox. Zawiera on kontrolki ListBox obsh@u]qce pojedyncze i wlelokmtne zaznaczenla.

Ponizsza pmzdwa, zamieszczorra w przyk4dowym &omqcie m j ~ d u j t g p siq mi dysku CD-ROM, przy utyciu pqtli przetwam W q pozycje kmtmk i L i stBox. Po zamaczeniu pozycji procedura przypisuje jej z a W o M nniennej Msg. Na kohcu etykiety wszystkich zmaczonych pozycji sqwwiet lane w oknie komunikatu.

Pr ivate Sub OKBvtton-Click0 nsg - - * For i - 0 To ListBoxl.ListCount - 1

If ListSoxl.SelecW(i) Then -

Page 402: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Hsg - Msg & LIstBoxl.List(i ) & vbCrLf Next i 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 .

Page 403: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rysunek 14.1 1. ZawartoSC widocznej kontrolki LktBox zale2y od tego, jaka kontmlka OptionButton zostanie uaktyniona

na~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 u Dodaj:

Private Sub A W t t o n - C l i c k ( ) If ListBoxl.ListIndex - -1 Pen Exit Sub If Nct cbDuplic2tes Then

Sprwrdza. czy pozycja jui istnieje For - - 0 To LlstBox2.ListCwnt - 1

If ListBox1.Y~:~~ - List3ox2.Lisr:i) Then Beep Ex1 t Sub

End I f Next i

Page 404: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

End If ListBox2.AddItem ListBoxl.Value

End Sub

Kod trbdlowy procedury p o w i ~ n e j z prryciskiem UsuA jest jeszcze prostszy:

Private Sub [)eleteButton-Cl i c t ! 1 i f List&xZ.Listlndex - -1 Then Ex 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 pozycji w g 6 ~ listy kontrolki ListBcx, natomiast klikniqcie pnycisku Przesuri w d6f - 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

Pr ivate 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

' Wypelnlenle tab l l cy oozycJami kontro lkt ListBox F3r i - 0 To Num1:ms - 1 I

TenpLtst(i1 - L i s t b x l . L i s t ( t 1 t+ext i

I I

Wybrana pozycja !

ItemNun - List8oxl.Li stIndex b ~ a n a poTotenia pozycjl r m p [ t m - T W L ~ S ~ ( I ~ ~ N W I ) T ~ n p L i ~ t ( 1 t m ~ W - T m p L l ~ t ( I t a - 11

i I

impllst(1temNum - 11 - TemItem / L?stBoxl.List - TenpLis: nodyfikacja indeXsu ' isty porycj i

9"

Page 405: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

ListBoxl.ListIndex - ItemNum - I End Sub

Pr lvate Sub Mvd)o*nButton-C1 ick ( If LlstBoxl.List1ndex - ListBoxl.ListCovnt - 1 Then Ex i t Sub Numltens - ListBoxl.ListCount D im TempLlstO ReOim TmpList(0 To NmItems - 1) Wypelnienie tab l i cy pozycjaml kont ro lk l ListBox For i - 0 To NumItems - I

TempList(i) - ListBoxl .L is t : i )

Next i ' Wybrana pozycja

ItecrNum - LtstSoxl.ListIndex a Zmiana palotenla pazyc:I

TempItem - TempLlst(I t~nNm) Tem~List(ItmNum1 - TempList(1rmHwn im. 1) Tem~List(1temNum + 1) - TempIt? L is t8axl .L is t - TempLlst

' W y f i k a c j a indeksu 1 i s t y pozyc;? L l s tbx l . L i s t [ ndex - ItenNm + 1

End Sub

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 e problemu polega na powiqzmiu z Wdq kontrolkq ComndButton nowcgo zdarzenia OblCllck i napisaniu dla niego procedury. Kod Mdlowy procedur wywdujqcych jedynie proce- dury obstugi zdarzenia Cl ick wyglqda nastcpujqco:

Private Sub MoveUpButton-OblClick(ByVa1 Cancel As HSFonns. Returnbolean) C a l l MoveUpButton-Cl l ck

End Sub

Pr ivate Sub MoveDmButtm-OblC!ick(ByVal C a ~ e l As HSFons.ReturnBooleanI Cal l 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 , x pobierajqcej 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 a j nastqpujqce kraki:

I. Upewnij s ig 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.

Page 406: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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,/

I

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 is tBox wartoSciq wfaiciwo8ci Cal umnWidths mote byC nastepujpy lahcuch tekstowy: 1

100:40:30

5. Jako wartost wlaSciwoSci B c u n d C o l m okrctl odpowiedniq kolumnq. WtaSciwoiC I

BoundColumn identyfikuje kolumnp, ktdra jest utywana, gdy instrukcja sprawdza wartoit wlaSciwoSci Value kontrolki ListBox. i !

Aby wypelnit danyrni wielokolumnowq kontmlkq L l stBox bu stosowania zakresu,na- i

l e e najpierw stworzyt dwuwyrniarowq tablicp, a nastqpnie przypisat jq w~aSciwolci I

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 is tBox 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 kontro lk i L i s t b x

i I D im Datat l To 12. 1 To 2 ) For i - 1 To 12

Datat l . 1) - Format(DateSerial(2001. i. 1). 'mmm") Next i For 1 - 1 To 12

Data(%. 2) - OaytOateSertal(2DDl. i - 1. 1) - 11 I

kxt i

Page 407: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rysunek 14.15. L)wukolumnowa kontrolka ListBox wypehiona danymi pmechowywanymi w tablicy

ListBoxl.ColurmCount - 2 L i s t B o x l . L i s t - D a t a

End Sub

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 cab u2ywany zakres aktywnego arkusza (rysunek 14.16). Uzytkownik mote zamaczyt wiele pozycji kontrolki Li 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 1S~ ' e t t kontrolki Li stsox jest 1 - fmui tiSelectVu1 ti. Pole wybom obok ka2dej pozycji j e s t wyswietlane, poniewat wartoiciq wMciwo5ci ~is?~iyle kontrolki 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 ze 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 tabe rnodyfikuje wartost wlaSciwosci ColumnWidths w taki sposbb, te szerokog kolurnn kontrolki Lis~Box jest proporcjonalna do szerokdci kolumn arkusza.

Page 408: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

41 6 Cz&& 1V 4 Zas tosowan ie 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 - 1 To .ColumnCount ~d - cw & ~q.Columns{c) .H~dth & ':'

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: - 1

l istSoxl.Selected(r) - True Next r

End Sub

Pfivate Sub SelectNone8utton-C1 Ick( 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~cych m 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 ick ( 1 G i m RowRange As Range R M n t - 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

S e t RouRange - Unfon(RowRange. PctlveSheet.Rows(r + 11) End If

End If Next r I f Not RowRange I s Nothing Then RouRange.Select Unload He

End Sub

Page 409: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

UaMywnianle arkusza za pomocq kontrolki UstBox

Pnykhd 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 widocmo~t arkusza. Na rysunku 14.17 pokazano przykiadowe okno dialogowe.

Rysunek 14.1 7. Okno dialogowe umotliwia uiylko wnlkowl uakfywnienle arkusza

Ponitej zamiesrczano kod W I o w y procedury UserFonn-lnltial I ze twomcej dm- 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

Pr ivate Sub UserForm-Initialize( Dim SheetDataO As Str ing 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. 2) - 'Uyl;res" SheetDatafShtNun. 3) - '8rak danych'

Case "DtalogSheet' SheetOats(ShtNm. 2) - "@no dialogowe" SheetData(ShtNun. 3) - "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

Page 410: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

With ListBOxl .CalmnWidths - '70 pt:70 pt:60 pt:50 pt' .L is t - SheetOata .LlstIndex - ListPos

End With End Sub

Procedura L i stBoxl-Cl ick wyglqdd nastepujqco:

Prlvate Sub L is tbx l -C l i ck ( 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 I ck, kt6rtj kod Wdtowy wyglqda nastepujqco:

Private Sub OKButton-Click0 O i m UserSheet As Object Set UserSheet - heetstL istBox1 .Value) If UserSheet .Vis ib le Then

UserSheet .Activate Else

I f MsgBox("tzy pakazaC a r k u ~ ~ ? " , - vbQuestian + vbYesNoCance1) - vbYes Then

UserSheet .V is ib le - True UserSheet .Activate

Else 0r ig inalSheet .kt ivate

End If End I f Unload He

End Sub

Pmedura OKButton-Cl i ck tworzy miennq obiektow& reprezenbjqq wybrany arkusz. Jeili arkusz jest 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 i ck:

Prlvate Sub L is tbx l -b lC l lck(ByVa1 C a ~ e l As 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).

Page 411: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rysunek 14.18. Kontrolka MultiPage grupuje kontrulki na stronach

(W Okno Toolbox zawi~era r6wnlel kontrolke TabStrip pnypominajqcq kontrolkg M;l:i:age, Jednak w pneciwiefistwie do kontrolki MlllltiPage, kontrolka Tabstr ip nie phi funkcji kontenera dla innych obiektbw. Kontrolka Muit?Paee jest o wiele bardziej uniwersalna. OsobiScie nigdy nie skorzystalem z kontrolki TajStr ip .

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 Mu1 ri 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 Mu1 ti 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 ~lmaczeniu kontrolki Mu1 ti Page poprzez wybranie jej z Iisty rozwijanej okna Properties.

Je91i stworzona kontrolka Mult i 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 Mu1 t i Page motna tek wylwietlit przyciski. W tyrn celu wystarczy dla wtaJciwofci Sty1 e ustawif wartoit I - fmTaMtyl eButtcns. JeSli wartofciqwhkiwoki Style jest 2 - fmTabSty1 ebr?e, kontrolka Mult i 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 kade 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 Mu1 t i Page.

Page 412: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat 15.

Zaawansowane tec hniki korzystania z formulurzy

Ten rozdziai kontynuuje tematykq rozpoczetq w 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 dz iah j~ego makra).

Od mornentu wydania E m l a 97 n v ~ d wskaLnik6w p o w zadania jest stosunkowo latwc. W tym pdrozdziale op* sposbb tworntnia trzeeh rodtaj6w w s b i k b w postepu. ktbre rnma 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 maka 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@ -16 stan pocz@kavy ra p o m q nastepuJqce1 In- strukcji:

Appl.lcation.Status@ar - Fa1 se

Page 413: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 t ipage wySwietlajqca wskafnik post~pu w czasie dziabnia rnakra;

makr inicjowanych przez forrnularz UserForm- w tym przypadku zwi~ksza sic wysokost formularza UserForrn, a wskatnik posepu pojawia sit u d o h okna dialogowego.

Wskafnik postepu motna zaimplementowar!, jeJli da siq oszacod jak d u q cz@ zadania zostala ju 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 l iczb 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 kont~~lkg Label 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 czekfoni 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 .

Page 414: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 UserFon. Moms skomstat ze zdarzenia Act'vatc?. - ktbre zachodzi w rnomencie wygwiettania fornulam UserForm, zatem idealnie nadaje s i t 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 UserFsm. 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-kt ivate0 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 zb 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 C e l l s f r , c l - Intcbd * 13110) Counter - Counter + 1

Next c PctDow - Counter / [ R M x * ColMax? Call lbdateProgress(Pn3one)

Next r Unload UserFoml

End Sub

Page 415: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

424 Cz@t IV Zastosowanie formulaw UserForrn

hedm b i n zawicra p~ t l c ( ~ M c i w i e dwie pqtle). W m q m pCtli wystqmje wywolanie 1 procedury UpdateProgress. Procedura, k t6q zaprezcntowano ponitcj, pobiera jedcn ar- gument - wart026 z pmdziah 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 - 0 UscrFonnl .Show

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 z pami~ci f 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. Je~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,

Page 416: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzial15. Zoowansowane techniki korr/stania z formularzy UserFom 425

do zainicjowania dhgiego makra w projekcic wykorzystano formulan UserForm (bez kontrolki Mu1 t 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 Mul 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 q twotzyiy wskahik post~pu zadania (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 e j stronie 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 nadaj j j nany Label Progress. Usud tytui etykicty (w laJc idd Caption) i ustaw kolor tia (w!a$cidt BackCol or) na c m o n y .

3 Dodaj kolcjnqetykim, w Wzj umidcisz opis wykonywanych drjaM (opcjonalnie).

4. UakQvmij sam4 kontmlkp Mu1 tipage (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 Mu1 t i Page.

Page 417: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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, wywowana 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 Mu1 t 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 ~ e j PctDone. 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 Mu1 t i Page. Wskafnik post~pu zadania 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.

Page 418: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 instrukcj i:

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 t i Page. KaMe okno kreatora Wwiet la 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.

Page 419: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

428 CzgSC IV + Zastosowonie formulamy Userform

Rysunek 15.4. W tym kreatone zastosowano kontrolkq MultlPage

Konfigurowanie kontrolki 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 smn . NaleZy kIiknaj prawym przyciskiem m y s y dowohqzaktadkp Mu1 tlPage 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-ROM sktada 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 na l ey 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~pna czynndch jest dodanie pnycisk6w sterujqcych dziahniem kreatora. Prryciski zostanq umie-ne poza k0nt~ok.q Mu1 ti Page, p o n i m q Mwyhvietlane w kartdym hh kreatora. W wipkszoici kreatorbw qcztehy przyciski:

w Anuluj - anulowanie dzialania kreatora;

Wstecz - powr6t do popnedniego boku (podczas wykonywania pienvmgo koku pnycisk powbien byt nicdoqpny);

R Dalej- pnejScie do kolejwgo kroku (padczas wykonywania ostatniego hoku kreatora przycisk powinien by6 niedostqpny);

m ZabAa - zakoficzmie dzialania kreatora.

Page 420: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 uiytktkownika jest obowiqzkowa. W takich sytuacjach pnycisk Zakoficz powinien by6 nieaktywny do mornentu wprowadzenia wszystk~ch wymaganych denych. W przyktadzle urnieszcmnym na ptycie CDROM wyrnagane Jest wprowadzenie 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 k dla 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 jes t 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 - 1 UpdateControls

End Sub

Pr i va te Sub NextButtcn-Clickt) HultiPagel.Value - MulttPage1.Value 4 1 UpdateControls

End Sub

Pokazane wytej dwie procedury q bardw p m . Ich d t i ah ie polega na modyftkacji wlaSciwoki Value kontrolki Hul tl Page, a n w p n i e wywolaniu procedury UpdateControls (listing 15.1). Jej daniern jest uaktywnienie i dczdctpmja pnyciskdw BackButtm oraz NextButton.

Sub UpdateCcntmls() Select Case kl tlPagel.Va1 w

Case O 8ackButtm .Enabled - False kxtButtar.Enabied - True

Page 421: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

430 CzqE IV + Zastosowonie formulamy UserForm

Case HultiPagel.Pages.Cwnt - 1 Back0utton.Enabled - True NextButton.Enabled - Fa1 se

Case Else BackButton .Enabled - True NextButton .Enabled = True

End Select ' Aktuallzacja ty tu lu

Me.Captlon - APPNM 8 ' Krok " - I Mu1 t i P a p 1 .Value + 1 & " z " - & Mu1 t iPapl .Pages . tamt

' Pole Nazwlsko jes t obawiqzkowe I f tbName.Text - " " Then

FimshButton.Enabled - Fa1 se Else

Finish&rtton.Enabled - True End If

Ena Sub

W celu wySwietlenia n u m m biewego kroku o m cakowitej liczby krok6w procedum modyfikuje wtafciwoSC Captlon fonnularza UserForm (APPNAME jest stat% publicznq zde- finiowanq w module Hodulel). Nast~pnie sprawdza 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~jqc z d a m i e Change kontrolki Mu1 tipage. Za W m razem, kiedy mienia siq wart&& wMciwoSci Value kontrolki MultiPage (w wy- nikuk~ikni~cia p&isk6w ~ s t e c z lub Dalej), wywolywana jest pmedura Mu1 t i ~age i - Chame. Pned wySwietleniem ostatniej zakjadki kontrolki MultiPage (krok 4.), procedura spmwdra w&ci p6l wyboru z kroku 3. i wykonuje odpowiednie korekty o h z kroku 4.

W naszym pnykladzie w kodtie utyto dw6ch tablic kontrolek - jednej dla @I wyboru produkt6w (kmk 3.J drugiej dla kanh-olek Frame (krok 4). Zastosowano pedq For . . . Next, kt6ra ukrywa n iewwane 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.

Ustlng 15.2. ~ t l a n ~ e stron w zaletndcl od d a m h wpmwadzanych pzez utytkowniha

Private Sub Hult'lPagel-Change() Czy w y W e t l i C s t m e z ocena? If PbltiPagel .Value - 3 Then

Page 422: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziot 15. + Zoowansowane techniki komystonio z formulam/ UserForrn 431

Utwarzenie tab l i cy 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 cy kontrolek Frame Dim ProdFram(1 To 3 ) As FISForms.Fram Set PmdFram( 1 1 - FrarneExcel Set ProdFram(Z1 - Frameword Set ProdFram(31 - Framebccess

TopPos - 22 FSoace - 8 AtieastOne - False Petla dla wszystkich p rod~k t jw Far i - 1 To 3

If ProdCB(i ) Then ProdFraWi) .V is ib le - True ProdFrame(i) .Top - TapPos TopPo5 - TopPos + PmdF:ane() .Height FSpace AtLeastOne - True

Else ProdFram(i).Visikle - Fa'se

End If Next 1 Nie wymleniono produktow? I f AtLeastOne Then

131Headings.Visible - True Image4. V i s.i b le - True 1blFinishM~g.Visible - False

Else 1blHeadings.Visible - False Imge4,Visible - False IblFinisht4sg.V1slble - True If tbName - "' Then

1 b l FinishMsg.Caption - "Wprwadzenie nazwitla w krohu 1. jes t obowiaztoue

Else 1blFinishMsg.Caption -

'Kliknl j Zakokz. aby wyj i t . " 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.

Page 423: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

432 CzelC IV + Zostosowanie fornnrlony UserForm

Listing 15.3. Wprowadzanie danych pobranych od uij4mvnika do arkusza

Private Sub F i n i s h & l t t ~ ~ - C l I c k ( ) r - Application.WorksheetFunction. -

CountA(Range('A:A') ) + 1 ' Wstawi eni e nami ska

Cel1s:r. 1) - tsNam.Text

k t a w l e n l e informacj i o p l c i Select Case True

Case obnak: Ce l ls ( r . 2) - 'Metczyzna" Case obfenale: Ce i ls ( r . 2) - 'Kocleta" Case obNoPnswer: Ce l l s l r . 2) - 'Brat odpowtedzf~"

End Select

' Wpravadzenie in fonac j ; 3 prbduktach Cell s ( r. 3) - cSE.xcel Cel lscr. 4) - c'snor3 C P ~ l s ( r . 5 ) - cnkcess

Wpmadzenie ocen [ f obExcell Then Ce l ls ( 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 Ce l ls ( r . 71 - "' I f obWord2 Then Ce l ls ( r . 7) - 0 :f 0bU0rd3 Then Ce l ls ( r . 71 - 1 If oaWoroJ Then Ce l ls ( r . 7) - 2 If obaccessl Then Cel ls( r . 8) - '" I f obAccess2 Then Cel ls( r . 8) - il I f obAccess3 Then Ce l ls ( r . 81 - 1 If oMccess4 Then Cel ls( r . 8) - 2

Usuniecie f o m l a r z a Unload !4e

End Sub

Jeteli po pmtestowaniu lweatora okak siq, te wsEystko dzjala poprawnie, m o h a ustawit wartost wlaSciwoSci S ty le 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 - l iczh 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 dutc wyzwanie.

Page 424: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

I Rozdziat 15. Zaawansowane techniki korrystania z formulolly UserForm 433

Celem tego Cwiczenia nie jest utwomnie altematywnej funkcji wyswietlania komuni- katow, ale zademonsh-owanie sposobu twonenia stosunkowo skomplikowanych funkcji 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 1 e (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

I aplikacji do momentu udzielenia odpowiedzi na pytanie w oknie dialogowym.

I Skhdnia funkcji MyMsgBox jest nast~pujqca:

I MyVsgBoxtpytanie[. przycjskil [. tytut l)

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 CDWM dotqczonej do ksiqiki.

Pub1 l c Ptomptl As S t r ing Publ ic Wlttonsl As Integer Publ'c T l t l e l As St r ing Publ lc UserCllck As Integer

Function MyHsgBox[ByVal Pmnpt k String. - Optional ByVal Buttons As Integer. Optional ByVal T i t l e As Str ing) As in teger

Ptocrptl - Pmnpt &Ittons1 - &Ittons T i t l e 1 - T i t l e I?yMsgi%xForm. Shw HflsgBox - Userclick

End Function

Page 425: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 wysM 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,

Page 426: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat 15. Zaawansowane techniki ko~zystania z formulcrny UserForm 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~kswSt okien 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.

mrm We wczedniejszych wersjach Excela wtafciwofC ta jest niedostgpna.

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

Page 427: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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

- ..E.. i . . P - E -.~:-.F.--Q. .:... ..!- :... 1 . . - - S)#i.4aL [email protected] ma,,, B - # I ' -1 I

Ten pnyktad jest dostgpny na ptycle CDROM dotqczonej do ksl*ki.

Najwi~kszym problemem 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 jes t aktyrny If TyoeNane[ActiveSheet) 0 'Worksheet' then

1b lFomla .Capt ion - 'NIA"

Page 428: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 admu &()RHnej kom6rki prodma UpdateBox modyfikuje w h i - wai t 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 atem w cmsie ieao Wwialania m o t l i 6 jest dostw do gkusza ~aparni&jrn~ niernodalne f&lane Userform nic sqobslugiwanc w Excelu 97 i w wersjach wczefniejsqch.

I Kod na poczqtku procedury sprawdza, czy aMywny arkusz jest 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 pnykladu jest zbyt obmrmy, teby moZna go bylo zaprezcntowaC w t e k i e ksi@ki, ale zaintcmowani mogq go pncw 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 ~ a akruallzncja). Jeteli jest ono zaznacmne, formularz UserForm uaktualnia sip autmatycznie. JeMi 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 bi- kmnbrce jest wykonywany automatycmie za kazdym razcm, kiedy w dowolnyrn skoroszycic wy-i jedno z wymienionych zdamri (pny A?en iu , 2 m m n o p ~ k w y b

Page 429: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 ton ,mus i rn~ xlefmiowaf co najrnnij dwie procedury obshgi zdarzen:

'

Pr ivate Sub ConmandButtonl-Cl ick() ' hlluj MI* m&iciC kod End Sub

Pr lvate 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 ,.M twardo" 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

Page 430: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

przycisk kliknitto. W ponilsych przykladach kliknipcie przycisku ComndBut:onl lub CmandBut tonZ spowoduje wybnanie pmcedury ButtonC? i ck i przekmanie do niej ar- gurnentu informujqcego, kt61y pnycisk klikni~to.

Private Sub CmandButtonl-C1 i ck ( I tal 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 name 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.ButtonGroupPCC ick nale* zmodytXowaC odpowiednio do patrzeb konkretnego przyktadu.

Pub1 ic 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. vb In fomt ion . 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 Ini t ia l ize formularza User-Form. W grupie pqciskow nie u ~ ~ i o n o prrycisku OK (OKButton). W z w i ~ & ~ z tym k l ikn i~ ie p r q ~ i s k u OK nie s p o d u j e wykonania procedury ButtonGrcup-C1 ick.

Page 431: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

440 Czele W Zastosowanie f m u l a r t y UserForm

Listina 1 5.4. Zdefiniowanie tablicv obiektdw Buttons0

D i m Buttons0 As New BtnCiass

Pr ivate Sub UserFonn-imtlal 1zeO D i m ButtcnCovnt As Integer D i m c t l As Ccntrol

Utworze~ie o b i e k t b Button ButtonCwnt = 0 For Each c t l In-EJserForml.C3ntrol s

I f TypName[ctl) - "tomnandButton' Then If c 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

Page 432: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 n o funkcjp 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 ub wartoscl False. ' jete1 t koloru n le wybrano

Dim c t l As Control Dlm ButtonCount As Integer Buttonbunt - 0 For Each c t l I n UserFonnl .Controls

Dla 56 przyctskbn oznacrajqcych kolory w~afclwo5t Tag 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 Getnb lor - 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 wygw 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 pnez funkcjp.

Page 433: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

442 Cz~fcS IV t Zastosowanie formlamy UserForm I

Rysunek 15.1 1. To okno dlalogowe umozliwia uzytkownikowt wybranie kolom poprrez kliknigcie przycisku

Plik umieszczony na plycie CD-ROM ddqczonej 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-ROM i 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~ci nit stare afkusze dialogowe. to jednak wydaje sic, te o tym jednyrn aspekcie Microsoft zapomnial.

a&* (9,

W Excelu 97 i w wersjach p6tnieJszych w dalszym clqgu motna kofzystaC r arkuszy 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).

Page 434: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 wh lc iwd t Picture kontrolki Imge na utworrony plik GIF. W tym celu skorzystaj z funkcji Loadpicture jezyka VBA.

4. Dodaj inne elrmenty w miare ~otrzeb. Na ~rzvklad formularz UserF3rrn w oliku -. . , dernoktracyjnym iwie ra 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):

Set Currentchart - She?tts['Dane" .ChartObjects(l) .Chzr: Fname - ThisUorkboot. Pa th b ' \ tmp.g i f ' CurrentChart.Eqort Fi 1eNaee:-Fname. F l l terName:-'GIF"

W czasie wykonywania kodu bedzie wyiwietlalo sit okno pokazujwe pas t~p zadania (na pytanie, w jaki sposhb wylqczyc to okno, odpwiadam - nie wiern).

Page 435: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 \ef Pokazany powytej spas6b ddaia, ale podczas zapisywania i odtwamnla wykresu 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 formulam UserForm motna umieicid kontrolki, ktdrych nie ma w przybomiku. Microsot? dohczyt do pakient qffice 2003 skladniki Offie Web Cornponenu (OWC). D z i ~ k i temu w formularzach UserForm moma umieszczat kontrolki OWC. Na rysunku 15.13 zaprezentowano pnykhd formularza UserForm z kon- trolkq ChartSpace.

Rysunek 15.13. Ten formularz . . , - . . .. f l

UserForm zawlera kontrolke Chartspace

Zaprezentowana technika nie pozwala na wy5wietianie wykresu Excefa w tonnulanu UserFon. Aby Wwie t l i f wykres, tneba napisat kod twonqcy wykres w kontrolce ChartSpace.

Udostqpnianle kontrolki ChartSpace

Najpierw do-y konwlkp 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

Page 436: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

I Rozdzial 15. Zaawansowone techniki korrystonia z formulorry Use rFm 445

obok pozycji Microsofl Ojlice Chart 11.0. W pnypadku Excela 2002 bgdzie tarn pozy- cja Microsofl O J c e Chart 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( ) D im Olartl As ChChart K c h a r t D i m Seriesl As ChSeries ' WCfe ies D i m r As Integer D i m Na lues(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

.HasTi t l e - True

.Title.Caption - Range('B1'1 End U i th

For r - 2 To 13 XValuestr - 1) - Cellscr. 11 DataYalues(r - 1) - Cellstr. 21

Next r

Utworrenie sert i danych wykresu Se t Seriesl - Chartl.SerlesCollectian.Add CtkreSlenie typu wylrresu 1 danych With Seriesl

.Type - chChartT~CaluatPustered

.SetData chDimtatequr1 es. 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@z kontrolki 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

Page 437: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~chomienle aplikacji 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+aSciwo9ci nowych kontmlek.

c~F** Model obiektbw do twonenla wykres6w dla sktadnlk6w OWC nle jest taki Sam. 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

Page 438: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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.

Page 439: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 ~ R nowy 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 wtabciwodci kontrolki Soreadsheet

kc-bwda 1 Qmra I :-a. i+%dax:, F m e 1 k m ( . I M P m m - . .- . ~. . ........ ...

cwnm=m f-w- A ~~

r wmpaars r w m - rw* P m k m o d d - - . -. - - -. - - - . - -. -. ....... - . . - . . . . me.: , ..- awl

ibY1' +d b b w d

i * *

3. Kliknij zakhdkp Skomnyr i usd 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)

Page 440: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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. W polu 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 t la l ize( 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.

Page 441: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

450 Czeft IV + Zostosowanie formulany UserForm

UserForm Deluxe: ulepszony formularz danych

PonitFj zaprezentujq jeden 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 a6dbwego jest rnoiliwy po uiszczenlu niewielkiej oplaty.

lnstalacja dodatku - ulepszonego formularza danych

Aby wypr6bowC ulepsany fonnularz danych, zainstaluj dodatek, wykonujw nwpu j * czynnolci:

Page 442: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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

Obsluguje dowolnq liczbq rekord6w i p61.

I Okna dialogowe motna wyJwietlaC w dowolnym rozmiarze.

1 MotIiwo3i wykorzystania zardwno p61 ~kstowych. jak p6l

i kombi.

Rekord wySwietlany w oknie dialogowym jest zawsze widoczny na ekranie i jest wyr6tniony. dzicki czemu dokladnie wiadomo. z jakim Rkordem ~ykonujemy dziatania

Poczatkowo okno dialogowe zawsze wySwietla ~ k o r d w aktywnej kombrce.

Zamknipie okna dialogowego powodujc wybranic bieacego rekordu.

1 Pozwala wpmwadzih nowy rekord na dowolnej pozycji w bazie danych.

Znwiera przycisk Undo dla polecef~ rnodyfikacji danych, wstawiania nowcgo rekordq usuwania rekordu i wpmwadzania nowego rtkordu.

Kryteria wyszukiwania sqzapisywane w innym panelu. Dzieki temu zawsze wiadomo, co jest wyszukiwane.

Obsluguje maki wzorc6w w wyszukiwaniu (*, ? oraz 8).

Dostcpny jest kompletny kod fr6dlowy w jqyku VBA. co umotliwia dostosowanie formulam do potneb

I utytkownika

Formulan danych Excela

Ograniczenie do 32 p61.

Okno dialogowe dostosowuje romiar do liczby pbl. Czasarni zajmuje caly ekran!

W oknie dialogowym motna skorzystat wylqcznie z p61 tekstowych.

Nie przewija ekranu i nie pod$wietla bi%cego rekordu.

Zawsze rozpoczyna wydwietlanie od pienvszego rekordu w bazie danych.

Po zamkniqciu okna wybrany mkord jest taki sarn, jak przy jego otwieraniu.

Nowe rekordy motna dodawat rylko na kohcu b a q danych.

Zawicra tylko prryfisk Prqwrbf.

K v e r i a wyszukiwania nie zawsze sq widoczne.

Nie obsluguje makirw wzorc6w.

Formularzdanych nic jest napisany w jqzyku VBA, a zatcm nic moma dostosowat go do potrzeb utytkownikr

1. Do katalogu na dysku twardym skopiuj plik dataform2,xla z ptyty CD-ROM daczonej 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.

Page 443: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Zaawansowane techniki

Page 444: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 ~ a z tativo5ciq meloztafcif ria namedzia.

Page 445: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~dliry Pak 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~zyku VBA 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 ~Zytkawnikowi na 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 do obstugi wielu sytuacji.

Wyglqdajq jakpolecenia 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.

Page 446: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 wykonys tad 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).

N-e Opeq'e tekstowez pakietu Power UtiHty Pakmt dwbgpm 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 ohvom plik za pomczq palecenia Plik/Ohv&z W kazdym przypadku ~stnieje dostep do pelnego kodu &&owego {ten prolekt VBA nie Jest chroniony haslem).

Page 447: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

458 Czeft V Zaowansowane techniki ~roaramowania

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~wymagair dla narzqdzia Operacje tekstowe

Pierwsq czynnoSciq, jakq na leg 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 kdzie 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 sybko 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.

Page 448: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

, 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 e lmie. W d ~ o p e r a c j ~ moma 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~pujacych komponentdw:

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

Komlk i w formulam UserFmm sq ubtone k e j , nit wstanq faktycmie ewiet lone. Wynika to sQd, Ze dla r6tnych opcji wstaiy zastosowane r6me konbolki, a pzycje kon- trolek sq obsiugiwane dynamicmie, w kodzie. Kontrolki ~rymieniono i opisano ponize-j.

Page 449: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 (ComboPrx21 wykonystywane 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) - klikniccie tego przycisku powoduje wyiwietlenie pornocy.

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 jes 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 uzytkownl kbw.

Page 450: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 - Appl icat ion.CmndBars(1) .FindControl(Type:-10. 10:-30007) Set W n u I t m - ToolsMenu.Co~tro1 s .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 on t ro l~ (A3~NAm) .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 j Infomacji na temat dodawania pow1 do menu ma]&Je sig w mzdziale 23.

Page 451: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

462 Czgfk V + Zoawansowane techniki programwania

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 Str ing - "Operacje tekstone' Publ i c Const FROGRESSTHRESWOLO - 2000 Public UserChoices(1 To 8) As Variant ' zapisuje ustawienia dla ostatn io 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@ publ icm~ 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 PRERESSTHRESHWLO o 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 RunTextTools w module VBA Modulel

Tekst procedury RunTextTwl s zamieszczono ponitej:

Sub RunTextTool s ( Dim InvidContext As Boolean I f AetiveSheet Is Nothing Then Inval idcontext - True I f TypeName(Act1veSheet) 'Norksheet' -hen Inval~dContext - True I f Inval idtontext 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. Nastqnie z m i e ~ a jest sprawdz&a w instrukcji If . . . Then . . . Else i w zaletnofci 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

Page 452: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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

:s7$%* Kod nie sprawdza, czy zaznaczono zakres komdrek. Obstug? tego Medu zawarto

1 - w kodzie wykonywanym po klikniviu przycisku Zaslosuj.

Procedura UndoTextTools w module VBA Module1

Procedura UndoTextTool s jest wykonywan~ kiedy umownik 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/a urnieszczony na pbcie CD-ROM dofqczonej 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 ~ombo~ox~~erat ion-chbnge

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 ikn i~ ia przycisku Zustosuj. Najpienv sprawdza Mqdy, a nastgpnie wywojuje funkcjq CreatekiartR~rge w 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).

Page 453: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

464 Cz@t V Zaawansowane techniki programowania

Nast~pnie wykorrystuje 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~cia przycisku 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 mien ig na pnykjad pustych komorek lub nkich, kt6re zawierajq formuty.

Jak wspomniatem wczdniej, pkedura 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 u Range 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 bjedyncza k&rka z forrm1.q If Rng.Count - 1 And Rng.HasFomla Ren

Set CreateWorkRange - Nothing Ex i t Functlon

End If Pojedyncza tan6rrta lub pojedynua scalona kdrka I f Rng-Count - 1 Or Rng.MeqeCells - T r w Then

Page 454: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzial 16. + Twotzenie narzedzl dl0 Excela w jqzyku VBA 465

If TedOnly Then I f Not IsNumericlRng(l).Valuel Then

Set CreateWorkRange - Rng Exi t Function

Else Set CreateUorkRange - Nothing Ex i t Function

End I f Else

I f Not Isbpty(Rng(1)) Then Set CreateWorkRange - Rng Ex i t Function

End If End If

End I f On Error Resme Next Set Rng - Intersect(Rng. Rng.Parent .UsedRange) If Tex th l y - True Then

Set CreateMrkRange - Rng.SgecialCellstxlConstants. x!TextValues) I f Err o 0 Then

Set CreateMrkRange - Nothing On Error GoTo 0 Exi t Function

End I f Else

Set CreateNorkRange - Rng. Specialcell s txlConstants, xl7extValues + x l~umber i )

[ f Err - 0 Then Set CreateUorkilancje - Mothlng On Error GoTo O Exi t 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

ustawienia w oknie dialogowym Pnedrodzenie do - specjalnle Excela. Motna je wySwietll6. W C ~ S ~ ~ J W klawlsr F5. a nastqpnie klikalqc pr~jcisk Spajalnfe w oknie dialogowym P~e~hadZen i8 do.

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 po jedynq 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

Page 455: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~a te 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 Util ity\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 zapisane w rejestffe

i.d-.a . . r c p r a-ta-.. a r c s i ..?WPlvdn P I G S ,- .r;,,,.. ,,_,

,;y-.. 9 6 9 I*--.. u c p I 31 .d~- e r c p

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~qt tylko 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

Page 456: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzial 16. + Tworzenie narzgdzi dla 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 metoe DnUndo. Mdra urnotliwia programlScie okre~lenie tekstu, 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, t e w menu Edycja pojawi sie pozycja Cofnij efekty molego makro. Jeieli ulytkownik wybierze to polecenie, zostanie wyke nana procedura Undot4yMacm:

Ap~llcation.Ontlndo "tafnt j 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 rocedq 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 - RyArea. Formu:?

Next RngArea

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 o zakresu 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 pon ik j :

P r i v a t e Sub UndoTextTools( ' Cofniecie ostatiio nykonanej oceracjl

D i m a As Range

Page 457: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

468 CzeJt V Zoawonsowone techniki programowanio

On Ermr GoTo ErrHandler Awl ication .Screenupdating - Fa1 se 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~o ugytkownikawi 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~dZia Operacje rekrtowe jest niemodalne. Biorqc pod uwagp wygodc konystania, te rotnice motna uznaC za dopuszczalne.

Bqdzie mialo fonnq dodatb dostgonego z menu N v & a - spehiony.

Bqakie driaiaio dla bieqcego zakrrsu Z ~ Z M C Z ~ J ~ A komdrek (Wcqcznie z wyborem w i e l o b o ~ ) . D o d m h W i e moiIiwa niana zmuccenirr podam nyiwietlania okna diaioguwego- spdniony. Poniewd okna dialogowego nie trzeba zamykat, nie ma potmby wykonystywania kontrolki RefEdi t.

Page 458: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzial 16. t Tworrenie nanedzi dla Excela w jezyku VBA 469

O m i a wykonana operacja b&iepamietana i nyhidl i sie podaas ponavnago otwarcia okna dialogowego - spdniony (dziqki wykorzysmiu rejesm Windows).

Nanehie nie b~&iemocjlflkowai komdrek zawierajq~hformu3, - spelniony.

&Lie &ia/a/o srybko i uydajnie. Jeteli naprzyklad utyrkownik zarnac,y cafq kolumng, pusre komdrki w kolumnie zosfanq zignarowane - spehiony.

U91kownik behie 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+aC r6wnie 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 kilkadziesiqt e (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 twdm jest autor nin~ejszei ksi@ki, zawiera wiefe przydatnych nanedzl

--

Page 459: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

470 Cz&C V + Zoowansowone techniki programwanla i

Oprbcz pakietu Power Uriliw Pak, z internetu moaa pobraf inne pakiety. Poszukiwania dodatkowych narqdzi motna rozpacqk od mojej witryny WWW. Zapraszam na strone Spreachheet pod adresem ht tp: /k . j -walkcom/ssS

Page 460: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~zanych z tabelami ~ e s t a w n p l . Z 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~ac i Sprzedat. K a ~ d y rekord 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$..

Page 461: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

472 CzeJC V 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 i vebrkbook. P i vo:Caches .Add -

(SourceType: -xlDatabase. SourceData :-"~rkusr1!~1~1~~13~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 a przestawnal"). - ?ivotFields( "Region") .Ortentation - xlPageField .Position - l

Page 462: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzial 17. + Tabele pnestowne 473

i End With

With k t lveSheet .PivotTables("Tabela przestawnal" 1. - PivotFlelds("RepHand1") .Orientation - xlRouField .Position - 1

End With

With Activesheet. PivotTables('Tabela przestawnal"). - PlvotFlelds( "Niesiac") .Orientation - xlColu~mField .Posit ion - 1

End Hi t h ActiveSheet.PlvotTables("Tabela przestawnal"). -

AddDataField ActiwSheet.PivotTables~"Tabela przestannal'). - P-uotFields('SprzedatW). 'Sum z SprzedaL". xlSun

End Sub

Kod wygenerowany pnez 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~wna i 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 ivo tTab les - zbibr obiekt6w PyvatTabl e obiektu Worksheet;

P i v o t F i e l d s - 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 twoqca 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.

Page 463: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

474 Cz JC V 4 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 - Act1 wWorkbook .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 " I .Orientation - xlColumnF1eld .PivotFields("RepHandl "I .Orientation - xlRowField .PivotFields("SprzedaL") .Orientation - xlDataField

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** Kod bytby bardde) uniwersalny, gdyby w zbiorze P!votFields zastosowano indeksy t!!, 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~lania p 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~h elementbw. 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 y stosunkowo zhtonq tabelq pRe- stawnq

Page 464: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~ce podsurnowania 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

Page 465: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 tabel l przestawnej Set PTCache - ActiveWorkbook. Pivotcaches .Add( -

SaurceTyp:-xlDatabase. SoutceData :-"Range( - ~ l ' ) T ~ u r r e n t ~ e g i o n .Mdress)

Oodanie nowego arkusza Workshetz .Add baiveSheet.Name - "ArkuszTabellPrzestmej"

Utworzenle tabel i 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

Page 466: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 PivctFields('MIESI4C'l .PivotItems('Kw2"). Position - 8 .PivatFields("MIESIAC'l.PivotItems('Kw3").Posttion - 12 .PlvatFields("MIESIAC'l.Pi~tItems('Kw4"l.Position - 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 - Tm End Sub

Jak dziala zlozona tabela przestawna?

Procedura CreatePivotTable z listingu 172 najpiew usuwa arkusz ArkuszTabel1Prze- staknej, jeali taki wcdnie 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 ~ o metod~ Add zbim Ca l 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 BUOtU jest zastqpowana nanvqBudLet (21)).

@#$ T " ~ n w te procedure, najplem w)%cnennvalern kod za p o r n westratora rnakr, a nastgpnle go poprawltern, aby st& sle czytelnieJsry I wydajnlejszy.

Page 467: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~trznych Mde4 danych do tworzenia tabel prrestawnych. hzyklad zaprezentowany w tym p o d r o ~ i a l e demonsmje kod VBA potnebny do utworzenia tabeli przestawnej na podstawie danych zapisanych w bazie danych Access.

,:&@i' Baza danych Accessa zawiera pojedynczq tabel?, w Mdrej umiesmzono te same dane, ktdrych uiyto w poprzednim pnyktadzie.

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 Str ing Dim Constring As St r ing D i m OueryStrtng As Str ing

Usuniecie arkusza ArkPrzest. j e te l i i s t n l e j e Cn Error Resune Next Pppl icat ion. DisplayAlerts - False Sheets("ArkPrzest") .Delete Cn Error GoTo 0

Utworzenie bufora tabe l i przestawnej Set PTCache - ActiveWorltbook .Pivotcaches .Add -

(Source1ype:-xl External 1

tancuth polaczenia Constring - " 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'

a Utwonenie tabe l l przestawnej Set PT - PTCache.CreatePivotTab!e( -

Page 468: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziot 17. Tobele przestawne 479

W i t h PT W a n l e pbl .PivotFtelds<"WDZlAt' ) Or:enr.ation - xlRowileld .PivotFields ("MIESIAC') . I )r ientstion - xl CoLumnField .PivotFleldst'OCOZIAL') Or'entation - xlPageFieId .PivotFieldsl'BUD2ET") .Orientzt'on - xlOataFielc .PivotFields( 'RZECZYWISTE k'iZLTK1") .Or ientat ion * xlDateF: ela

End With End Sub

Argument SourceType metody Adc zbioru P i 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~votCache w celu pobrania danych z pliku zewnptmego potrzebuje nastqpujqcych in- forrnacj i:

m laricuchapolqc~enia opisujqcego typ Mia danych oraz nazwc pliku.

fdcuchazapy~unia, kt6rym jest instmkcja SQL oknflajqca m c a n e rekordy i pola.

\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.

@$b* SQL jest standardavym jezykiern sluz&yrn do twnenia zapytati do bazy danych. W i w j informacJl mozna uzyskd w pomocy online. Warto r6wnlei zakuplC ksiqlke poswi~onq tern" 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 ~cs t awnych . Dla W e j pozycji ankiety utwonono dwie tabele pmsiawne - jedna mwie t la dane w procentach, dmga rreczywiste wartoici.

Kod VBA z listingu 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 D im PT As PlvotTable

Page 469: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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

Page 470: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzial 17. + Tabele przestawne 481

Dim SuinnarySheet As Worksheet Dim ItmNsme As Str ing Dim Rw As Integer. 'i As Integer

Application.ScreenUpdat1ng - False

' Usuniecie arkusza "Podsumwanie". jete1 1 i stn ie je Cn Error Resume Next Application.DisplayAlerts - False Sheets("PodsurnOwanie"1 .Delete

On Error GoTo 0

' Dodante arkusza "Podsman ie " 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( "A l ' ) . - CurrentRegim .Address)

R o w - 1 For 1 - 1 To 14

ItemName - Sheets("DaneDnkiety').Cells(l. l + 2)

Utwrzenie tdbel i p r z e s t m e j Set PT - PTCache.CreatePivotTab1e -

(Tab1eDestination:-S~mrySheet .Cel IslRou. 6). - Tab1 eName: -I tmName)

R a r - Row +ll

Dodanle p61 With PT.PlvotFields(ItemName)

.Orlentation - xlOataField

.Name - 'Liczba odpowledzl "

.Function - xlr&nt End U i th

PT.AddFields W i e l d s : - A r r a y ( ItmName. "Dane") PT.PivotFields("Plet"1 .Orientation - xlColurmFTeld

Next i

Row-1 For i - 1 70 14

ItenNane - %eetsl'Dane~kiety").Cells(l, I + 2) Utwrzenle tabe 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 ~ m c t i o n - x l h n t

Page 471: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

482 Czg5t V + Zoowansowone techniki programowanio

.Calm1 a t lon - 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"

.Rep1 ace '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 pmtawne q t w o m n e w dwkh 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 r n ~ d ~ k a c j e . W 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 r l E

Page 472: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 . PT votIteas( "Maj") . V i sible-;rue .Pivot I tms( 'Cze") .Visible4rue . P i v o t I i m s t " L i p ' ) . V 1 s l b l ~ T r ~ e . PivotItems("Sie') .Visible-True .PivotItem('Wrz").Vlsible-True .PlvotItems('Pat') .Visible-True . P l v o t l t e m s ( " L i s ' ) . Y i s ~ b l ~ T r u e .PtvotItm~("Gru').Visible--rue .Pivotltems('Kwl").Visible-False .PivotICems~'Kw2"l.Visibl&alse . Pl~0tIi~sl"K~3') .Visible=Fal se .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 ue

End Sub L

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- ocqwik ie 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,

Page 473: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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.

I

' 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 poj~ ia , 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 C j d e l i jakiS ismieje). Moma

Page 474: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

486 Czg5t V + Zoawansowane techniki progromowania

napisat kod wykonujqcy d z i a h i a z tym obiektem Chart, podobnie jak moma napisat 1 kod wykonujqcy dzialania z obiektem Workbook zwracanym popmz wLSciwoSC Ac- t l veworkbook. Oto przykhd: jeteli uaktywniono wykres, ponits;za instrukcja spowoduje wyfwietlenie wta4ciwobci Name obiektu Chart: j

! MsgBox Activechart. Name

I

Jeteli wykr~s nie 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, kt6ry zawiera wMciwoSt Text. To wtainie w niej jest zapisany tekst wyiwietlany jako j

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~pujqcq instrukcje 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 t le. Na koficu urjshjejemy dostep do wMciw&i Text.

Page 475: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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

Char t

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 m a n e j w okrerbnym arkurzu a 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 ma kr dotyczqcyc h 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 Char t . W Excelu nie m b a ~ c z a c obiektu (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 h rejestrator makr. W za- rejestrowanym kodzie {listing 18.1) wprowadzikm p6hiej kilka poprawek. Wykres wykorzystuje dane zapisane w &sie A I : F2.

Page 476: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 i veChart .ChartType - xlCo1urmClustered Act iveChart .SetSourceData -

Source:-Sheets('Arkusz1') .Range( " A l : F2'). - P1otBy:-xlRows

kt iveChart.Lccation - Mere:-xlLocationAs0bject. - Name:-'Arkuszl"

.ktiveChart.HasLegend - False

.kt iveChart.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 4ctiveChart.ChartTitle.Select blect ion.Font .Bold - True Selection.AutoScaleFont - True wi th Selec:ton.Fant

.Name - 'Ar la l "

.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 ,ktiveChart.PlotArea .Select 5election.Top - 18 5slection.Height - 152 kt i veChart .ChartArea .Select k t i v e v l a r t .Axes(xlUaluel .Select N th ActiveChart.Axes(xlValue)

.BinirmmScaleIsAuto - Tme

.Haxim.unSca?e - D.5

Page 477: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

.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 - False Ular ts .Add Activechart . Laa t Ion -

Where : -x lLaat ionAsDb,ject. Name :-'Arkus~l" Wlth Activechart

.SetSourceOata Rangef"A1 : F2"

.HasTitle - True

.ChartType - xlColunnClusrered

.HasLegend - False

.kplyDataLabels Type: -xlDaralabelsShowValue

.Axes(xlCategory) .TickLtbels.Orientation - xlHonzonta1

.C?artTit le. Font .Bold - True

.CiartTitle.Font.Size - 12

. PlotArea.Top - 18

. PlotArea-Height - 162

.Axes~xlYalue).Maxlrmdcale - 0 .6

.Deselect End Ui t h Ppplication.ScreenUpdatlng - True

End Sub

<&% 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.

Page 478: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 moha 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 Modi fychart lo ActiveSheet .ChartObjects('Nykresl'). Mi vate ActiveChart.Type - x l Area Pc',iveChart .Deselect

End Sub

Sub Wl fyChart2() Activesheet. ChartObjects( "Wykresl") .Chart.Typ - x l Area

End Sub

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 pomoq 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 Wyka:

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 wykm w arkuszu o nazwie Arkurrl:

Sub tonvertChart20 U-tarts('M6jWyLres") -

.Location xlLocationAs0bject. "Atkuszl" End Sub

Page 479: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 s pozostanie 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:

ActiveSheet.ChartObjects~1) .Pctivzte Activechart .ShMindow - 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

Page 480: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 Act i veW1 ndcw na wart056 Fa1 se 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 spodb 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:

Private Function ChartIsSelectedO As Boolean ChartIsSe1ec:ed - Not ktiveChart Is Nothing

End Function

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 instrukcj i:

Page 481: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rysunek 18.3. Prdba usuniecla jednego lub kilku I

&y~wietlenie takiego 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 - "Aria l"

.ChartArea.Font.FontStyle - "Regular'

.QlartArea.Font.Size - 9

. 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 pny pr6bie ustawienia wiakiwosci Posit ion 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 - "Ar ia l"

.ChartArea .Font.FontStyle - 'Regular'

.ChartArea.Font.STze - 9

.PlooArea. Inter lor . tolor Index - xlNone

Page 482: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

1 494 CzgJC V Zoawansowane techniki programowania

.Axes(xlValue) .TlckLabels. Font.5old - True

.Axes(xlCategory) .TlckLabels.Fmt.Bold - True If .HasLwnd - True Then .Legend.Posltion - x l b t t m

End With 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 For Each cht I n ktfveUorkbook.Chart5

cht.ChartType - x l Area Next cht

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 - "Ar ia l " .Fontstyle - "Bold' .Size - 12

End With .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.

Page 483: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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, nale j jq uakt)umie i kl ikng 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/Lokal izacja.

Microsoft m o ~ k o w a l model 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 SizeAnd41 ignCharts( 1 Dim W As Long. H As Long D l m TopPosition As Long. LeftPosit ion As Long Dim ChtObj As ChartObject I f k t i veChar t 1s Nothlng Then E x i t Sub

' Pabranie rozmiarh aktywnego wykresu W - ActivdXart.Parent.kidth H - Activechart .Pzrent .Height TopPosition - 1 LeftPosit ion - 1 For Each NCbj In ktlveSheet.thartObjec:s

Chtc4j.Wldth - W ChtCbj.Height - H ChtObj .TOP - TopPosi t i o n ChtOhj.Left - LeftPosit ion TopPosition - TopPosition ChtObj.Feight

Next ChtCbj End Sub

Page 484: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

496 CzeSk V + Zaawansowane techniki oroaramowania

Zmienna TopPosition zawiera informacje o pdoteniu w pionie kolejnego wykresu. W katdej iteracji ~ t l i mienna jest nviqkszana o wan096 H (wysok09C bieacego obiektu Chartobject).

G 3 ,e Ten m i a d jest dostgpny na plycie CDROM doiqczonej do ksiqfki.

;.n;m;m

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 moha 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 nastqpujqcq formule 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 zahsdw wykorzystywano ich nazwy. Formula po edycji b&ie miala nastppujqcq postaC:

-SERIE( .Arkuszl ! Kategorle.Arkuszl!Dane.l)

Po zdefiniowaniu nazw i zrnodvfkowaniu formub SERIE. w kodzie VBA motna.pash- giwaC sip nazwami, a miany zistanq uwzglpdnio"e na wykresie. Na 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 a rozszenenie zakresu Dane o dodatkowy wiersz:

M i t h Range("DaneW) .Resize(.Rows.Coont + 1. l).Name - "Dane"

End Yith

, W Excelu 2003 wpmwadzono ~ ~ i w o 9 C , k t 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.

Page 485: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat 18. + Wykresy 497

Fmuta 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. Moha jednak rnodyfikowae jej 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

I I

Zastosowanie jezyka VBA w celu okreslenia danych wykorrystywanych na wykresie

Prrykhdy z tego punk opiwjq tcchrulci jpzyka VBA umotliwiajp rnodyfikacjjedanych wykresu.

Page 486: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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) Cal l 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 CatTi t les 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 - Act ivecel l .Rw I f UserRow c 3 Or IsEmpty(Cells(UserR0~~ 1 1 Then

TheChartObJ.Vlslble - False

Page 487: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 ha r t 03 jec t zostanie ukryty.

W innym przypadku kod utworzy obiekt Range (CatTit le) 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~tkownikowi wyboru wy- hesu. Wyglqd interfejsu pokazano na rysunku 18.5.

Rysunek 18.5. k$imnie pozjcji z p ~ I a kombi modflkuje dane frddtowe wykresu

ce Pole kambi utyte w tym pnyktadzia pochodd z paska narrpdd Fornulane, -' a "is z [email protected] 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.

Page 488: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 mkownika . 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 - Sheets("Wykres1') Set Datasheet - Sheets:"Arkuszl")

i r i t h Datasheet Set CatTit les - .Rdnge("AZ:FZ") Set SrcRange - .Rarge( .Cel l 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 - TheChart .ChartArea .Left .Deselect

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 zhesach wykonystanych przez poszczeg6lne serie danych na wykresie. Czasami na przykhd trzeba zwiekszyC serip danych poprzez dodanie nowej kom6rki. Poni&j e j ieszczono opis tnech wlasciwoSci, k tke 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.

Page 489: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 ~ c i Va 1 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 a tego 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 pncz kilka lat, a2 meuc ie udaio mi sip maletd r o n v i p - nie. Sposdb polega ria anal& formuly SERIE za pomoq 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 ie~r szy element tablicy zawiera h c u c h opisujqcy typ danych pierwszego argumentu formuly SERIE (Range, h p t y lub St r ing ) , 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.

Page 490: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 fo rnub SERIE (Range, Array lub Enrpty), natomiast dmgi - adres z a h s u . tablicg lub pusty Gcuch 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 CDROM 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 tab1 icy 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

Page 491: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzictl 1 8. + 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 0Range.M~ .Count > 1 Then

Set DRang - DRange. Res- ze(9Range .Rws . r a n t - I1 s .Val ues - 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~iwofci modyfikacji 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 omacqk 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

Page 492: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 etyk iety danych?". Type:-8) I f DLRange Is Nothlnc] P e n Ex i t Sub On Error Golo O

Dodanle e tyk ie 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 s 1 ustawlanie e tyk ie t danych Pts - Cht.SeriesCollect~on(:).Points.~~mt For i - 1 To Pts

Cht.SeriesCo1 l e c t i o n i l ) . - Points(1) .Datalaw1 .Text - DLRange.(l)

Next i End Sub

Ten pnyklad jest dostepny na ptycie CDROM dctqczonej do ksiqiki.

Na 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 ~ .

Page 493: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 &saw tcchnikq, 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. wkres w tym okde UserFonn zostai uhvor7ony . w rode. na podstawie danych z bidqcego wiersza

Okno UserFon wykonystane dla potrzeb tcgo przyktadu jest bard20 pmte . Zawiera konnolke Imge (obraz) oraz pnycisk Zamknij. W arkuszu z danymi majduje sie prq- cisk, ktbrego wciSniecie powoduje wykonanie nastqpujqcej proctdury:

Page 494: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

506 C z ~ f e V + Zaawansowane techniki programowania

Sub M h a r t O Dim UserRow As Long UserRow - Activecel l .Row If UserRw < 3 O r IsEmpty(Cells(UserRow. D l Then

MsgBox "PrzemiefC kursor do wlersza zaulerajacego dane." Ex 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~pnie wytwietla 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) D im TerrpChart As Chart D i m CatTit les As Range Dim SrcRange As Range. SwrceData As Range

Apol i ca t ion .ScreenUpdati ng - False

Set CatTIt les - ActiveYleet.Range('AZ:F2"1 Set SrcRange - ActiveYleet.Range(Cells(r. 11. Cel ls(r . 5 ) ) Set SourceData - Unton(CatT1 t les . SrcRangel

Oodante wykresu Set TmChar t - Charts.Add

Kon figuracla wykresu With TRnpChart

.ChartType - xlColunnClustered

. SetScurceData Source:-ScurceOata. PlotBy :-xl Rows

.HasLegend - False

.PlotArea . 1nterior.ColorIndex - xlNone

.Axes(xlValue) .Ha jo 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 - 150

.Visible - False End W t h

End Sub

Page 495: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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-Init ial ize0 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 " tempgi 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 a kodu 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.

Page 496: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 etyk iety danych?'. Type:-8) If &Range Is Nothlng Then Ex i t Sub On Error GoTo C

Wdanie etyk let danych t h t .SeriesCoilect icn(l l .hoplyCata Lacel s -

Type:-xlDataLabelsShmVal ue. - PutoText :-True. LegendYey :-Fa1 se-

2rzetwalrzanie w pet11 ko lekc j l Points 1 ustawianie e tyk le t danych Pts - Cht .Ser iesb l lect ion(1). Points .Count For I - 1 To Pts

Cht.SeriesCollectlon(1). Points(i).DataLabel .T& - DLRaw( i )

Next i End S L ~

Ten ~ k t a d jest dostepny na p!ycle CD-ROM ddqcmnej do ksiqtki.

N a rysunku 18.8. pokazano wykres po uruchomieniu procedury OataLabelsFromRange i wprowadzeniu A2 :F9 jako zakresu etykiet.

g&j" Poprzednia procedura nie lest dopracowana i nie zawiera mzbudowanej obslugl b@d6w. Poza tym dziala tylko dla pierwszego obiektu Series. Pakiet Power UtiIIty Pak zawiera znacmie barddej zhione nan@zie prreznacm do modyflkowanla etykiet na Wesach.

Page 497: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~pnie ladowalifmy 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 z bie2wego wiersza

Wynlkl anklaty kllentbw

Okno UserFann wykonystane dla potrzeb tego pnykMu 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:

Page 498: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

506 CzdC V Zaawansowane techniki prograrnowania

Sub ShowChart ( Dim UserRm As Long UserRw - Activecel l .Am I f UserRaw < 3 Or IsEmpty(Cells(UserRow. 01 Then

MsgBox "Przemieft kursor do wiersza zawierajacego dane." Ex 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 gemwanle ykmsu bez lnterakcjl z utytkownlklern *

Sub CreateChart(r) Dim Tempchart As Chart Dim CdtTit les k Range D i m SrcRange As Range. SwrceData As Range

Application. ScreenUpdati ng - Fa 1 se

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 .AoplyDataLabels Type:-xlDataLabelsShowValue. LegendKey:-False .ChartTltle.Font.Size - 14 .ChartTitle.Font.Bold - True Axes(xlValw).Maxi&le - 0.6 Axes~xlCategory).TickLabels.Font.Size - 10 Axes(x1Category) .TictLabels.Orientation - xlHorizonta1 .Location Where:-xlLocationAsObject. flame:-"Arkuszl'

End With

' Skorygwanie r o m i a r u cbiektu Chartobject Ui th ActiveSheet.ChartObjects(1)

.Width - 300

.Height - 150

.Vis ib le - False End With

End Sub

Page 499: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

* 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 Vis ib le wykresu na Fa1 se.

Ostamia instrukcja procedury Shadhart powoduje zaladowanie okna UserForm. Ponikj zamieszczono listing procedury UserForm I n i ti a1 i ze. 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 Str ing

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 1 terNane:-"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 lhdatkowe lnfonacje na temat zdarren mozna maleB w rozdziale 19. (8,

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 l isp Object po Iewej stronie tneba wybrad pozycjq Chart, a z mzwijanej listy Procedure po prawej stronie (rysunek 18.10) odpowiednie zdnrzenie.

Page 500: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Tabela '1 8.1. Zdamnla dotyczqce oblektu Chart

Zdarzenie hialania, ktdre powodujq wygenerowanie zdarzenia

Ac:i>/?te Uaktywnicnic arkusza wykresu lub wykmu wbudowancgo

SeforeDcubleCl ick Dwukrolne klikni~cie w 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 wskih ik 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 A. *,.,a. "q . -%.- I.. ",..1" *.. -.-

.yl I. Y S l * W 3.1-1 C U I,-:*

C..l XLAa In : l d . ' U V c... iLhl.llll .i ill . - Y L . I I I Y . C . w .LF.Y.*". 1.. .CIUCII". C u m z L C I Y c I x L L . I Id ' -PltT1..1*. C... .LC.rn..., Id . -cmlrr.. C u m .LAI.\.I.Lx U - -I-. C U . slD.L.%l.~ I8 - *I-T-h. C U . . ,m.nu., I . . B.6.I.r..

Rysunek 18.10. n + M r zdarzenia w modufe kodu oblektv Chart

Page 501: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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

I Chart-AcNvate i wySwietlenie pokazanego komunikatu

Page 502: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

510 CzqdC V + Zoowonsowane techniki programowonia

Procedura Chart-Deactivate, kt6ra majduje sic ponitej, take wyiwietla komunikat, tym razem w pnypadku deaktywacji wykresu:

Private Sub Chart-Deactivate0 Dim m g As Str ing msg - 'Dziekujemy za przejrzenie wykreru." Msgbx msg. . k t 1 veWork 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 - 'Ax 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 xlMajoff ir idl ines~: 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 xiwal l 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 Elenwrt ID 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.

Page 503: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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+u klasy). 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~pnie nalety 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

Page 504: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 hon ie ekranu (rysunek 18.12).

Rysunek 1 8.12. Na ligcie Procedure Wwiet lane 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

i Na 'hcie CD-ROM dolqczonej do kslqtki majduje sic skoroszyt. Mdry demonstruje 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 ~czami , kt6rych kliiiqcie powoduje wykonanie olcreSlonych dziaM. Kliknigcie kolumny na wykresie uakrywnia arkusz wySwietlajqcy szczeg64owe dane o wskazanym regionie.

Page 505: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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(l j .~hart End Sub

Sub OlsableChartEvents() Procedura wywljwana przez przyci sk w arkusru Set SumsaryCMrt .aryChartClass - Not9ing Range( ' A l ' ) .Select

End Sub

Sub ReturnToHalnt) Procedura vyw~lywana przez przyclsk w arkuszu Sheets("G?*').ktivate

End Sub

Page 506: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 .Act1 vate 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~dnych X 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 a , kt6re wymySlilem w czasie pracy z Excelem. Jedne mogq sic pnyda-2 w aplikacjach, natomiast inne sq wylqcznie ciekawostka, Pmstudiowanie ich z pewnokiq umoHiwia inne spojmie na model obiek- t6w zwiqzanych z wykresarni.

Page 507: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziol 18. + Wykresy 515

Drukowanie wbudowanych wykres6w

Po za~laczeniu wbudowanego wykmu moha go wydrukowa~? poprzez wybranie polecenia PliHDrukuj. Wbudowany wykres zostanie wydrukowany na pehej stronie (dokladnie tak, jak w pm$adku wykres6wurnieszczonych w osobnym ark&zu). Poniaze rnakro powo- duje wydrukowanie wszystkich wbudowanych wyk~esdw aktywnego 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 wa~nkach wykres 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~cie F9 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 Act ivKhar t Is Nothing Then

MsgEox "Uaktpni j wykres." . v b i r , f o m t i c n

Page 508: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

51 6 C r e e V + Zoawonsowane techniki progromowonia

Exi 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) - "Char:" Then

Acti veulart . Paste Else

PctiveSheet .Paste Selection.Left, - TheChart.Parent.Left Selection .Top - Thechart. Paren: .TOP

End If Thechart. Parent .Delete npplicatlon.ScrmUpdat7ng - h e

End Sub

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 lect ion(1) .%Values - Array('Sty'. "Lut'. "Mar")

.SerielC~llection(l).Yalues - Array(l25. t65. 189)

Page 509: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

.HasLegend = Fa1 se

.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 mom 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 :

Pr iva te 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~nentlD As Long

L!

Page 510: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 .V ls l ble - Fa1 se

End If If NewText 0 Activechart .Shapes[l) .TextFrane.Text lhen

Activechart .Shapes0 1) .TextFrafre.Text - NewText. nctrvethart .Shapes(l) .V is ib le - 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 Shl 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.

Page 511: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 obliczana jako 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") - C End Sub

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. Knywa 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 imy 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.

Page 512: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 sanvch w kolurnnach A i 0. Paski ~ m w i i a n i a w 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. ~odz~tkowo na wykksie znajduje sic pnycisk Losowo, kt& ge- neruje losowe wartosci dla trzech parametrbw.

Skoroszyt zawiera tylko jedno makro (zarnieszczono je ponitej), ktdre jest 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 Ran~e( "82'1 - Int(Rnd * 250) Rance("93"l - Int(Rnd * 250)

End 5l.5

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.

Page 513: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 efekt jest rnniej interesujqcy

Ponitej maj~duje sic kilka infmacji , ktkt6re mom siq prrydat pod- 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 ptaci 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 cyhwej .

W przyldadzie wyk~nystano wykxcs 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.

Page 514: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 wywowana 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 Set1 es 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 mbi f , jdli inaeresujq nas dane tylko dla lutego? ~ o t n a oczywiicie 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 ronv ipn ie bardm proste.

Page 515: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 niestanderdcwy w celu filtrowania listy

Ten prrylctad jest 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 komdfkami w zaktadce WIagciwo5ci okna dialogowego Formatavanie obszaru wykresu dostepnym po Wraniu poieceria Format/Zaznaczony obszw wykresu.

Zapisywanle wielu wykres6w w arkuszu-wykresie

W wi~ksmic i pnypadk6w 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 nobi f bez u w i a dodatkowego kodu. Po

Page 516: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 samorouzenajqceg o 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 musq zostat usunicte. Jest to cakowicie realne, wystarczy tylko wykonaf kilka czynnoici przygotowawczych.

Page 517: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~likowana zaDrrzentowan0 i 4 jako &k po hku . 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 ~ i d&i z o A q ~ u n i ~ t e . ' ~ przykkidzie wykorzystano p ~ s t y arkusz, 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 s t utworzmie 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&ula SERIE 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~dnione nowe dam. W t o e si! tym zajmiemy.

Page 518: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 1 majdujqsip nagl6wki, od uzyskanej licby odejrnowana jestjedynka.

4. Wpolu N a m y w skomszycie wprowadt n a m e Sprzedat. W polu Odwoluje sic do wprowadt poni tsq 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 i wybim 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.

Page 519: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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, name @ 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 mstnfy wykonane poprawnie, wykres uaktualni siq automatycmie. Jee l i wyiwietli sic kornunikat o Mednc lub jeSli wykres nie uaktualni siq, nalet). uwatnie przeanalizowac poprzednie czynnoki. Opisana metoda z pe\vnoSciq dzida!

Page 520: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

--

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~rrajqcy sip 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. l s h i e j ~ one w pamiqci Excela i nie sq identyfiiowane pmez adres komdrki. Dostep do wynikow nanvanej fonnuly rnoha jednak uzyskad poprzez odwdanie do jej nazwy za- r6wno w standardowej formule, jak w fomule SERIE wykreou.

Page 521: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 no- 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+o4ci od 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 iczb~ wienzy, o jakqjest przesunipty pmqtek zakresu wzglflem adresu odniesienia;

przes kolum - oknila l i czh kolumn. o jakqjest prtesunicly pocqtek zakresu wzglaern adresu odniesienia:

i m wysokoSt - okreSla lie* wierszy w zakrcsie;

I szerokoSC - okrcfla liczbp kolumn w zaluesie.

Jetell kolumny wykazystane jako Wdto danych nazwanej formuly zawierajq zapisy. / Sfl kt6m nie sq danyml wykresu. funkcja I l . E . U I E W m O l zw.5ci niepopramq warto5t. 'm Dla zachowania prostoty romiqzania nalety uniksC wpmwadzania w kolumnie innych ! i

danych nit dane fr6dbwe wykresu. leteli kolumna zawiera dodatkowe informacje, I naleiy odpowiednio dostosowad argument wysokoit funkcji ILE .UIEPUSTYCH. I

Jak pami@amy, fonnulp o nazwie Sprzedat zdefiniowano w nast~pujacy spos6b:

-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:

I W tej fonnule u@to korn6rki 02 jako kom6rki odniesimia Formula zwraca zakres, ktbry:

jest pnesuniqty w stosunku do kom6rki 82 o 0 wierszy (drugi argument przes-wt erszy);

Page 522: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~cq utytkownikowi 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 op j 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

Page 523: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Ten pnyklad pokazuje, t e motna utworzyt rozbudowanq i interaktywnq aplikacje bez koniecznofci stosowania makr.

I iiis- Ten przyktad jest dostepny na ptycie CDROM dotqczonej do ksiqikl.

i t

W ponitszych podpunktach opisano czynnofci wykonane w celu utwonenia aplikacji.

Uzyskanie danych do utworzenia interawnego 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~pnie wpmwadzimy 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 e s t skonfigurowanie 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 DandSpr~diunie poprawnoSd. WySwietli siq okno dialogowe Sprmdzanie popruwnoici danych.

Page 524: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 -L i s taH ias t .

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 Wierania 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 Mias to l , ma nas tp jqcq postat: -

-WYSZUKAI.PIONOWO(Miastol.~R. F U ~ R I . N R . K O L L ~ ~ I . F A S Z )

Page 525: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~pnych I 2 kolumn.

I"&* Niektdrych czytelnlk6w z pewnokla zainteresowak uiycle funkcjl NR. KOLUMNY a3, 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 nastqpujqcq postac:

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.

Page 526: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~ieruia okreilonych warunk6w. ProsQm przyktadem jest procedura ComndBut to 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 w , arkuszy, wylops6w> aplibcji lub formulamy UserFonn.

Zdurzenia dotyczqce skoroszytw wystppujq w kmtek3cie okre4lonego skomszvtu. Pmkhclarni sa men [skoroszyt zostat otwarty lub utworzony),

Page 527: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

536 CzgSC V + Zoowansowane techniki prograrnowonia

Zdarzenia dotyaqce arkur-y wystepujq w konteucie okdlonego arkusza. Przykladami s;lChange (nieni la 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. Naleado 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 zamkn i~ ia kt6regoS 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 i ze (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.

Page 528: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 ~ k i rozdziaiu 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 I zapisremy 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 onywanq pned procedurq Auto-Open.

Ptzed wydaniem Excela 97 c~gsto istniah konlecmoSE r-o 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 Val idateEnty 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 mchan la (chod nie jest on tiddm'wnt~wany w systemie pom0Cy). Jezeli tworzymy aplikacje. kt6re mq w 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.

Page 529: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 umieszczat w rnodulach 0gblne~0 pnemaczenia, a wiec w takich, ktbre nie sq - - zwiqzane z obiektami),

moduly klas.

Chociat procedury obslugi zdarzefi m u s q byt umieszczone w odpowicdnich modulach. moha 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:

Pr iva te Sub Workbook-Open() Cal l WorkbookSetup

End Sub

Wylqczanie obslugi zdarzeri

Domyilnie wszystkie zdarzenia sq wtqczone. Aby wylqczyt wszystkie zdanenia, na leb wykonat ponitsiq instrukcje VBA:

nppl icat lon. EnableEvents - Fa1 se

Aby ponownie whczyt obshgq zdarzeh, nalety wykonaf instrukcjq:

Appltcation.EnableEvents - True

,-+a Wytqczenie obslugl zdaneri nle ma wplywu na zdarzenla generowane przez kontrolkl i ! tomulamy UserFon - na pnyklad na zdanenie Cl ick 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 nmpnie ponownie je wfqciy2, aby rnolna byfo monitorowat nastepnq operacjq wpmwadzania danych.

Page 530: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Innym sposobem zabezpieczenia sip prztd nieskoriczonymi petlami kaskadowych zdarzeh jest zadeklarowanie n i enne 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 Fa1 se). Na pocqtku procedury nalety wstawid nastqpujqcy kod:

I f AbortProc Then AbortProc - Fa lse E x i t Sub

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- In i t la l ize.

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.

Page 531: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

540 Czeit V + Zaawansowane fechniki progromowania

Rysunek 19.2. Naj1epszj-m sposobem ulwonenla procedury obslugi ~ d a ~ e f l i a l e s t 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:

Pr ivzce 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 vpu 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 Fa1 se. W kodzie nastppuje jednak unawienie wartoJci C a ~ e l na True, co powoduje anulowanie drukowania. Po- kazano to w poni2sq-m pnykiadzie:

Page 532: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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:

mwiet lanie komunikat6w powitalnych,

otwieranie innych skomzyt6w,

konfigurowanie menu lub paskbw n q d z i utytkownika,

e uaktywnianie oheSlonego a&ua lub kombrki,

Page 533: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

542 CzgSe V + Zaawonsowane tachnikl p r o g a m o w a n i a

Tabela 1 9.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

OW 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~erl ink 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 skmzy tu

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.

Page 534: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 c i rozdziah),

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 ~Zytkownikowi o 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, vb In fomt ion

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 arkusz jest myktyrn arkuszern (w odrbtnie- niu od arkuszy-wykredw).

Private Sub Wortbook-ShwtActivate[ByVal Sh As 3bjecti I f TypeNam(Sh) - "Worksheet" ihen -

Rangei'A!').Select End Sub

Page 535: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 procedura jest 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 e Sub Workbcck-NmS'r.sel!3yqJal Zh As Objecti ! i TypeNarrel Shi - 'n'orrsheet" T ~ e n

Sh.Range("Aia) - "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:

Pr ivate 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.

Pr i va te Sub Workbook-Deactivate0 He.k t lva te H s e x "Niestety. n l e mzesz opugcit tego skoroszytu."

-End Su3

Page 536: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 te t w wyniku pr6by wyiwietlenia arkusza w podglqdzie wydruku.

Prnd wydaniem Excela 2002 utytkownicy cqs to 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) For Each sht In ThisWPt%W.Sheets

sht .Pagesetup. LeftFooter - '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.

Page 537: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 te 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~ciem skoroszytu. Czpsto utywa sip go w m c z e n i u z proceduq obslugi zdarzenia Workbook-open. Na przyklad procedure Workbook-Open motna wykorzystaC do utwonenia menu utytkownika, a nastppnie za pornoq procedury Workbook-BeforeClose u s u w menu Wkownika 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, te rostala kykonana procedura Workbook-BeforeClose

a - Wy4vdetlenle zaprezantowanepo we] kornunlkatu omacza, ie nastqpilo zdarzenie BeforeClose. a zatem pmcedura jut sig wykonata.

Rozwatm y nastppuj y 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 ih ie Arzufuj. skomszyt pozo- stanie otwarty, ale miknie menu uzytkownika, kt6re zosealo usunipte wczefniej! Jednym

Page 538: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 arhza.

Aby szybko uaktywniE rnodut kodu arkusza, ttzeba kllknqd prawyrn prryciskiern mysry zakladke arkusza. a nastcpnie wybrad pleceni 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.

Page 539: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~reRigntt l ick Klikniwie arkusza prarvyrn przyciskiem rnyszy

Calculate Pmliczenic mkuua

Change Madyfikacjh komhrki arkusn dokonann przez utytkownika lub mvn~trme tqcze

Deactivate Dezaktywacja arkusza

Fol l o d y p e r l i n k Klikni~cie hipcrlqcza 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) Fsmx "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 e te 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.

Page 540: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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. Pmcedura ~or'ksheet-change pobie-ra obiekt &u ~ ~ n g e jako argument. Obiekt ten re- prezentuje komdt-@ lub kom6rki, kt6n ulegly modyfikacji.

Za ldhy , * 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 ~ c jeteli 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 cel l As Range For Each cell In Target

Page 541: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 tom 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/I paprawnoSc1 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 tCr 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

Page 542: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 1 9.2. Werytikacj8 popfawnofct ZaplSU w monitomwanym zakresie

Private Function EntryIsVal id(cel1) As Vanant a

Zwraca wartaf t 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

a Czy wprowadzono l i c m ? If Not 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 1 iczba calkowita?

If CIn t l ce l l ) <> c e l l Then EntryIsValid - "Nalety wprhadz l f l i c z k calkcwit*." E x i t Function

End If 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: pon idzy 1 a 12." Ex1 t Function

End If ' 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.

Page 543: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

552 Czei.6 V + Zaawansowane techniki programowonio

Private Sub Wortsheet-Sel&:ionChange(9yVal Target As Exce: .Range) Cel1s.Interior.ColorInUex - xlNone 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 .Col~r Inbex - 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 na ,?&to 3695 I s 9 721

331 us 1*I p r t m S l 3%%, 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 e tla. 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 - !3y1#al Target As Excel .Range. Cancel As 8001ean) Cancel - 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

Page 544: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 rdamr 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 ck 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

Calculate

Deactivate

Housdbve

HwseUo

Resi ze

Selekt

~ ~

klikniccia prawyrn pnyciskiem rnyszy.

WykreSlcnie nowych tub rmodyfikowanych danych

Dezaktywacja w y h s u

Pncciqgniecie zakrcsu 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

Zmiana pozycji wskahika myszy majdujqccgo siq nad y b m

Zwolnienie przycisku myszy, kicdy wskafnik my- majduje siq nad wykresem

Zmiana mzmiaru wykresu

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.

Page 545: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 moha s@ t a m dowleddeC, ktdre oblekly obsiugujq okreSlone zdarzenia. Zatdimy dla pnyktadu, te 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 na lewej 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 le rnentu w pneglqdarce. Czasaml mote si? okazad, i e w okreflonej klasle lub blbliotece zdarzenie jest obstugiwane w inny sposbb.

T ~ 0 ~ 0 f l l e procedur obsfugl zdand poriomu aplikacjl zawsze wyrnaga zastosowania c* modutu klasy oraz pwnyrh 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.

Page 546: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Tabela 19.4. Zdanenia d o w q c e obiektu Application

Zdatzenie Dzialanis. ktdre powodujq rrygenerowanie zdantn ia

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 kn iv ie dowolnego arkusza prawym p ~ c i s k i e r n myszy. To zdarzenie mchodzi przeddomySlnym dzialaniern wykonywanyrn ~v przypadku klikniqcia prawym przyciskiern rnyszy.

SheetCalculate Pneliczenie dowolncgo arkusza

Sheetchange Modyfikacja kombrki dowolnego arkusza dokonana pncz 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

I WarkbookAfterXULImport* Zaimportowanie p l ikuXt fL lub odSwietenie polqczenia z danyrni

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

Page 547: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 skorosrytu hdqcego c e c i q prmmeni roboczcj dokument6w

Zdorsnla dodano Ercelu 2002. IYzrqe ivce in ic j~e rch 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~olt cation 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 icnna ob.iektowa poziomu modulu zadeklarowana w module VBA (nie w module klasy). Oto pnykjad:

D i m X As New clsApp

5. Powiq2 zadeklarowany obiekt z obiektem Application. Cqsto czynno9C ta jest wykonywana w procedune Workbook-Open:

Set X . X L - Appl icat ion

6. Napisz procedury obshgi zdarzeri dla obiektu XL w module klasy.

/i Opisana pracedura jest niemal ldentyczna z tq, ktdq naletab w y k o n ~ w celu - * wykonptanla zdarzefi we wbudowanych wykresach. W ~ e j infwmacji 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

Page 548: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 ~ q Wb 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

Sub UcdateLogFile(Wb) t x ? - Wb.FullName t x t - t x t 8 '.' & Date I '." 5 Time ~ x t - tx t 8 '.' & 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~pnie zapisuje 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~nej do kslzgkl. Przed otwarciem skomszytu naleiy go skoplowaC na dyrk twardy. Plik tekstowy jest za@smny w W samym katalogu. w kt- ma)duJe sie 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 M a s y , 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

Page 549: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 1 b 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 kztc4 kontrolh umieszczanq w fmularzach UserFon 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

Emma dla f o m l a n a UserFonn oraz utytych w nlm kontrolek.

Page 550: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Zdancnle Dzlalanla. ktdre powodujq wygenerowanie zdanenia

Activate Uaktywnienie fonnularza UserForm

Addcontrol Dodanie kontmlki w fazie rykonywania progrsrnu

9eforeOropOrPaste

Click

OblClick

Deactivate

Error

Ini t ia l ize

TeyDovn

iteyPress

Keyup

Layout

HauseDavn

MouseNove

HwseUp

OueryCl ose

Wykonywanie opcracji przccit\gania i upuszczania w czasie. kiedy rvskafnik rnyszy majdujc sip nad formularzem

Prbba upuszczenia lub wklejenia danych (tzn. utytkownik zwolnil klawisz myszy)

Klikniqcic myszpw czasie. kiedy wskxhik myszy majduje siq nad formularzem

Dwukrome kliknipcie m y s q w czasic. kiedy wskninik myszy znajdujc sic nad formularzem

Dnaktywacja forrnularza UserForm

Blqd spowodowany pncz kontrolkp - brak motliwoki zwrkenia informacji o btdzie do prograrnu wywotu j~cgo

tqdanie wqdwietlenia formularza UserForrn

WciSnipcie klawisza

WciSniqcie klawisza (kod ANSI)

Zwolnimie klawisza

Zrniana mzmiaru formularza UserFor~

WciSnipcie klawisza m y s p

Przemicszczcnie wskafnika rnyszy

Zrvolnienic klawiua myszy

&hie za rnkn i~ ia formularra UserFon

RmveControl Usunipcic kontrolki z formularza UserFon w fmie wykonywania prograrnu

Resize Zrniana rozmiaru formulana UserForm

Scroll Prtewijanie fonnularza UserFon

Terminate Usuni~cie h 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 i cs t ion .

W odr6inienlu od innych zdarzeh om6wionych w tym rozdziale, wymienione zdanenia spf On definiuje slq w ogblnym module VBA (nie w module Mary).

Page 551: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

560 Czqse V Zaawansowane techniki progromowonia

Zdarzenie OnTirne

Zdarzenie OnTime wyst~puje o 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 poni tsq 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:

i35$2* Metoda OnTim ma dwa dodatkowe argumenty. Szi5zeg&owe informacje na ten temat 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 ~ i A l infomaeJani o bietqcej padzinie

Page 552: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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". , Fa l se

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. te 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 On Key

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. Act i va te

End Sub

Sub psUp-Sub( l Ch Ermr Resw Next PctiveCell.Offset(-1. O).Actlvate

End Sub

Page 553: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 klawis y:

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 metoe OnKey motna wykorzystd, aby pnypisac! klawlsz do rnakra, w celu wykonanla taklego zadania leple] zastosowaf okno dialogowe Opcje maka. Wiecej infonnacjl na ten temat mtna znaletC w rozdziale 9.

Page 554: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat 20.

Intera kcje 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~ki niej 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 She1 1 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

Page 555: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

564 CzeE 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 aplikacji Tablica mak6w z ~oziomu Excela

7- -

" a.n- - i E a ow- - - u- -

Ufytkownicy Excela 2W2 tub wersjl pr5fnleJszych nle 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 wygemwanie b ldu . Z tego powodu . w powytszej W c j i wykonystano instrukcje On Error, kt&a wySwietla kornunikat. je9li nie mote malei t pliku wykonywalnego lub jd 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 b asynchronicznv. Jekl i za wywda- niern k c j i She1 1 w proccdurze mijdujcs'ip ddatkowe ktrukcje, b&q one wykonywane r6wnolegle z uruchornionyrn programem. J e t e l i 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~ego o h infoimacyjne w chwili zakoticzenia dziabnia aplikacji mchomionej za pomocqfunkcji Shel 1 .

Page 556: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 s As Long. - ByVal bInherltHandle As Long. - ByVal ctwPrccessld As Long) As Long

Oeclare Function GetExttCodeProcess L ib '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 Str ing

ACCESS TYPE - &ti400 STILL-~TIVE - 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 mtna uruchuitit progrwu ' L Program. vbCritlca1. 'Blad' Ex i t Sub

End If

Do ' Petla wek iwan la na Z a k O h c ~ ~ i e procesu Sprawdrenle stanu pracesu GetExl tCodeProcess hProc. 1Exi tCode Zenolenle na przetwarzanle zdarzefi DoEvents

Loop Uhtle 1ExitCode - STILL-ACTIVE Zakoliczono wykonpanle zadanla. wykrlet lenle 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 e pryjmie o k n ~ l & ~ wartoit. W6wczas p a ~akohnysiq i wykonywanie kodu VBA zostanie wmowione.

Obydwa pnedstawiom pawyFe] prqkrsdy q dos@pne na plycle CDROM cklqczonej do ksi@l.

Page 557: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 ib "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 Str ing. - 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 ( ) D im FileNanre As St r ing F i l e N m - "c:\face.gifm Call ShellExecute(0l. vbNullString. FlleName. -

vbNullString. vbNullStrlng. vbNomlFocus) End Sub

Kolejny p rykhd dziala podobnie - otwiera w domyflnej przeglqdarce strone WWW odnalezionq na podstawie podanego adresu URL:

Sub apenURL( 1 D i m URL As Str lna URL - "http://&.mlcrosoft .cm' Call ShellExecute(O&, ybNullString. M.

vbNul1String. vbml i s t r i ng . v b k m l ~ & u s ) End Sub

Technikq tq moha 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 Str ing Wdr - "mailto:bgates~tcrosoft.un'

. Call She l lkcute(O&. vbNul1String. Addr. - ~ u l l S t r i n g . vbNullString, vbr lornalF~~us)

End Sub

Page 558: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziot20. e lntemkcie z innvrni a~likociorni 567

Uaktywnianie aplikacji z poziomu Excela UQcie hnkcji She1 1 Execute 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- t i v a t e w celu 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

& F i l e - 'Calc.exe' On Error Resune Next AppActivate "Kalkulator" I f Err 0 0 Then

Err - 0 CalcTaskID - Shell(AppFi1e. 1) I f Err 0 0 Then MsgBox 'Nie mtna uruchornit kallulatora.'

End I f End Sub

ggg Ten pryklad Jest dostepny na p)ycle CDROM dolqczonej do k s l q i k l .

UaMywnlanie aplikacji pakietu Microsoff Office

J e l i aplihcja naleg, do pakiehl Ofice, do jej uaktywnienia moms u2yC metody Ac- t i vatef l i c r o s o f t A p ~ obiektu Appl icat ion. 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.

Page 559: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 PomW 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 Ermr Resune Next Task10 - She!l(Arg) I f Err 0 0 Then

M s m x ( 'Nie rnotna uruchmiC apl ikacj i .") 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 ks lek i majduje s& skomszyt wy5wietlajqcy 13 apletdw Panelu sterowania. WylP@ tej aplikacjl zaprezentowano na rysunku 20.3.

Page 560: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 te t 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 a VBA w celu korzystania z obiek- t6w innych aplikacji. W pnykhdach poshtp sip Wordem, ale poj~cia te 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 dos tp do obidabw. Dla pmgramist6w taka technika mykle 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.

Page 561: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 wipn ie . Wiqmie 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 informa j e o obiektadr, do ktdrych zdefinio wano odwohnia

Page 562: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 twomia obiektu na l ee 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 wiwnie rnotna jednak zastosowat tylko wtdy, gdy obiekt jest zapisany w osobnym pliku biblioteki typu lub obiektu. Dodatkowo u ~ k o w n i c y korzystajqcy 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 o wiwnia motna jedynie skorzystat z neczywistych wartogci.

1 wreszcie wczesne wiwnie umotliwia wykonystanie przeglqdarki obiektbw edytora Visual Bmic oraz opcji automatyemego wySwietlania listy skhdowych ulatwiajqcej dostq do wlaSciwoSci i rnemd. Mechanizmy te sq niedost~pnc w 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.Appl lcatlon")

W pnypadku zainstalowania wielu wersji Worda m o h a uhvorq-6 obiekt dla okreilonej wersji. Na pnykiad pn i f i za inshukcja utworzy obiekt Worda 2003:

Set WordApp - Createabject( "Uord.App1 ication. 11')

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 qtak ie same: Word.App1 iCa t iGq . Nie jest to jednak o d w o h i e do tego samcgo elernentu. Deklaracja obiektu jako As Word .Awl icatl Jn lub jako As New Word.Ppp1 ication dotyczy obiektu Aopl ic t i t l 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 obowip je dla gfiwnych komponent6w pakietu

Page 563: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

572 CzeSC V Zaawansowane techniki programwania

I

Funkcja Getobject a C~matsObjeat

Obie funkcje VBA GetCbject i CresteObject ~wracajq odwcbnle 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 - cat ion lub Excel .Application, zawsze twony nowy epzemplarz obiektu automatyzacji. Omacza to, tc zawsze zostanie wchomiona nowa kopia tej cq fc i aplikacji, kt6ra bierre udzial w automatyzacji. Nawet jdli egmp lan obiektu automatyzacji jut 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~I do 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

Page 564: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzial20. + lnterokcje z innymi aplikacjomi 573

ObleM Words utwomny w te] prowdune bedzle nlewldoczny. Aby zobac* oblekt a@ 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 d ten m o m tet zaprogramowat, wykonys tu 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( D i m 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 tq noutki zdefiniowane prrez utytkownika w Wordiie, a nast~pnie zapisze 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 autwtyzac j i Dim ~ordApp As 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

Page 565: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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

Aktualizacja i n f o m c j i o posteple zadanla na pasku stanu Appllcation.Status8ar - 'Przetwarzanle rekordu ' & 1

Przyplsanle bletqcych danych do niennych Region - Oata.'Cells(l , l).Value SalesNun - Data.Cells(1. 2).Value Sa lesh t - Format(hta.Cells(1. 31.Value. "U.000")

Okreilenie nazwy p l l ku SaveAsName - ThlsWorkbook.Path h "\' & Region & ".doc"

Wslanle polecerl do Mrda 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

.Typeparagraph

.Font .Size - 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 ~ a r a g r a ~ h

.TypeText Text:-"Kwta:' & vbTab & - FomttSalesPmt. "#.#O z?")

End K i th . ActtveDocunerh.SaveAs F1leNae:-SaveAslame

End With Uext i

Zniszczenie obiektu [email protected]

Page 566: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

I I Rozdzial20. lnterokcje z innymi oplikocjomi 575

1 .

Set WardApp - Nothing

I + ~ d t h ~ r z e n l e paska stanu

Applica:ion.StatusBar - "" Msghx Records & " notatkl utwrzono I zaplsano u " & -

ihisWorkbook.Path End Sub

i I

Na rysunku 20.7 zaprezentowarm dokument utworzony za pomocqprucedury MakeMemcs.

I Rysunek 20.7. Ten dokument Worda zosttil uhvorzonyza pomocg procedury acela I

I I I

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.

Dntr 5 mnrca. 1004 Do Menedzer Region1 C k l Radek hfeq-k

Tworzenie powy2szego makra skhdab 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 th . . . 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~:

Page 567: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 make, 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 zapdzat 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 Appl icat~on tapornocqfunkcji 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 HakeExcel Chart ( 1 Dm XLSheet As Object D i m S t a r t V a l . PctChange D l m Wbmk As Strtng

' Zapytanie o dane wejiciowe S t a r t V a l - InputBox("Wartost poczqttowa?") PctChange - InputBox("Procentowa miana?") PctChange - 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 .Calcu la te

' Vstarienie naglhka strony blect1on.Font.Size - 14 Selection.Font.Bold - True

Page 568: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzial20. * Interakcje z innyrni aplikacjami 577

Selectton.TypeText " n l e ~ l ~ ~ y wzrost: ' d - Fomt(PctChange. "0.0%")

Selection .Typeparagraph Selection .Typeparagraph

' Skopiowanie danych z arkusza 1 wklejenie ich 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 wstawia je 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).

Page 569: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 SendEmai 1 ( 1 Wykorzystanie wczesnga wipanla - w g a odwtania do bibl ioteki miektbw

Outlooka D i m OutlookPpp As 0utlook.Agplicatlon D i m M I t m As Outlook.tiailItem Dim ce 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 .&PI Ication

' Przetwarzanie wierszy w pet11 For Each ce l l In Colunms('8') .Cel Is. ~cial@lls(xl~CellTypeConstants)

Page 570: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 W y C G S i "

Msg - Msg 8 Bonus & vbCrLf & vbCrL: 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

.To - EmailAddr

.Subject Subj

.Body - Hsg

.Send End Ui tb,

End If Next

End Sub

W tym pnykkdzie wykonystano wczesne wiqzanie, a zatem jest wymagane odwolanie do biblioteki obiektbw Outlmkrr. Zwrkmy uwagq, te wykotzysrano dwa obiekty: Out ? ooq

oraz Ma i 1 I tern. 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 ks ia i . Aby go uruchomid. tmeba r n k L lainstalowany program Microsoft Outlook.

W pcdrozdziatach .Wysylanle wiadomofci ernall z zalqcznikami z poziomu Excera" oraz .Zas tomds 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~cym uzyskanie 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~pudo danych, ktbrej nie nale2y myIic z DAO (ang. Datn Access Objects - obiekty dostqpu do danych).

Page 571: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net
Page 572: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

I Rozdziot 20. lnterakcje z innymi aplikocjarrd 581 i

- !

Src - "SELECT FROM Budtet WHERE Pozycja - 'Dziertawa' '

Src = Src & "and Oddzial - 'Pmeryka Pln" .Open Source:-Src. ActiveConnect i on :-Connection

Zapisanie nam p-57 For Col - 0 To Recordset .Flelds.Caunt - 1

Range("Al').Offset(O. Cal).Value - - Recordset .Flelds(Col) .Name

Next

Zap1 sanie zestawu rekordbu Range("A1") .Of fset( l . 0) .CopyFrwnRecordset Recordset

End With Set Recordset - Nothing Connection. Close Set Connection - Nothing

End Sub

Ten pnyklad wraz z bazq danych Accessa jest dostepny na plycle CDROM doiqczonej a do kslqtki. ' M

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~zyk VBA w celu auto- matyzacji tego typu zadah. Proccdura zaprezentowana ponidej wysyk aktywny skoro- szyt (jako zalqcznik) pod adres jankowa/[email protected]. Ternatem wiadomofci jest tekst M4 skoroszyt.

Sub Sen&rkbaak() ActiveWorkbook .SendMail '[email protected]". "Mj skoroszyt"

End Sub

Aby z &ego skoroszytu wysM elelmonicznq tylko jedm a r k - naleky skopiowad arkusz do nowego (tymczasowego) skoroszytu, przes+aC go 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 [email protected]". "ndj arkusz" Acttveliorkbmk .Close Fa1 se

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 skoroszytu jako &cmika e-mail wykonystywana jest instrukcja K i 11 w celu usunipcia pliku.

Page 573: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 pl ik .x ls" ActlveWortbook .Worksheets("Arkuszl") .Copy Act IveUorkbwk .SaveAs Filename ActlveWorkbook.Sendtiai1 '[email protected]". '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 d ~ Excela ~ e n d ~ e y s moim +sytat do aplikacjici&i znak6w. symulujqce dziatania utytkownika.

Chocia2 wydaje sip, t e rastosowanie metody SendKeys jest dobrym ronviqzaniern, latwo motna sie orzekonat. 55e wiate sie z tvm wiele ~roblern6w. Potencialna trudnost mote . . 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 pmylania 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 pn~pomina zaprezcntowany 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

Page 574: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat 20. lnterokcje z innymi oplikocjami 583

Dim Msg As String Dim HLink As Str ing 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 rm ia " 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 " X s " . True

End If Next

End Sub

N a rysunku 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 ~utlook Express

W p r o c e d w e SendGmi 1 zalotono, 2e Ou1look Express jest domySlnym k l ien tem pcm. Proosdura ~rzehKana w ~etli wiersze w arkuszu i twm wiadomdt (zaoisana w miennei . . . . Msg), D o oiwarcia okna Nowo windomoi6 prograrnu ~ u k m k Erpress ~ y k o ~ s t y w a n a jest 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) ?an( 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.

Page 575: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 na leg 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

Page 576: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 Analvsic ToolPnkl dosarctaia hnkcii 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 s i t 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 na l eado 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 WAS' w dalszej

Page 577: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

586 CzeiC V Zaawansowane techniki programowania

W Dodatki mokna instalowat i odinstalowywaC 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.

a A*. ,:*WU OomySlnle dodatkl maJq rozszerzenie .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. Dlatego jeSli w aplikacji u2ylidmy wiasnych m t w i p l i , przeksztakenie jcj na postat dodatku utrudni dostqp do kodu;

zapobieteniapomylkom. Jetcli utytkownik zaladuje aplikacjp jako dodatek. nie bqdq widocme jego arkuse. Dziqki temu istnieje mniejsm prawdopodobiedstwo wpmwadzenia w blqd pocqtkujqcych utytkownik6w. W odr6tnieniu od ukrytego skoroszytu XLS, 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 je i l i funkcjp zapisano jako dodatek, wystarczy go otworzyd. aby skorzystaf z instrukcji o proststej skhdni, w ktbrej nie trzeba wt odwojania do pliku:

ufatwienin utytkownikom dosteplc do wlafchvaici aplikncji. Po zidcntyfikowaniu pokdenia dodatku mtanie on urnieszczony w oknie dialogowvm Dodatki wraz - - 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~rmi systemuyrhpodda~ romykania. Podczas zamykania dodatku nie jest ew ie t lane okno dialogowe z pytaniern o zapisanie zmian.

Page 578: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziai 21. Tworzenie i wykorzystanie dodatkbw 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 zainstalowanym dodatkom i szablonorn. 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 idcie znaiduir sic wsrystkie nazwy manvch dodatk6w. Zamaczenie oola wvboru obok - - - . nanvy dodatku wskazuje, t e okriilony bodatek jest otwarty. ~ twieran ie i4zarnykanie 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 bgz ie ahywnyrn skoroszytem, nie motna go zamkng za pomocq polecenia Plik,Zamknij. Dodatek motna usunqC albo popner zamknigcie Excela i jego 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.

Page 579: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 aplikacj i 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 Projecr for Viewing i wprowadi haslo (dwukromie). Kliknij OK. Ten krok jcst wymagany tylko wtedy, kiedy chcesz zablokowaf mokliwosC przcglqdania mak lub modyfiowania okien UserForn przez innych ~tytkownik6w.

i 4. Ponownie u-ij Excel i wybim polecenie P l i ~ a C c i w d c i , kliknij zakladke

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

i opisowy tekst. i

Kilka d6w o bszpleczedstwie

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 m rnoina ztam&. Excel nie jest najlepszq platforme programowania dla tych programistdw, Mdrzy chcq rnle6 stuprocentowq pewnoS6. te nikt nie dostanie slg da ich kodu.

Page 580: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziot 21. + Tworzenie i wykorzystonie dodatkdw 589

5. Wybierz polecenie PIiWZopisz jako. W oknie dialogowym Zapisywanie jako na ronvijanej IiLie Zopk jnko &p wybicrz pozycjp Dodatekprogrcrmu Microsoft OBce Excel.

6. Kliknij Zapisz. Zostanie zapisana kopia skoroszytu (z rozszemiem .xla), a oryginalny skoroszyt XU 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 Microsoff OMce heel w oknie dialogowym Zapisywanie Jako 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 uqmywania 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, midzy 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 n-a 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.

Page 581: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 male 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 (m repnzentuje 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.

Page 582: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzial21. + Twonenie i wkorzvstonie 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 Ins ta i l ed na wartoSd -rue.

Dodatek motna zainstalowaC, zaznauajqc pole wyboru obok jego namy. Podobnie m o ~ a z b mkn* otwarty dodatek, anulujqc zamaczenie wySwietlanego pola wyboru. Aby dodaC dodatek do listy, nale j skorzystad z pnyclsku Pneglqdaj w celu odszukania piiku. CornySlnie w oknie dialogowym Dodatkl rnotna przeglqdat plikl nastepujqcych typ6w:

W X U - dodatek Wonony na podstawie pli ku XLS; XLL - samoddelny, skompilowany plik DLL

K l l k n l ~ i e przyclsku 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 kl ikni j zakladke Pratection. Zamacz pole wyhm 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 rok

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/Zapisz jako. 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 umiek i f w dowolnym katalogu DomyStnie Excel proponuje nast~pujacy katalog:

Page 583: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 Doda tki z zamaczonym nowym dodatkiem

3. Kliknij OK. aby zamkq 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 kIWC name 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.

*

Page 584: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 d zapisaniem 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 lh 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 I op(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 e ? Jetel 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.

Page 585: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

$ ( 594 CzefC V * Zaawansowane techniki progranwwania

Ten podrozdzial rozpoczyna sip od por6wnania pliku dodatku X U z odpowiadajvym mu plikiem Mdlowym MS. W dalstej aecf ombwip 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 S ma 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 A p p l 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 pon ika instrukcja wyiwietla lie* okicn aktywnego s k o m q t u :

Msgbx Act i~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

Page 586: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 CopyShee tFdd in ( 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:

Page 587: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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.

Do wykonania procedury zapisanej w dodatku rnotna wykorzynaf metodq Run obiektu A ~ p l icat ion:

Jeszcze inny spos6b polega na wykomystaniu polecenia Tools/References w edytotze Visual Basic w celu zdefiniowania odwotania do dodatku. Po wykonaniu tej czynnoici moha wywolywaf pmcedury dodatku w kodzie VBA bez podawania nazwy pliku. Nie meba nawet wykonystywad metody Run. Moha 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 Pr i va te . W takim ptzypadku ich n a m y nie wyiwietlajq sic w oknie dialogowym Wstrmimiefunkcji. Z tego powodu nale2y dektarowad jako prywatne te lunkcje, ktbre s;~wykorystywane wyhcmie 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 ce, 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 moha wykonysty- wat bez podawania nazwy skoroszytu. Aby na pnykkd 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 ~ . x l s , hzeba u2yC nastppujqcego zapisu:

. .

Page 588: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat 21. + Tworzenie i wykorrystanie dodatkdw 597

Podglqdanle m b e z p i s ~ g o doddku

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 l ik ie biblldek wyblerz pory~jq Loohup. 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+adrle zap.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)

Przy klady przetwarzania dodatk6w za pomocq kodu VBA

W tym podrozdziale zapmcntujp informacjc potncbnc do napisania pmedur VBA wykonujqcych dzialania na dodatkach.

Page 589: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

598 Czge V + Zaowamowane techniki progamowania

Kolekcja Addlns i I

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 ta jest pnechowywana w nastppujqcej lokalizacji:

HKEY-CURRENTNTWSERISofime\MiwmoJ\~cell I . ObcelMdd-in Manager

Do przegl%dania tcgo 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 Microsoft LQddltu

Nowy obiekt AddIn motna dodad do kolekcji AddIns ~ c m i e lub za pomocq kodu VBA. 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

Jehl i dodatek wprowadzany do kolekcji majduje sip na wymiennym noSniku danych (np, dyskietce lub &ie CDROM), m e t e Add motna tab% wykor~ystd do 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 l ld m wWLE Trw.

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.

Page 590: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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

Wla~ciwo~ci obiektu Addln

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 fc ieka 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:

Page 591: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 dos t~p do elementu kolekcji uzyskuje sip popraz jej wlafciwoSt Name. Ko- lekcja AddIns jest pod tym wzgledem nieco inna. w tym celu wykorzystuje wldciwoSt Ti t le . W ponizszym przykladzie pokazmo sposdb Wwia len ia nazwy pliku dla do- datku Anulysis ToolPak (tm. analys32.xlC) na podstawie w ~ i w v o S c i T 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 K Installed

W M i w o J t Installed ma wart&& True, jeel i w okl lonyrn momencie dodatek jest zainstalowany - tm. zaznaczony w oknie dialogowym Dodutki. Ustawienie w!dciwoSci Ins ta l ?ed na wartoe True powoduje otwarcie dodatku Ustawienie jej na wartoif Fa1 se 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. Installed - True

E*.d 41b

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 wcdn ie j , ustawienie wlaSciwoSci Instal led na wartoSC T r ~ e nie przpiesie tadnego efektu. Aby usunqC dodatek (odinstalowaf go), wystarczy ustawit whSciwoSC Ins ta l led na wartosf Fa 1 se.

Wl i dodatek otwarto za pornocq polecenia PNk/OW&, nie jest on umawany L~ za atwarty W nMfacle jego wtabiwo* Inrf al led ma wart056 Fa1 re. r;:-

Page 592: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 Count Ins ta l lMddInsO O l m Count As Integer Dim Item As Addln Dim Msg As St r ing Count - 0 For Each Item I n AddIns

[ f [ten. I ns ta l led Then Count - Count + I Next I t e n nsg - 'Dodatkbr: " d AddIns.Count & vbCr l f Usg - Usg & "Zatnstalmanych: " h Count UsgBox Hsg

End Sub

Nmpna pmcedura przehvam w pptli wszystkie dodatki w kolekcji AddIns i odinsta- lowuje te, Mre zostaly wczdniej zainstalowane. Pmcedura nie uwzglpdnia dodatk6w otwartych ta pomoq pleccnia PliklOrwdrr.

Sub Untns ta l lA l l ( I Otm b u n t As Integer Dim Item As Pddin Count - 0 For Each Item I n AddIns

I f 1t~em.Instal led Then Item. Ins ta l led - 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+aSdwoSC tylko 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@pujqcego po+ 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& pl ih 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 EKoelu jest 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.

Page 593: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

602 Czg l t V + Zaawansowane techniki progarnowania

Zastoswanie metody Close dla zalnstalowanego dodatku powoduje usunlqcle go I pamlpci. ale nie u R M a *faSciwcQcl instal 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. Pon iBy kod wyfwietla kornunikat po zainstalowaniu dodatku:

Prtvate Sub Yorkbmk-AddinInstail[) M s g h x 'Dodatek " & ThisUorkbook.Name & -

- zalnstalowano." End Sub

Nie w ino 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 kahleJ operacji otwierania dodatku, naleiy wykorzystaf procedure Workbook-Open.

Optymalizacja wydajnoici dodatkriw Jest octywiste, te d@eniem prograrnisty pawinno by4 zapcwnienic jak najszybszego i jak 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 tb j ch wyko&tanie pozwoli zoptymalizowaC kod pod mglpdem szybkoki dziabia,

Podcm zapisyvania danych do arkusza I& wykonywania innych dziatafr. ktdre powodujqniane wySwietlanych informacji, n a l w ustawiat wEafciwoSC Application. Screenupdating na wartoft False.

m Zawsze nalety deklarowd typ danych i jef l i 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 rn imq obiektowq za pomocq nastepujqccgo kodu:

Page 594: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

O i m S1 As Series Set 51 - 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 zapasoq 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 na l ee 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.

Page 595: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~sto uzyskany w ten spodb plik hdzie 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 %.

lnnq metodq pomlaJgcq zmnlejszyC romiar pliku jest ]ego zaplsanie w formacie 'a> 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, jetl i 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~puje pned zdarze- raiem Open.

Listing 21 .l. Sposdb zapewnienia prawldbwego zalnsf~lowania dodatku

D i m Instal:e4Properly As Boolezn

P r i v a t e Sub 'MorCbook-AddinInsts110 Ins ta l ledproperly - True

End Sub

P r i v a t e Sub LJortbook-Cpenc) D i m Msg As Str ing i f InstalledDtoperly Then ~ x i t Sub

Page 596: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 na leg 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 130 prawidlowo za pomocq p o l ~ e n i a Nan@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~pnie motna 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:

Page 597: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

606 CzgSe V Zaawansowane technikl programowanio !

Sub Checkversion( 1 I f 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

Page 598: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Tworzenie aplikacji

Page 599: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 ~pornmq jezyka VBA.

Wrat r wydaniern Excela 97 Microsoft zaprezentowat calkowicie nowy spos6b zamp dzania paskarni narzcdzi, Z technicmego punktu widzenia pas& narzqdzi jest obi-ektem CmndBar . 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 z jednym lub wieloma konmkami, kbre rnotaa kljkat. Niniejszy r0zdzia-I jest 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.

Dodmmk kontrolek do w h i i ~ ~ o ~ h p a ~ k d w narze&i. Do paska narzt$zi 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.

Page 600: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

r Twonenie ndwych park& rrarzeeki. Moms tworzyd dowalnq liczk pask6w narzqdzi, umieszczajqc na nich kontrolkl pochodzqce z wielu ir6dei..

Z m i ~ ~ r r pneznnczenia wbudowanych k~n~roIekpaska numqhj. Moha dtdqcnd maha do wbudowanych kontrolek

W Zmiund obrmu na konlrulkachpaskdw nwzydzi. Wraz z meelern dostarczany jest prosty, ale prydamy edytos przyciskdw umieszczanych na pas kac h narzqdzi. Obrazy na kontrolkach rnoZna r6wnieZ rnodyfikawad, stosujqc inne techniki.

Wymienione rnodyfikacje rnotna wykonac! ecmie lub za pornoq okna dialogowego Dostosawywanie. Aby je wySwietliC, nalcty wybrat polecenje WidoWPaski narzqdzl5 Dostosuj lub NunedridDmtosuj. Moha te2 kliknqd dowolnq kontrotkq prawyrn przy- ciskiem myszy i wybrad polecenie Dosrasuj. Pas ki nartdzi moha tek dostosowywaC za pomocq kodu VBA. -

Nle nalety abawlaC sle eksperymentawanla z paskami nan~dzi. Jeieli parnieszarny kontrolkl na paskach wbudowenych, z +atwaSclq adtwonyrny )e do pastaci domySlnej. Wystarczy wySwietlkl okno dialogowe DostosowywBnie. Yiknd a k t ~ d k e Paskj 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 mzpowszcchniaC je z aplikacjmi (wiecej infamacj i 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 sy stemit Windows XP, pli k XL? jest zapisany w nastqujqcej Iokalizacj i :

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.

Page 601: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 wtasn ych 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.

Czqstym p m d e r n awaril Excela podczas uruchamianla jest usrkodzony plik XLB. . (s> 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- !6hy, 2e twonymy aplikacjq, w ktdrej w)lkorrystalih~y p a c k nanqdzi w k o w n i k a 1 do4qczylismy ga do skorosqtu aplikacji. Pasek narqdt i wyiwictli siq pny pienvsyrn otwarciu skorosqtu. W momencie zamykania Excela in fmac ja 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, $E twonenje 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 [za pornocq pracedur), ob- shgi zdanenia Work boo~SeforeC1 ose).

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.

Page 602: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 % c yC ten tryb za pomacq:

wybran ia polecen ja Widok/Pc~skr' t t a r ~ d z ~ D a s ~ o s ~ ,

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~dzi pawodujc wy- 3wietIenie mcnu podrecmtgo (rysunek 22. I ) . Po wykonaniu modyfikacj i 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 ws ystkie 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 w ~ oraz animacjt menu,

W zsktadce Owe okna dialogowego Qustosu~anIe znajduje 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 kalej nych 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 ~ ~ ~ ~ r m i e zakhdki faski 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 wymScic to pale wybom. Zrniany t~& widacme natychiast.

Page 603: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzial22. + Twonenie pask6w nanedb 61 3

Rysunek 22.1. W t@ie dostosowywania pas kBw 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 ~ c h ugwzlm naj-. cz~Sci j . Pasek zawiera mzwijane menu, a W e typowe dla pask6w nanm przyciski.

Page 604: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Zmiana ncrzwy paska nanqdzl uiytkownlka

Aby mienid namq pash n- uQtkownika, aal* qbtat go na liScEe PaFki nmqki , 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 moaa 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 domy4 tnej. 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%ytkowrr i ka, prtyc i sk Resemj jest nieaktywny .

Kied y Excel znajduje siq w trybie dostosawywania paskbw narqdri (tm. kied y 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 nawz i .

Aby dodat nowq k~ntrolke do pska narzedzi, mleq skorzystat z zakladki Pofecerriu okna dialogawego Dosfoso~crnie , kt6q pokatano na rysunku 22.3.

Page 605: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzjat 22. + Twonenie ~askbw namedri 61 5

Polecenia podzielono na 17 kategorii. Wybranie kateg~rii powodujc 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~pnie nate2y 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: i konq .

Rysunek 22.4. Dostosowywanie pqclskes paska nanedri

Wybranfe polecenia ZmJM obrar pnycisku powoduje wyfwietlenie listy 42 obraz6w. 4 Jest to aledwie niewielki pdzbidr wszystkich dostepnych obrazdw, Mdre molna wykarrystaC na paskach narzedzi. Wve 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 m6ciC uwagq, aby uniknq: pmblern6w.

Aby zapisad pasek mzqdzi w skomqcie, naleq w y M plecFtnie Widok,PasRi nu~&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 Dofqczanie parkdw 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.

Page 606: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~cie wybm-anego paska narqdzi ze skorosq-tu.

.,z,"cI .<-

=hYT Do26 nieoczekiwanie w jezyku VBA nle ma sposobu dotaczania paskdw nar2edtl do skorossytu ani lch adlqetania. 0per;rcje te tneba wykcnywaC rqcznle.

<&)% Kopa paska nanedzt zapisanego w skar~srycle z 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 t Jq@ 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 pas kami 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 qkownika . Przyciski na tyr~l pasku 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 y dodatek. 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 wersj i w p l h XLS. W rtzultac it kl ikniecie przycisku spowodowaIo otwarcie pliku XLS, aby moma byh m c h r n i 6 makro. Tego pmblernu moaa 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".

Page 607: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 (wbmie 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 pasb 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~lskdw n 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 ws y 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.

Page 608: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

CzqSC Vl + Tworzenie oplikacji

Rysunek 22.6. Tq liste wszys tkich obiektdw CommandBar uhuorzono za pomocq k&u VBA

P#r& manqdzh Pas& nmqdzi Phmh nmqda Phf.$ amqdn Pnr* rrnmqjli.

' P a r a nmqdri Parh n o n e Pasd l m n - r @ g P l u k srrgr3.l Pmark nur ldn PISIC nrrqltd Prmh nmqda Pl l lk l v t p d t l Pmrnk mrqda Pal& n v r q d n Powk m q d a Pm~mlr n r r t d r ~ Parmk nmmdm P a d n m q d e ~ Pa~rl: n r r z t d e ~ P a ~ r k n w d r l P a n h nrwdtr

Sub ShaHCbmnandBarlrfanesO D l m Row As IntWef D i m cbar AS ZomnandBsr Cel ls.C?ear Raw - 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( R o w . 3) - "Henu pdmrne'

End Select Cells(Rm, 41 cbar.&llltIn Row - ROW + 1

Next char End Sub

Wykonujge &Iatania z paskarnl napdzl , rn~tna wQczy! rejestrator rnakr, aby pnekond stq, jaki kod VBA mstanle wygeneruwany. Wleksza3t crynnakt d~stosowywanla pgskbw 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~we I ;

Page 609: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Pasek nmqdzj poczqtkowo jest pusty (nie ma w nim kontrolek) i nie jest widocmy Cje- go wMciwo3d V f s i bl 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 - "Mj Pa sek IJ~rztdzi"

.Top - D

.Le f t - 0 V i s i b l e = 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 nawzi . W kolejnych instrukcjnch n a s t ~ u j e ustawimie 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 ~Worktmk nale j wpnedrib i . g m. wjwotaniern oblcktu Appl icat ion, na prrykhd:

Appl icatlon .CmandQrs .Add

W odwok?nlu nalefy ufyd' kwallfikatara, poniewal obiekt Th~sMrkWk zawiera kolekcje rmand8ars, 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 lob ieh Cmnd& r mafia adw~hk sic poprzez j e p wlaSciwoSci I r d e ~ lub Nam. Fa 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 ~ n y , Jeieli apfikacja ma dzlah€ s r62nymi wersjarnl Excela, rawsze naleiy k ~ q s b a d s wtaSciwu5ci Naw zarniast wlaSciwoSci Index.

Page 610: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 instrukcj i spwoduje usuniqcit paska nmqdzi Mcl J Pa - s e kNa 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 i , wystarczy zignomwat h$. Wykonanie poniazego kodu powodujc usuniqcie paska nacqdzi M O j P a ~ e t Marr@z+, je2eli taki pasck istnieje. JekeIi pasek nie istnieje, nie zastanie wygwietlony komunikat o bwtie,

an E ~ R W ae~unp M 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 a , kr6m o h d h , CZy wybrany pack n w d z i majduje sic w kolekcji tmndbrs. Zaprezentowana p o n h j kfunkcja przyj- muje jcden argument (n- obiektu ComndBar) i m c a wmde True, je2eli pasek narqdzi istnieje, Funkcja pmtwarw w ptt'li kolekcjq Cmnd8ars i konczy driaktnit po tnalezieniu paska narz~dzi o 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) - UCasetnl Then I

CmndBarExl sts - True E x i t Funct:m

End I f Nexteb - CannandSarExlsts - False

End Fun~tiion

Bull t In - tylko do odczyh~ Ma wartoSf True, jc%li obickt jet wbudowanym paskiem nwqdzi Excela,

Enabled - j-i ma wart&& Fa1 se, paslek natz@b!ijest ukryty 1 wy*ieta.sie na liikie dostqpnyc h p k 6 w narqdzi.

Name - n m a paska m q d r j . .

mo8arleft -- p ~ k n q d z i jest pqtwiierdzony do lewlej hwdzi okna;

Page 611: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

msokrRi gh t - pasck n-dzi jest przytwilerdzony do prawcj krawqdzi okna;

I. msoBarBottm - pasek n m ~ d z i jest pmytwierdtony do dolnej laawqdzi okna;

msMa rf l w ti ng - pas& narqdzi nie jest pnytwiedzony;

r msoSarPopup - pasek n q d z i ma postat menu podqcmega.

Protect ion - liczba mkmita okr&laj~a typ zabtzpiecania dla paska n m z i . MoZe m i d nastqpujqce wartof ci :

md3arNoPmectl on (domfllna) -- niezia@icctony kQ&~wnik mo2e docrolnie dostmowat pasek n-i do wlasnych pomcb;

1 ms&a rNoCustmi ze - nit moaa dostclsowaC paska narzqdzi;

moBarNoResi re -- nic moaa mienid roaniaru paslra naqdzi;

msakrNoMove - nie moms przernicszcta6 paska n q d r i ;

ms~BarNothangeV1s t b? e - utytkownik nic mo2e rnodylikmt s t a m wySwictkania paska naqdzi;

mo0a rNo0angeDock - pasek nanqdzi nic mote bye prtytwicrdzony w innyrn m iej xu;

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 fyt pytwidzony 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@fi kolekcjp CunwindBzn i miqhza limik w pypadku. pas& narrp. dzi rtpnzmtDwany przez mirnn$cbl jest paskiern n w d d , s j e p wWjwoSC aui 1 t :n ma wartoSC Fa1 se.

Fumqan Custcmfual bars() Dim cb As CcmandBar Dim Count As Integer b u n t - D

Page 612: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

For Each cb I n Comnand0ars I f sb.Type - msoBarTypeNorma1 Then

I f Not cb.Builtln Then bunt - Count + 1

End I f End I f

Next t b Customfool bars - Count

End Function

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 instrukcj i 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 prnocq jednego pole- cenia moha wpmwadrad dme rodzaje zabezpieczeh. Na prykhd p n i ~ z a instrukcja modyfikuje pasek narzqdti Mb j PasekNarzHr i w taki sposbb, aby nie rnoitna go byto do- stosowaC lub. przenieid: Set cb - CmandBars[ 'H6jPasekNarzedrlm) cb. Prgtect-ron - m s ~ B d f N o C ~ ~ t m i ze * msoBarNoMov~

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 e wySwietla 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 Aby wyCqcryC autamatycme wykrywanlc dla ohSlonega paska narzqdzi, wystatczy c !? ! 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 bmende wtwierania skomsytu, nastqpnic wykorzystuje zdarzenie 9 1 ectl anChange jdnegr, I: arhzy skororqtu w celu spsawdtenia, cry- aktywna korn6rka majduje sjq w dres ie ZzkresPaskaNarzdzi. Jekeli

Page 613: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 CmndBarBut tan 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 y na 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 namy 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 nastgpuj qca:

Private Sub Worksheet Selectlar~Change t ByVal Target As k e l .Ram) I f UnlontTaqet . ne.ftangel "ZakresPaska~ars~dz ia1 1 .Address = -

Me.Rangeln5akresPaskaMarz@z:l'1 .Pddress Then ComMndBars("Aut~Sensc" I .Visible - T m

El se CmndEars("htoSense* 1 ,Visible - Fa1 se

End I f 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 Fa1 se.

W akwoszycie zdefiniomno takte pmadwq Workbook-&foreCl ose, ib6rej wykonmie powoduje usunigcie panlia narqdzi Autoserne w mornencie mykania skomsmu. Technikq te moms bc~)rviScie wykorrystai do dostmwnja innych wlaSciwaSci auto- rnmcmego ykqwania pska narz-.

Page 614: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Nieladrry pr~gramifci lubiq ,$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 kacj i. I W przykladtie pokarsnym w tym podpunkcie zaprcmntowano s+b ukrycia wsryst- 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. mpisuj~ 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&i. Wykorrystanie arkusza do zapisania nanv pask6w naqdz 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 dpOl icat iwr .Scr~L$dat ing - False

' Ukrycrle wszystkleh wlckcmyeh pask6w ~ r ~ e d z i i raplsanie i@ razw TBNun - I) =or Each T3 I n CarmandBal.5

I f -.Type - f l s o B ~ r T ~ m l Then If TB-Vlsible Then

TBNm = f0Nm + 1 TB.Visible - False TBSWt . Cell sTTBNm. 13 - PB- Ham

End I f End If

Nextm A p p l I c a t l m . S c r ~ a t i ng = f me

End Sub

Sub RestomTool bats C 1 D im TSSheet As nbrksM Dim cell As Range

Page 615: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Set TBSheet - Sheets l 'tBSheet " 1 , Appllcatian.ScrmVpdating - False

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

Next cell Apoll cat 1 on. ScremUpda t i ng - True

End Sub

*-*,

;@$*a W niekthyh plnypadkach ukryeie widocmych pasltbu, nan@zl nle wystarcza. Na pnykhd 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 - o b ickt C m n d B a r CombcrBox,

w menu - obielct C m n d f l a f l o ~ u p .

PaniZsza procedura Test wyfwietla wartoid wMciwo9ci Ca~tim dta pitrwszego obiektu ComndBa~rContro'F mwarttgo w standardowym pasku n a ~ @ z j (o findeksic 3):

Sob T e s t 0 Msqbx C m n d S a r~ (3 I .Controls ('1 1 . Capti an

End Sub

Wykonanie tej p m d q spowoduje wy5wiet2cnie o h a informacyjnega pbkazmego na rysunh 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 ustawien ja opcj i Z ~ ~ r s z e p k 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 Capt ion. Wykonanje ponibzej praccdmy ponvala uqskak te same wyniki, co pupdnio:

Sub Test211 Msgbx (amaandBars(*Standard') .Control sC"Nbwym1 . C~ptfm -

End Sub

Page 616: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 l nlt wlska. Romiqzaniem problem" jest zastosowanie melody Fi ndControl w celu odszukanla kontrol kl 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 &Now jest to litem N). Jc2eli odwotujerny siq do paska I

narzqdzi za pofrednictwern wMcEwoSci Caption, nie musimy uwzglqdniad znaku &.

RF* Czasaml eblakty CaRml zawlerajq lnne oblekty Control. Na $mykhd plsrwsza kontralka 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 l Capt ions( 1 D i m Cbar as CormandBar Set CSar - ComnandBars( "StandardWJ Cells.Clear R a w - 1 For Each ctl In CEIar.Cantro1 s

CellsIRaw, 13 - ctl .Capttan Rm - Rcm + 1

Next ct l End Sub

Wynik dzialania pmedury ShowControl Ca ptians zapnzentdwana na rysunku 22.8.

Page 617: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzia? 22. + Twonenie pcrskbw narzqdzi 427

WySwietlanie wslystkich kontrolek na wszystkich paskach nunadd

Pmi- procdura pmtwam w pet1 i 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 ShmAl1 Tool 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 Cells.Clear row - 1 For Each Cbar I n C m a ~ E l a r s

I f Cbar.Type msoBarTypeNoma1 Then Cells(rcw. I ) CSar.Naw For Each c t l I n Cbar.Controfs

Cell f ( rm. 2) = ctl .Captian rOw row + 1

Next ctl End f f

Next Cbar ~ n d Sun

CzqSciawy wynik dziahnia pmcedury ShmA11 Tool barbntml s zapmentowano na ry- sunku 22.9.

Rysunek 22,P. Lista podpr'sdw wszptkich konftojek na wszystkich paskach nan@a

Page 618: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

W cclu dadania nowej kontrolki do o b i e b CmndBar mama wykonystad metode Add obielctu kolckcji Controls. Wykanmic instrukcji pokazanej poni2ej spwuduje dodanie nowej konaolki do paska narz~dzi o 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 insrmkcj i 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 pomocp wlaiciwobci &&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

Praeedura AQdWlttm twomy zmimnq chiektowq M n repreantujacq dudamq kontrolkq. i

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~cwania zrniennych abicktowych t& jak pokazana w poniBzym krsdzie:

I

Sub Md6uttmO Ui t h ZomnandSarsI*M6jPas&Hai=z~zlD~ .brCmls.Md -

(Type : ~msdontrol Button 1 .FaceId 300 .Or&tfan = "HojeHakro" .CaptScm * L L T ~ j es t tekst wskazhki .'

Znd With End Svb

Vsuwunle kontrolki z paska narzqdzl

Aby usunqt konholkp z obielau Cmrr lBar . nal* wykorzystad mctodp Delete obiektu CmndBa rCont ml . Wykonanie ponituej instmkcj i s~owoduje usunigie picnvszej ken-

1

trolki z paska nmgdzi M6j Pas&Harzedzi :

Page 619: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Konml ki pas k6w 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 Beg1 nGmup - jeAi ma ~ ~ 0 9 6 True, prrcd kontrollq wySwictla siq scpatator.

Bui 1 t In - tylko do odczytu. Ma wart096 Tme, jeteli kantralka jest 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 wa~oSt True, kontrblke mo-a klikad.

FaceID - Iiczba repmzentujqca ohm wy3wietlany obak tektu kontralki albo na przycisku, je2eli kontrolka jest przyciskiem paska nzllz*i.

On4ction - nazwa pmdury VBA, ktdra ma by6 wykonm po klikniqciu kantralki

1 State - 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 ,

Sty1 e - d e u j e s tym, czy konmlka jest wySwittlma z pipisern 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~fhx decyduje 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 mo0utton Icon A~ldCaption,

Punikj wyszc#g6Iniono ptawidiowc ustawjcnia wkiwc3Sci Style dla kmtmlki Cam- msnd5arButton:

rn msaButtonIcondMrapCapti on,

Page 620: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Dla kontrol ki ComrrandBa rCwnbo8ox wWciwyrn i ustawi eniam i sq msoComboLabe1 tub mso- CombNorma 1 .

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.

?22&* Tekst wySwietlany na kontrolce okre9fe sic za pomocq wfaSciwSei Cant i on, < ! ! , natomiast obraz - za pornocq wartaSci wlaSciwoSci FaceIO.

Zrnianrr obrazu przycisku parka nanqdri

W trybit dostosowywania pask6w narzqdzi klhiqcie d~wolnqp m 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

Page 621: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Dim New&rtton As CmandBasButton Dim SetNm AS CmndBarCornbaEox Dim 1 As Integer

' Usuniecic 1 stnie jacego paska n a r z ~ W FaceIds . jeLe1 i I stnieje On Error Rsume Next A p p l icatlcxl.ComnanCBars('FaceIdsm) .Delete OR Error GOTQ 0 ButtanGmp = 1

' tbdanie pustego paska narzflzl 5et NewToalbar - 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 - IType :~oCbn t ro l~u t ton . 10:-2450)

Next I

Obdanie mrwi j ane j 11 sty Set SetNum - NewToolbat.Contm1 s .AddlType:lnrsoControlD~cwmI For 1 - 1 To 10

~ t ~ . A d d I t m "2bj6r " 8 i Uext 1 With SetNwn

. L i stlndex - h~ttoffiroup

.Caption - " N m r zestarm prtycisk&" ,On&tion - "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 rozwl janej 1 l3cle

O i m i As Long - ButtwlGmp - ~ n d B a r i ~ " F a c c 1 d s " ~ . C o r i t r 0 1 ~ ~ ~ N u n e ~ zestawu

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 - " & IButtonGroup - I1 * 200 + i -0nAction - "EwtySub*

End With Next i

End Sub

Page 622: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 a siq %K mo- mencie, kiedy wskahik myszy majduje siq nad prqciskiem). Wybrsnie innej pozycji na romijanej Iiscic take powoduje uruchomienie p~lcedury NMuttons. Zbibr przyciskdw jest okre4lany za pornocq micnnej poziomu modulu ButtanGrauu.

z%= Ten pryklad Jest dostepny 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 whne. Do tego celu moaa 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, naleq 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.

W W u 2003 molna u- wi.ekszej I l d y kctllorbw na pr;tyciskach nfz w popmdnich 6 ' wersjach. G

I

Page 623: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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" 5 .Control s.Add~fype:~msohntmlButtonl VyRutton. Pasteface

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 miwe 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.1 3. Ten pwsk

$ W y ~ l r M JT n v q ' obrrh? Cnmrru&r (Tnrmlt hczby). M w i e tfa 7 ,

Sub MakeNmberFomtOi splayC 1 Dim Tt3ar As CarmartCBdr Dlm Newstn As CmandBarButtan

@ U s u n l ~ i e paska mrzedzl F o m t I lczby. jete15 i stnlcje 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 t prwr stu Set Hewetn ComMndBarsql 'Format 1 Iczbf"' ,CMTtml S, Add -

lType:-msKmtrol Button] KSth NewBtn

Page 624: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

.Captian - "'

. OnActl on - 'ChangeNwnFem t '

.Tool tfpText - "Kl i kn 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 UpdateTml bar kopiuje whSeiwoi6 NumberFormat miennej Acti veCel l do wla- SciwoSci Capti on prycisku:

Sub UpdateTwl bar( 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 (rysune k 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 ~ Cal l UpdateToolbar

End Sub

Tcchnika ta dzjah doSC dobrze, ale ma wade: jeeeli &ytkomik mieni format liczby za pomocq przycisku na pasku narz~dzi Fmtztawani~, podpis nje zmieni sic, gdyt zmiana fonnatu liczby w km6m nie generuje zdarzenia, kt6re rno-a Sledzit. >

Page 625: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Przypisywanie m a h uiytkownlka da wbudowanego przycisku

K a y wbudowany przycisk po waduj c wykonanie okre9lonej wewn~trmcj procedury. 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~ypisaE pusty hricuch nakdw do wIagciwofci DnAct i on:

CmandBars("Standardml ,Control s( "Sortu j rosnqco") .OnActlan - '" Wy konywanie dziala fi zwiqza nyc h 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( "kttu j rosnqco" 1, b ~ ~ u t c

Zastosawanie met od y Execute dla pnycisku na p a s h narzqdzi utytkown i ka powoduje unrchomienie z w i p e g o z njrn makra, kt&re zostafo 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 maCanE to1 EdS t - pole tekstowe,

a msmnt ral CarrboBox - pole kombi,

msoCont r 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 e j im

% WtaSclwoSE Type abiektu Control, ustawiana w rnomncle twmenia kontrolki, jest (-2 Qlko do odcrytu. M6wiqc in=@, po utwoneniu kontrolkl nle m o ~ a mienit 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 .

Page 626: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rysunak 2 2 1 5. Ten pasek nanedrf &era kontrolke, do ktbrej d d p o n o rnakro

UsHng 2.2.5. LWqcranle mnvi-amJ lk ty 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 O i m 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 s ta miesjqcy"

.Visible - True End With

Oadanie mrrrfjanej llsty Set hlewOO = GonmandBarsC'l'l sta miesiwyW> .Control s.Md -

[Type:lnrsoControlDropdtM) kSth N m

.Capt iwr = 'DataDO"

.Onktim - 'PasteMonthW

.Style ms&ttonAutamatic

. Hypelnienle listy mmmi m i e s i w For 4 - 1 To 32

.AddTtem FormatIDateSerlal(1. ? . 1). "mmmml Next 1 .Listfndex - 1

End W l th End Sub

Sub PasteMonthC} '

Ctnieszczeulc w y b r a m mlesSwa; w aktywnej kamdm (h Error Resme Next

Page 627: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

With CmndBars("L1sta mlesiecyml .Control s("DataDOw3 ActivKell ,Value = .kistI.tistlndex)

End With End Sub

W skomszycie dddatkowo wykorzy5tano p r o c d u ~ ~ b d u g i zcfaneh 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~cedura ustawia wla3ciwoSd L ~ s t Index mnvijanej Tisty na pasku narzgdzi.

Private Sub Worksheet Select ionChange(ByVa1 Target As Excel .Ran91 Set ActGell ?aGet . ~ a n ~ e ~ * A ! ' j 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

Page 628: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 kacj i, 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 tradyc yjny pasek menu okna om menu podvmc. hgmmi5ci majq niernal pelnq kontralq nad caw systemem menu, wlqcnie z menu podrpmymi, W l ~ y m rozdziale 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 @ k m4anie '- do pomocy, ktdm pomala uqskad swki dostep do wla&iw3cl psmkiwania systemu po-. Pole to rnatns tahvo ukr$ pny ujciu nastepujpej instrukcji VBR:

Page 629: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Modyfikowanie menu Excela przez viyfkownika

Typowym uwkownikom Exccla m j q standardowe mmu. Czytelni k6w tej ksi* tki prawdopodobnie nie moms jednak raliezyt do typowych utytkownikdw. Modyfikowa- nie menu uhtwlia wykonywanie niektdrych dzialah projektantorn or= uzytkownikorn tworzonyeh przez nic h aplikacji.

W cclu dwtosowania menu Excels do whnych potrreb moan usuwaC elmmty. dodawat je i zmieniat. Ponadta matna tymcmczasowo mtqpiC standardowy psek menu Excela paskiem nicstandardowym. Menu Excela moha modyfikowat na dwa sposoby: rqczn ie lu b za pornocq kodu V B A.

W rnomet~ic zatnykania Exctla zapisywane q wszel kie miany dokonane w systernie menu. Zmiany te pajawiajjq siq przy nasqpn ym 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.

PoJqcia miqzane z systemem menu Excela

Tenninologia datyczqca menu jest czarami nicco rnylqca re wzglqdu na istnienic wieh podobnych pje. Pon initcj wysnzegdlniono ling of~jdnych t m i n 6 w zwiyanych z menu w Excelu, kt6rych bf;dq u w a l w tym rozdziaFc,

Pasekpoleccti - cbiekt, ktdry dziah jak 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 rnzdziefajqca dwie pzycje menu. Scparato y wykoqstuje s& do gnrpowania pozycji mnu o podobnym pmznaczeniu.

Podmanu - menu drugicgo poziiomu. Na pvkM w menu &&jn najduje sip podmenu Wyczys'i.

Page 630: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 o bsmrv 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 reprezentujqcej stan wl;tczony (wylqczony) lub prawda ( fa ls t ) . Pozycja menu czasami wyiwietla pole wybm, kt6re Jest zanacmne lub nie. Pnykladern mote byt WidokrP asck 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 c siq w sazdziale 22.

r Kornbin~cj~ klowiszy skrdhr - kambinacja klawis y stanowiqca altmatywny s p d b wykonywnia polcceil menu. Kombinacja klawiszy skr6tu w-y$wieola si t po prawtj stronie pszycji menu. Na prz)lk%ad CtrI+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 uwawnika catkowieie za pommq zdefiniowanych p r x z pmjekmnta rnakr.

c a Usttnieele p k b w m u , m n u rub porycjl m u nie ma wplyrm na alternatywne 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 a 6 prlclsk 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 wpaga Zadnyeh wbudowanych menu Excela, jest utvvo- m i c ncrwcgo paska menu skkdajqcego sic ze zdefiniawarrych menu araz poqcji, Crt6m

~ wykonujq ~ d ~ n i o w m e prztz mas m h M d n a te2 ukryt staodadowy pasek menu Excela i go paskiern niestandardowyrn.

Page 631: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 mnu z n ~ m i e sic zmienib.

Pa& menu jest wtaSciwie nieco m o ~ k o w a n y m paskfem 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 rnodyfi k W menu, nalety wybrd polecenie Widokflaskl nan~d~flostosuf , Nalezy jedna k pamiqtat, te skcrroszyty Excela 5/95, wyposaione w menu dostosowane za pomocq stamgo edytora menu, w dalsryn? ciqgu dziala~q w Excelu 97 1 wersjach nowsmh. Jednak aby kvprowadziC Iakiekdwiek zmiany w tak zmo~kowanych menu, nalety uQ6 Excela 5/95. Je2eli planujemy wyk0ny~tyW8C stay skorosqt r nowszq m j q Excela, o wiele wygdni~ej usunqe modyfikacje (za prnocv Excefa 5/95).

I Nle ma bezpoSredniego sposobu pnyplsania makra VBA do nwvej porycji menu w menu Namo'rfa. W Erccelu 5/95 by+o to drieclnnie W e . W dalszej czq$ci ninieJsrega rozdziafu zapzentu 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 mnu. 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 : whme rnakrn do wbudowanych pozycji menu. Do innych moZljwoSci modyf~kowrsnia clcmtnt6w 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~ndControl elirninuja te ptoblemy lpatn podpunkt "Dodawania menu: sposdb 2").

.d

Pozostala cz@C raxkiab 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.

Page 632: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 O i m MenuItm As CbmandEarhtml Olm SubMenuI tern As ComnandhtCcnt ral r o w - I h Errat Resune Next For Each Henu In CmandBars (11 .Ccnt~ol s

Far Ezch MenuItem I n Henu,Ccntrols For Each SubHenuE tm 1fl Mcnul tm.Control5

Cells[rm. 11 - Fenu.Caption Cell s[rm. 23 = KenuItm,Caption tells[rm. 3) - SuiPenultm.Captlon M w a r m + 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 ~ p do nieistniejacego podmenu.

Cqkiowy wynik dzialania procedury L i rtMnuInfo pokazano na rypunku 23.1.

Rpunek 23.1. CrpSciowy wynik

.. batanfa ~ ~ w . .

Page 633: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Dodawanie nowego menu na pusku menu

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)

W tyrn padmzdzialc apiszmy sposdb dodawania nowego menu do arkusza za pomocq jqzyka VB A. Parek mentr arks kolkulacyjnego jest' p i t ~ r s q pozycjq w kolekcj i Corn- mandsan, a zatem muaa siq do niej odwohC na dwa spmaby:

I

rn wedlug nazwy (angielskiej! ! !I: ComnandSars l *Norksheet Menu &a re 1;

wySwietll namq picrwszego elementu kolekcji CommandBars:

HsgBax CcmandBa rs t 1 I . Name

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

Aby dodae now% konttolkq do kolekcji Controls w jezyh VBA, nale2y wykorzystad metode Add. N o w menu to kontroE ka rypu msoCont rol Popup. W erasie dadawania moha okreitid poizycjq kontrolki. Je~cti siq 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 pmmq 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+aSciwoSci Caption i OnActi on. r

Dodmanle menu: spos6b 1

Cclern niniejszcgo pnykIadu jest dodanie nowtgo menu Bur&# do Prrska nrmw urkwza I

kuZkuilucyjnego i ~micszczenie tego menu z lewej strony menu Pomm.

Sub MdN@lemCE O f m HeipImkx AS Integer D i m NeJ.)erw As ComnandSarPopup

Pobranle indeksu menu PMnoc t l e l p I e x - CamnandBars(l3 , C e n t m l s C ~ ~ " l .Idex

' Utwonerrle MU Set HMlertu - CnmandSars[l] .~nntml s.AddCType:1mscCmt~u1~~. -

kfo~:-HelpIndex.Temparary :- True)

' Wantepodplsu &&nu.Caption ="&gudtetw

End Sub

Page 634: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

*

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. I Tradycyjnie m n u Plik jest pierwsrq potycliq menu, a menu Pmoc ostatniq. r Tekst menu Jest wySMetlany jak n a m whsna - tm. zaezyna slq wlelkq Ilterq. H Menu nalwytszego pozIomu nfe gowodu1;g wykanywanla dziatati. MMqc inamj, Mde menu

rnusi sawieraC co najrnniej jednq porycjq. U PozycJe menu zamyezaj skIadaJq sl.9 z trzech lub mnlej s W . a Z k&dq powg menu 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 mmotliwSc1 pozyqe menu niewtadciwe w okref lunym kmtekScle powl~ny byC 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%je menu 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-tqpujq dwa 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 e p~zentuje listing 23.1. Wykorzystana w nim It'tet~dt Fl ndtont rol 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

' Odsttlkanie menu Pcmc Set MlpHenu! - ComMndBarstlS . Ff ~ m ' f I~d:*300101 I f f-4lpMenu Is Nothing Then

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 kmx Set t fWWu - C m n d B a r s ( 13. Control sSMCT~:~aCcrntm106pup, -

Before: 4e lpHenu .Irdex,Teqarary:-Trw)

Page 635: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

End If

"ante oplsu NewMenu . Capt I on - "&Budtet "

End Sub

pep Prmedura z Ilstlngu 231 twany bemfytecme! menu, ktdre nie zawiera kadnych L=, 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 nawsfego pziomu Excelra

PI*

E&ia

Widok

wsrm

Fmmctr

Nma&iu

Dane

wy be3

O h 0

Pomm

Usuwanie menu z paska menu

Do usuwzlnia menu s h t y metlsda Delete. Zaprezentom p o n b j p ~ k b d powduje 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

Page 636: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzlat 23. + Twonenie menu 647

Jak pamietamy, podpis menu Bu&et mml ustawiony za porn- nas@pujqcej instrukcj i:

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

00 menu. sposdb rnotna dodawatf poycje do nowe,

Ustfng 23.2. Dodawanie polecefi i podmenu da menu Budfet

Sub C ~ E t&nu 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 I Dodanze mnu na ~ M C U kolekcjt

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 I f

' PIEMU PDZYCJA MEW Set Mer\.ultm = M e n u .Cmtrols .AddtType:%crContro1 Button) With MwruZtem

,Caption - "bWprcxuadran I e d ~ n y t h . . " ,Faceld - 162 .0nktlon - "Hacrol"

End Wlth

' DRUC;A POTYCIA 'MFHLI Set MmuI tm - NeMmu .Control s .Add(Typ?:lrr6~Corrtr01 Button1 k i th HenuItm

.Caption = " M r o w a n i e rawr26w.. . '

. F a c ~ I d - 590 -43nktlan - 'MacroZ'

End M i t h

Page 637: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

' WECEA POZY WA M€W Set HenuItem - ~ u . C m t m l s . W d ( T y ~ : ~ o C o n t r o ~ P o p u p 3 With MenuEtem

.Caption *&Podglqd wykmsh"

. BeglnGrwp - True End W t h

' P f M Z A PdZl'WA PU34EMi.I kt Subnrenui tern - &nu1 tem.Cwlrtmls.Md~Ty~:~rns&ntrotButtanl Wa t h S u ~ n u i t m

.Caption - "&Odchylenf a miesi.eezneM

. Facetd - 420

.On Ac t ion - 'Hacsa3' End With

* lY?UGA WEYWA PUMMI Set Suhnuf 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 Submenui tem

.Caption - '8Ptxts~l~~~anle ad pacs&tku 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&ele CDROM dulqczonej do ksiqtkl.

Niektdrych cqtelnikdw pevvnle zastanauris, dlacrego w xaprezentowanyn pcnqcbj prrykfadde, w pnypadku gdy menu istnieje, nastqpujc Jego usunfpzie, 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~at nie tmba wznie u s w d menu pned ka2dyrn unlchomienim procedury. Jak mazna zauwa2yt1 twonenie 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.

Page 638: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 cyst0 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 Pmh menu a r h a kalkrrlacyjnego. Znacmic mecicj wystqpuje pomeba dadan ia pozycj i 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~wana kod VBA m~2liwiajqcy dodanie poyeji w menu Na- rzq&io. Kod z tistingu 23.3 dodaje posycje WycqdE wsz)stko oprrict(onnul w rnmu Nanqdria, Klikniecit tt j pnzycj i pawoduje wykonanic pmcdury Cl ~ r A l 1 8 u t F 0 ~ 1 as.

UsHng 23.3. Dadanle pazrcjJ do mcnu Nanpdzia &eC

Sub PddMuIteAtl I O i m Tml sHmu As CarmadBarPapup Dim M n u I tern As ComMndBarButtcm

' Usuniecle menu. jeil i Istnieje Cal l OeleteMenuftem

' Odsmkanie menu NarmzJa Set Toalsknu - CmandRarsI l l ~Fb~mtm1~1d:-3[bW71 I f TcmlsH~nu Is Nothing Then

MsgEiox "Hie mtna dod& psrycjl mu - wtyj klawirzy Ctrl+Shift+C.' E x i t Sub

fl sc Set HMermItm - tbal ~u.Cmtmls.AddtType:lnzsoCartrolRttonl Kl th N*nuItm

.Caption - Vykry3.C wsystko n p m f o m l "

.FaceId = 3a0

.Q&tlon - 'ClearAl 1 &EtFbrmrlarse

.BegtnGmp Trw End With

End I f End Sub

Na ry~Un)N 233 polca~ano memu Nar?&ia ~ ~ j q p e nmqpoqqit. Kcd nie dwohje s i ~ do menu hrrzrze&itr za prmnocq pdpisu - mcnu jest identyfikowane pnez wtdci- woSC I0 Wdm wynosi 30007).

Page 639: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Ryswnak 23.3. W menu Naaedzh dadans n w q poryleje

mu- - - - - --- - 2.1 me..

<-s3 Ten pnyktad jest dastepny na m l e CDRQM dolqczowj do ksl@ki,

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 uprdczf irmd z menu Narzebzia. W kodzie wykonystano metode Findcontrol w celu obsl.uzenia sytuacji, w kt6rej menu Narze&Sa ma irmy opis.

Sub Del eteMenuI ten( 1 e

On Error Resune Next Cmand&ars( 13. FindControl (fd:*3000'fl.

Controls( "Wy&crySt mrystko oprbcz fok l ' l .Delete End Sub

Obok niekthych pozycj i 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 Shortcut Text. Tncba pamimd, Ze ustaw imie wMciwo3ci ShoncutTe x t nie powodujc pnypisania klawisza skr6tu, a jedynie wybwictlenk cizgu znakdw w menu. Skonfigurowanie klawisza skrdtu wymW zdefiniowsnia dodatkowego kodu.

Page 640: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Podabnie jak kod z listingu 23.3, kod z listingu 23.4 tworzy w menu IV~rzedzio pozycje WycyjrL. wszysiko oprdd furmu!. Jtdnak zapremtowana poni-j pmedura umwia wla- SciwoSt ShortcutText na c i a mak6w Ctrl+Shi f 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

' Wszutanic menu NarzMzla Set -POI sknu - ConmandBarsCl) . Fi nKmt rol (Id:=30007 l If Tool sMenu Is Notping Then

HsgBox "Wie mzna dodaC pbzycjl mnu - u t y j klmiszy Ctr l+$? i f t+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 t r a l Ehtton) With K W n u I t e m

.Captlan - "UykzyiC wszystka oprdcr fomlM

.FaceId = 340

.ShortcutText = "Ctrl+Shi f t +Cg

.Cn4ctiw - *ClearAl18utFom~as" End Ui tn

End I f

' 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~zywrcjkilo standardowy pasek menu Excels, dba t& testujqc oho dialagowe htmmgwmk, 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 zamycwj 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 e . Aby zapewnid inny sposdb wykonania t q o kodu, zdefiniujemy klawisz s M t u pwdujqcy w-ykonanie procedury, k t h ~ r z y menu.

Page 641: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 ~WO$u. Pnyczynq 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 kom binacj q klawiszy Ctrl+ShijrA iJ, kr6rej wcigniqcie pawoduje odtwbrzcnie menu PUP 14. Wykonanit pani%zej jnstrukcji przypisuje pr6eedurq Crea teMenu da kombinacji klawis y 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 wyko~s ta t zdanenie Wokbook-@en. Ponitszy kd, zapisany w module kodu obieltar Thi sWorkb30k, p d u j e wykonanie pmdolry Creatblenu (k6rcj tu nie pokazmo):

Page 642: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzid 23. + f-ie menu 653

P r l vate Sub Mrkbaok-Opnt 1 Call Creatmu

End Sub

Aby t~sunq4 menu w rnomcncie zarnykania skoroszytu, nalety wykarzystat procedurq pdabnq do tcj, Mrq zaprez~entowano pani&j. Roccdura jest wykonywana przed za- rnknieciern skoroszytu. Jej dzialanie polega na wykonaniu procdury DeleteMenu Cb6rej tu nie pokazano).

Prir~te Sub 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 Eefo rK l ase. Zatem jdli utytkownik kliknie Amhj , skoroszyl pazomnie otwarty, ale menu utytkownika wczegniej zostalo usuni@c?

Jcdnym z mzwizpah ?em pmb!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:

Prl vate !&& bbrkbmk BeforeClasetCancel As Boolean) I f NOt *.Saved hen

?I59 = "Czy zaplsat many 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, nawujc wykonanie pm%h"y D e l e t ~ u i mrnkniqcie skormzytu. Je2eli jednak skomsqt nie mstal jeszcze zapisany, pcdm wyswietla alolo infmcyjnc idmtycmc jak to. Mre wytwietla Exoel. Je2eli uzytkownik kliknie T& skoroszyt 2;05~nie zapisany, 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 k usuwania menu.

Pezaktywacja lub ukrywanle menu

Kidy menu lub pozycja mmu q nierlrryvne, ich tekst riry5wietla sip mrym kolom, a klikni~ic nie 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.

Page 643: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Uakywnianie lub dezaktywacja menu i ~ z y c j i menu wbudb~8nych. jak u2yt- kownika jest mcsZIiwa xa porn- k d u VBA. Pdobnie rno2Ra napisak k4, kt6ry ukrywa menu lub Jego pozycje. KJuczem do sukcesu jest 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~deMenu wykonuje 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*~ .V Is lb le - True

End Sub

Sub HideMenu( l CmandSarsI1).Contmls~"Budtet"~.Vislble = False

End Sub

Aby deakty~owaC menu, nale2y ustawilS wlaSciwoScS Enabl ed zamiast wMciwdci V i s i bl e.

Ten ~ k k d jest 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 WidoWPmek farmu& wySwietla sic p l e wybru, kt&= jest zaznamM, jc2eli pasek fortnub jest widoczny, lub puste, jd l i 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 zdefif iomych 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

Page 644: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 Sta te kontrolki.

Roblm 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~cedura many 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 1 sttnleje Call klete%nuItem

' Mssukanle menu Widak Set V t M e n u - tomMnd8ars ( 2 :, . F i ndarrt rcl I t 0:=301C041 I f WiMenu Ir Mthinq Then

MsgBax 'Nie moina dad& porycjt menu. ' E x i t Sub

E l s e Set HewMmItem = U l M e n u .Control s ,P$dtT~:moContmlsUtton~ With NwPknuItem

.C?p?ion - "8Linie siatkti'

Page 645: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

.Onktian - 'TcgglcGr~dIines" End Ylth

End ff

* Konfiguracja pmedury obstugt zdarzed a01 f kac j i Set PgpOtl. j~t.AppE~et~cs - Appt icat lon

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 1 er sq nastqpujqce:

Private Sub &wEvents-Sheet&t 1 vateCByVal 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* tapmtawana 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 CheckGridli nes 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 siatktu1 If bctlwWIndor~.01splayGridlines Then

fG.State - msoBrrttonDarm Else

TG-Statt? - msa0uttanUp End If

End 5ub

Page 646: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 1 nes ( 1 If TypeNameCAct iveSheet) = "Worksheet' Then

ActiveW1ndow.Oi splayGr1dl ines = Not ActfveWindaw.Dl splayGridl1nes Ca 11 UleckGrldl 1 nes

End I f 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 i lo9ci4 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

Page 647: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Plniom wyznacza @o&nie o M l o n e j poycji rclatywnie do hiemhi i systernu menu. Poprawne wartogci to 1,2 i 3, Poziom 1 odpowiada menu, poziorn 2 pozycji menu, natomiast poziom 3 pozycj i 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 ~ e ponikej:

1. CW6rz przykladawy skomszyt zapisany na Wcie CD-ROM.

2. Skopiuj kod z m d u h M u 1 el do moduh w ~ i r n pmjekcie.

3. Wpro~8d6 prucedury zaprwentowane ponaj w module kodu o b i e h Thi sWorkbook:

Pr ivate !hb Mrkbmk-Open() Ca 1 1 CreateMerlu

End Sub

Prt vdte Sub Workbook-Befordlme~Cancel As Boblean) Call QeleteMenu

End Sub

Page 648: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

4. Wstaw nowy arkusz i nadaj mu nazwr; A r h z M e m . Najlepjej9 jeSli skopiujcsz arkusz ArkuszMem z przyktadowego pliku.

5. Dostosuj zawartoSt afkusza ArkwzMenu do zawartoSci twononego rn tnu.

<: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 o Excela 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 wbu dowan ego menu Excela Hasnyn

Sub HalceMmuBar( 1 Ol rn NMenuBar As Cannandhr D i m 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 HmtlenuBa r - CmndBars .Add (MentrSar :-True) With NedlmuSdt

.Name "VbjPasekMenu'

.Vtslble - True End Uith

Skopiawanle menu Pl l k s PaQa mnv arkusza 4alkulacyJnego CmndBarsC'Worksheet Menu Sa r") . FindCont m1 I( ID:-300021 .Copy -

Bar:-bmandBarsC "H6jPcs&MemW3

Dbdanie n m q o m u Set M e n u - WenuBar .Cmt rol s . Md [Type: .~rrsoContml Popup3 NMlenu. Captlm - "gPolcen~ a'

' Wanle p o w 1 do menu Set HwItem - W e n u . Cont re1 s .Add (Type; 1msoContr01 Eutton 1 Vith HmItem

.Captim - 'b0dtw6rz stand~sdawe menu"

.QnActian - 'Del eteNmuBarm End With

Page 649: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

.capEton - "&W'

.OnAction - '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~.detdura nie 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 b l 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%!e4 Zgadnie z tym, co napisafem w rozddals 22.. wfaklwu9C Trpe standardowego paska te 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~sm grmedura 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

Page 650: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 dziahia 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 1 ikie 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 s t I Row 1 For Each cbar In Cmnd6ars

I f cbar .Type - mm%rTypePn~up Then Zells(Row. I > - cbar.Ir?:ex Cells(Rw, 21 - cbar.Nm For Col - 1 TO c h r -Contr315 ,Count

Cells<Rou, to1 + 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 i tej proctdurrt moaa 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 p siq po kf ihiqiu prawym przyciskiem myszy zakhdki arkusza nosi n w q Ply,

. . :9: '2 Ra . W T ' W .&4 m*; Lpwlrha ... my a plr - . ff iergNqrkrnn W h n r W S ~ 11, u n~ u'- - Whml . -mW+ ~ - . . wq L U W ~ w... 12 j 15 DummM - Z k w z y t a . BDuxili.. LL¶l- army. 13 rGD. IHor * - - ... - - - - - -- - - ---. h p r &!r. .I- -- - L-1 [ e r r I A E u w l l r r * ~ r d ~ fPrtmrtmy b~ayw' -+- ~ ~ b 1 3 ) 1 ' ~ ~ * ~ - w t W j lfkdph bihW 'SJ a -. * . ~~ - - - - . w a r r k m - _ _&Wnh! m d q -,!"rFq tTb+Ibrm*- - W / D ~ tbsx M- i a . + wan% . - * _ ~ & r c : ~ ~ l h l l t * .-. ?74 9 D* --- .. - - - - *'@ . -.---- v-.~ < - ~BJ 51 S m m . W y b r r y Wmbl hTp ybr~w. abarn2*ddlM. '9_1_9p'* - - _- --Wr*r~ h h _ &Tfl r ~ k n * ~ . . - - --- - - o ' ! a w t m . - & Qm**-* - - X#J 5 3 F l o w d H H I -. W y ! l m m y b . W Wi*ktw, w q * t

W J b r n ~ w M W = r Y E4 C*.lrl m r M - L W t

23_1 S 6- b a Swrr w r bbtrl ~ T T P ~ m m . - - --- 2 4 ~ 5? F a n ~ *m WybmrL&mH LYycr*

ww-- - -- usd nt- bpasrz I- 5 SB Famd L q d EMy W y b q b b r w iJLCryj BZE- *Palal m r m 4wyE~Ty . A 53 FFmMJ1m 0 ~ r wfi w wj mlbq P a n a y m, 8 BORrPtT*mrlLkcu ffamwW.. . C W y k m m L K r l ( l ~ ~ U b d ~ ~ oWbarnz#m k- -. f i r - W f l W WJ %% ~ n y b-..

"+=v Wlq LIpqrlru.. Uc t* -. - - - . U l c 2 r d c m P l _

~ ~ a n n * & & i -ar,-prjb.a, --, D--L- - - - - , O P * ~ r l h r h . . _ _ * _

my--- --- - .

P A Ea ~~* wi. A - W H - - WpFi . _ - . _ m W - - - - - w?twt t IWT w)rp*i ... 69 k r o 5rm

- 31m F~~ &rsp- SLmm ~ Sbnku Wkt--y:loplirr$na LLrmt - - ' - us'* - . - - -

L l n m r r c ~ a H r * u\-cl 1 *lr

lRysunek 23.9. Usta ~ F u " c h menu 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.

Page 651: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Choci& do menu podrqcznego motna odwdyva6 sip za pornocq MalciwaSci Index. z e j 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 h Newltem

.Caption - 711~ezlwylacr tmi 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 MI on. 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 tyhh okna skor~zytu.

Page 652: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Sub AddItmToShortcut [ 3 Oim NewItm As Cmand&itContral Set NewItm = CmandSa rsF "Docmnt") .Contml s .Add( ID:4651 NewItem.Caption = "Ukryj okno'

End Sub

Wybnie 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

W puniboej pmcdune wyko~~ystano metodq Delete w celu usuniecia pozycji menu ddanej za pornma pmedury pokazanej w poprzednirn punkcit:

Sub RmveItenfrmShort~ut C 1 On E r r o r 4 e s m Next CamtandBars( "Cell " 3 .Control sC "W1~crlwyl~cz zawijanie rayrazb*) .kl cte

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 pozycj i Ukgy z d w h h menu podqcz- nych - jednego, ktlSre wySwiet la siq po klikniecju prawyrn pnyciskiem mys y nagbvka wiersza, o m drugiego, wySwietlantgo Qla mgldwka ko'lumny:

2ub R ~ i d e * l e m I t m I 1 CmnandBars( "blurm"1 .Controls1 'Ukryj" 3 .Delete GomnandBars{ "Row") ,Control sI " 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, wydwida 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 bmindf la rs t "Row') .Corrtml sCWUkryj'3. Enabled - False

End Sub

Dezoktywacja menu padrqcmych

M o m r6wnieZ dektjwuwat cafe mnu pdqme, blohjqc dost9 ~ k o e do pole- ceri dostepnych po klihiviu kom6rki p w y m pr7vciskiern mysq. Fnxedlrra Ili sabl &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.

Page 653: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Sub DisableCelt0 Cmmnd6anC'Cell') .IEnabled - False

End Sub

Sub O i sab? eAl1 ShortcuttMus( 3 O l m cb As Cmmndbr For Each cb In CmmandBars

I f cb.Typ - mso0arTypePopup Then cb.Enabl ed - Fa1 re Next cb

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 ;=@* OemMywacJa menu podrqemych jest tmda. 3eJ skutki nia sq cofane po zakoficzeniu sesji, Z tego powodu pned sarnknivlem Ejrcela tneba pamieat5 CI odtwoneniu menu podrfxxnych. Aby je odtwom. nslezy pmedurg pokaranq powyief modyfikowd w takl sposdb, aby ustawiata ~ ~ l w o ~ Snebled menu 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 [*Cc l l"> .~e t

End Sub

Twonenie nowych menu podrqcmych

Procedura z listingu 23.7 twory calkawicie nowe menu podwm o n m i e MoJpMe- mrPodqme. Skhda sic ono z 6 pozycj i, 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~ie komdrek. Dta m h d u p e d w ShowNwberFornat ma nastqpujqq tre96:

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 .Add[Type:-msoComtml Buttofl) Wfth myItem

.Caption = "&Fomt liczby ..."

Page 654: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rordziol23, + Twonenie menu 665

.OnAetIon - *ShPwFomtNunbern

.FaceId - 1554 E d With

' 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

. C a p t i a n = "8Obranowanie. , . "

.OnActlan - "ShawFormatBorderw

.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 l on - "W&rorce. . . "

.%Action - *ShawFomtPatterns'

.FaceId - 1550 End WCth

Oodantt! pozycjl n#mt Set nyItem - myBar.Gmtmls .MdlType:m~m1Buttbn~ With myItm

.Captian = 'Za8bewl~renJa.. , ' O n k t i o n = 'ShauFarmatPmtectlon' ,FaceId - 2654

End With 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 wkownjk

Privcte Sub Worksheet &f~reRiglltCl~ck[ByUal Target As Excel .Range, taneel As Boolean) I f !hi snt~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

Page 655: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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.

Na ptycle CD-ROM dotqczune] do ksiqtki msjduje siq pzyklad twonqcy menu 8@ p o d r ~ z n wySwiellane smiast standardowego menu pohecmego Cell.

Page 656: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 corn 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 pnec imgo 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 rqh pottzebne 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 potrzebne jest rozwiapnie pofrednie.

W tym rozdziale systerny pomocy podzielih na nieoficjalne i oficjalne. W niwfiqahych systemachpomogJ utywane 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 aplikacja jest zbtona tub prremacmna dla wielu &ytkownikbw.

Wuystkie pfzyklady zaprerentwane w tym rozdziale s$ dost?pne na plycie CDROM dolq~zone] do ksiuigiW.

Page 657: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 Orb

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 macmik in d l a tych k d r e k . dla ktbrych Zdefml~ano kcmentame : Appl Ecation .DisplayCmmtIndi cator - xlCamentIndtcator(Xl1y

Page 658: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 ih 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 G v t a - b l f m * 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@~aj$oe w$wletlantem p o r n cy. Tree tego modulu tale@ od rodzaju prezentowanego systernu pomw.

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

Page 659: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

lnnym sposobern wyhletlanla p o w Jest wykorzptanle 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 htwo motna opmcowtd system pomocy w y k o r y s t u j ~ y pola tekstowe. Wystarczy kliknqt przycisk Pole tekrrowe paska n@zi Rysowanie, wprowadzid tekn

- * - p&ocy i-odpowiednio sformatowat. ~ n y k l a d pola 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- wania i wiwietlania moaa zdefiniowak arzvcisk zwiaranv z makrern. kt& od~owiednio . . ustawia v k c i w o ~ t V i s ~ ble pola tekstowego. ~mykiad ;akiego rnakra zapre&ntowaoo ponifej. W tym przypadku pole tekstowe wysepuje pod namq HelpText.

Sub ToggleHel p 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~mocy w 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

Page 660: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzid 24. + Twonenie systern6w pornocy w aplikocjach 67 1

i mamy pmsty system pornocy. Na rysunku 242 pokazano p+ arkusz wykonysty- wany jako system pomocy. Zdefiniowalern w nim mkres zawierajqcy tekst pomocy, symulujqcy stronp z notatnika

Rytunek 242. Skonystenie z oddzielnego &SIB jest lam sposobem zdefiniowania systemu pomocy

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.

Pardl & .z.mnu

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 opimo w kolejnych podpunbch.

. -- . - - . *

.0:::.

....... ....

, . . . . . - .

, . ..

' ...... .

n.:# ..... ...... .-.....

... ..'.

...... .

. . . . . .

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.

.... .:..:...::.:-1:: .I-: .: -: : I - I .c

I n s r r u k c j e

bm.~ .4 rnmlv- ~ r l * u"o**.~ earn.+* . , . , . . , .

............................... *# lo.nr.. ......................................

....... ............ ob.lS;:virrk?~"rr+.a.. ,

. . . . . . w k o m r n r Cln*lrr.**.nd-tplmn?nM*. va~ornun rrrn(.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. . . n m rm.$rl

oln'n.-l*- . . . . . . . . . . . . . . . . . . . . P~*+I-*. W I ~ , *h)t m..q +m.w-r;Uy i

. . . sdd" ** l o + o m i . : . ~ r * k . - ~ ~ laxnd prrp*. O ~ Y M Y . . . . . . . . . . . . . . . . . . . . . .

, , - . . .. .....-.... . . . . .................... v:.$?+---.!*+-Y!b.

..*KT 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 r b h a ~ p m q q c ~ ncsd,n*q W d 2 d m t n k W r b w & m C3. . , , . . .

*ncrki.irinrri .: , ..

-

Page 661: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rysunek 24.3. W/kniecie ptzy3skbw nawigacdnych (w postad kontrolki SpinSut tmJ powoduje zmiane tekstu wySwietlanego za pornocq etyMet

Klikniqcie przycisku powoduje wkonanie ponitszcj procedury. Jej dziahie 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 & " (tmt pmmy ' L HelpTopic & ' z ' I - SpinButtonl.Max & ")"

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 z arimza o nazwie ArRusrPomoc w momencie inicjalizacji o h a UserForm. Listing 24.1 prezentuje procedurt; UserFom- I n l t l a l i ze 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

Page 662: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 b x t r Nttn Label1

.Top - 0

.Caption - t x t

.Width - 160

.AutoSize - True End Y i th With Frarnel

.Scm1 \Height - Label 1 .Height

.krol lTop - 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 ~ c wybrac 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 - hrnntTop lc - 1 Pe.Caption - HelpFonrtaption I' & CurrentTwlc d ' z ' h ToptcCourrt 6 '1"

k i th LabelText .Captlcn - HelpSheet .Cells(QmentTwlc. 2) .AutoSlze - False .Width - 212 .Autosize - True

Erd Ui t h Uith Frarnel

.krnllHeQht - LabelText.HergM + 5

Page 663: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

674 CzefC VI + Twmenie aplikacji 1

.ScrollTop - 1 End U.i t h

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 wyMet iania 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 .

Page 664: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzial24. Twazenie system6w p o m y w aplikacjach 675

Public tcnst APPME As St r ing - "Slonie t o my' Dim Topic As Integer 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 Off ice. - W celu zainstalowanla t e j funkcj i uruchan program instalacyjny - pakietu Off ice. ", vDCritica1. APPNPM

E x i t Sub End If On Error GoTo 0 T w l c - 1 With Assistant.NewBallmn

.Heading - " T a t p m y " 8 Topic d ': " d vbCrLf 8 HelpSheet.Cells(Topic. 1)

.Text - Help5heet .Cel ls(Top~c. 2)

.8utton - msoButtmSetNextClose

.€!dl lmnType - msoBa1 1 wnTypeButtons

.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 ~ y w postaci chmurki) i wczp je picnvsy temat pornocy z arkusza ArkrrszPomoc w celu ustawienia jego wlaSciwoSci Heading oraz Text. Dziqki ustawieniu wlaSciwb$ci Button ewie t l ane sq pnyciski Nar tqny i Zamknij, podobnie jak w pnypadku kreator6w. Nastqpnie pro- cedura ustawia w+&ciwoSt Mode aa wartoid msoModeModeless. dzieki camu 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

Page 665: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Case msa8allaarf)utton8ack I f Twlc 0 1 Then Topic - Toptc - 1

Case moBal 1aonButtonntxt I f Topic 0 NunTopTcs Then Topic - Tapic + 1

Case moBal 1aanEuttmClose 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 - Help~t .@lls[Top~c. 2) .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 1 btn. Na podstawie bietacego tematu procedura okreila take, jaki pnycisk nalety wySwietli6.

Szueg64om infonnacje na tcmat programowania asystenta pakietu Wce motna 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 to jest?. 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 Co 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.

Page 666: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 tmat 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~h operacji. 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~a twonenie 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, komlk 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 prnglpdarki Inrema Erplorer, Lnformacje pojawiajq sic w oknie, a spis trek4 indeks oraz narzpdzia wyszukiwania w wydzielonym panclu. Dodatkowo tekst

Page 667: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 ZOO3 systemy 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.

Aby pornat sposdb hmxrsnla pllkbw MML. wySwletl dowolny tema w systemie a> 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 pow iw 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

Dabrq pmkQ~kq jest pmechowywanit plikbw pomocy aplikacji w lym samym katalogu, I

co aplikacja. Ponitsza instdcja powoduje powiqzanie aplikacji z systemem pomocy 1 Mojef.nkcje.chm. Rzyjqto mlokenie, t e pljk pomocy majdujt siq w tym samym kata- i

logu, co skomszyt f

ThisUorltbcak .Wmject .HelpFil e - ThtsUorkbook.Path L '\Mojefunkcjr.chnm

Page 668: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~tawianiefunkcji jest zamaczona funkcja utytkownika,

kiedy utytkownik wcilnie klawia Ff w momencie, gdy jest wygwietlane okno UserFon W tym pnypadku wyiwidli sis temat pomocy dotycza~y aktywnej 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~cie klawisza F1 w momencie, kiedy funkcja jest zaznaczona w oknie dialogowym Wstaruianie funkcji, 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~es zamacz d o 1 zawierajqcy funkcjq.

6. Zamacz funkcje w oknie M e m k 05

7. Kliknij fimkcj~ prawym pnyciskiem myszy i z menu p o d m e g o wybim pozycjq Propertiu. WySwietIi siq okno dialogowe Member Options, jak pokazano

Rymnek 24.9. Det7nlowanle /dent)nkatora kontekstv pornocy dla funky/ uiytkomika w oknie dialogtwp 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):

Page 669: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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'. -

Dexr ip 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 umtl iwia 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 pomh i~ i a nanr?, pl iku 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 $WOkW.Pa th 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 vtHsgEbffle1 pE!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:

Page 670: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziol24. + Tworzenie systern6w pomocy w aplikocjach 68 1

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 & " \PmxAp .ch" 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' ContextID - 3000 x - tnput!!ox(Prmpt:-Msg. Cefault:¶efaultVal.HelpFSle:-HFlle. C o n t e x t : W e x t I D )

End Sub

Rysunek 24.11. Okno lnpltBox z pnyciskiem hmoc

' W pqpdku funkcji InpltEbx wySwistIaJiqai~ sngidskie w@e apisu pnyciebw --. t f ~ m

Page 671: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat 25.

Tworzenie apli kacji wygodnyc~h dla uzytkownika

W tyrn rozdziale spr6buJiq podsumowat 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 morwacj 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~i po?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 mr@racj i W e k sklada sip z p i ~ i u okien 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

Page 672: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

684 CzqK Vl + Tworzenie aplikacji

Rysunek 25.1. Harmonogram amortpacji wySwietla szuegdty potyclki zaciqgnietej na 30 let

pnycisku Zakok 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.

Kreator enwtymyf p o m k jest dostppny na plydo CDROM do+$czonsi do k s W i cm I posYCi 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-

Page 673: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~ujqcych kompoaent6w:

FormMain - okno UserForm s-ce jako gi6wny interfejs wkownika;

FonrHelp - okno UserForm. w kt6rym wy4wietla siq pomoc online;

He1 pSheet - 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

Page 674: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Jak dziala Kreator amortyzacji poiycze k?

Kreatw amor@zacji po2pek 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 poqcj 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 wkdciwol i Value konhalki W l t t Page na 0, d z i ~ k i cmmu zawsze wyfwietla siqpicrwsza strona, niezaknie od wartoki tej wMciwolci w mornencie wykonywania ostatniej operacji zapisu skoroszytu;

dodaje pozycje do trach p61 kombi wyk~ortystywanych w h u l m u ;

wywohje procedw GetOefaul ts, kt6m. pobiera ostatnio utywane ustawienia z rejeshu Windows (wipcej informacji m jdu je sip w podpunkcie Japispanie i odtwamnie 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 kW, kt&% pobim dane wejfciowe od utytkownika i tworzy arkusz. Mnak po r o m u twDtzenia aplik@i racz- mySleC o sposobach jej usprawnlanla. W efekcie napotkalem kllka 5lepyd1 uliczek. 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.

Page 675: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 adpwidn io uah ty 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 arkustlu pmameby patyczki (cena zakupu, wymkaM piwszej wplaty, kwota powzki, okres kredytawania i oprocmtowanie). Wymaga to zastosowania kiLku insdtukcji If, pniewat pienvsiqwphte moaa wprowadzif jako procent ceny zakupu lub jako kwotc w zlotych.

Page 676: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

niepopmqch daqch ua@wniana jest konbdka zawierajqca blqd

rn Zapisuje do arkusza nagl6wki kolumn.

Pod nagtbwkami kolumn zapisywany jest pierwsty wimz zawierajqcy formu&. Wimz ten rbini sic od pozostlltych. poniewa zapisme w nirn formuiy odnoszq siq do danych w sckcji parametrbw iotyczki. ~ozostate fonnuly 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 ~rostsza od 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 Sddo jest 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 ~ q hieratehip. 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 Wcia hash.

Na koniec wacedura SaveDefaul t s misuie bi&acc wartoki kontrolek fonnulam 8 "

UserForm do rejestru Windows. Wartdci te stanqsip nowymi ustawieniami domySlnymi, kiedy u2ytkownik two@ hannooopm arnortyzacji nastcpnym razem (wi~cej informacji majduje sig w podpunkcie ,,Zapisywanie i odtwarzanie ustawieri domyllnych").

W Formularm FonrMain zawsze wySwietlaj4 sic ostatnie umienia , Wre proprn 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

Page 677: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 pmtwam 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~esCrze nie 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~, "DonySlne'. ctl .Hame. ctl.Value)

End I f Next ctl

End Sub

Na rysunku 25.9 pokazano, jak wyglqdaja zapisam w-i 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.

Page 678: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Sub SaveOefaultsO Zapisanie bietacych ustmriefi do rejestru D im c t l AS Control O i m CtrlType As String

For Each ctl I n k .CMl t ro ls CtrlType - Typebm(ct1) If CtrlType - "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+oby btqd.

W instmkcjach Savesetting i Getsetting zawsze w y k o r y s ~ a n y jest 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 motna jedynie 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. Jeteli jednak lad chce d o k W c zrozumiet dzialanie tej aplikacji, polecam skorzystanie z debugera i pmanalizowanie kodu luok po h k u .

Na pnybdz ie Kredora umtr?wucji potv-k zademonstrowth kilka ciekawych pojpt i techmi kt6.z ~owinny zaintmsowat5 programist6w Excela Sq to:

Page 679: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 pomocq jpyka VBA.

8 pisanie i kopiowanie f m u l za pornom jpzyka 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 eplhcj 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 po d i e ? Upewnij sig, cq 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~alogowych popnez kliknwle prryc~sku OK.

N Ciy zab2)+el, te nle sq otwaite im 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 ~ ~ 9 , fe shomszytlest 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 ~ f aprikacje 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 s t ~ WaWw/e 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 l e dokumentscjl a s t o etirnlnuje m n l a uiytkown1k6w botyczqce obslugl aplikaa (M, prrynajmniq zmniejsza Ilczbq Wtafi). Czy M&ie pneadizowakJ a p f i w ? lstnieje prawdopodabfefistwo, ie apllkacja nie bqdzle QCI razu dbskonah. PoSwl& t m h p crasu na jej papiawlanie.

Page 680: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

CzeS6 VII

Page 681: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 terminzgorlnoit jest 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 moaa 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 rnog 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~aycych bezpieczdshva, 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.

Page 682: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

W przypadku pakietu w e e 2003 problmy zgodno9ci .q jeszcn 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- slum jqzyka XML, a t a b e obstus zaqdzania prawami wlasnoki do inforrnacji (IRM - ang. Information Righi3 Management), Jeili w i ~ c w 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 durycrqfe formatuplikdw - 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-e pojawity 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~iemomi Windows 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.

Czytelnky, Mdny spadzlewali slq maleft w tyn mzdziak pelnq llstb prcbkrn&, bqdq I

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 h w m j l Excela aaz porn& ptencjalne prcblemy zgod&l. jest biua wiedzy online Microsoft. Jej adres to htrp://search.support. micmsohcom. I

Page 683: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Obslugiwane formaty plik6w Excela W Excelu mama zapisad skomsyty w formacie wczdniejszych wersji. Dodatkowo sko- rosyt moha zapisak w formacie podw6jjnym. w kthyrn w jednym p l ih 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~rnoP Excel 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, Wry moha 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);

urkm 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 zawik jge 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 Exda

Wersjp Excela m&a uryskaC za pomocq ~~ Version obleldu ~ l r c a t i m . Zwrkona 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 a funkcja 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) - 11

End Fumtim -

Page 684: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

698 Cz@e V11 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~ci wpmwadzonych 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~lcie pliki Excela sq zgodne porniedy obydwoma platfarmami. Obshgiwane wia- Jciwolci nie sqjednak idcntycme, a zgodno~ makr VBA jest daleka ad ideah.

Do oW1enia platfwmy, na jakiej dtida aplikacja, mom 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): . . - - . * - - - --

Page 685: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

! Rozdziot 26.4 Problerny zgodnofci 699

Function WindmOS( As Boolean I f ~1icat lon .Dperat ingSystem l i k e "%int" Then

W l ndonsOS - True El se

WindonsOS - False End I f

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 1 oznacza 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 &pl icatim. International (xlCantryCobe) -

Kod 1 odpawiada wersji Exccla dla j q q b ongielski WA). Pozostale kody jwk6w ze- stawioao w tabeli 262.

Page 686: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

700 CzqK MI+ lnne zagadnienla

Tobela 269. Kadyjqzykdw dla Exceta -

Jwk K + I w h

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

Page 687: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

R o z M 26. + Problerny zgodnokl 70 1

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, a jesaze w innych rok/miesiqd&i&.

Jeali tworrymy aplikacjt, k t h j W q *at jedynie ludzie z namj 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 mipdzyndwymi 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@eiskicgo ha 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 jpzykh 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

Page 688: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~ciwofci lokalnych

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. Wyszczeg6lniono je 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 [email protected] btqoria funkji

Fomul a FomlaLaa 1 Formula

FonarlaRlCl FonnulaRIClLocal Formula w noCacji WlKl

RefersToRlCl RefersToRlClLocal Odwolanic z wykonystanicm notacji WlKl

Page 689: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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~dzynarodowych naleq 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 l i ira 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 nawiasu klanmrwego ((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

Page 690: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

704 Cz- VII lnne mgadnienio

Tabda 26.4. Stale dl8 w l a S c M lntemstfonoI (clgg delsry)

xl Dateseparator

xlTimeSewrator

xlYeatCode

xl Wnthtode

XI 0ayCode

xlHwrCGde

xlMinuteCode

xlSecondCode

xlCurre.eMuCooe

xlGenera1 FotmatNane

xlCurrencyDig1 t s

xlCurrWICyWegative

xlNonqlrrencyDIgl t s

xlMonthNmthars

Altanatywny wperator elementdw tablic do wykorystania w pnypadku, gdy bic* separator tablic jest taki sam jak symbol dziesiply

separator daty (-

Separator godziny (:)

Symbol r o b w formatach liabowych Cy)

Symbol micsipca (m)

Symbol dnia (d)

Symbol gbdziny (h)

Symbol minuty (m)

Symbol sehndy (s)

Symbol waluty

Nazwa standardowego rormatu limb

Liczba cyfr ddaipmych wykarzrstywana w formatach walutowych

W-fC rcpmmtujqca format waluty dla ujemnych kwot

Liczba cyfr dzikipmych wykomyslywana w formatach innych n i t rvalutowe

Zawsze n m a ~ ay maki w cclu zachormnia zgodnoki wstecz W systemic Windows sMty nazw rnicsi~y mom mi& dowolnq dlugoJC.

Zawsze zwrsca bry 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 Fa1 se. 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 umitszczany za kwotp

True, j e ~ e l i w 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 n e w i d w ncrs

True, wli w liczbach omamjqqch numny m i a i m jest wyfwietlane w i d w e zcm

Page 691: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 fmac ie 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 S t a r t D a t e As Date Stamate - D a t e S e r ~ a l ( ~ 3 . 4. 15) Range('AlB) - S t a r t O a t e

End Sub

Aby zastosowat dodatkowc fonnatowanie dla daty, mo2na napisad kod, kt6ry wykonuje te dziatania po wprowadzcniu danych w kom6rce. W Exalu jest dost~pnych k i b for- mat6w daty i czasu, a t a b kilka fomat6w liczb. Opisano je w systemie pomocy.

Page 692: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net
Page 693: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

708 Czqe VII Inno zogadnienia

Tabela 27.1. Polecanla o m 1 na plikadr w j 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 o w m a lub atrybutu pliku

FfleCopy Kopiuje plik

FileOateTlne Zwca datq i godzinp ostetniej modytikacji pliku

F l l d m Zwrnm roan& pliku w bajtach

GetAttr Zwtaca wartoy rqmmtujqcq atybut pliku

Kill Uwwa plik

WDi r T W nowY W l o g

Name Zmimir n v pliku lub katalogu

M t r Umrm plny kamlog

SeUttr Zmienia snybut pliku

~ ~ ~ ' z p o z m t a l e j cz&i podrordziaiu dernonstrrjq zastosowanie ni&rych plmn operacji na plikach.

Funkcja VBA sprawdzajqca, cry istnieje plik

P o n b fiurkcja mraca wartoSC True, jebli oMlony plik istnieje, lub Fa1 se - 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 Fa1 se.

Fumtlon Fi leExlr ts(fnae) As Boolean FllcExlsts - Dlrtfname) "" 4

End Functim

Argumentem funkcji F i leExi s ts jest p e h ki- dostqu do pliku wraz z jego n w Funkcjp mo2na wykony~tat w 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 i s tn ie je Dn Error Resm Next . . PathExists - tGetAttr(pnm1 And vb0irectoryJ - ~ i r e c t o f y

M Function

Page 694: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat 27. + Operocje no plikach wykonywone 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 Lis tF i leso 01 rectory - 'c:\wlndows\PulpIt\' r - 1

' Wstawienie naglW6u Cel1s.ClearContents Cel ls(r . 11 - 'Nazwa pliku' Cel ls(r , 2) - "Rozmlar' Cel ls(r . 3) - "Datalgodzlna' Range('Al:Cl").Fant.Bold - True

' Pobranfe p iemrego pltku f - Di r(Di rectosry. 7) DoUhile f " "

r - r + l Cells(r. 1) - f Cellstr, 2) - FlleLen(0irectory L f) Cells(r. 3) - FileOateTim(0irectory & f ) Pobranie nastepnego pl lku f - D l r

LOOP End Sub

Przykladowy wynik dzialania proceduey L l s t F l les pokazano na rysunku 27.1.

- 1 H.W, ,Yh" - R ~ l l l r D l l u + l l c * r -

1 M M ~ E . ~ ~ I ~ 1 . sssosm.aru n n I .~. .~.t ma S.W. rn 459 w a r n ran. A . n t @ amuu mrn rr:n

y % a r - w m w ~ a w m 1 5 . 3 4 oroz.mr3m. -kr*~f.rt*

7 E n t r u 2 7 ~ p ~ b m ~ ~ l ) W 1 ~ m,OTaaMltl &am n (n wmrn01:10 .

9 - h h - s o c z b k . -. 9 5 OBmm H:35 A&nwr*15 w m w-mmmls : 51s ormm~a..- n"'YkYsn'+ 7-- &m, s c n k ~ ~ e . ,-m.wm.arwcea. 13 .L**k. W v l 5 a M Y p8 ( ~ m m 1ua T!:*M..,q , ,., W1 OMIm 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' 3-p,dlrmsmd,mihl 1 . ~ A¶ lcK&mz:I a3i~ ,. -- & = .= -- - . . . . . - . ; . . i\mptf - [*I.-._-A !if

W procKivne d-ie -no funkcjp Oi r. Za pierwszym r a m funkcja po- biera p iewsq 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 majduJe sl? bevdtlej raawansarmna wersja

Pimvszym argumentan fankcji Di r mode by6 takte rpecymcsja pliWw w paptmsci wmrca " Aby na przykl;ad uyskat I i q plik6w Excela, nal- wyk- insbukcjs

Page 695: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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. Sxag6lowe informacje doty- c q c e argument6w funkcji D i r motna znalekd w systemie pomocy.

czq$g ce, Zapezentowena InstNkcja nie jest najlepszym spasobern Wwietlenia llsty plikh. Aby urnoillwid utytkownlkowl wybranie pliku z Ilsty, leplej zastosow~d metode GetOpenFi 1 enam, 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~zystak do 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 Fi lesearch

P q k h d y z pozostatej c q k i tego punldu demonstrujqzastosowenie obiektu Fi 1 esearh.

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 1 es Wzie miah wartoit 1.

-Function FlleExlstsZ(path. fname) As Boolean ' Wlth bpplIcation.F~leSearch

.N&arch

.Fi leNarae - fnane

.LookIn - path

.Execute Fl leExists2 - .FaundFlles.Count - 1

End With End Function

Page 696: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzid 27. + Operacje no plikach wykonywone za pornocq kodu VBA 71 1

9 Obiektu Filesearch nle motna wykanystd w celu sprawdzenia, czy istnieje katalog. i'm

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 - Fa1 se

.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.

Page 697: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

712 CrqSc5 Vtl* lnne zogodnisni

Dokumcntacjt obiektu Fi 1eSystenObjcct moctna i r r r a l d w intcmccie pod adresem hnp:// mrdn microsofl. com/scn'pting.

Zastorowanie obtektu FileSystemObject do sprawdzenia, czy plik istnieje

Ponits~a funkcja pobiera jeden argument (kietkp wwz z nsmq 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 - Fl leSys .F l leEx ls ts ( fn~ )

End Function

Funkcja twony nowy obiekt F i l e S y s t ~ j e c t o nanvie Fi leSys, a . m p n i e spr~wdLa wMciwo3t F j 1 eExi s ts tego obiektu.

Na m e CDROM m e ] do ksl- rnajduje slg w, ktdry demonst~b vsrystkle t r ly 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~zenia nowego 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 Or1 ves i zapisuje wartaSci r6tnych da9ciwdci do 8rku%ta Na rysunkn 272 zapnzentowano wyniki d d m i a pmcedury w systernie zawierajqcp naped dyskietek, dwa twardc dyski oraz nap~d CD-ROM. Wyhktlane dane obejmujq liter$ napptfu, in- fomcjq o got0waSc.i W i a , typ umykenia, nazwq wolurniny cakowity rowiar oraz iloSC dostcpnego miejsca

Page 698: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzid 27. * Operacje na piikach wykonywone za pomocq kodu VBA 713

! LMIng 27.2. wyimrrystanle obieMu ffleSysternO@eet w 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 Resm Next For E x h Drv In FileSys.Drives

R d w - & + 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 pzekraczaJqcej dwa glgabajty. Taki problem nie wystepuje w systemadh Windows NT, Windcws 2000 lub nowszych wersjach.

Ponitrza proaxha penehuje katalog Moje adokrmm@ (I zawarte w nim podkatalogi), 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'

Page 699: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 ni t zwykk opcje irnportowania i eksportowania plik6w dostqpne w Excelu. Wyr62nia sip trry metody dostepu do pliku:

dostep sehenqvjny to met& najbanfziej popularna, pozwalajqca odcwwak 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 mdko 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 teJ Wqtce ZastosowanO tradycyjne pobie 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 eks twh. ObieM FlleSy~tenObjeCt nalety do bibl~oteki Wrndows Sclpt~ng Most 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] '.

Page 700: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat 27. Operocje na plikach wykonywane za pomocq kodu VBA 71 5

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), Wrf te (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 k Read (blokada odczytu), ~ b c k Write (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 ron ia r bufora (dla plik6w o doep ie mkwencyjnym).

P d u r a odczytywania pliku tekstowego w jqzyku VBA sklada sic z nastwujqcych h k 6 w :

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- ,

Page 701: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

71 6 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 1 e 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 o domu 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.

Kika instrukcj'i jw VBA sluty do odczytywania i zapisyania danych do plikdw. 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 h oddzielonych pnecinhmi; . Line I lrput #- odczytuje cab wiast danych, ogranicmy mkanii powotu lmctki i (lub) wysuwu wiersza.

Page 702: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziat 27. Operacje no plikoch wykonywane za pomocq kodu VBA 71 7

- Wlsdchvodci lmportamnla 1 d u p o r t m b pllk6w Ckstowych w Excslu

Excel obstuguje t?q typy plikr5w tekstowych: CSV(ang. CommaSepafaM Valve - wartoScl mzdzlelane prreclnkarni) - kolumny danych q rozdzielane pnecinkaml, a katdy wlersz ko15czy sie znalkiem powr~tu karstkl (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 e sckmncyjnym 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 #.

M rrt #-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 @caqmzy ad 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

Page 703: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

71 8 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 Str lng 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.Co1 urns .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 I f IsNuneric(0ata) Then Cata - Val (Data) If IsEmpty(ExpRng.Cells(r. c)) Then Data - " If c - NumCols Then

Write $1. Data: Else

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 pncksz taha 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.

Page 704: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 d odczytuje katdy m k i przetw- wiersze danych w celu wyszukania przecinkbw oddzielajqcych kolumny i usuniccia cudzyslo~6w przed 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 lmme - "c: \w lnd~s \Pu lp i t l t ex t f i le. txtU Open Filenarne For Input 4 #l I f Err 0 0 Then

Msmx 'Hie maletiono pliku: ' L Filename, vb t r i t i ca l . 'BUD" Exit Sub

End I f r - D c - 0 t x t - '" Applicatlon.kreenupdating - False Do Unti l 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 [email protected](r, c) - t x t

Page 705: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

720 CrgfC VII + lnne zagadnienia i I

txt - " ElseIf Char 0 Chr(34) Then ' mak d t n y od cudfysla~~

txt - txt 6 Char End If

kxt 1 c - 0 r - r + 1

Lm 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 przykted jest 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

Page 706: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdtiot 27. Operacje n a plikach wykonywane za pornocq kodu VBA 72 1

Fittrowanie pllku tekdowego

W pnykhdzie zaprezentowanym w tym punkcie zademonstruje spos6b jednoczesnego przetwarzania dw6ch plik6w tekstowych. Procedura F i 1 t e r F i 1 e odczytuje dane z pliku tekstowego ( inrfe.&r~) i kopiuje wienze zawierajqce okreilony ciqg mak6w do drugiego pliku tekstowego (output.trt).

Sub Fi l terF i l e t Open " i n f i l e . t x tW 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 poaeba 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~kowanq procedwy IwrtRange, kt6rq zaprenntowalern we wcze~niejszej czeici 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 ImportLongLi nes ( ) ' 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

Utworzeni e nwgo skomszytu zaui era jqcego 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

Page 707: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

' Ddlczytanie pienszego wiersra i wstawienle n~wych arkuszy. je9li ~ e 5 t taka potrzeba

CurrLine - CurrLine + 1 Ll~ne Inp l t # l , Data For t - 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 -

T x t - Txt 8 Mid{Data. I. 1)

Koniec wienza? If i = Len(Data1 Then

ImpRange.Offset(r. c) - Txt c - c + l Txt - '"

End If End If

Next 1

' Ddczytante pozostalych danydr c - 0 CurrLine - 1 Set ImpRange - ActtveMrkbook.Sheetstl1 .RangetmAl'1 r m r + l

Do Unti l EOF(11 Set ImpRange - Act tveHork~.Sheets( l l . R m t "All) CurrLine - Curdine + 1 Line Input bl. Oata Application.StatusBar - 'Przetwananie wiersra " h CurrLine For 1 - 1 To Len(Data1

Char - Md(0ata. 1. 1) Zbyt duio koltnm? I f c o O P n d c M 2 5 6 - D M

c - 0 Set InpRange - I m n g e . Parent .#ext. Range('A17

End I f

Konfec pola I f Char - '.' Then

InvRam.Mfset(r. c l - TxU c - C + 1

Page 708: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

! Rozdzial27. Operacje no plikach wykonywone za pamocq kodu VBA 723

Txt - '" Else

Painiecie 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 c - c + 1 Txt - ., "

End If End I f

Next i c - 0 Set ImCRarqe = Acti vellorkbock .Sheet s ( 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 I

Ten przyklad jest dos twy na plycie CDROM dolqezonej do ksiqtki wraz z pllkiem - teksto*ym zawierajqcyn 100 uierszy, kafdy po 6W 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 skomplikowanego kodu WML. Kiedy za parnoq procedury ExpartToHTML wyeksportowa~cm zakres 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 komhk.

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 .

Page 709: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Sub ExportToHTm( 1 Dim ws As Uorkshcct Dln F i l e n m As Variant Dim mOpenTag As String, TDCloseTag As St r ty 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 ku F1 lename - Appl iation.GetSaveAsFllenwR( -

InitlalFi1eLme:-"vrange.htrn". - f i leFi1ter : - 'HX Files(*.hun). *.htn")

If Filename - False Then E x i t Sub

Otwarcle p l lku tekstowego Open Filename For Output As #I

' Zapisanle m m t k a <TABLE> Print #l. '<TMLE 9CRDER-1 CELLPAWING-3'

Pnetwarzanie tcmbrdc r pet1 1 For r - 1 To Rng.Raws.Count

Print #I. '<TR>' For c - 1 To 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 e p l l ku Close #l

Infomcja d la utyttowrlka MsgBox Rng.Count 6 " Lambrek wyeksportwno do p l i ku ' & Filmanre 1 '.'

End Sub

Ten pryktad jest d 0 ~ ~ na phcie CD-ROM Wqcmmj .] d.W.

Page 710: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzial27.6 Operacje no plikach wykonywane 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

Page 711: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 mzniki 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~mcbuj la

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.

Page 712: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzid 27. + Operocje no plikoeh wykonywone za pomocq kodu VBA 727

Pmoedtq ExpM.tToXK pmtuje 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 Str ing. TDClaseTag As Str ing 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 ku Filename - ~ltcation.GetSavekFlle~me( -

1nitialFileFlame:-*mjzakres.ml". f i l e f i l t e r : - " X M Fl les(*.ml I. *.GI*)

If F i l e ~ m e - False Then Ex 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 in t #I. 'Qml vers im" " l . 0 " enccding-"windm- 1250"' standalone-""yes"'?>" P r in t F1. "Qls taPraccmi tw m1ns:xsi-"Mtp://mw.w3.orq/20011 - XHLSchena-instance">'

Przetuarzanie k d r e l : w pet11 For r - 2 To Rng.Rows.(bunt

Pr in t tl. 'cPraca*ll t>" For c - 1 To Rng.Cclums.Eount

P r i n t d.1. '<' 1 ling.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. hg.Cel ls { r . c1.Text: End If P r i n t #I. "<I" 1 Rng.CelTs(l, cl 1 ">"

Next c Pr in t #l. '+'Practknik>'

Next r

Zankniecie tabelr Print $1. *< IL I~MPraca*r i kw'

M n I @ e pliku Close #1

' MySwietlenic k m i t a t u ~ s g h Rng.Rm.tount - 1 1 ' uierszy wyeksportcwam 6 p l l k u ' 6 F i l m m e

End SUD

Page 713: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Operacje na komponentach jezyka VBA

W tym rozddale pow, jak pisaf kod w j ~ k u VBA, 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 UserFom ,w locie".

Podstawowe informacje o f rodowisku IDE

!bodowisko IDE (ang. Integrated DeveIopment 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 TooWReJerences edytora YisvaI Basic zostanie zdefiniowanie odwotanie do biblioteki Miuasofl Visual Basic fw 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 mAiwe wykorzystanie stalych w kodzie ani deklamwanie specyficmych obieMw, kt& odwhjq sic do komponentdw Smdowiska IDE.

4 Pcdstawowe Infomacje na temat automatyzacji OLE rnoha maletC w rozdrIab 20. C >

Po zapomahiu sip ze sposobem dziahia modelu ob i i bw Mowiska U)E, rnotna pisad kod wykonujqcy r6tnorodne dzialania, na przykw:

m dodawanie i usuwanie modul6w VBA,

wstawianie kodu VBA,

Page 714: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 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 r 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 a ) . Opcja 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, te 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 t w o l m 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 (Vhal 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 Visual Bmic 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.

Page 715: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzial28. Operacie na kom~onentach iezvka VBA 73 1

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, kt61y jest 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 dwdanie 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. ~oniksze Inst;ukcje dcmonstrujq dwa sposoby uzyskania dostipu do kornponentu VBA i utworzenia zmienn ej obiektowej:

Set IlsC - lhisbbrlrboolt . V B ? r o ~ e c t . V ~ e n t s ( l l Set W - I h i s W o r k W .VBPro5ect.VBCcmxnents(")lodulel")

Page 716: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

732 C Z ~ VII + Inne mgadnienia

Kolekcja References

Kafdy projekt VBA w Excelu &era kilka odwdah. Odwdania pmjektu moha 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 Ofice Object 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 1 e 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.

Page 717: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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(i J .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

Liczba wlerszy kodu Cells(1. 3) - VBP.VBConponwtsi f ) .~ le .CwntUfLtnes

Next l End Sub

Page 718: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 ,c-

Ten pnykfad jest dostepny na Wie CDROM dotqcmnej do kslqtki. Zawiera 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).

Page 719: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzial28. + Operacje no kornponentoch jqzyka 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 by t otwarty!", vbc r i t i ca 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.' I vbCrLf L vbCrLf Hsg - Msg & 'Kl ikni j OK. aby kcntynuowat." If MsgBox(Msg, vblnfonnation + vbOKCance1) - vMK Then

Call R w l a c e M u l e Else

MsgBox "Modul n le zostal zastapiony!', vbc r t t i ca l End If

End Sub

Kiedy uZytkownik kliknie OK, wywchna zostamie procedura Replacenodule (listing 28.3). Jej wykonan ie powodu je zastqpienie istniejqcego modulu Module1 w skoroszycie Skoro- szytUiytkownika.xls zaktual izowanq 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 ls Set VBP - ActiveUorkbwA .VEPmject On Error GoTo ErrHandle With VBP.VKmponents

.Remove VW.VBCmponents('nodulel"1

. Imp~t-t F i lenaw End With

' Usuniecie tymczasowego pliku m d u l u K i l l 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

Page 720: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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.

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 I

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 wykorzystywany jest og6lny mechanizm obslugi btqd6w.

Ten p-ryklad (sktada]$cy sig z dwdeh pHkbw) Jest dostepfly 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 w -/a

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

.Lef t - 4

.Top - 4

.Width - 100

.Height = 24

.Object.Caption - "Patrdt do akusza Arlruszl' End u i t h

' Oodanle procedury obslugi zdarzenia Code - 'Sub CamandButtonl-C1 IckI 1' & vbCrLf Code - Code h ' On Error Resm Next" & vbCrCf Code - Code h ' Sheets('"ArLuszl"").Activatem 1 vbCrLf W - Code h ' I f Err 0 0 Then" 8 vbCrLf Code - Code h ' Hsgbx '"Me mind u a h y m i t arkusza Arkuszl.""' b vbCrtf Code - Code & ' End I f " 8 vbCrLf Code - Code & 'End Sub'

Page 721: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzld 28.4 Operacje na komponentach jpzyko 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 ms th wygenerowana za parnow kodu W3.4

Page 722: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 pkuaay 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. P ~ q c l s k i w rym oknie 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 UserFm 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 jw wl&ciwoSC Caption formulana U s w F m pmd jego 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.

Page 723: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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, modyfikacjp jego 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 , fmt ro ls . 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~gner b&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 produry AddlDOButtons plrrenhlje lidng 28.5.

Page 724: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

740 CzeLC VII lnne zagadnienb

Sub WdlOO&rttonsO Dim x as Object ' VB Project Dim UFvbc k Object ' VBCamponent Dim (Nod As Cbject ' CodWu le D l m ct: As Control Dim cb As Comndhtton Dim n As Integer, c As Integer, r As Integer D i m code As String

Spradzenle, czy jest dowlony 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 Exi t Sub

End If

Set UFvbc - Thisworkbock .VBProject .VBCanpolents( I lserFonl ' )

' k u n l w l e azys tk ich 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" I n & "-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

Page 725: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

I I Rozdzial28. Opemcje no komponentach jezyko V M 74 1

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 usuni~ ia wszystkich kontrolek z formularza za pomocq metcdy Remove kolekcji Controls, a na- stcpnie u sun i~ i a catego kodu z modutu kodu za pomocq metody Del eteLines obiektu CodeModule. Nastcpnie w dw&h ~ t l a c h For . . . 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

Wymwanie 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 (Matnim zagadnieniem 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.

I Prosty przyklad formularza Userbrm

PnykM 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

I wykonywania. Procedura wykona nast~pujqce zadania:

1. Za pomoq rnaody Add kolkcji VBCompanents utwrolzy tymczasowy fonnularz UserFwm w aktyumym skomszycie.

Page 726: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

3. Doda p r o c d q otnlugi zdarzenia w module kodu formulana UserForm ( C m n d B u t f o n l - C l ick), Mbrej wykmanie spowoduje wygwietlenie olcna informacyjnego, a nastcpnie usunivie formularza z pamitci.

W systemle pomocy majdu]e sie stosunkowo nlewlele InformacJi na temat tworzenia < # . formulany UserForn, totet opacowu)~ tq procedure, stosowalern gt6wnie metode

mb i b ~ d 6 w .

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) ' s ta la vbext-ct-KFom W t h TempFonn

.Propertles('Capticn') - 'Fomla rz tymczasowy'

.Properttes('Width') - 200

.Properties('HeigM') - 100 End With

Dodanie pnyc l sku 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 la przycf sku W i t h TennForm.CodeMcdule

L lne - .CountOfLirws .InsertLines Line + 1. 'Sub CarmandButtcnl-ClickO' .InsertLines LIne + 2. "MsgBox ""Ui ta j ! ""' .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

Page 727: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozddat 28. + Operacle na komponentach jmka VBA 743

Rysunek 28.8. Ten fonnulan UserFcmn o m zwiqzany z nim kod zostal utworzony . w locie '

!ZJM%* Skoroszyt zawiera jw procedurq MakeFon nie wymaga deflniowania odwotania <-,? .- 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 le ) Dim TenyIFom As Object ' YBCcqxment D i m HRrOptionButton As Hsforms.0ptionButton D i m Ne*ComnandButtonl As Msfonm.Cann?~ndButton D i m NwComnandButtcnZ As Msfoms.Cmndhtton D l m i As Integer. TooPos As Integer 0im M M d t h As L m g D i m 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 -

Thi sWorkbook . iB~ ro jec t .YBCarponents.Add( 31 vbext-Et-Worm TempForm.Properties('Width') - 300

' 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 .Le f t - 8

Page 728: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

.Top - TopPos

.Tag - i

.Autosite - T n n If Default - 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.Contm1 s. -

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. -

W d ( " f O m . ~ n d f ! a t t O n . 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" I MrCf 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 I " For Each ctl In Me.Controls' I vbCrCf Code - Code 8 ' I f Typer(mIct1) - "OptlonButton" Then' 1 vM;rCf W - Code 6 ' I f ctl Then ~ I O N - f E T R F T V A L - ctl .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

Page 729: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdziol28. Operacie na kornponentach VBA 745

I f .Pmpertles('Wldth") 160. Then .Properties("Uldtll") - 160 newCmndButtonl.Left - 106 NewCmandButton2.left - 106

End I f . Pmperties['HeipM') - TopPos + 24

End Wlth

a G ~ e t l e n l e f 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 .VBPm ject .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);

Tit le - tckst wy4wietlany w pasku tynh h u l a r z a UserFm.

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$

Page 730: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

746 -6 Vll + lnne zagodnienio

7. WySwietla formulan UserForm. Klilaniwie OK powoduje wykonanie pmcedury ComnandButtonl-Cl i ck. 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 - funkcfa jest 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) Dim UserOption Gpsll) - '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 Fa1 se. 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

Fmulam US& dostosowuje svJd1 rozmler do liczby element& taMicy pnekmmej sp* 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 - Fa1 se Unload He

End Sub

Page 731: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozddof 28. Operacje no komponentach jezyka VBA 747

Sub CamndButtonZ-Click0 Dim c t l G€rOPTI(lY-RET-VAL - Fa1 se For Each c t l I n Me.Controls

If TypeNaMct.1) - 'OptionButton" Then If c t l Then GETI)PTION-RET-VAL - ct l .Tag

End I f Next c t l Unload Me

End Sub

<SP4 Ponlewat f m u l a n UserForm jest usuwany po wykorzystaniu, nie motna obejrze6 go w edytone Visual Basic. Aby obejne6 okno UserForm w edytm Visual Basic, nalety pneksztakl6 ponltuq lnstrukcje na komentarr, wpisujqc apostrof na pocqtku wiersza:

Thi sMrkbook. VBPmject .VBCanponent s . Rmve bCoc~ponent :-Tenp Form

Page 732: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Moduty klas Dla wjelu programistdw VBA p a j ~ i e modulbw klas h i tajmnicw. Ta wlaSciwo4C jest dostqna w j~yku Visual 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 piornu SPJihcji tukich. jrrk urrkywnienie mkarva (prryklady znajdujasic w mzdziahch 19. i 23.h

w d u h m e r y r u t $ i ~ ] i &tr@q8u Windows API, m duhurh stmwanie tych f idc j i w &ie - moaa na pmyk1ad utworgrC kt% kt6ra ulatwia wybywanie lub ustawianie klawiszy Nwmhck lub Copsbck, albo klaq, kt61-a ulatwia d w t ~ do rejestru Windows;

Page 733: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

750 Czeft VII lnne zagadnienia

w celu umotlhuienia wykonywmia tej samej procedury pnez wiele obiekr6w w formulanu 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 rdytk ktdre motna taimporrowa6 do innych projekth - rnodut klasy og6lnego pnemanenia mom zaimportowat do innych projektbw.

Przyktad: utworzenie klasy Numloc k 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 moha 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

Moaa tet mienit stan klawisza NumLoek poprttz mianp wkkiwoki Value. Na ptzyklad wykonanie ponifszej instrukcj i 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~iwoScia rn i i 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. Jeal i nie wySwietla sip okno Properties, nalety wcisn* F4. Nastppnie motna mimie! w p modulu klasy na NumLockClass (rysunek 29.1).

Page 734: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 [l isting 29.1).

' Deklaracja typu Private Type OSVERSIONINFO

dhOSVersionInfoSlze As Long Majorversion As Long MinorVersion As Long #ui 1 dNunber 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 ib '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)

Page 735: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 - 2 Const UER-PLATFORM-WIN3Z-UIMWS - 1

%+* Kod VBA z a ~ o w ~ n y w tyrn rnzddale utwwzono ne podstawie przykladu C 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 wWciwok iqQa lue 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~e b 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 ktbj do spmwdmia biewego m u klawisza N u m M wyko- npano fimkcje interfcjsu Windows API GetKeyboardState, jest wywdywana za kaZdyrn r a m , kiedy w kodde VBA mi & 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 ~ ~ l - D Then Exit Property

Page 736: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzid 29. Mod* klas 753

' PrzeTqucnie stanu I f o .dwPla t fmId - VER-PLATFOM-WIH32-WiNWS Then ' (Wln45)

Przelqczenie stanu klawisza Nlmnloek keys(VK NWLOCK) - l I f (key~(~lK-WK0CK) - 0. 1. 0) ~ e t ~ e y b o a r d ~ t a t e teys[Ol

E l s e l f o.dwP1atfonId - VCR-PLATFGRW-WIN32-Nl Then ' (WinNT) Symlacja wciSnlecla t lmriszz 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) Prre tpuen ie 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)

Prrelpczenie tlWsza Hurlock keys (VK-WaX} - Ilf(keys('VK-MIMOO:) - 0. 1. 0) SetKeybarGState keys(0)

Elsel f o.bPlatform1d - YER-PtATFCRJ+-YI#32-hl Then ' (WlnNT) S y w l a ~ a wci <nlwia klawlsza keybd-went VK-NUMOCK. W45. KETDIEWTF-EXTEHOEOKFI O r 0. 0 Symulac~a rwolnienia 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

Page 737: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

754 CzeSc Vi le 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 D i m Nurrlock As New NunLadrClass I N~mLock. Value - True

End Sub

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 , do ksigtki. Skorosqt &era takle rnodul Wasy rmotli!Ma]qcy y V F m l e i vstawianle I

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~Valw o m jednq met* Toggle. Klasa mote rawierat dowol i~ liczbp wldciwdci, metod i zdamefi. 1

I 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 moha , zastosowad w kdzie, wykonystujv standardow notacjp z laopkrl: 1

0biekt.wlabcirof E 1

Page 738: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 leNaMnly - "" For i - LenCFull Name1 To 1 Step -1

Char - Mid(Ful1Name. i. 1) If Char - "\" Then

Exi t Function Else

FlleNamdSlly - Char & FlleNameOnly End I f

Next i End Property

Pmcedura Property Get &&I jak W c j a . Kod wykonujc obliczenia, a nastwnie m c a wart& wMciwaSci udpowiadajqq nazwie procedury. W pokasanym pnykWie nanva prooedury to FileNameOnly. Wartog Nva6conej wMciwo9ci to nazwa pliku wymaczona na pnistawie Mcucha W w okSlajqcego & ki-, Mry jest 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~h mo- 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:

D i m XLFile As Boolean Property Get SaveAsExcelFileO As Boolean

SawAsExEelFile - XLFlle End Property

Property Let Sav~Exce lF i le tbmlVa l As Baalean) XLFiFe - boolVal

End Property

.33$?%* Jeteli MakimrSC Jest typu obiektcwego, nalsty wykonystd procedup Property Set

5mBa zmlast procedury Prcperty Let.

Jako WWWOEX obiektu mina 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.

Page 739: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 zmiennq jako wart046 wldciwoki. Jeteli na pnykktd obiektowi nacho nanvp ~ i l e ~ y s , poni%G instrukcja wyfwietli bie- e c q wartdf wh.kiwoki SaveAsExcel F i 1 e:

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 moha wykorzystaf nastqpuj$cq instrukcjq:

F i 1 eSys. h v e A s ~ l F 1 l e - True

W tym pnypadku do pmedury Property Let pnekazano wartdf True, powodujqc mian 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 sk zasady nadawanla nazw obnvlplvlxe d a zwyklych prDadlr Uwle nIekt6tych nazw (st6w zasbzeionych) jest nledozwolone. Zatern jeSll podczas tworzenla pcocedury deflniujqcej w+a6clwoX wystqpl 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 u VBA, metody definiowane przez pgrannistq w module klasy wykonujq pcwne dz iah ia 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~ci i metody Has definiowanych w moddach klas.

Page 740: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozdzid 29. + Modutv klas 757

Zdmenia deflniowane w module klasy

W ka2dym module klasy majdujqsiq dwazdarania: I n i t i a l i ze aazTetminate. Zdanenie I n i t l a l l z e jest gencrowane w momencie tworzenia nowego egzemplarza obiektu, nato- miast zdmnie Terminate w momencie niszuenia obiektu. Zdarzenie I n i t l a l i ze 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 ' Tuqfnaleiy w 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 praz niego pamiet mlniana). Obiekt moaa 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 prnz 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

RangeToExpart jest 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.

Page 741: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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

Property Let ExportRarge( mg As Range) Set RangeToExport - r g

End Property

Property 6et ImportRange( ) As Range Set InportRange - I~nportTotel 1

End Prope-ty

Property Let ImportRanwt r g As Range] Set IqmrtToCell - rng

End Property

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~d6w w procedune zdefiniowano blok obslugj Wd6w.

Sub Export(UYF11eNme) ' Eksportuje zakres do p l iku CSV

Dim ExpBwk As Workbook

I f RangeTtXqwt I s Ikthlnq Then NsgBox "Hie zdef in iwno 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

Page 742: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Rozcfiiat 29. + Mod* klas 759

Ppplication.OisplayAlerts - False With ExpRwL

.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 Ex i t Sgb

ErrHandle: ExpBook .Close SaveChanges : -Fa1 se Appl ication.CutCopyMode - ':alse Appl lcation.ScreenUpdating - True Application.0isplayAlerts - True MsgBox "Error " & Err & vbCrLf & vbCrLf & Error(Err) . -

vbc r i t i ca 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 Err i iandl 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 i kopiuje jego ' ~~war tdC do z a h s u okreSlonego miennq ImportToCel 1, kt6nj warto& odpowiada wlaSciwoki InportRange. Po wykonaniu tej operacji plik jest mykany. 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 zak rea laportRange' Exi t Sub

End If

I f CNFl leNae - "" Then HsgfBx 'Mie z d e f l n t w n o pliku & zaimportcwanla' E x t t Sub

End if

13 Error @lo Errt lwdle Applicatiar.ScreenUpdating - False

Page 743: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Appl ica t im.MsplayAler ts - Fa1 se Workbooks .Open CSVFi leNatne Set CSVFile - ActiveWorkbook Activesheet .UsedRange .Copy Destination:-ImportToCel l CSVFi 1 e.Close SaveChanges:-Fa1 se Ppplication.kreenUpdating - T N ~ Ppplication.0isplayAlerts - True Ex1 t Sub

ErrHandle: CSVFi 1e.Close SaveChanges:-Fa1 se Ppplication.kreenUpdating - True ~plication.0isplayAlerts - True MsgBox "Error " L Err & vbCrlf & vbCrLf & Error(Err). -

vbc r l t i ca l . 'Bqad metody Import" End Sub

W n l u utwomia eg~emplarza klasy C N F l l eClass n a l w najpimv zadeklarowaf mienrq typu CSVF i 1 eClass. 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 rvtqmduamkieYimrykod

Set CSVFile - Heu UVFileClass

W prrypadku zastosowania instrukcji, D i m 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 zobaq 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

Page 744: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 NEW CSVFIleClass CSvfi 1 e.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:

Page 745: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

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 1 e(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

Page 746: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net
Page 747: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net
Page 748: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net
Page 749: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net
Page 750: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net
Page 751: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net
Page 752: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net
Page 753: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net
Page 754: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net
Page 755: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net
Page 756: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net
Page 757: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net
Page 758: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net
Page 759: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

S korowidz

IIADR!, 73.767 #ARG!. 73.268.778 #DZIEUD!, 73 #LICZBA!. 73 #N/D!. 73 #NAZWA?, 73 #ZERO!. 73 <head>, 93 <style, 93 <rablu, 93

A Al. 65 AbortPmc, 539 AbuthgStleetion. 300,301,302 Abs, 81 1 Accelerator, 375 Access, 478,580 Activate, 294,385,386,490,508,542,543,548,

553.559 Activecell, 178

ClearContents. 179 SeIeclion, 179

Activechart, 178,485,490 Deseltcq 49 1

Activesheel 178 Name, 179

ActiveWidw, 17% Visible, 491 Zoom 403

ActiveWorkbook. 147, 178,486 Nam+ 179 Savcd* 775

ActiveX. 95, 122 ActivcX Data Objects, 37 Add 1aOButtons. 740 Addcomment, 177 AddConml, 559 AddFromGuid, 732 AddinInstall, 542

Addlns, 168,598 Comments, 600 dodawanie pozycji. 598 Fullname, 599 Installed, 600 Name, 599 Path, 599 Titlt, 600 usuwanie pozycji, 599 wlaSciwoSci, 599 zdmnia, 602

AddinUninstall. 542 Additional Controls, 393 AddMenurtern. 655 Address, 170,702 AddShcetAndBunon. 736 ADO, 37,55,579

pobicranit danych z pliku A c c e m 580 adm URL. 566 AMMLExpon . 542 AAnXMLlmpon. 542 aktual iracja

aplikacji. 133 modulu VBA. 734

aktywacja aplikaeji. 567 Excola, 32 H Y ~ . 490

Alarm, 342 ALLBOLD, 325 AllCells, 3 1 1 AlIVisiblt, 213 analizq 56

Analysis TaolPak, 56 automalycme sumy a@ciowe, 56 danych, 37 funkcji niestandardowj, 264 konspckry, 56 narr@zja. 56 Solver, 58 aatystycq 56 tabcle p3-=smwne, 57

Page 760: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

838 O o d a t t i

Analysis ToolPalq 48,56,261,585 And, 205 MI. 135,287,288 aplikacja arkusza kalkulacyjncgo, 105, 106

interfejs utytkownika, 123 kategorie. l 10 odbiorcy. 108 projektowanie. 'I 17 ronviqzywanie pmblembw, 109

apiikacje, 39 aktualizacja. 133 aktywacja. 567 dystrybucja 132 jednego u2ytkownika. 1 12 komunikujqce sip z barami danych 115 Kreator amortyzacji potyczek, 683 menu, 639 Microsoft Office. 567 miedynarodowe, 703 monitorowanie zdmch. 557 oczckiwanie na zakohczenie. 565 paski nanqlzi, 609 pod klucz I 15 pmjektowanie, 690 shareware, l 12, 134 spaghetti, 1 I2 system pomocy, 667 tcstowanie, I28 uruchamianic. 563 user-oriented, 683 Wkowe. 1 12 wenje narodowe, 699 wtqczanie obslugi zdarza. 554 wygodne dla uZytkownika, 683 zdarzcnia, 553

AppActivatc, 567, 807 AppEvents-Workbookopen, 556 Apple 11.29 Application. 142. 167, 173, 175

ActivcCell, 178 ActiveChart, 1 78 Activesheet, I7X Activewindow, 178 ActiveWorkbook, 178 Calculation, 76#5 Dialogs. 361, 792 DisplayAlerts. 785 EnableCancelKey, 257 EnableEvents. 388.538 GctOpenFilename, 354 Goto, 780 Help. 680 . . InputBor 787 International, 699 OnUndo. 467

Quit, 78 1 RangeSelection, 178 Run, 234,596 ScrmnUpdating. 256 Sekction, 178 StatusBar, 42 1 Thisworkbook. 178 Version, 697 Volatile, 271.325 widciwo$ci, 178 zdmenia. 555

Application Programming Interfac+ 288 ApplyBunon-Click, 463 Areas. 300 argumenty, 170,227,240,242

ByVal. 242 funkcjc, 268 nazwanc, 170 nicoknflona liczba. 280 opcjonalne, 274 prwedury obshgi rdarnh 540 przekazywanie. 240 tablice. 274 wbudome okna dialogowe. 363

arkuu. 40 aktywacja, 417 aktywny, 40 blokowanie modiwoki pmwijania. 780 dialogowy, 40 dialogowy Excel 5195.42 fonnuly. 63 funkcjc, 263 kolor raktadek, 766 kolory. 40 kolumny. 40 korndrki, 4 1 konspekt, 56 kontrolki, 368 Ijczba kolumn, 766 liczbn wienzy, 766 makra MS Excel 4,42 makra XLM, 42 moduty VBA, 40 pliki XLA. 595 pliki X U , 595 powipkszanie. 402 pmtwamnic, 3 12 pmwijanic, 402 rozmiar, 41 synchronizajs 313 wiersze. 40 wyki-esy, 41,490 wyhietlanie tekstu pornaey. 670 wyhvierlanic w formulamrch UscrFonn, 446 zdmmia 547

Page 761: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Skorowidz 839

arkua kalkulacyjny, 29, 1 l 1 aplikacje jednego &?ytkowniks. 1 12 aplikacje spaghetti. 1 12 formaty plikbw, 87 historia, 29 jednoblokowy budtct, 113 Lotus 1-2-3.30 modele warunkowe, 114 MultiPlan, 34 pizeznauony do u2ytku prywatnego, 11 1 Quanro Pro, 33 SuperCalc, 29 VisiCalc, 29

mkunowa baza danych. 53 erku~z-wykrcs, 523 Amy. 276.81 1 As. 198 Asc.811 ASCII. 49 asystcnt pakidu Office. 674 Ah1.811 Author, 173 Auto DaCa Tips. 157 Auto Indent, 158 Auto List Members. 157,779 Auto Quick Info. 157 Auto Syntax Check, 156.190 Auto-Open, 344.537 Au~ofiltr. 53, 54.59.79.522 Autoformatowanic. 401 autokorekta 46 Auloksaatty, 5 1 automatycrne

sumy qfc iowe, 56 wykrywanie. 622

automatyzacj& 37,563,569 OLE, 187,569 p 6 h e w i m i c . 571,572 w c m e wiqmnie, 570 zm.@zanic Excelem, 576 zai-qjzanie Wordem, 573

crutoscnsing, 622

BackBurton. 429 BASIC, 139 baza danych, 53

A c c t g 478,580 ADO, 55 arkurmwa, 53 DAO. 55 tiltrowanit danych, 53 formaty plk6w, 88

kwcrcndy, 55 Mcuch polqczcnia, 479 twoizcnie tabel pnestawnych. 478 wybieranie zakredw. 54 zapytania, 479 zewnqtrma, 55

baza wiedzy Micmsotl, 802 Beep, 807 BeforeClose, 542,546 BeforeDoubldJlick, 508, 548,553 BeforeDragOvcr, 559 BeforeDmpOrPaste, 559 Beforeprint, 540.542,545 BeforeRightClick. 508.548.552. 553 Beforesave, 542,544 BefonUpdate, 387 BeforeXMLExport, 542 BcforcXMLlmport, 542 BcginGroup, 629.797 bezpieczehstwo. 120 biblioteki. 187

DLL. 287 GUID, 732 VBA Extensibility, 732 Windows Scripting Hon, 71 1

blokowanie kombrek, 130 obiektbw arkusza, 130 pmwijania arkusta, 780

btgdy. 106. 128,129,243,767 #ARG!, 26# data. 203 formui, 73 kody, 817 komunikaty, 244 obejfcie. 129 obslug& 243 prrcchwytyvenic, 243 runtime. 185 sktadni, 156,243 uruchomienia, 243 usuwanie, 283 VBA. 817 wartofci. 73 wvkrywania 283

BOOI&,-192, 194 BoundColumn. 414 Break on All Emom, 243,771 BUBBLESIZE FROM-SERIES. 502 BubbleSort 2 5 j Builtln, 629 B u i l t i n D o c u m e n ~ e s , 325 Button, 368 Byte, 194 ByVal. 242

Page 762: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Calculate, 508,548,553 Call. 233,237,596,807 CallByName, 81 1 Cancel-OnKey, 562 CancelBunon. 429 CanPlaySounds. 341 Caption. 392.629 Category, 702 CBool, 81 1 cbPreview. 418 CByte, 81 1 CCur. 81 1 CDate. 81 1 CDbl. 81 1 CDec. 195.81 1 Cell. 169 Cells. 179, I81 Cel IT= 305 Change, 387.388.404,430,547,548 Chart. 142.385.485.486.487. 538

Activatq 508 Activechart. 485 BeforeDoubleClick, 508 BeforcRightClicl; 508 Calculate. 508 Dcacttvate, 508 DmgOver, 508 DngPlot 508 MouseDown, SO8 MouseMove. 508 MouscUp. 508 Rcsin. 508 Select. 508 Ser iesChan~ 508 rdammia, 508

Chart_Acrivate. 509.539 Chart-Deactivate. 5 10 Chart-MouseMove, 517 Chafl-Select. 509.5 10 ChartlsSelected, 492 ChartObject 486.487.491,507 ChartObjects, 168.494

Activate. 490 . Delete. 492

Chmts. 168 Delne. 492

Chartspace, 444 dodawanie knmolki. 445 tworanit wykresu, 445 udostqnianie kantmlki. 444

ChartTitle. 486,487,492 ChartType, 494

ChDir, 708.807 ChDrive, 708,807 CheckBox. 122,367,368 CheckVmion, 606 CHM. 667 Choose, 8 1 1 Chr, 811 Chmnienie

arkusza. 59 skoroszytu, 59

Clot. 81 1 Class Modules. 147 Class-Initialize, 539 ClearAllButFormula~ 649 ClearContents, 17 1 Click, 378. 559 CLng. 81 1 Close. 149,807 CloscAIIWorkboo~ 3 12 CloseBunon-Click. 464 Code, 146,148 wfanic sh1k6w procedur VBA, 467 Collections. 142 Color, 176 ColorFormat 175 ColorJnda. I76 ColurnnCount, 413 ColurnnHeads, 414 ColumnWidrhs, 414 COM, 587 ComboBox, 367 ComboBoxOperatim-Cke, 463 CommandBac, 142.363.640

Add. 618 Bu~ltln. 620,621 Controls, 625 Ddcte. 620 Enabled 620 L e t 620 Name. 620 Position. 620 Pmtcction, 621,622 Top, 62 1 t w o m i e pask6w paleafi. 618 Type. 62 1 Visibk 621 wyhrdanic obiikt6w. 617

CamrnandBarButton. 625 Style. 629

CanmandBarComboBa~ 625 Style, 629

CommandBarComl, 645,648 CommandBarPopup, 625.645 CommandBws, t 42,364.61 7,614,646

Page 763: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

ComandButton, I21.122,367.368,376.382.395. 438

CommandTcxt, 479 Comment, 172,175, I77

Application, 173 Author, 173

, Creator. 173 Delete, 174 rnctody, 173 N e a 174 Parent, 173. 174 hcvious. 174 Shape, 173 Tcxf 174 Visible. I73 wlaSciwadci. 173 zbi6r. 174

Comment Block, 192 Connection. 479 Const, 201,'807 Context. 433 ContinuePmdure, 353 ConlracuUlSaics. 503 Controls. 390 CONVERT. 779 ConvcrtChartToPichlrc, 5 15 Copy. 292 Coz 81 1 C O M A 383 COUNTBETWEEN, 327 COUNTVISIBLE. 328 CPL 568 CR LF, 718 CretueADcadChart. 516 CrclucAToolbar. 619 CreatrMcnu. 648 CreatcObject, 571,572,576, 81 1 CreatePivotTnblc, 473.474.477.479 CrcateWorkRange, 463.464.465 Creator. 173 CSng. 81 1 CSS. 94 cstr, 81 I csv, 89 CSVFilcCtsss, 757,758

E v a n , 758 Import, 759 metrdy. 758 wlaSciwoSci. 758 zmimnc, 757

CurDir, 8 1 1 Currency, 194 CumntRegion, 294 CVaa, 81 1

CMate. 811 CVErr, 81 1 crss, 46.79

wpmwadzanie. 79 wylwietlanic. 315

czcionki. 159 domySlnc. 766 pobicranie listy, 317

CZESTOS~, 78 CZY.Bt, 78 CZY.BIS\D, 304 CZY.LICZBA,77.274 CZY.LOGICZNA, 304 CZY.TEKST. 304 ezytmie plik6w tekstowych, 715 czytelnoic? kodu hMlowego. 170

DAO. 37.55.579 dam 46.79

WY, 203 s p d r o b 1900.80 VBA, 203 wprowadzanie, 79 wylwietlanie, 315 qodmfc 705

DATA 203 Data Acnss Objeccr 37.579 Data Interchange Format, 89 DataLabelsFmmRange. 503 Date, 194,203, 807, 81 1 DateAdd. 8 1 1 Da teAnCic , 315 DateDiff, 81 1 DatePaG 8 1 1 Dateserial, 203,705.8 1 l Datevalue. 81 1 Day. 81 l DBF. 88 DblClick, 559 DDB. 812 DDE, 121,563 Deactivate, 386.508. 542.544.548.553.559 deaktywacja

menu, 653 menu godrpcmych, 663 w)ilcrc54 491

Debug, 252,283 Print 240.283

Decimal 194. I95 Declare, 807 Default, 392 Default to Full Moduk View. 158

Page 764: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

DefBool. 807 DefSyte, 807 DefCur, 807 DcfDate, 807 DefDbl. 808 DefDec, 807 definiowanie nanv. 69.70.72 Deffnt. 808 DefLng, 808 DefObj, 808 DefSng, 808 DefStr. 808 DeNar. 808 deklaracja 149

funkcji. 265 procedury Sub. 227 stale. 201 tablie, 205 zrniennych. 1%

Ddete. 174 DeleteEmptyRows. 303 DeleteHiddenNamq 69 DeletcScaing, 808 Designer. 738 DcsignTimeButton, 739 diagnmy, 52 Dialogs, 361 DIF, 89 Dim. 198,205,760.808 Dir. 708,812 DisableAllShoncutMenus. 664 DisablcCell, 664 DisableChartEvents. 513 DisplayAlarrn. 560 DisplayAlcrts, 785 DisplayGridlinrs, 205 DLL, 287 Do Until, 225 Do While, 224,225 dodatki, 37.92.585

Analysis ToolPak 585 automatyzacja, 587 bezpicczaistwo, 588 COM, 587 dystrybucja, 592 dysqbucja paske nmqdzi. 6 16 funkcje niestandardowe, 287

-instalacja. 592, 794 kolekcja AddIns. 598 konfiguracja skoronytu, 589 kontrola mmiaru pliku, 603 konwenja aplikacji XLS, 586 menedter dodatkbw, 587,591

modyfikacja, 592.795 odwolania do plik6w. 605 opis, 794 optymalizacja wydajnohi, 602 podgl~d zarabezpieczonego dodatku. 597 problerny, 604 procedury VBA. 5% skoroszyt, 60 1 skomszyt XLS. 585 testowanie skomszytu. 589 tworzcnie, 586,588, 590, 593,794 wprowadzanie opisu. 590 wykrywanie wersji Excela. 605 XLA, 59 1.594.795 XLL, 591 X U . 594 znpewnienie tainstnlowania. 604

DoEvenu, 377.812 dokumenty

ukrywanie, 130 Word4 573 XML. 96

Do-Loop. 808 domySlna

acionka, 766 drukarka, 339

DOS. 32 d o s ~ ~ p

binamy. 714 do bazy danych 53 lasowy, 7 1 4 sckwencyjny. 714

dostosowywanie. 43. 49 kontmlek. 392 menu. 123,642 okna Toolbo% 391 park6w. 125 pask6w narqdzi. 61 1 VBA IS5

dot, 142 Double. 194,201 Drag-anbDrop Text Editing, 158 Dragover. 508,553 Dragplot 508.553 Drives, 712 dmkarka domy3lna, 339 drukowanie

liczba shah 315 t i d e dostqpu z n m q skomszytu, 767 wbudowane wykmy, 5 15 wyfwietlanie day, 325

m, I I0 Dynamic Data Exchange, 12 1.563

Page 765: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Skorowidz 843

dynamicma rnodyfikacja podpisbw na kontmlkach, 633 wymiana danych, 563

dynamicme formulane Useff o m , 743 dystrybucja

aplikacji, 132 dodatk6w. 592 pask6w nanpdzi, 6 15

DZIS, 49,269 dtwiqki, 340, 766

E edycja

makr. 166 tabcl przeshwnych, 482

edytor menu, 125,795 przycisk6w paska o m , 44 rejestru. 100 tekstu. I10 VBE. 141 Visual Basic, 40.61

cfda falowy. 73 EIS. 1 15 Eksplorator projckt6w, 146 eksport

obiekt6w. 148 XML. 96.99 zakresu do pliku HTML. 723 h s u do pliku tekstowgo, 718 zakrcsu do pliku XLM. 726

elementy jptyka V B 4 189 Else, 215

I Elself, 216 EmbChartClass, 5 14 cmulacja

hnkcja S U M 280 okna dialogowe Excela, 393

I emulacja funkcji MsgBox, 432 funkcja emulujqca, 434 MyMsgBox, 433 UserForm-Initialize, 434

EnableCalculation. 765 I EnalflcCmcelKey, 257

EnablcChartEveng 513 Enabled. 629 EnableEvents, 388,538 End 200,808 End Function, 265,266 End If. 150 End Sub, 198.228

i End With. 154

Enter. 387 EnbyIsValid, 551 Enum. 808 Environ. 812 EOF, 812 Eqv. 205 Erase, 808 Err, 244

Number, 244 Emr. 244,387,559,808,812 Error Trapping, 160 etapy projektowania. 117 etykieta. 369 Event, 808 Excel 200D. 36 Excel 2002.40.48.49.587 Excel 2003,29,34,36 39

interfejs u e o w n i k a , 42 ochrona, 58 ochrona pncd bpiowaniem, 32 pomoc tahniczna. 80 1 Professional Edition. 56 prze($cmiki wiersza poleceli. 86 uruchamianie. 85 ustawienia, 100, 101 ~ d m i e z innej aplikacji. 576 =by online. 801 zgodnoM wcrsji. 58

Excel 3.35 Excel 4,35,764 Excel 395.35.42 Exal97,35,58,642 Excel Easter Eggs 805 Excel far Windows. 34 Execute, 7 10 Executive Infopmation System 1 15 Exit. 387

Do. 225.808 For, 222,223,808 Function, 266,808 Propeny, 808 Sub, 228,808

Exp, 812 ExpandAIISaies, 503 Export, 734 Export File. 148 ExportRangs 718 E x p o r t T o m 724 ExportToXML, 727 Exlcndcd Date Functions, 80 extensible Markup Language, 36, 140 EXTRACTELEMENT. 33 1

Page 766: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

FsceID, 429,630,796 faktury, 784 False, 205 Falsz, 4 1.46 FAQ. 763

dodatki. 793 Excel. 764 formulsrzc UserFom, 788 funkcje, 776 mctody, 779 obiekty. 779 paski poletdi, 795 pmcedury. 771 VBE. 768 wlafciwoki, 779 rdancnia. 779

FileAttr. 8 12 FilcCopy. 708.808 FileDateTirnc. 708. 812 FileDinlog. 360 FileExists, 321,708 FilcExists2,710 FileExists3,712 FileLen. 708,812 FilcNarne. 71 0 FiIeNamd3nly. 321 FileScarch. 320,710

E x e c u ~ c . 710 FileNamc 710 FoundFileg 710 LookIn, 710 NcwSeerch. 710 SearchSubfoldcn, 710

FileSystemObjcct 71 1.714 Fill, 175 FILLCOLOR 325 FillFmat, 175 Filter, 812 FilterFilh 721 filtmwanie plikn t&towcgo, 721 Find, 31 1 FindContml, 317,363,626 FindFiles. 713 FindFonnat, 3 10 FinishButton. 429 Fix, 8 12 Fol~owHyperlii 548 For ... Nut. 22 11,808

Exit For, 222,223 Step. 222 TO, nl

For Each, 174 Next, 212,808

Forecolor, 175 Format. 40.8 12 FonnatCuntncy, 812 FormatDateTimc. 8 12 FonnarNumk. 812 formntowanic, 50

kom6mk 5 I, 362 liczbowc, 50 style, 50 warurukowc, 51.773 WykYecrrdw. 493

FormarPercent. 81 2 fwmaty. 83

CSV, 89 DBF. 88 DIF, 89 HTML 92 Latus 1-2-3.87 MSO, 94 plilu baz dmych. 88 plikr Excelq 697 Pnxmrowe, 47 Quanra Pro, 88 SYLK. 89

89 UlamJrm 47 WBI. 88 WB288 WB3.88 WK4.88 WKS, 87 WQI.88 XLS, 93 XLW, 90

Formula 5Q0, 702 FormwIaRlCl. 183,702 Formulase, 368 formulm UserFwm. 35.37,44.121,365,395,421

Activate. 385,386 aktywacja arkusq 417 Caption 437 CornmmdButton, 395,438 CantrolSourcc, 789 Deactivate. 386 dodawmic kontrolck, 366 dodawan~c komlki Chartspace. 445 dodawan~e przyciskbw ComrnandButton w fazie pmjektowania, 739

ddawanit zakladek, 391 dosrmwywanie kontrolek, 392 dynamime, 743 edycja kontrolck, 370

Page 767: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

emulacja finkcji MsgBox, 432 emulacja okien dialogowych Excelq 393 faza projektowania, 738 faza wykonania, 738 Font 373 gencrowanic w locie, 742 Hidz 790 ikony, 391 Initialize. 385,386,415 klawiaturq 373 klawisze skr6tu. 375 kolejnog tabulacji kontrolek. 374 kontrolki ActiveX, 392 krcatory, 427 linic siatki. 371 Ihta plikbw, 791 ListBox, 3%. 404 tadowanic do pami@, 376 Iqczenic kontrolek, 392 menu. 395 MultiPagc, 418 niemodalne. 402.435 niszczcnie, 790 obrazy. 369 obsluga wielu przyciskdw w proadurn obslugi

dam&. 438 odwolania do komr~lelr, 390 okno powitalne. 398 Operacje tekitowc, 459 pwk p m i j a n i & 370 pasek tymtu, 792 pocz.qtkowa pozycja. 793 pok~rlo, 370 pole PPY, 367 pole kornbi, 367 pole listy, 369 pole 1ek;towe. 370 pole wyboni. 367 polotrnic konbol* 370 powiqkszanic arkusts, 402 procedury obslugi zdameh, 365,378,382 programowe, 74 1 Propvticf 36Cj pnnvljanic arkusEg 4UZ pnyciski opcji, 369 przyciski poleania. 367 p-iski przc~cmilcq 370 QueryClose. 386 RefEdif 397 rysunki. 791 samodziclny wsknhik pasypu zadaniq 422 ScrollBar. 402 SpinBunon, 386.388 sprawdzanie poprawdci danych, 384

SprradsW 447 symulacja w W c h d c i Co to jest?, 676 system pomocy. 67 1 szablony, 393 tablica konb-olck, 789 tckst podpowiedzi, 391 Termjnatc. 386 testowanie, 376 TcxtBox, 388 tworzcnic, 378,394 twoncnic Jzablon6w, 393 ukrywanic, 377 umieszczanie konmlck w fazie pmjcjcktowania. 73 8

UserFonn Dduxe, 450 wwanie przycisku Zamknij, 789 wielkoit komlck, 370 wlaSciwoSci, 373 wlakiwofci kontrdek, 371 wldciwog Ta& 389 wskafnik postqpu radania, 421 wskatnik posypu zadaniawykanystujqcy

MultiPagc. 425 wstawinnic, 365 wybbr koloru, 441 wybbr wierszy 415 wykresy, 505,789 wytqzanie pycisku Zamknij, 400 wwidlanie, 375,381,390 wyiwietlanie arkuny, 446 wySwietlanic W u pamocy, 472 wy4wictlanic wykrc%w, 442.443 zakladki. 369 zamykanic, 377 zarnaczanie zakrdw, 397 zdarzcnia, 378,385,386,558 zdobywanic infonnPji nr tmurt zdarza5.385 - rmiana wielkosci, 401

fomuty, 46,4863,119,262,174 btcdy, 73 efekt felowy, 73 fimkcjc, 324 nanuy, 67.71 o b l i d e , 63 odwolania do k- 64 o d w h i a do mkrcsu, 64 pohdnie, 82 SERIE. 4%. 497

fmmuty tabiicowq 74.75 kalendmq 75 S W 78 wmowanic, TT wpmwadzmic, 74 zliaanic, 77

Page 768: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

846 Dodatkl

FoundFiles 710 Frame, 367,374,379,392

Caption, 423 FmFile, 812 Frequently Asked Questions. 763 FullNamc, 755 Function, 141,149,261,262.264,266,323,808 funkcje. 37.48. 152,261,262,265,268,320

Alarm, 342 ALLBOLD. 325 analizy danych, 37 Analysis TooIPak. 778 argumenty, 264,268,273,778 Array, 276 Auto-Open, 344 bez argument6w. 269 CDec, 195 CellType. 305 ChartIsSelccted. 492 ContinucProadurc. 353 COUNTA. 383 COUNTBETWEEN, 327 COUNWISIBLE, 328 CreatcObject, 571,572 CrcatcWorkRange, 463 CZCSTOSC, 78 CZY.M, 78 CZY.Btqn. 304 CZY.LICZBA. 77.274 CZY.LOGICZNA, 304 CZY .TEKST, 304 DATA. 203 Dateserial, 203 dctiniowanie kategorii, 285 dcklaracja. 265 DeleteEmptyRows, 303 DelcteHiddcnNamcs. 69 dodatki, 287 D Z I S , ~ ~ . 269 Error, 244 Exccla, 261 EXTRACTELEMENT, 33 1 FileExists, 321,708 FileNameOnly, 321 FILLCOLOR, 325 fonnuty. 267 GetAColor, 44 1,442 GetDirectory, 358 GetExecutablc, 338 GetKeyState, 290 Getobject, 571,572 GetOpcnFilmame. 354, I t 0 Getoption. 743, 745,746 GetProfileStringk 339

GetRegistry, 343 GetSaveAsFilcnmc, 357 GctSystemDirectory. 605 GctSystemMctrics, 340 GetValuc, 322,323,324 Get WindowsDirectoryA. 288,289 identytikacja katalogu systcmu Windows, 288 Jlf, 2 17 ILE.LICZB, 76 1LE.NIEPUSTYCH. 76,79.529 InputBox, 2%. 298,347,787 InRange. 304 inspekcji. 48 interfejs API, 290.338 ISBOLD, 325 IsEmpty. 225 IslnColltction, 323 ISITALIC, 325 ISLIKE, 330 IsMissin& 275,277 IsNumber, 274 IsNumeric, 282 JEZELI, 261 kategoric, 285,777 KOD. 49 KOM~RKA, 49 LASTINCOLUMN. 328,329 LASTINROW. 328.329 LASTPRINTED, 326 LASTSAVED. 325,326 LBound, 253 Len, 265 LICZ.JE~ELI, 76.77.79.240 LICZ.PUSTE, 76 ListFiln, 709 LITERY.WIELKIE. 208,269 LOS, 240.269.270 MAX. 334 MAXALLSHEETS. 334 MonthNama, 277 MS~BOX, 171,196.210.283,3si,680, n 9 MyMsgBox, 435 MySum, 281,282 nieokreSLona liczba mgumcntdw. 280 nicstandardowe. 261,262 284 NOMIDDLE, 82 opakowujqce, 289 opcjonalnc argumenty, 274 opis, 286 PathExisg 321 PIERWIASTEK. 209 ponowne wykonywani~ 271 prztlienvlic f d . 778 PRZESUNIECIE. 529

Page 769: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Skorowidz 847

RANDOMINTEGERS, 335 RangeNnmeExists, 322 RANGERANDOMIZE. 336 RegCloseKcy, 342 RcgCreateKeyA. 343 RegOpenKeyA, 342 RegQueryValueEIck 343 RegSetValueExA. 342 Reverse. 263 RGB, 176.787 RUN, 764 SaveWing, 466 Seek 716 ShatExists. 322 SheetName, 327 SHEETOFFSET. 333 Shell. 563 ShellExecutc, 566 Split, 33 1 Sqr, 209 SQRT, 21 1 STATFUNCTION, 332 StaticRand, 271 statystycme, 56 SUMA. 54.76.78.261.280 SUMA.JE~ELI, 76-77 SUMY.POSREDNIE, 36,79 SREDNIA, 54,261: tablice. 274 T E M . 2 6 9 TmtGetValuc, 324 Time. 215 ToggleGridDisplay. 455 TRANSPONUJ, 276 TypeName, 1% UBound, 253 UCase. 208,256 Union, 304 UpCasz 269 usuwajqce M@y, 283 VBA, 82,209,261,807 wbudowane, 208 WeekDay. 234,543 wielofunkcyjne, 33'2 Windows API, 287 WwkbookIsOpcn. 322 WorkbookName. 327 wrapper, 289 WriteRegistry, 343 wstawianie. 48,263,267 wykonywanie, 267 wykrywajqce Mqdy, 283 wykiywanie wcisnipcia klawisza Shift. 289 WYSZUKAI.PIONOWO,271,532 wywotywanie z procedury, 267

zasipg, 266 zastosowanic, 263 zwracanie infonnacji o fonnatowaniu kom6rki. 324 zwracanie tablic jqzyka.VBA, 276 zwracanie wartodci Mdu, 278

FV, 812

generator formularzy, 110 generowanie

kodu VBA, 736 niepowranalnych numer6w faktur.

Get, 808 GetAColor, 44 1,442 GetAIISettings, 8 12 GetAnr, 708,s 12 GetDefaults, 689 GetDirectory, 358 GeExecutablc, 338 GetKeyState, 290 GcrObject. 571,572,812 GetOpcnFilename, 354,356,710

FilcSilter, 354 Filterlndac. 355

Getoption. 743, 745,746 GeiPmfileStringA, 339 GetRegistry, 343 GetSaveAsFilmamc. 357 GetSming. 812 GetSysternDimctory, 605 GetSystemMarics, 340 Getvalue. 322.323.324 GaWindowsDirecto~y4 288.289 GIF, 94,505 GoSub ... R a m , 808 GoTo, 214,780,809 GoToMax, 309 GroupNamc, 370 grupy dyskusyjne, 763,802

arkusze kaikulacyjne. 803 Micmsoft, 803 wyszuktwanie infmecji . 804

w, 110 GUID, 732

hasla, 60,130.13 1,769 kod VBA. 60 skwoszyt, 60

&Title, 142 Height, 373,392,427 Help. 680

Page 770: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

HelpB~tton~Click, 464 Helpfile. 433 Hex. 812 Hide, 377 HideAIIT~lbam, 624 HideMenu 654 hierarchia obiektbw, 142, 168 hiperlqcza. 55, 172 HLP. 677 Hour, 8 12 HTML, 38,55.92

twomnie interaklywnych plik6w. 94 macmiki. 93

HTML Help. 667.677 wiqzanie pliku pomocy z aplikacjg 678 w i v i e ternar6w pomocy z funkcjami VBA, 679 wyiwietlanie plik6w. 680

HyperText Markup Language. 38.92

I Id. 626,529,646 IDE I29

dostcp prognmowy, 730 model obiekt6w trodowiska, 730 References, 732 VBCornponmts. 73 1 VBPmjccts. 73 1

If, I50 If ... Then.215

Else. 215,216,809 IIL 217.812 ILE.LICZB. 76 LE-NIEPUSTYCH, 7679.529 Image. 369,505

Picture, 444 Immediate. 90. 146. 149. 167. 187

wykonywanie pmcedur, 239 Imp. 205 Impkrnents, 809 import

obiektbw. 148 pl ih tekstowego. 717 pliku tekstowcgo do zakresu, 719

. wiecej ni2 256 kolumn do skomszytu, nl XML, 96.97

Impan, 734 Impart File, 148 ImponData, 717 IrnportLongLinq 721 IrnportRange, 7 19 Indeks, 619 intite.txt, 721 Information Rights Managemf 6%

Initialize. 376,385,386.391.41 5,423.559 Input. 715,716,812 Input C. 716.809 InputBox. 296,298,681,787,812

funkcja VBA. 347 rnetoda Excels, 349

InRange, 304 lnspekcja formul. 48.73 instalncja dodatku, 592 InStr, 8 12 InStrRev. 812 instrukcje, 807 Int, 812 Integer, 194 Integrated Development Environment 729 infel igenme

paski nafqdzii 622 tagi, 45

intcrakcja z aplikscjami. 563 intetaktywne

pliki HTML, 95 sekwencjc okien dialogawych. 427

intcra)aywnc wyb'ay, 530 dane, 53 1 przyeiski opcji, 531 ronvijana lista. 53 1 twomnie, 533 z a k s danych. 532

interaktywno6& 530 intcrfcjs MI. 287.288 interfejs uzytkownika. 42, 121

dosmsowywanie, 49 inteligentne tagi, 45 menu, 42 menu kaslradom. 43 menu podqcmc, 43 niestandardowe o h dialogowe, I22 okna dialogowe, 44 panel zadah. 46 paski naqdzi, 43.125 pneciunij i upu% 45 sMty klawiaturowc, 45

Interior, 176 International, 703 Internet, 55.62 Internet Explorer, 93. 95 Intascct. 283 IPmt. 813 IRM, 6% IRR. 813 IsAddln, 92,795 IsArray, 8 13 ISBOLD, 325 IsDate, 813

Page 771: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

i IsEtnpty. 225,813 IsError. 813 IslnCollection. 323 ISITALIC, 325 ISLIKE, 330 IsMissin$275,277, 813 IsNull, 813 IsNumbcr. 274 IsNumeric. 282 813 Isobject, 813

J JavaScript 94.%,7 1 1 jcdnoblokowy budtct, 113 JEZELI. 261 j r z ~ k

BASIC. 139 HTML 92 interpretowany, 139 JavaScript, 94 makr. 764 VBA 21.52,139 VBScript, 144 XLM. 34.52, 140 XML. 56, %

Join, 8 13

K kakndarr, 75 katq graficznc, 135

aktualna rozdzie lcd , 340 kaskadowe arkurn styldw, 94 katalogi 708

lista plik6w. 709,71 I tmowanie istnienih 708. 712

katcgoric apliksrji arkurm kalkulacyjncgo. 1 I0 funkcji 285

KyDown, 387,559 Keypress, 387,559 KeyUp. 387.559 Kill, 708, 809 klasy. 142.749

CSVRleClass, 757 NumLock, 753 twotzenie, 750 twanenie cgmnplanq 760

klasyfikacja ~ k o w n i k 6 w . 108 KOD, 49 kod Mdlowy, 141, 167

ay le lnd t , 170 dycja, 150

kolory, 159 pmhowywanie, 149 spagetti, 221 wpmwadzanic. 150, 190

kody b$d6w. 817 jmk6w. 700

kolcjno9d opentorbw, 205 tabulacji, 374

kolekcje. 780 CommandBars. 617,644 Drives, 7 12 References. 73 1.732 VBComponents, 73 I VBPmjec*s 73 1

kolory. 40, 176 Colorfndex. 176 RGB. 176 SchcmeColor. 176 wyMr, 44 1 wypetnicnia, 176 zaktadck, 766

kolumny. 40 nazwy, 70

korncntfuze, 172.175, 191.668 Comment. 172 ctcionka, 766 dodawanic, 177 kolor. 766 testowanic, 177

K O M ~ R K ~ 49 komdrki, 41, 169

formuty, 63 infonnacjc o hatowaniu, 324 komcntanq 175, 177 nanvy, 67,782 okreslanic typu danych. 304 ostatnia niepusta, 328 ronvijane listy, 765 wprowadzanie wmdci, 296 wprowadranie wartoki do nasgpnej

pustej korndrki, 297 zliczanie zamaaonych k o d d , 299

hrnponcnty OWC, 55 sieci Web. 4% VBA, 729 wyhvietlanis 733

komunikaty Mp36w, 244 konsvekty, 56 konmlki, 37,51,122

ActivcX, 95,122,124,368 Bunon, 368

Page 772: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

850 Dodatki

kontrolki Chartspace, 444 CheckBox. 367 ComboBox, 367 CommandBunon. 367.395 dodawanie do formulama UserForrn, 366 dostosowywanie. 392 dynamicma modyfikacja podpis6w. 633 edycja, 370 Excela, 124 Frame, 367 Image. 369,505 klawiatura, 373 klawisze skr6~. 375 kolejnoSC tabulacji. 374 Label, 369 ListBox. 369,396.404 ti\ezenie. 392 MultiPagc, 44,369,418 odwotania, 390 okno Toolbox, 367 OptionButton. 369 paski polrccri, 629 pototenie, 370 RefEdit. 370.397 ScrollBar, 370,402 SpinBunon, 370,388 Spreadsheet, 446,447,448 Tabstrip, 370,419 TextBox. 370.388 ToggleBurton, 370 wielkoS6. 370 wlaiciwo9ci. 371 wldciwoSci wsp6lne. 373 zdobywanie inforrnacji o ~WiwoJciach, 373

konwersja aplikacji XLS na dodaG, 586 konwerter plik6w. 88 kopiowanic. I50

kodu fr6dtowego. 155 zakresu, 292 zakresu o zminmej wielko$ci, 293

Kreator amortyzacji pon/czek. 683 GctDefaults. 689 historia, 686 inicjalizacja fonnulmza FonnMain, 686 menu Narydzia, 686 obstuga, 683 odtwananie usblwiell. 688 przetwarzanie zd&. 687 SaveDefaults. 690 skorosqt. 685 tworzcnie arkueg 687 UserFonn-Initialize, 686 wySwictlanie pomocy, 687 zqisywanie ustawid, 688

kmtory, 427 BnckButton, 429 CancelButton, 429 dane pobrane od utytkownike. 432 dodawanie ptzyciskbw. 428 FinishButton, 429 formula-zc UserForrn. 427 importu tekstu, 89.717 konfiguracja kontrolki MultiPagc. 428 NmtButton, 429 programowanie prrycisk6w. 429 przyciski. 428 tworzenic, 427 UpdatcControls, 429 wykonywanie zadah, 431 wykres6w, 52. 485 zaletnoici programowe. 430

krzywe hipocykloidalne. 520 ksaaQ, 5 1 kwartalny raporf 455 kwcrendy. 55

sicci Web. 55

Label. 369,379,923 LabelPmgms. 422.424 LASTMCOLUMN, 328,329 LASTINROW. 328,329 LASTPRWTED. 326 LASTSAVED, 325.326 Layout. 559 LBound. 253.813 LCase. 8 13 Left, 373.813 Legend, 492 Len. 265,8 13 Let, 809 LICZ.IF&LI, 76, n, 79,240 LICZ.PUSTE. 76 liczba drukowanych stron, 3 1 5 liczby, 50

losowe. 271 Walutowe, 50

limik mli, 222 Line Input #, 716,809 linie siarki 455 LinkedCell. 368 Linking and Embedding, 35 ListBox. 39,121.369,3%. 404.791

Addltem. 405 aktpacja arkusza, 417 BoundColumh 414 ColumnCount, 404,413

Page 773: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

ColumnHeads, 414 ColumnWidths. 414 ControlSource. 404 identytikacja wielu zamaczonych pozycji, 409 identytikacja zamacmnej pozycji, 408 Listlndex. 404,409 MultiSclect, 404,409 przemieszczanie poycji, 412 przenoszenie pozycji. 4 10 RowSource. 404,405 Selected, 416 umieszczanie pozycji, 405 umieszczanie pozycji po uruchomieniu aplikacji,

405 urnieszaanie pozycji w trakcie projektowania

405 urnieszczanie tylko unikatowych pozycji. 407 Value, 409 wiele lis 410 wielokolumnowa kontmlka 413 wielokmtne zaznaczcnia, 404 wybieranie wierszy arkusra, 415

ListBoxl-DblClick 418 ListFiles. 709 Listlndex, 404 ListMenuInfo. 643 ListReferenccs. 732 literaty, 241 LITERY.WIELKIE, 208.269 Load, 376,809 Loc, 813 Location. 491 Lock ... Unlock. 809 LOF. 8 13 Log. 813 Long, 194 Long Date, 3 16 Long Time, 316 Lookln, 710 Loop, 224 LOS, 240.269,270 Lotus 1-2-3.30 Lset, 809 LTrim, 813

larnanie ha&, 769 la~'~cuchy. 152,202

polrlcacnia, 479 stah dlugoid, 202 wydzieianie n-tego dementu, 33 1 zapytania, 479

zgodnoSE ze wzoram 330 zmienna dlugofC, 202

lqcza aktualizacja, 767 o brazu. 5 1

Macintosh, 698 MacOS, 699 MakeFonq 742 MakeMemw. 573 MakeNumberFormatDispIay, 633 makra, 52. 151, 152,229,771

blokowanie komunikat6w Excela. 785 cofanic skutkbw, 786 edycja. 166 klawisz skr6b, 165 Lotus 1-2-3.764 nazwy, I65 pmnwwie wykonywania. 400 rejestrowanic. 153 t w o q c e wykrcsy, 487 ukrywanie na li3cie makr. 776 unrchamianie cyklicmq 775 wimsy, 770 wstrzymywanie wykonywmia, 298 wykonywanie, 50 wykonywanie po wystrlpieniu d a n e n i a 239 wykresy. 487 wylr\czenie aktualisaeji e h u , 782 XLM. 34,42,52, 140,322,764 zabezpiencnia, 770 rliczanie wierszy zamauonych

przez uQtkownika, 784 miana orientacji sbony, 153

maksymalna warto* 334 maPY

obmkowe, 5 13 XML. 97

Margin Indicator Bar, 1-59 mar(we wy-, 515 MAX, 334 MAXALLSHEFIS, 334 mciExmte. 341 Me, 377,427 rnegaformuly, 48,8 1

formuty poSrednie, 82 m e n e h dodatkbw, 587,591 menu, 37,42. 124,640

automatyenre dodawanie. 652 automqezne usuwdnie, 652 bezpoirednic w y b i m i e pozycji 363 CornmandBan, 444

Page 774: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

mcnu &aktywacja. 653 dodawnnie element6w, 641 dodawanie na pasku menu, 644 dodawanie polcccf~, 647 dodawanie pozycji. 647,649 dostosowywanie, 123.642 Excel. 639 Format, 40 formularze UserForm, 395 ID. 646 kaskadowc, 43 klawim skr6tu. 641,650 linie siatki, 657 ListMenuInfo. 643 modyfikacja 640.796 modyfikacja elernent6w. 642 N a n ~ d z i a 649 obraz 641 odtwananic 651 paxk poleeef~. 640 podmenu, 640,647 pola wyboru. 654 pozycja 640 programowanie, 652 xpantor. 640 synchronizacja z arkusmn, 656 tworrcnie. 639,645 ukrywanie. 653 usuwanie elemcm6w. 641 usuwanie pozycji 650 usuwanie z paska menu, 646 utytkownika, 657 VBA 642 Widok, 43 wykonywanic proecdur, 232

zdmnia , 652 mak zamaczmia, 797

menu podrrcne. 37,43.126.641,660 deaktywa j a . 663 deakrywacja pozycji, 663 dodawanic pozycji. 662 msoBafTypePopup. 661 -prrywracanic ustammd. 664 tworzcnic, 664 usuwanie pozycji. 663 wylyzanie. 797

melody, 143, 169. 171. 16.4 argumenty, 170 InputBox, 349 pmgramowanie. 756 Run, 234

Miaasaft Authenticode. 133 MimsoR Knowledge Bau, 802 Microsoft Offia. 32.38,567 Microsoft Office Object Libtay, 732 Microsoft Oficc S p d s h e e f 446,447 Microsoft Query, 37.55 Microsoft Script Editor, 96. 144 Mid, 809,8 13 MIDI, 340,341,766 migmja z Excda 5/95,642 Minute, 813 MlRR. 813 MkDir, 708,809 Mod, 204 model obiektowy, 39,140, 142

Srodowiska IDE. 730 modele warunkowc. 114 modulo, 204 moduty klas. 749

CSVFilcClas~. 757 dodawanie kodu VBA, 751 Initialize, 757 nanvy, 754 prograrnowanie wllJciwo9ci obiekt6w. 754 Terminate, 757 wstawianie, 750 zdarzcnia, 757 zmienne. 757

d u l y VBA. 40.141 dodawanie. 147 funkcje, 272 usuwanie. 148.769 zastqpowanie uaktualnimq w m j g 734 zmiennc, 199

monitorowanit modyfikacji w wybrwym Eakesie komdrek. 549 wartoki, 283 zakrcsu. 549

monitorowanic zdar&. 535 poziomu aplikacji. 557

Month. 8 13 MonthName. 277.8 13 MouseDown, 508,553,559 MouseMovc, 508,253,559,677 Mousd3vcr, 5 17 MouseUp, 508,553,559 MsgBox, 170.1%,210,283.351,680.779,813

cmulacjs. 432 przyciski, 353 wai-toki 352

MSO, 94 msoBarEhnoa, 4 1 msoBarFloating. 621 msoBarLcft 620

Page 775: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

msoF3arPopup. 621 msoBarRight, 62 l msoBarTop, 620 rnsoBarTypeMenuBar, 62 I msoBarTypeNormal, 621,627,660 rnsoBarTypePopup, 661 msoBarTypePopUp. 621 rnsoControlBunon. 628,635,648 msoContmlBunonPopup. 635 msoContmlCornboBox. 635 msoControlDropdown. 635 msoControlEdit 635 msoContmlPopup. 644,648 msoModeModeless, 675 MultiPage. 44.369.374.418

efckt pnmhodznia. 419 klawisz Tab. 419 krcatory, 428 MultiRow, 419 Style. 419 TabOrientation, 419 TransitionEffect, 419 TransitionPeriod. 419 wskatnik pongu zadanis, 424 rakhdki. 419

MultiPlan. 34 MultiRow. 4 19 MultiSelect, 404.409 My Power Utility Pak, 69 MyMsgBox. 433.435 MySum, 281,282

Mdaftraaie n m , 67 Name, 142,392,702,708,809 Names, I68 nap& 708,712 naprawianie ptik6w, 67 nanpdzja, 456

Execla, 455 Formulme. 368 Operacje tekstowc, 457,458 pakicty, 470 Power Utility PI&, 469

Rrybomik formantbw, 368 twonenie, 455 tapisywanie wtawieh, 465

nazwane wmenty. 170 formuly, 528 kom6rki, 72 zakresy, 72

nanvy. 48,49.67,528 formula SERIE, 4% formuly, 71 kolumny, 70 kom6rki, 67.72 rnakra. 165 moduly k l w 754 nadawanic, 67 obiekty. 73 obszar obowiqzywanig 70 odwdania, 68 operatory p c c i ~ i a . 69 pmcdury, 229 stale, 70 ukryte. 69 wierszc, 70 zahsy. 67.72 zmicnne, 193,200

New. 760 NcwSearch. 710 Newsheet, 542.544 Newworkbook, 555 Next, 174,223 NcxtBuaon. 429 nimodalne oknadialogowe, 435

proccdura obshrgi zdwmi. 436 UpdateBox. 43 6 vbModelesq 435

nicokre3lona liczba argumentdw. 280 niepowtarzalnc numcry faktur, 784 niestandardowc

funkcje a r m 265 typy danych. 208

niestandardowe okna dialogowe. 37.44. 121 tworzenie, 122

NoDupcs, 407 NOMIDDLE, 82 Not 205 notacja

Al. 65 WIK1.65

Nothing. 177 Now, 813 NPer, 813 NPV.813 NumbcrFmat, 702

Page 776: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

numcr pliku, 716 scryjny. 79 wersji Exccla 697

NumLock. 750.75 1,753 przelqczanic stanu, 753 Value, 753

NurnLockClass. 754 NumLockOn. 754

obickty, 39, 142 167, 184. 780 aktywne, 142 Application, 142. 167, 178 bibliotcki. 187 blokowanic. 130 Chan. 142,485,486 Chartobject, 486 ChartTitlc, 486 CornmandBar, 142.640 Comment. 172 CSVFileClass. 760 danych ActivcX, 579 Debug, 252 Diagram. 52 dornySlnc wUciwoSci, 171 dostgpu do danych, 579 ekspoh 148 En, 244 Excclq 39 FilcDialog, 360 FileSearch. 71 0 FileSysternObject, 71 1. 714 hierarchia. 142, 168 import. 148 Interior, 176 metody, 143,169,171 nadngdnc, 326 n w , 33 odwolania. 169 OLE, 45 Pivotcache, 479 PivotTable. 142 pmgrarnowanic m e t d 756 pmgramorvanie ~WciwoSci. 754 przeglqdarka, 186 Range. 14L 169,179,207 Shape, 176 skoroayt, 40 Textstream, 714 ThisWorkbook. 150 UserForm, 147.376 wlaSciwo& 142. 143,169,170

Workbook, 142, 143 Worksheet, 142,168 zaznaczanie, 49

Object, 194 Object Browser. 186,362 Objca Linking and Embedding, 45 obliczmi4 48,765

formuty, 63 sumy qJciowe, 79

obrazy, 369 obstuga Mqdbw. 120.243

kod Wd!owy, 245 On Ermr, 243 prondury, 243 przahuytpvanic bl@w, 243

obsluga wielu jqzykbw, 701 obsiuga zdam6,535

argumenty proculury obshgi. 540 Auto-Open, 537 monitorowanic modylikacji w wybmnym

znkrcsie, 549 moniromwenie zdamc6.535 open. 54 1 procedury obshrgi &a&. 537 twonmie proccdury obdugi z d a M . 539 wcrsje Exccla, 537 Workbook-Open, 537 wtqczanic 538 zdanenin splikacji 553 zdancnia poziomu arkusza 547 zdarzcnia poziomu skomszytu, 541 z d m i a wykres6w. 553

obsar obowiqqwmla nanv, 70 roboczy, 9l

odrona 37,5& 120 formut, 59 hasla, 60 kodu I%& 60 s k m s ~ y t u , 130

Oct, 813 ODBC. 479 odbiot~y aplikaji arkusLa kalkulaqjncgo. 108 odcqtywanie

rejcstru SyStEmawego, 342 zakrrs6w. 305

o d t w m i e dZwipk6w, 342,766 pliku, 341

odwotania. 64,65 Al. 65 benvzglpdm. 64,162 buwrglqdnt do kolmnny, 65 bczwzglpdne do w i e m 64

Page 777: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

do arkuszy, 66 do kom6rki, 64 do obiektbw. 169 do skoroszyt6w. 66 do zakrertu, 64 jqzyka naturalnego. 71 micszane, 64 nanvy, 68 WIKL, 65 wzglqdne, 64.163

Off~ce 2003.39 office 97.35 Ofice Web Component 55 Office XP, 32 Offset, 164. 179.182 OKBunon. 41 8 OKBunon-Click, 383 okna dialogowe. 37. 44,210

Additional Controls, 393 argumcnty, 363 Autoforrnatowanie, 401 bapogrednie wybieranie pozycji menu. 363 Chmnienie arkusta. 59 Chronienie skoroszytu, 59 Dcfiniowanie nazw. 69 Dialog, 361 Formatowanie kombrek. 362 komunikaty, 35 1 Mapy XML, 98 rnodalnt, 44 nicmodalne, 435 nicstandardowe, 44 Ozwieranic. 354 Pnechodmie do, 361 Pmchodzenie do - specjalnie. 362 References. 235 Stosowanie nazw, 69 testowanie, 381 wbudowanc, 362 wprowsdzania danych. 347 Wstawianie funkqi, 284 wybieranie katalogu, 360 wySwietlanie, 360 zakladki. 44,369

0)ma

kamunikatu, 351 nicmodalne. 402 powitalne, 398 Properties, 372 wprowsdzania danych, 347 wybicrania W o g u . 3f7

o ~ l a n i e typu danych, 1% OldActive, 257 OLE. 35,45, 100.121. 187,569,729

On Emr, 243,246,303,564,809 GoTo, 245 GoTo EmrHandkr, 245 Rcsume Next, 244,246,299

On ... GoSub. 809 On ... GoTo, 809 OnActian, 629,644 OnKey, 561 OnTimc, 360,775 OnUndo, 467 opcje ochmny, 58 Open, 541,542,714,809 OpenText, 320 operacjc plikowe. 707 operacje t e k s t o 457.469

ApplyButbn-Click 463.464 CloscButton-Click, 464 Cofnij, 466 ComboBoxOperation-Change, 463 Crea~WorkRangc, 464 forrnularz UscrFarm. 459 HclpBunon-Click, 464 otwmrcie, 461 poprawa ~ydajnoki , 464 PROGRESS?HRESHHOLD. 462 RunTextTools. 362 skorosq?, 459 tworzenie, 458 UndoTextTools, 463.468 UserChoices. 462 UserFonn-Initialize, 463 UscrForm I , 463 VBA Modulel. 462 ; Workbook-BeforeClm, 461 Workbook-Open. 461 wymagania, 458 zamykanic, 461 zapisywmie ustawid. 465 zasada dziatania, 458

OpcraaingSystcm. 698 operatory. 63,204

And. 205 Eqv, 205 Imp, 205 kolejnoi6,205 konkatmacji, 771 kontynuacji wicma, 771 b p k i , 169 logicme, 205 Mod, 204 Not 205 Or, 205 pmeciph, 69 prtypisani 204 Workbook, 168 Xor. 205

Page 778: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

opis ftnkcji, 286 Option Basc. 206.278.809 Option Compare. 809 Option Compare Text, 256 Option Explicit. 156. 197. 22%. 602 769. Option Private. 809 Option Private Module, 229 Optional. 275 OptionBultofh 122,367,369,378 optymalizacja. 35

Orientation, I54 OSQ Presentation Man- 34 osobisty d u n makr, 768 osatnia niepusta kom6rka. 328,785 orwicranie plik6w tekstowych. 714 Outlook 577

wysylanie wirdomoki e-mail, 577 Outlook Express. 582 ourpuLUt, 721 OWC. 55.444.446

. P WOM~. 315 PageSrmp, 168 panel

stnowunia, 568 zadah. 46 mt. 173. 174.327 Partition, 813 p c k mu. 639.640

arkusza kalkulacyjngo, 659 dodawanie menu, 644 usumie menu. 646 komunikaty, 782

p a ~ k n W i 37.43 momatyeme wykrywmie, 622 AutoSensc. 623 CommandBars, 617 dodamic kontmkk, 628 dodawanie romijanej listy, 636 ddqcmic do skoroszytu. 61 5 dostosowywanie, 125, 61 1 dynamiczna modytikacja podpi%w

na kontmlkach, 633 dystrybucja 6 15 dystrybucja z doda(kiw 616 dzialania. 609 inspckcja format. 73 inteligcntne. 622 kopiowanie k o n t r o a 614 menu. 126

obraz definiowany przu utytk0wnikq obraz przycisku, 630 OdstCpy, 797 odtwarzanic. 624 odtwananic ustawieci. 614 pliki. 91 problemy, 61 I pncchowywanie, 610 przcnoszenie kantrol& 614 Prrybornik formant6w. 123 przycisk uruchamiajqcy makro. 615 pwisywanie makm. 635 rodmjc. 617 Rysowaniz 51 swobodnie pmmies-e, 44 mywno osadzanz 44 t v b dostosowywani4 6 12 twortmie, 609, 613 ukrywanie, 6 12,624 usuwanic, 6 14 usuwanie kontrotet 628 VBE. 145 wkdciwofci konlrolek, 629 wstawianie kontrolek. 614 wykonywanie procedur, 237 wyf w i e t h i ~ 6 t 2 wyiwiellanie wszystkich kmml&, 627 raberpicczanje pnad modyfikaejg 622 m q d m i e . 610 rliczanie. 621 miana nazwy, 614 miana obrazu pfzycisku. 630

psoek polecefi, 609 numerowanic i-w, 619 odwdania do kontrolek 625 usuwanie. 620 VBA, 619 wlafciwo$ci, 620 wyszczeg6hianie kontrol& 626

plwk pmi jan i s . 370 mmiar. ?66

p a ~ k stank 783 Pam, 312 PathFxists, 321 Pa1hExists2.7 12 ~ t l e . 174.22 l

Da Until, 225 Da While, 224 For ... Ncn. 221 For Each ., Next, 212 licmik. 222 prrcrwarsanb kmn&mk, 302 PrrnWarranie wykresbw. 494

PgDn-Sub. 561 PgUp-Sub, 561

Page 779: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

I Picfirre. 442,444 PIERWIASTEK, 209 Pivotcache, 474,479 PivotCaches. 473,479 PivotFields. 473,474 Pivotltcms, 473 PivotLayout, 495 PivotTable, 142. 143 PivotTableCOoseConnection, 542 PivotTableOpenConnection, 542 PivotTables. 168,473 PivotTableUpdate. 548 PivotTableWimd. 473 planowanre aplikacji. 119 PlayMlDI. 341 PlaySound. 341.342 pl~ki. 85

arkusza kalkulacyjnego 1-2-3.87 CHM. 667 CPL. 568 CSS. 94 CSV. 89.759 DBF. 88 dodatk6w. 92 dosttp binamy. 714 dosttp l w w y , 714 dostcp xkwcncyjny. 714 EXE, 85

I FilcSearch 710 formaty. 87 GIF, 505 graficme, 369 HLP. 677 HTML 55,Q 723 kopiowanic, 708 MIDI, 341 MSO. 94 nrprawianie. 67 nanva 508 numer. 7 16 obsraru roboctep. 90 odfzylywanic. 7 16 okrc9lmic skojmeh 338 otwiemic, 714 paskdw rarqdzi 91 PRN, 89 przetwamnie, 3 19 mzmiar, 708 startowe, 85 struktum 36 SYLK, 89 szablonow. 91 testowanie istnicnia, 708,710,712 TXT, 89

usuwanic, 708 WAV, 341 WB1.88 WKS, 87 WQI. 88 wykonywalne. 85 wyszukiwanie, 713 wyszukiwanie tekstu. 713 XLA. 591,594.795 XLB, 91.640 XLL, 591 XLS. 40.87.90.I20. 594.795 XLW. 90 XML 36.96 zapisywanie, 716

pliki teksrowe. 89.714 CSV, 717 czytanie. 715 e k s w zaknsq 718 filtrowanic. 72 1 impon danych. 717 impon do zakresu, 719 import wiqxj nit295 kolunm do skomszyq nl numer pliku, 716 odcrytywanie. 716 otwieranie. 714 PRN, 7 17 rcjcstruwwie wykomystania Excela, 720 TXT. 717 ustawianic pozycji 716 zapisywanie. 716

PlotArea 492 Plotorder, 502 Pmt, 813 pobieranic

warto* z mkniCbgo skaroszyht. 322 nlmacmcgo takresu. 298

ponta elcktronicma, 55 podglsd

wydruku, 3 15,782 zabezpicezmcgo dodatJ~, 597

podmenu. 640,647 pogmbianie ntwartagei kombrelt z fonrruhi, 549 p o b r l q 370 pole

gnrpy. 367 k m b i 367 listy, 369 tekstowc, 51,370 wybau 367

pomoc, 61, 173 technicma 801 tryb Offline, 62

por6mywanie IdMbw. 256 porqdkowanie zahsu w spodb losowy, 336

Page 780: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Power Utility Pak. 26, 113, 124,469,834 instalacja 834 odinstalowanie. 834 Opcracje tekstowe. 457 rejcstracja 834

Powcr Utility Pak for Excel, 456 poziom b e z p i m ~ s t w a , 120 p6he wiqmie. 571,572 Ppmt, 814 Ptawda, 41.46 predefiniowanc stale. 202 Previous, 174 pnzentacja 109 Print, 167, 240 Print #. 71 7,809 Private, 228,229,265,284,809 PRN, 89 problemy zgodnoSci. 695.696 Pmcedurc Sqmator. 158 procodury, 119, 141, 149, 151,771

argumenty, 227,240 BubbleSorf 253 dcklaracja 15 1,227 Function. 141. 149.261.265 funkcje, 264 nazwy, 229 niejcdnomacma nanwq 235 obsluga blpd6w. 243 obshrga zdarzefi, 378,382,537 prywatne. 229 przckazywanie argumenl6w, 240 publicme, 228 rcalizacja p ro jeh , 248 SonSheeB, 257 sortujqce.. 252 stmwanie wykonywaniem, 21 4 Sub. 141, 149.227.247 tcstowanie, 255 uruchamianie, 152 uruchamianic w innyrn skoroszycie, 774 usuwanie problcm6w, 256 wlakiwoici, 149 wstvnc rtjetmwanie m h 249 wykonywanie, 229.230 wymagania pmjektowe, 247 wywdywanie, 237 wywdywanie funkcji, 267 w y ~ d y m i c z innego modulu, 235 wywdywanic z innej proccdury, 233 msiqg, 228

Pramtowe. 47 PmassFila, 320 PmcxssRqucst, 676

programowanic. 52,105,291,763 FAQ, 763 menu. 652 metod, 756 pobicranie listy czcionck, 3 17 przetqczanie m o l c i wlaSciwoSci typu

logicmego, 3 14 przetwarzanie grupy plik6w. 3 19 sonowanie, 3 18 strukturalne. 222 VBA, 189 wldciwoSci. 754

programowe twomnie fornulam/ UserForm, 74 1 Programy, I5 I Project Explorer. 146

Class Modules, 147 dodawanie modulu VBA, 147 Expofl File, 148 Impofl File, 148 usuwanie modu!u VBA, 148

pmjekt, 146 dodawanie modulu VBA 147

projektant, 106 wcwnptmy, 107 zcsp6t, 106 zcwngnny, 107

projcktowanie, 103 aplikacji, 131,134,690 aplikacji arkusza kalkul~ 'neg0, 117 aplikacji uscr-oricntcd, 691 dokurncntowanie prac, 132 napy. 117 interfejs utytkomika 121 niestandardowc okna dialogowe, 122 planowanie aplikacji spelniajqccj wymagwia, 119 przekazanie aplikacji utytkownikom, 132 system pomocy, I32 testowanie aplikacji, 128 wersje Exala, 134 wymagania utytkownika, 118 zwi~ksmic odpornoki aplikacjl128

Properties. 372 Pmperty Get, 755,809 Property Let, 755,756,809 Property Set, 809 Pmtect, 170 ProtatSt~ucture, 257 Pncchodzcnie do, 361 hcchodz~nic do - rpejalnie, 362 pmchowyxanie kodu Mhwego. 149 pnrchwytywanie biqdbw, 243 prnccirlgnij i upuSt.45 ptzcgladarkn internetow 93

Page 781: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Skorowidz 859 -

pmglqdarka obiektbw, 186 wyszukiwanic z d m , 554

pmkazanie aplikacji utytkownikom. 132 przckazywanic argumcnt6w, 240

pnez odwoianic, 24 1 pnez wartoiC, 241

przetqczanie wartoJci wlafciwoki typu lo~icmego, 3 14

Przenid lub kopiuj arkusz, 249 przcnoszcnic

zakrcsu, 293 zakresu do tablicy typu Variant 308 zawartogci tablic jednowymiarowych. 308

PRZESUNIF$ZIE. 529 przetwarzanie

arkuszy, 3 12 danych. 55 danych h i m h i c m y c h , 56 dodatkbw, 597 grupy plik6w. 319 skoroszyt6w, 3 12 wykres6w. 4% zakresdw. 29 1,294 n a k u kropki. 207

pmwijanc etykicty, 672 pmwijanic arkusza, 402 pmzroczysta intcgracja. 585 Przybomik formant6w. 123,368 pnyciski

Marginesy, 782 opcj i. 369 poleccniq 367 p m l q c n i k 370 twomnic, 368 Ustawienia. 782 Zamknij, 400

pnyklady kodu VBA. 765 przypisanic, 204 pnywracanie zawartdci uszkodzonego pliku, 67 Public, 201,205, 228,229,242, 265, 809 Publikowanie jako stmny sieci Web, 95 punkt wstrrymania, 283 PUP, 26 Put, 809 PV. 814

QBColor. 814 Quatbo Pro. 33.88 Q u a m Pro for Windows, 33 pucry. 37 QucrjClog 377,386,400,559 Quil78 I

R RaiseEvmf 809 RANWMMTEGERS, 335 Randomize. 809 Range. 142, 143.168.169, 179,326.327

Cells, 181 off~et, Im Select, 780 Son, 783 Value. 180

RangeNameExins. 322 RANGERANDOMIZE. 336 RangcSelcction. 178 Rate, 814 ReDim, 206,251,786,809 RcDim F'reserve, 206,786 Redo, I51 RefEdik 370,397 References, 235,73 I, 732 RcfersTo. 702 RcfersToR l C I, 702 RegCloxKey, 342 RcgCreatcKcyA. 343 Regisbation Database, 100 RegOpenKcyA. 342 RegQueryValueExA, 343 RegSctValueExA. 342 rcjestr sysfcmowy. 85. 100

odczytywanie danych, 342.343 odgaipicnia, 344 uzyskanic dos tqy 344 zapisywanie danych, 342.343

'emlor makr, 153, 160, 161 edycja makr, 166 klawisz skr6tu, 165 nanva rnakra, 165 odwolania, 162 odwdania wzglqln+ 163 opcje rcjcstrowania, 165 opis makra, 166 przechowywanie makra, 165

rejeslrowanic makra, 150, 153 od zanacmnej porycji, 768

rejctrowanie wykonystania E d & 720 Rem. 191.809 Rcmovc, 734 RemovcConml. 559 Replace, 814 ReplactModule, 735 Require Variable Declaration, 156, 197 Reset. 810 ReselAIIToolbaR, 796 Resizc. 4%. 508,553,559

Page 782: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

860 Dodatki

R ~ T o o l ~ 624 Resume, 8 10 Reverse, 263 RGB. 175. 176,787,814 Right 373.814 RmDir. 708.8 10 Rnd. 814 Round. 814 RowSource. 404,405 rozdziclczaJC kany grafianej, 340 mzmiar nrkusm, 4 1 rozwijana list& 765 RSet, 810 RTrim. 814 Run, 234.5%. 764 Run SuWscrForm, 230 rundll32.exe. 568 RunTextTools, 462 runtime. 133.185 RunTimeButton, 739 rysowanie. 5 1

S ~ ~ 1 o d d e l n y wslcafnik post~pu zadania, 422,424

pmdura obslugi zdarania, 423 procdura startom 424

moromcrrajjqce sic wykrrsy, 524,528 modyfikacja serii danych, 526 nazwane formuly, 528 PRZESUNICCIE 529 tenowanie. 527 tworzmie. 525 hworzmic f o m l z naz~ami, 526

SaveAIIWorkbooks, 312 SavcAsExcelFile. 756 SaveDefaulu. 690 SavcForUndo. 467 SaveSenjng 466.810 SchemcColor, 175. 076 ScmUpdating, 256.489 Script Editor, 96. 144 Scroll, 404,559 ScrollArcs 543 ScrollBar. 122,370,402 SearchSubfolden, 710 Second, 8 14 Seek. 716.810.814 stkwmcje vbmh, 536 Selaf 292,508,553,780,783 Select Case. 218,220,301,810 SeleFtCumntRegion, 295

Selection, 166, 178,179 Arcas.Count, 784 Rows.Count, 7 84 TypeNamc. 492

SelcctionChange, 437,498,548, 551,622,623 SelectiveColorl. 302 SmdEmail, 578 SendKeys, 582.8 10 Sendworkbook. 581 Sentencecase, 464 seria danych, 500

sterowanie, 522 SERIE, 496.497.501 Series. 492.501

PlorOrder, 502 Values. 501

SaiaChange, 508.553 SERIESNAME-FROM-SERIES, 501 Service Pack. 695 xrwer WWW. 55 Set, 760,810 Set Rng, 305

, SaAlann. 560 SaAttr, 708, 810 Setup-OnKey, 561 Sgn. 814 Shape. 143,173.I75, 176

RGB, 176 shreware, 1 12,134 Sheet, 385,538 SheaActivate, 436,437,542,543,555 ShcetBeforcDoubl&lick, 542,555 ShcdBeforeRightClick, 542.555 SheetCalculate, 542.555 Sheetchange. 542.555 SheetDeactivatc, 542, 555 SheetExists, 322 SheetFollowHyperlink, 542.555 ShectName, 327 SHEETOFFSET. 333 SheelPivotTableUpdetc, 542, 555 ShcetScIlntionChange, 436,437,542,555 Shell, 563.814 ShellExecute, 566 ShortcutText, 650 ShowCommandBarNama, 61 8 ShowComponents, 733 ShowDriveInfo. 713 ShowlnstalledFontr. 317 ShowPagcCount, 3 f 5 ShowUscrFomq 790 Sin, 814 Single, 194

Page 783: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

I SizAndAlignChaRs. 495 skew 40 WY. 40 arkusze, 40 automatycme ladowanie, 774 dolqczanie paska nan$dri, 615 import wivcj nit 256 kolumn danych, 721 kolory, 40 makr osobistych, 165 ochrona prry utyciu hasla, 60 pobicranie wsrtodci z s k o m 322 przelwamic, 3 12 sprawdmie otwarcia. 556 tr6jwyrniarowy, 333 wldciwo3ci. 312 wykrcsy. 485 ramykanit, 3 12 zapisywanie, 3 12 zdarzenia. 541

smry klawiatumwe. 45 mrzenie, 127

skrvpty, 144.711 SLN, 814 slowa klucmwr. 193 Smart Tag. 45 Solver. 35, 58 sortowanic, 252

algorytmy, 319 arkuszowc, 3 18 bqbelkowe, 252,318 szybkic. 3 18 . tablic. 318 zliczajqce, 3 18

SonSheets 257 Space, 814 spaghetti. 11222t Spc. 814 SpceialEffsct, 423 spcrsonalizowane wiadomdci e-mail. 577 SpinBunon, 370,388

AfterUpdatc, 387 BefonDragOvcr, 387 BdorcDropOrPaste, 387 Beforcupdate, 387 Change. 387 Enter, 387 Error, 387 Exit 387 KeyDown, 387 KeyPm, 387 KeyUp, 387 SpinDown, 387 SpinUp, 387 Value, 388

darr~nk 386.387 zdarunia klawiatury, 387 zdsrzcnia my-, 387

SpinUp, 387 Spiropph. 519 Split, 331.814 sprawdzanie poprawnoki danych, 384 SpmadsheeS 446,448,805

dodawanic kontrolki. 447 SQL. 479 Sqr, 209,814 SQRT. 21 1 stale, 70. 152. 192.201. 279

deklmcja, 201 nanvy, 70 predefiniowans 202 xlLandscape. 202 xlponrait, 202 zasipg, 201

State. 629 STATFUNCTION, 332 Static, 198.20l. 228.266, 810 StaticRand, 271 StatusBar, 421,782 S1cp. 222 sterowanic wykonanim pmccdury

GoTo. 2 14 If ... Thm, 215 IIf, 217 pyle. 221 Sclen Case. 21 8

Stop, 810 SlopMIDI, 341 stosowanie n m , 69 SW. 814 SKomp, 814 StrCanv, 814 String, 194,203,814 strona WWW, 37.38

s m w . 71 1 StrRcvcnc, 814 mUktura

danych, 119 plikdw, 36, 119

style, 50.629 Sub. 141.149,198,227,228,247.810

deklaraeja, 227 twomnie pmccdur. 227

SUMA,54,76,78,261,280 m a c ~ c i w a , 79 SUMA.JaELI.76,77 surnowanie, 76

fonnuty tablicowe. 77 SUMY.POSREDNLE, 36,m SupcrCalc. 29

Page 784: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

862 Dodotki

Switch 814 SYD, 814 SYLK, 89 symulacja wiafciwofci Co to jest?, 676 Sync, 542 synchmnizacja arkuszy. 3 13 SynchSheetq 313 system modal, 433 system pomocy, 61.132.667

asystent pakietu Ofice, 674 Co to jest?, 676 etykicty. 671 formularze UserFom 671 HTML Help, 667.677 komentarze. 668 komponenty Excela. 668 pola tekstowe. 670 powiwnie pliku pomocy z aplikacj% 678 przewijane etykicty, 672 ronvijane listy. 673 tworzenie, 667 WinHelp, 677 wySwietlanie tekstu pomocy, 670

d l o n y fomularzy UserFonn. 393 pliki. 91

~REDNIA, 54.261 Srodowisko IDE. 729

Tab, 814 Tab Order. 374 tabclc p~~es tawnz 52.57.471

analiza kody 473 CreatePivotTable, 474 modyfikacja, 482 Pivotcache, 474 tworunie. 47 1 tworzenie na Mstawic zewnqmt j

b a q danych, 478 tworzenie wielu label, 479 ulepszanie kody 473 VBA, 471 zliczenie, 79 zlotone. 474

Tablndex, 3 74 tablice. 74,205

argumcnty, 274 deklaracja, 205 dynamicme, 206,786

jcdnowymiamwe, 206 sottowanie. 3 18 typu Variant 772 unikatowe, losowo uporzqdkowane

liczby calkowite. 335 Variant 308 wielowymiarowe, 206

TabOrientation, 419 TabStop, 174 Tabstrip, 370,419 Ta& 389 Tan, 814 tekst 46

padpowidzi, 391 TERAZ. 269 Terminate. 377,386,559 TestGetOption, 746 FestGetValue. 324 lcstowanie

aplikacji. 128 beta, 129 fonulana UscrFonn, 376 okna dialogowego. 381 samoro~zemjqcego sic wykresu. 527

Text, 174 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 Timer. 815 Timeserial, 815 Timevalue, 815 To. 221 Toggle Breakpoint. 283 TogglcButton, 370 ToggleCsse, 464 ToggleGridDisplay, 455 ToggleNumLock, 754 ToggleWrapText, 3 14 Toolbox, 366

dodawanie kontrolek ActiveX, 392 dodawanie zaktadek. 391 dostosowywanie, 391 dostasowywanie konnolek 392 ikony, 391 kontrolki, 367 ~czcn ie kontroldg 392 tekst podpowiedzi, 391 r

ToolTipText, 391,629 TransitionEffecb 419 TrandtionPeriod, 41 9 W S P O N U ~ 276 Trim 8 15 tr6jwymimmq skorouyt, 333

Page 785: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

I True, 205 cryb

katty graficmej, 135 krokowy, 283

twarzcnie aplikacji, 39, 131.607.730 aplikacji dla wielu wcrsji narodowych, 699 aplikacji user-oriented, 683 dodatkdw, 586,588 dokumcnt6w Worda, 573 cgzcrnplana klasy. 760 formulamy UserFonn. 378 funkcji, 261 inteligentnych pask6w nandzi. 622 interaktywnego wykrcsu. 530 interaktywnych plikbw HTML, 94 interfejsu utytkownika. 121 katalogq 708 klasy, 750 kodu Wdlowego. 250.251 kreatordw, 427 manwych wykres6w. 5 15 megaformul. 48.81 menu. 125.639.645 menu podrtfmego, 664 menu utytkownika 657 mod& V B 4 147 naqdzi , 455.456 nazw. 68 niestandardowych okicn dialogowych, 122,347 okna powitalncgo, 398 Opcracjc tckstowe, 458 paskdw narqdzi, 609,613 paskow poleceri, 618 procedur, 227 proceduy Function. 261 procedury obslugi z d d , 539 przyciskdw, 368 samcdziclncgo wskatnika postqpu zadania, 422 samoromerzajqccgo siq wykrcsu, 524 skr6tdw klawiaturowych, 127 stron W W , 38 systemu pomocy. 132,667 szablondw, 91 szablon6w formulary UserForm, 393 tabel pmstawnych 471 wielu tabel pmstawnych. 479 wykrcsq 52,485 wykrcsu knywych hipacykloidalnych, 519 wyknsu-mgara, 520 zastepatgo P a s h menu, 659

Type, 142.629.810 TypeNamc. 1%. 815

typy danych. 192,193 Boolean, 194 Byte, 194 Cumncy, 194 Date. 194.203 Decimal, 194. 195 dctiniowanc pncr utytkownika 208 Double. 194 Excel 200146 Integer. 194 Long, 194 Objeet, 194 Single, 194 String, 194,203 Variant, 156, 194, 195,772 VBA, 194

UBound, 253,815 UCasc, 208.256.81 5 udost~pnianie skorosqtu. 130 UI Builder, 33 ukrytc nazwy, 69 ukrywanie

arkuszy, 130 dokummtdw, 130 formul, 130 kolumn, 130 wicrszy, 130

ulepmny fonnularr dnnych 450 Ulamkowe, 47 Uncornment Block. 192 Undo, 151 UndoTextTo~ls. 463.468 UnhideMcnu, 654 Union, 304 Unload, 376.377.810 Unload Me, 377 UpCase, 269 UpdateBox, 436 UpdaleCharl, 498 UpdateContmls, 429 UpdateToolbar, 634 uruchamianie

aplikacji, 563 Excelq 85 okicn P m l u stcmwmaia 568

Usenet. 802 UserForm. 35.37.39.44. 121. 147,365,376.424

Hide. 377 Show. 375 Unloed 377

Page 786: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

UsaForm Deluxe. 450 insealacja, 450

UscrForm.Tag, 389 UserForm-Initialize, 463 UmlnterfaceOnly, 543,770 user~riented, 683 ustawienia

Excel& 101 rejatr systcmowy. 100

usuwanic bfed6w. 283 modulu VBA, 198 paska nmflri . 624 paska polecd. 620 pustych wierszy, 303 ukrych nanv. 69

utyrkownik 106 klasyfikncja. 108 koncowy, 106 szkolenia, 108

Val. 8 15 Valuc. 142 170.180 Values. 500 VALUES-FROM-SERIES, 501,5M, 503 Variant. 156. 194.195.1%. 772

wydajnoSC. 195 VaiType. 8 15 VBA, 21,35,52,139.140

Addlns. 598 Application, 142 argurnenty, 170 As. 198 Auto Dam Tips, 157 Auto Indent 158 Auto List Membm, 157 Auto Quick Info. 157 Auto Syntax C k k , 156 blok instrukcji, 221 ByVal, 242 Call. 233 C h a 142 Chair. 708 ChDrive. 70% Code, 148 Code Colors, 159 cofanic Operscji 'IS1 cofanic skuIk6w proccdar. 467 CommandBar, 142 Comment, 172 Const. 201 czcionki. I59

data, 203 Default to Full Module View. 158 definiowanie typ6w danych, 193 deklaracja, 149 Dim, 198 Dir, 708 Do Until 22.3 Do While. 224 Docking, 160 dodatki, 5% do% do warto9ci kom6rki zamknigego

arkusza, 77s dostosowywanie. 155 dostosowywanie menu. 642 Drag-and-Drop Text Editing, 158 Editor, 156 Editor Fonna. 158 edytor. 14 1 Else, 215 End, 200 Emr Trapping ! 60 FileCopy, 708 FileDateTimc, 708 FileLen, 708 For ... Next 221 For Eeeh, 174 For Each ... Next. 212 fonnatowanie wykmbw, 493 Function. 141.261 funkcjc, 261,807 funkcjc Anslysir TooPak. 778 funkcje wbudowsnc. 208 gcnemwanie kodu. 736 GetAtu, 708 GOTO, 214 hierarchia obiebb, 142, 168 ID€. 729 If ... Then, 215 Immediate, 149. I67 instmkcja prrypisania, 204 insmkcjc. 190,807 instmkcje wejkia-wyjfcia, 714 interpreter, 190 Kill, 708 klasy, 142 kod W o w y . 141.190 kody e d b w , 81 7 komtntara, I'Q 189,191 komponenty, 729 komunikaty Mddw, 244 kopiowanic kodu M l o w c g ~ . 155 bimchy, 202 makq 155 ma!qmslincjr dtim. 149

Page 787: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

t Margin Indicator Bar, 159 mctody. 143, 169 minimalizacja okim, 149 MkDir. 708 mcduly. 14 1 moduly klas. 749 Name. 708 obiekty, 142, 167,185 obsluga Mpd6w. 243 obstugajqzyka, 702 obstuga zdamh, 535 ochrona kodu p i y utyciu hash 60 odwolania, 786 odwolania do obiekt6w. 169 odwdania do pask6w polcceh, 619 okrcflanie typu danych, 1% On Error, 243 operatory, 204 opentory logimc. 205 Options, 156 petle, 221 plikt, 707 Procedure Separat~, 158 proccdury, 141,149,227 programowanie. 189 programow twmmic fomrulany UserFonn, 74 1 przcchowywanic kodu tP6diowego. 149 przetwarzanie arkuszy, 3 12 p n e t w m i e dodatkbw, 597 przetwarzanie skoroszypBw, 3 12 przehMnanie zakrcdw,, 291 Public, 201 ReDi m. 206 rrjcsmitw msk, 160 rejcstrowanie ma)o, 153 Rem 191 Requin Variable Declaration, 156 RmDir. 708 Select Case, 21 8 SetAttr, 708 dowa kh~cnrwc, 190.193 sortowanie tablie. 783 s'tatc, 155.192,201 Static. 198,2O 1 sterowanie wykonymirm proccdur. 2 I4

I Sub, 141.227 tabele p~es tawnq 471 tablice, 205 Tools. 156 hvorzmie nanpdri. 455 typy danych, 192.193 lypy dmych definiawam pna w!ytkmnika, 208 urmeszcmie kontrolek w fonnularzu UserForm

w Fazle projektowania, 738

WE, 144 ~ + ~ u d w a n c h k c j e Excels. 778 wbud-e okna dialogowe, 792 With ... End With, 21 1 wlaf;ciwoSci, 142, 169, 185 Workbook, 142 Workshnf, 142 wprowadmie kodu Wdlowego. 150,190 wykmy. 485 wybwanie Mgd6w skledni. I 56 wy&,enia, 167.204 wylwietlanie komponent6w pjektu , 733 rasitg zrnicnnych, 197 zbiory, 142, 167, 168 mienne, 143. 192 zmicnne obi&owt. 207

VBA Extensibility. 732 vbAbo* 352 vbCance1, 352 VBCornponcn& 734

Export, 734 Import, 734 Remove, 734

VBComponenu. 73 1 Remove, 769

M r L f , 317,353 VBE. 40,141,144, no

Class Modult~. 147 Code, 146 Eksplararar projckt6w, 146 Immedliaae. 146 interfcjs, 145 pasek menu, 145 pasck narqdzi. 145 Project Explorer. 146 projckt, 146 umchamianie, 144

vblgnorc, 352 vbModelcss, 402,435 vbMsgBaxHelpButton. 680 vbNcwLine, 353 vbNo, 352 vbOK, 352 vbOKOnly, 3 17 VBProjccts, 73 l vbReby, 352 VBSmipt, 96,144.711 vbTab. 353 vbYes, 352 Version, 697 Visible, 173 VisiCalc, 29.89.114 Visual Basic.40,61 Visual Basic - Panoc, I72

Page 788: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

866 Dodatki

WIK1.66 Walutowe, 50 wanoSci

bl~ddw. 73 liczbowe, 46.50 logicmc 46 maksymalnc, 334

WAV. 340.766 WB1.88 WB2, 88 WB3.88 wbudowane okna dialogowe, 360,362

argummty. 363 V B q 792

wczcsne wiqzanie. 570 WetkDay. 234.543,815 WeekdayName. 8 15 wersjc Excela 120. 134.695

runtime. 133 wcrsje narodowe aplikacji, 134,699 weryfikacja pprawnoki danych. 550 While ... Wend. 810 wiadomojci e-mail, 577 wiqzani+ 570 Widok. 43 Width, 373.392 Width #. 810 wiersze. 40

nanuy, 70 usuwanie puslych wimzy, 303

WindowActivate. 542, 555 WindowDeaclivate. 542, 555 WindowResize, 542.555 Windows, 32,168,699

rejestr systemu, 100 Windows 3.0.32 Windows API. 287 Windows Scripting Host, 71 1, 714 WindowsDir. 289 WinHclp. 677,680 wimsy, 770 With, 154. 177, 810 With ... End With. 21 1 WKI. 87 WK3,87 WK4.87.88 wklejanie, I50

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

W Activesheet, 178 Activewindow. 178 ActiveWorkbook, 178 AIIVisible, 213 argurnenty, 170 BuiltinDocumentPmperties. 325 Cells 181 Color. 176 Colorlndwc, 176 Comment, 175 do odczytu i zapisu, 755 Faceld, 7% Font 373 FormulaRICI, 183 ID, 646 Intanationid, 703 kontrolki, 371 LinkedCell. 368 lokalne. 702 obiektbw, 142 Offset, 164. 182 Orientation, 154 Parcnt, 327 paski pol&, 620 programowanic, 754 PmteaStructure, 257 Range, 180 Rangeselection, 178 ScreenUpdating, 489 Selection, 178 skomslyt. 3 12 SpocialEffect, 423 Style. 629 Tabrodex, 374 Tag, 389 Thisworkbook, 178 tylko do odczyhl, 173.755 tylko do zapisy 755 typu logicmego, 314 Vdue, 170, 171

Wmd. 167,571 twomnie arkusza Excela, 576 zxza&anic. 573

WordApp, 512 Workbook, 142, 143, 168

AckiveWorkbook. 486 Close, 149 Protect, 170

Workbook-BefwcClosc, 653 Workbook-Open. 537,539,543,653,775

Page 789: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Workbooks. 92. 143, 168 WorkbookSync. 556 WorkRange. 467 Worksheet. 142. 168.180.327

Range. 180 Selec~ionChange, 498

Worksheet-Change. 538.549 Workshcet_Selecti~nChange. 539 WorkshcetFunction, 209.778 Worksheets, 168 wprowadzanie danych. 46,109,296

czas, 79 data, 79 do nast~pmj pustj kom6rki. 297 InputBox, 347 sprawdzanie poprawndci danyrh, 3M typy danych, 46

wprowadzanic kodu h5dloweg0, 150 kopiowanic kody 155 rejestrowanic makr, t 53 r p e . 150

WQl, 88 wrapper, 289 Write U, 717.810 WriteResdRangc, 305 WritcRcgistry, 343 wskaknik post~pu zadania 421,791

bez kontmlki MultiPage. 426 MultiPagz 424 pasck smw, 421 samodzielny. 422 UpdateFmgres$426 .

vrsp6lpraca z aplikacjami 563 ADO. 579 aktywacja aplikacji, 567 AppAdimte, 567 automatyzacjq 569

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

FileDialo& 360 GetDircctmy, 358

wydajno8C. 120 Variant, 195

wykonywanie funkcj i. 267 makr, 50. 152

wykonywanie procedur, 229 klawia Ctrl, 231 klikniqcic obicktu. 238 n~estandardowe menu, 232 okno Immediate, 239 okno Makro. 230 po wystapicniu zdamenia 239 p ~ c i s k l paska narydri. 237 Run Sub'UserFom, 230

wyk~sy.41.52.514 A c t i v e C h 490 aktualizacja. 499 aktymcja 490 aktywne. 485 an~macja, 5 18 automatyczne filtrowanic. 522 autornaryczne generowanie, 506 Chart 485.486.487 Chart-Act&, 509 Chart-Deactivate. 5 10 Chart-MwscMove. 5 17 ChartSeIech 509,510 ChartObject 487.491 ChartTitle, 487 ConvcrtCh~ToPichm, 515 CreareADeadCharf 516 dcaktywxja. 49 1 DissblcChartEvents, 513 drulr~wmie, 515 EnableChartEvents. 513

Page 790: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

wybcsy ctykicty, 503 formatowanie VBA, 493 formularze UscrFonn, 442 formula SERIE, 496 interaktywne, 530 konwersja w arkusz wylrresu, 490 kreator, 485 krzywe hipocykloidalne. 5 19 rnakra. 487.489 rnapa obrazkowa. 5 13 martwe, 5 15 modyfikacja danych. 498,499 MouscOver. 517 obsluga kliknivia kolumny. 514 obsluga zdmef~. 5 11 okre4lanie danych. 497 OWC. 446 pliki XLA. 595 pliki XLS. 595 pola kombi. 495) poloZenie, 485 powii\zanie zadcklmownncgo obiiktu, 5 1 1 procedury obshgi zdarr.cn, 509.5 11

przetwivranie w p q l i 494 rejatmwanie rnakr, 487 samorozszenajqce s i ~ 524 xria danych, 500 stcrowanie xriami d a n m 522 testowanie aktywacji. 492.784 twonenie, 52 usuwanie arkuszy, 492 usuwanie elerncnt6w z koldtcji m b j c c g 492 VBA. 485 wyr6wn-vwanie, 494 wyiwictlanie ctykict, 503 wySwietlanie telrstu. 5 17 wyhvietlanic w formulam UscrFonn, 505 XY. 504,518 zakres danych, 500 zapisywanie w pliku. 443 tapisywsnie w pliku GIF, 443,776 zapisywanie wielu wybcsdw w arkusu-wyltreJic,

521 zdarntnia, 507.553 zcgar, 520 miana rozmiar6w. 494

wyhywanie W d w , 283 wciSnip5a klawiszn Shift, 289

aybpanie obslugi u k c h , 538 wymapnia utytkownik 1 18 wymuszanie deklaracji zmicnnych, 197

wyntcnia, 167.204 WYSIWYG, 3 1.87 wysylanie wiadomdci c-mail, 577

zal~cmiki. 581 WYSZUKAJ.PIONOWO.271,532 wyszukiwanie

plikbw. 713 zdarznl, 554

wySwictlanie arkuszy w fmularzach UscrFonn, 446 day. 3 15 formularry UswFom, 375 komponent6w pmjektu VBA. 733 okien dialogowych. 360,381 plikbw HTML Help. 680 tckstu pomocy, 670 wskafnika postqpu radania, 421 wykrcsdw w fomularzach UserForm, 443

wywolywanie funkcji. 267 formuly. 267

wywolywanie procedur, 233 z innego modulu, 235 . z innego skoroszyru. 235

xl24HourClock, 704 xl4DigitYcars. 705 XLA. 37.59 1.594 XLB, 91 xlColumnSepsrator, 703 xlCountryCodq 703 xlCountrySetting 703 xlCurrcncyBefo~, 704 xlCurrcncyCode, 704 xlCurrencyDigits, 704 xlCurrcncyLcadingZms, 704 xlCumncyMinusSign, 704 ~ICumncyNcgative. 704 xlCunmc$paceBefore. 704 xlCurrcncyTrailing2eraq 704 xlDatcOrder, 704 xlDateSepamtor. 704 xlDayCode, 704 xlDayLeadingZcro, 705 x l D e c i r n a l S e ~ , 703 xlDialogChartType, 792 xlDialogFontProperties, 362 xDialogFormulaGoto, 361 xlErrDiv0, 279 xlErrNA. 279 xlErrNamq 279 xlEnNull, 279 xlErrNum. 279

Page 791: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

xlErrRef, 279 xlErrValuc, 279 XLFile, 756 xlGencralFormatName, 704 xlHourCode. 704 XLL, 59 1 xlLandscapc. 202 xlLeftBrace. 703 xlLetlBrack*. 703 xlLiaSeparator. 703 xlLowcrCascColumnLener. 703 xlLowerCaseRowLener, 703 XLM. 34.42.52, 140, 141 xlMDY. 705 xlMaric, 704 xlMinutcCode, 704 xlMonthCodc. 704 xlMonthLeadingZero, 704 xlMonthNarneChaq 704 xlNoncumncyDigits, 704 xlNonEnglishFunctions. 704 xlportrait, 202 xlRightBracc. 703 xlRightBrackct 703 xlRowScparator. 703 XLS. 40.87.90

I xlSecondCode, 704 XLStart. 85. 165 xlThousandsSepanrtor, 703 xlTimeLeadingZero. 705 xlTimeSeparator. 704 xlToLeK 295 .xlToRight. 295 xlUp. 295 xlUppuCascCdumnLenet, 703 xlUpperCaseRowLmn; 703 xlw. 90

I xlWeekdayNameChars, 704 xlYearCode, 704 XML, 36.56.94. %

dokumenty. % W r t , 96.99

1 imporf 96.97 I import do listy, 99

! m v y , 97.98 macmiki. 96

Xor. 205 XValues, 501 XVALUES-FROM-SERIES. 501,

zabczpiaztnia mak, 770 takhikowc o h a dialogowe, 369 zakoficzmie pracy Excela, 78 1 zakresy, 179

aktywacja, 781 Cells, 181 ekspolt do pl:h HTML. 723 eksport do pliku XLM, 726 idcntyfikacja. 294 kopiowanic, 292 monitorowanie rnodyfikacji. 549 monitorowanie pugrubienia zawartoSci k o m k k

z formulami, 549 monitorowanie poprawnofci danych, 550 nazwy, 67.782 odczytywanie, 305 okno wprowadzaoia danych 350 okrdlanie typy 300 porqdkowanie w s+b losowy. 336 prrenoszenie. 293 prrenosrcnie zawartofci do mblicy typu Variant,

3 08 przawarranic, 294 przawartanie bm6rek 302 przetwammie VBA, 291 Range. 179 tymcrasowc tablice. 307 wery f ik j a poprawnofci danycb. 550 wypelnianie metodqsiiowq, 306 zapisywanie. 305,306 z a w i m i e w innym zakmie. 304 zaznaczanie, 397,781 zamacmie malcsymalnej wanofci. 309 tamaczanic r62rego typu, 294 zmienna wielkoi& 293

Zamknij. 400 ramrotenie okicn, 256 zamykanie

fomulana UscrForm, 375.377 skomsq46w. 3 12

zapisywanie plik6w tekstowych 716 njestru systemowego, 342 ustawid narqdzia, 465 wielu wykrcs6w w nrkuszu-wybesie. 523 wsrystkich skoroszytbw. 312

503 wykrcsu do pliku, 443 lvySwietlanie daty, 325 m k n d w , 305.306

Zap ie jako stronq sicci Web, 95 zaqldzanie

Excelem 576 Word- 573

Page 792: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

micg funkcji. 266 proccdury, 228 nnicnnych, 197

zasoby online, SO1 mtqpczy P w k menu arkusza kalkulacyjinego, 659 zastepowanie moduiu uaktualnionq wersjg 734 zaznaczanie

kombrek okdlonego formatu. 3 10 maksymalnej wartolci zakrcsu, 309 obiekt6w. 49 ostatniej pozycji w kolumnie~wieazu. 785 r6tnego typu rakrrs6w, 294 zakredw. 397

zbiory. 142, 167. 168. 184 CommandBars. 142 Comments. 174 Controls. 390 Dinlogs. 361 NoDupeq 407 UserFonns, 376 Workbooks. 143. 168 Worksheets. 142. 168

zdanenia 378 Activate. 385,386,508,542,543,548,553,559 Addcontrol. 559 Addin, 602 AddinInstall. 542 AddinUninstall. 542 AAcrUpdate, 387 AAerXMLExporf 542 AAerXMLImpon. 542 aplikacji. 553 Application, 555 BeforeClosc. 542.546 BeforeDoubleClick, 508, 548, 553 BeforcDragOver. 387,559 BeforeDropOrPaste, 387,559 BeforePrint. 542,545 BeforeRightClick. 508,548,552,553 Beforesave, 542.544 BeforeUpdatc, 387 BeforeXMLExport, 542 BeforcXMLImpo~t. 542 Calculate, 508,548,553 Change, 387.388.430.547.548 Cha* 508 Click, 378. 559 DblClick, 559 Deactivate, 386,508,542. 544,548,553.559 Dragover, 508,553 DragPlot, 508,553 Enter. 387

Error, 387,559 Exit, 387 FollowHypalink, 548 formularzy UserForm. 385,558 gcnerowane pnez klawiatuv, 387 generowane pnez mysz 387 infarmacje, 536 In~tialize. 376,385,386,391. 559.757 KeyDown, 387.559 KeyPnss. 387,559 Key Up, 387.559 Layous 559 menu. 652 rnodub klas, 757 monitorowmic. 535 MouseDown, 508,553,559 MouseMove. 508,553,559 Mouseover, 517 Mouseup. 508.553.559 Newsheet. 542.544 NewWorkbook 555 nienv~apne z obiektami, 559 obstugq 535 OnKey. 561 OnT~nw, 560 Open. 541.542 PivotTablcCldonneaian. 542 PivotTableOpenConnbctim~. 542 PivotTableUpdate, 548 poziomu arkusza 547 poziomu skoroszytu. 541 procedury obslugi, 378. 537 QucqClos. 377,386,400,559 RcmoveConbol. 559 Resize. 508,553,559 Scroll. 404.559 sekwenqe. 536 Selea 508,553 SelectionChangq 437,548.55 I. 622 ScricsChangc, 508,553 ShcetActivatc 542,543,555 SheelBeforeDoubleClick, 542,555 SheetBefmRightCliclt, 542,555 SheetCalcutae, 542,555 Sheelchange, 542,555 SheclDeact~Mtc. 542 555 SheeffollowHy~ink, 542.555 ShcetPi\otTabkUpdat~ 542. 555 ShectSelectionChange. 542,555 SpinDown, 387 SplnUp, 387 Sync, 542 Terminate, 377,384,559,757

Page 793: Helion-John Walkenbach-Excel2003PL Programowanie W VBA Vademecum net

Skorowidz 87 1

WindowActivate. 542,555 WindowDtamivate. 542. 555 WindowRcsize, 542,555 WorkbaokActivate. 555 WorkbookAddinInstall. 555 WorkbookAddinUninstall, 555 WorkbookAfterXMLExpo& 555 WorkbookAfterXMLImport, 555 WorkbookBeforcClose, 555 WorkbookBeforePrinf 555 WorkbookBeforeSavc. 555 WorkbookBeforeXMLExport, 555 WorkbookBeforeXMLImpoh 555 WorkbookDeactivate, 555 WorkbookNewSheet, 555 WorkbookOpen. 555 WorkbookPivotTableCloseC~~1a:tio~ 556 WorkbookPivotTabld)penConnection. 556 Workbooksync. 556 wykresowW 507. 553 wykresow wbudowanych, 512 wylqczanie obstugi, 538 wyauklwanie, 554 Zoom. 559

mgar, 520 zestawianic danych. 57 zwn- bazy danych 53.55 zgodnog. 695

data. 705 formay plikdw Exacla. 697 identyfikacja ustawid systernu, 703 komputery Macintosh. 698 obsluga wieh j~zykbw. 701 problcmy, 696 unikanic nawych wldciwofci. 698 wcrsje Exacla. 58 wcrsje namdowe aplikacji, 699 wlaiciwo$ci Iokalne. 702

zintegmwanc M o w i s k o programisty, 729 zlicmic, 76

fomuiy tsblicowe, 77 komdrck o z a m o k i mi.ylzy dwoma

wartoSciami, 327 prak6w narydzi, 621 widocznych komdrek zakresu, 328 zamauonych kom6rek. 299

zlotone tabele przestawne. 474 CreatePivotTable. 477 danc. 475 kod VBA, 475

zmiana r o m i m w y h u , 494 wielkoSci formularza UscrForm, 401

zmicnnc, 143, 192 dcklaracja, 196 globalne, 200 lokalnc 198 moduly. 199 nazwy, 193,200 obiektowc, 207 okrdlanie rlrpu danych. 1% poziornu moduk 757 pub1 iczne, 242 statycme. 201 wymuszanie dcklaracji. 197 zasig, 197

m a c z n ~ k ~ H m L , 93 XML, %

mak dcfinicj i typu, 772 Zoam, 403.559 zwieksmic odpornbki aplikacji. 128

kMl0 danych ODBC, 479 XML. 97.99