Download as pdf or txt
Download as pdf or txt
You are on page 1of 35

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

Access.
Programowanie w VBA
Autor: Charles E. Brown
Tumaczenie: Krzysztof Masowski (wstp, rozdz. 1 8),
Grzegorz Werner (rozdz. 9 21, dod. A)
ISBN: 83-7361-807-4
Tytu oryginau: Access VBA Programming
Format: B5, stron: 408

Wykorzystaj ca moc Accessa


Poznaj rodowisko VBA
Naucz si wykorzystywa moliwoci Accessa w VBA
Stwrz wydajne i szybkie aplikacje
MS Access jest jednym z najczciej wykorzystywanych systemw zarzdzania bazami
danych. Jest atwy w obsudze, posiada spore moliwoci i nie wymaga poznawania
zoonych jzykw manipulacji danymi. Czasem jednak jego podstawowe moliwoci
nie wystarczaj do realizacji niektrych zada. W takich sytuacjach naley sign
po VBA (Visual Basic for Applications), czyli narzdzie programistyczne pozwalajce
na tworzenie aplikacji dla aplikacji programw integrujcych si z Accessem
i wykorzystujcych jego funkcje, ale w sposb dokadnie taki, jaki jest potrzebny
w okrelonym przypadku.
Ksika Access. Programowanie w VBA opisuje zasady programowania w Accessie
z wykorzystaniem VBA. Przedstawia zasady projektowania aplikacji i pracy
ze rodowiskiem programistycznym VBA, korzystania z elementw i funkcji Accessa
oraz tworzenia formularzy i raportw. Znajdziesz w niej take bardziej zaawansowane
techniki tworzenie aplikacji klient-serwer, mechanizmy wymiany danych pomidzy
aplikacjami pakietu MS Office oraz czenie Accessa z SQL Serverem.
Projektowanie aplikacji
Dostosowanie Accessa do wasnych potrzeb
rodowisko programistyczne VBA oraz jzyk Visual Basic for Applications
Tworzenie formularzy, raportw, menu i paskw narzdziowych
Bezpieczestwo baz danych
Aplikacje WWW i zastosowanie jzyka XML
Tworzenie aplikacji wielodostpnych
Jeli nie wystarczaj Ci standardowe moliwoci Accessa, signij po VBA w ten
sposb wykorzystasz prawdziwe bogactwo Accessa.

Spis treci
O Autorach ........................................................................................ 9
Wstp ............................................................................................. 11

Cz I

Poznanie rodowiska MS Accessa ..................................15

Rozdzia 1. Wstp do VBA for Applications......................................................... 17


Historia Microsoft Accessa ............................................................................................. 17
Tworzenie aplikacji w Accessie ...................................................................................... 19
Okno Baza danych .................................................................................................... 19
Makra ........................................................................................................................ 21
Moduy...................................................................................................................... 22
Przyszo Microsoft Accessa ......................................................................................... 23
Podsumowanie ................................................................................................................ 24

Rozdzia 2. Projektowanie aplikacji Accessa ...................................................... 25


Etapy procesu tworzenia aplikacji ................................................................................... 26
Okrelanie i analizowanie wymaga ............................................................................... 26
Analizowanie wymaga ............................................................................................ 27
Ocena i oszacowanie wymaga....................................................................................... 28
Projektowanie i tworzenie programu............................................................................... 29
Model encja-relacja................................................................................................... 30
Tumaczenie modelu E-R na accessow baz danych............................................... 31
Wdraanie i testowanie.................................................................................................... 34
Przygotowanie dokumentacji .......................................................................................... 35
Utrzymanie systemu ........................................................................................................ 36
Podsumowanie ................................................................................................................ 37

Rozdzia 3. Uywanie Accessa bez VBA.............................................................. 39


Architektura systemu....................................................................................................... 40
Rozumienie aplikacji bazodanowej ................................................................................. 41
Praca bez VBA ................................................................................................................ 42
Relacje....................................................................................................................... 43
Zdarzenia......................................................................................................................... 45
Stwrz makro ............................................................................................................ 46
Przeksztacanie makr w kod VBA............................................................................. 49
Konwencje nazw ............................................................................................................. 50
Szablony predefiniowane ................................................................................................ 50
Menader panelu przeczania......................................................................................... 51
Podsumowanie ................................................................................................................ 55

Access. Programowanie w VBA

Rozdzia 4. Przystosowywanie rodowiska Accessa do wasnych potrzeb ............ 57


Interakcja z Accessem ..................................................................................................... 57
Dostosowywanie paska polece................................................................................ 59
Tworzenie wasnego paska narzdziowego............................................................... 62
Dostosowywanie menu podrcznych .............................................................................. 63
Tworzenie menu.............................................................................................................. 64
Przypisywanie kodu do elementu dostosowanego menu ................................................. 65
Podsumowanie ................................................................................................................ 68

Cz II

Poznanie rodowiska VBA...............................................69

Rozdzia 5. Wprowadzenie do rodowiska programistycznego VBA ...................... 71


Wprowadzenie do VBA .................................................................................................. 71
Historia VBA ............................................................................................................ 72
Model VBA..................................................................................................................... 72
Moduy...................................................................................................................... 73
Procedury .................................................................................................................. 73
Koncepcja obiektw ........................................................................................................ 74
Obiekty ADO ............................................................................................................ 76
Obiekty VBA ............................................................................................................ 77
Obiekty Accessa........................................................................................................ 77
Edytor VBA .................................................................................................................... 78
Zaprzgnicie edytora VBA do pracy ....................................................................... 80
Podsumowanie ................................................................................................................ 84

Rozdzia 6. Podstawy programowania w VBA...................................................... 85


Podstawy programowania ............................................................................................... 85
Tworzenie moduw standardowych......................................................................... 86
Tworzenie procedur .................................................................................................. 88
Wejcie i wyjcie....................................................................................................... 94
Struktury sterujce........................................................................................................... 96
Struktury decyzyjne .................................................................................................. 96
Ptle ........................................................................................................................ 101
Tablice........................................................................................................................... 106
Skadniki tablicy ..................................................................................................... 106
Czyszczenie tablic................................................................................................... 111
IsArray .................................................................................................................... 111
Podsumowanie .............................................................................................................. 112

Rozdzia 7. Zrozumienie dziaania edytora VBA ................................................. 113


Otwieranie edytora VBA............................................................................................... 113
Najwaniejsze elementy i cechy systemu menu ............................................................ 115
Menu Edit ............................................................................................................... 115
Menu View.............................................................................................................. 115
Menu Tools ............................................................................................................. 116
Menu podrczne (Shortcut)..................................................................................... 116
Paski narzdziowe Debug, Edit i UserForm .................................................................. 117
Eksplorator projektu...................................................................................................... 118
Zarzdzanie moduami .................................................................................................. 119
Wstawianie i kasowanie moduw .......................................................................... 119
Importowanie i eksportowanie moduw ................................................................ 120
Okno Properties............................................................................................................. 121
Przegldarka obiektw .................................................................................................. 121
Biblioteki................................................................................................................. 124
Referencje ..................................................................................................................... 125

Spis treci

5
Uywanie opcji edytora VBA........................................................................................ 125
Karta Editor............................................................................................................. 126
Karta Editor Format ................................................................................................ 129
Karty General i Docking ......................................................................................... 130
Siganie po pomoc ........................................................................................................ 131
Rozpoczynanie nowej procedury w VBA ..................................................................... 133
Podsumowanie .............................................................................................................. 134

Rozdzia 8. Skadniki jzyka VBA ..................................................................... 135


Obiekty w VBA............................................................................................................. 135
Stae wewntrzne........................................................................................................... 136
Podstawowe programy VBA uywajce formularzy..................................................... 137
Ustawianie ogniska ................................................................................................. 138
Znajdowanie rekordu .............................................................................................. 141
Obiekt Me ............................................................................................................... 143
Sprawdzanie poprawnoci rekordu ......................................................................... 144
czenie z Accessem..................................................................................................... 145
SQL (strukturalny jzyk zapyta).................................................................................. 146
SQL podstawy.................................................................................................... 147
SQL i VBA.................................................................................................................... 150
Prezentacja wynikw..................................................................................................... 153
Podsumowanie .............................................................................................................. 155

Rozdzia 9. Procedury ...................................................................................... 157


Deklarowanie procedury ............................................................................................... 157
Funkcje.......................................................................................................................... 159
Parametry ...................................................................................................................... 160
Parametry opcjonalne.............................................................................................. 162
Parametry nazwane ................................................................................................. 163
Projekt i zasig .............................................................................................................. 164
Zmienne globalne i statyczne ........................................................................................ 165
Zmienne globalne.................................................................................................... 165
Zmienne statyczne................................................................................................... 166
Zmiana struktury bazy danych za pomoc procedury.................................................... 167
Konstruowanie tabeli .............................................................................................. 167
Podsumowanie .............................................................................................................. 169

Rozdzia 10. Usuwanie usterek z kodu VBA........................................................ 171


Podstawowe informacje o obsudze bdw .................................................................. 171
Bdy wykonania..................................................................................................... 172
Obiekt Err...................................................................................................................... 176
Kolekcja Errors ............................................................................................................. 177
Narzdzia do usuwania usterek z kodu.......................................................................... 180
Okno Immediate i punkty wstrzymania................................................................... 181
Asercje .................................................................................................................... 183
Okno Locals ............................................................................................................ 184
Okno Watch ............................................................................................................ 185
Podsumowanie .............................................................................................................. 186

Rozdzia 11. Funkcje ......................................................................................... 187


Podprogramy i funkcje .................................................................................................. 187
Funkcje wbudowane...................................................................................................... 188
MsgBox................................................................................................................... 188
InputBox ................................................................................................................. 192
Funkcje daty i czasu ...................................................................................................... 193
Funkcje finansowe......................................................................................................... 195
Podsumowanie .............................................................................................................. 197

Access. Programowanie w VBA

Cz III Interakcja z VBA ..........................................................199


Rozdzia 12. Formularze..................................................................................... 201
Formularze i dane.......................................................................................................... 201
Dynamiczne przypisywanie zestaww rekordw .......................................................... 205
Doczanie i edytowanie danych ................................................................................... 207
Sterowanie formantami na formularzach....................................................................... 208
Podsumowanie .............................................................................................................. 214

Rozdzia 13. Raporty ......................................................................................... 215


Anatomia raportu........................................................................................................... 215
Kreator raportw ........................................................................................................... 218
Raporty specjalne .......................................................................................................... 220
Wykresy .................................................................................................................. 221
Etykiety adresowe ................................................................................................... 224
Wywoywanie raportu z kodu VBA .............................................................................. 226
Tworzenie raportu metod programow........................................................................ 226
Tworzenie pustego raportu...................................................................................... 226
Dodawanie formantw do raportu........................................................................... 228
Podsumowanie .............................................................................................................. 231

Rozdzia 14. Menu i paski narzdzi .................................................................... 233


Paski polece................................................................................................................. 233
Tworzenie paska narzdzi ............................................................................................. 235
Menu ............................................................................................................................. 240
Podmenu........................................................................................................................ 243
Podsumowanie .............................................................................................................. 244

Rozdzia 15. Modyfikowanie rodowiska Accessa............................................... 245


Waciwoci startowe .................................................................................................... 245
Modyfikowanie opcji .................................................................................................... 247
Karta Widok............................................................................................................ 249
Karta Oglne ........................................................................................................... 249
Karta Edytowanie/Znajdowanie .............................................................................. 250
Karta Klawiatura ..................................................................................................... 250
Karta Arkusz danych............................................................................................... 251
Karta Formularze/Raporty....................................................................................... 251
Karta Strony ............................................................................................................ 252
Karta Zaawansowane .............................................................................................. 252
Karta Midzynarodowe ........................................................................................... 253
Karta Sprawdzanie bdw...................................................................................... 253
Karta Pisownia ........................................................................................................ 253
Karta Tabele/Kwerendy .......................................................................................... 254
Podsumowanie .............................................................................................................. 255

Cz IV Zaawansowane techniki programowania .......................257


Rozdzia 16. Bezpieczestwo bazy danych.......................................................... 259
Access i bezpieczestwo ............................................................................................... 259
Interfejs uytkownika.............................................................................................. 259
Ustawianie hasa ..................................................................................................... 260
Programowe tworzenie hasa................................................................................... 261
Ochrona kodu VBA................................................................................................. 262
Kompilowanie kodu do pliku .mde ......................................................................... 263
Zabezpieczenia na poziomie uytkownika .................................................................... 263
Modyfikowanie kont uytkownikw metod programow ..................................... 266

Spis treci

7
Bezpieczestwo i Access 2003...................................................................................... 268
Jet Sandbox ............................................................................................................. 269
Zabezpieczenia makr............................................................................................... 269
Podsumowanie .............................................................................................................. 273

Rozdzia 17. Access i rodowisko Microsoft Office ............................................. 275


Wspdzielone obiekty .................................................................................................. 275
Obiekt FileSearch.................................................................................................... 276
Obiekt CommandBar .............................................................................................. 277
czenie Accessa z innymi programami pakietu Microsoft Office ............................... 280
czenie si z Excelem ........................................................................................... 281
czenie si z Outlookiem ...................................................................................... 283
czenie si z Wordem ........................................................................................... 284
Podsumowanie .............................................................................................................. 286

Rozdzia 18. Access i sie WWW....................................................................... 287


Mechanika sieci WWW................................................................................................. 287
Strony dostpu do danych ............................................................................................. 288
Generowanie strony dostpu do danych.................................................................. 289
Zapisywanie strony DAP ........................................................................................ 293
Tworzenie strony dostpu do danych w widoku projektu ....................................... 295
Strony dostpu do danych i VBA............................................................................ 297
XML (Extensible Markup Language) ........................................................................... 298
Podsumowanie .............................................................................................................. 301

Rozdzia 19. Rozbudowa .................................................................................... 303


Microsoft Access i SQL Server ..................................................................................... 304
Access Data Projects ..................................................................................................... 304
Rozbudowa bazy danych Accessa........................................................................... 306
Praca z plikiem ADP ..................................................................................................... 310
Procedury przechowywane ..................................................................................... 311
Widoki .................................................................................................................... 311
Podsumowanie .............................................................................................................. 313

Cz V

Tworzenie aplikacji.......................................................315

Rozdzia 20. Aplikacje wielodostpne ................................................................ 317


Wspdzielenie bazy danych ......................................................................................... 317
Obsuga wspzawodnictwa i konfliktw...................................................................... 318
Ustawianie interwau odwieania .......................................................................... 319
Ustawianie interwau aktualizacji............................................................................ 319
Blokowanie rekordw w interfejsie Accessa........................................................... 320
Ustawianie opcji sposobem programowym............................................................. 322
Blokowanie rekordw w ADO................................................................................ 323
Zwikszanie wydajnoci aplikacji ................................................................................. 324
Oddzielanie danych od innych obiektw Accessa................................................... 325
Centralizacja i decentralizacja................................................................................. 329
Kompilowanie kodu ................................................................................................ 329
Optymalizowanie kodu VBA .................................................................................. 331
Podsumowanie .............................................................................................................. 333

Rozdzia 21. Nie tylko Microsoft Access ............................................................ 335


VBA i Microsoft Office................................................................................................. 335
Visual Basic .................................................................................................................. 340
VBScript........................................................................................................................ 347
Platforma Microsoft .NET............................................................................................. 349
Podsumowanie .............................................................................................................. 350

Access. Programowanie w VBA

Dodatki .......................................................................................351
Dodatek A Obiekt DoCmd ............................................................................... 353
AddMenu ...................................................................................................................... 354
ApplyFilter .................................................................................................................... 354
Beep .............................................................................................................................. 355
CancelEvent .................................................................................................................. 356
Close.............................................................................................................................. 356
CopyDatabaseFile ......................................................................................................... 358
CopyObject ................................................................................................................... 358
DeleteObject.................................................................................................................. 359
DoMenuItem ................................................................................................................. 360
Echo .............................................................................................................................. 360
FindNext........................................................................................................................ 361
FindRecord.................................................................................................................... 362
GoToControl ................................................................................................................. 364
GoToPage...................................................................................................................... 364
GoToRecord.................................................................................................................. 365
Hourglass....................................................................................................................... 366
Maximize....................................................................................................................... 366
Minimize ....................................................................................................................... 367
MoveSize....................................................................................................................... 367
OpenDataAccessPage.................................................................................................... 368
OpenDiagram ................................................................................................................ 369
OpenForm ..................................................................................................................... 369
OpenFunction................................................................................................................ 371
OpenModule.................................................................................................................. 371
OpenQuery .................................................................................................................... 372
OpenReport ................................................................................................................... 373
OpenStoredProcedure.................................................................................................... 374
OpenTable ..................................................................................................................... 375
OpenView ..................................................................................................................... 376
OutputTo ....................................................................................................................... 377
PrintOut......................................................................................................................... 379
Quit ............................................................................................................................... 380
Rename.......................................................................................................................... 380
RepaintObject................................................................................................................ 382
Requery ......................................................................................................................... 382
Restore .......................................................................................................................... 382
RunCommand ............................................................................................................... 383
RunMacro...................................................................................................................... 383
RunSQL ........................................................................................................................ 384
Save............................................................................................................................... 385
SelectObject .................................................................................................................. 386
SendObject .................................................................................................................... 387
SetMenuItem ................................................................................................................. 388
SetWarnings .................................................................................................................. 389
ShowAllRecords............................................................................................................ 389
ShowToolbar ................................................................................................................. 390
TransferDatabase........................................................................................................... 391
TransferSpreadsheet ...................................................................................................... 391
TransferSQLDatabase ................................................................................................... 391
TransferText .................................................................................................................. 391

Skorowidz...................................................................................... 393

Rozdzia 6.

Podstawy
programowania w VBA
W rozdziale 5 poznae rodowisko VBA, jego struktur, koncepcj i edytor. Teraz
zamierzamy przedstawi podstawy programowania oraz specyficzn skadni jzyka
VBA. Wrcimy do koncepcji omwionych w rozdziale 5 i przyjrzymy si im dokadniej,
zaczynajc od przegldu miejsc, gdzie kod jest przechowywany, oraz typw blokw,
na jakie jest dzielony. Czynic to, szczegowo zajmiemy si rwnie problemem
zmiennych. Trudno jest mwi o zmiennych, pomijajc ich szczeglny typ nazywany
tablic (array).
Zamierzamy take przyjrze si kilku wbudowanym narzdziom VBA, znacznie uatwiajcym wykonywanie zada. Zakoczymy nasze rozwaania, przygldajc si rnym
typom struktur programistycznych i ich stosowaniu w rodowisku VBA.

Podstawy programowania
Jak ju powiedzielimy w rozdziale 5, kod VBA jest zapisywany i przechowywany
w moduach. Zapewne pamitasz, e istniej dwa podstawowe typy moduw: powizane
z raportami i formularzami oraz oglne, przechowujce procedury uywane w caym
projekcie.
Istnieje jeszcze jeden typ zwany moduem klasy, ktry zawiera kod powizany z obiektem. O moduach bdziemy jeszcze mwi w pozostaej czci ksiki.
Zanim zaczniesz pisa kod VBA, musisz stworzy modu. Poniewa moduy dla formularzy i raportw s tworzone wraz z formularzami i raportami, tutaj skupimy si na
tworzeniu moduu standardowego.

Cz II Poznanie rodowiska VBA

86

Tworzenie moduw standardowych


Istnieje kilka rnych sposobw tworzenia moduw standardowych. Najatwiej przej
do kategorii Moduy w oknie dialogowym Baza danych, jak to zostao pokazane na
rysunku 6.1. Wystarczy wwczas jedynie klikn przycisk Nowy, aby zosta przeniesionym do edytora VBA, a w nim do wntrza stworzonego moduu, co zostao pokazane
na rysunki 6.2.
Rysunek 6.1.
Okno Baza danych
po wybraniu
kategorii Moduy

Rysunek 6.2. Edytor VBA z otwartym moduem Module1

Rozdzia 6. Podstawy programowania w VBA

87

VBA nada nowemu moduowi tymczasow nazw . Zapewne zachcesz uy


nazwy bardziej opisowej. Moesz j nada w oknie Properties edytora VBA lub bezporednio w oknie Baza danych.
Moesz zaznaczy nazw  w oknie Properties tak, jak to wida na rysunku 6.3,
i wpisa inn nazw, powiedzmy 
  Gdy dokonasz zmiany w oknie
Properties, nazwa zostanie zmieniona rwnie w oknie Project w edytorze VBA
i w oknie Baza danych w Accessie (w kategorii Moduy).
Rysunek 6.3.
Property Name
(czyli Waciwo
Nazwa)

Dodatkowo powiniene na pasku narzdziowym klikn przycisk Save. Zostaniesz


poproszony o potwierdzenie nazwy:

O tym, e nazwa zostaa zmieniona, moesz si teraz upewni w oknie Project (rysunek 6.4) i w oknie Baza danych (rysunek 6.5).
Rysunek 6.4.
Okno Project
po zmianie
nazwy moduu

Nazw moduu moesz rwnie zmieni, klikajc j prawym przyciskiem myszy w oknie
dialogowym Baza danych i wybierajc z menu podrcznego polecenie Zmie nazw.

Cz II Poznanie rodowiska VBA

88
Rysunek 6.5.
Okno Baza danych
po zmianie nazwy
moduu

Tworzenie procedur
Przypominam z rozdziau 5, e wikszo kodu VBA jest zapisywana w blokach zwanych procedurami. Dzielimy je na dwa rodzaje: procedury typu  (podprogramy)
i procedury typu   (funkcje). Podprogramy wykonuj zadania, ale nie zwracaj
adnej wartoci, za funkcje zwracaj wartoci.
W wikszoci przypadkw na grze moduu bdziesz widzie dwie nastpujce linie:
 






S to tak zwane deklaracje oglne moduu. Wszelki kod wpisany w tej sekcji bdzie
wpywa na wszystkie procedury w caym module.
Linia    umoliwia wybranie jednego z trzech sposobw sortowania
acuchw znakowych wewntrz kodu:
    powoduje sortowanie w takim samym porzdku

jak sortowanie rekordw bazy danych i jest opcj najczciej stosowan.


      powoduje sortowanie oparte na binarnych

wartociach znakw. Wielkie litery s wtedy ustawiane przed maymi.


     powoduje sortowanie rozpoznajce wielkie

i mae litery z uwzgldnieniem jzyka lokalnego.


W tej ksice bdziemy stosowali domylne ustawienie   .
Linia      jest, moim zdaniem, bardzo wana. Wkrtce przekonasz si,
e moe ochroni Ci przed wieloma bdami kodowania, zmuszajc do jawnego
deklarowania zmiennych przed uyciem.
Jeeli ta opcja nie pojawia si automatycznie wraz z tworzeniem moduu, wymu to,
wydajc polecenie Tools/Options i na karcie Editor zaznaczajc opcj Require Variable
Declaration, tak jak na rysunku 6.6.

Rozdzia 6. Podstawy programowania w VBA

89

Rysunek 6.6.
Opcja Require
Variable Declaration

O procedurze myl jak o miniprogramie majcym wykona jedno wybrane zadanie.


Na przykad zadaniem procedury moe by dodanie do siebie dwch liczb. Zawsze,
gdy zechcesz doda te dwie liczby, bdziesz mg wywoa t procedur. Nie majc
procedury, za kadym razem, gdy naleaoby wykona to samo zadanie, musiaby
pisa kod, w ktrym powtarzaby si ten sam cig polece.
Wewntrz procedury deklarujesz zmienne, uywasz ptli i polece !", a nawet wywoujesz inne procedury. Omwimy po kolei te wszystkie przypadki.
Na pocztku deklarujesz procedur w sposb pokazany poniej. Oczywicie, jej nazw
wybierasz wedle wasnej woli.

  


Zauwa, e edytor VBA nakreli poziom lini oddzielajc now procedur od deklaracji oglnych. Pomaga to wyrnia i oddziela procedury i nie ma adnego wpywu
na ich dziaanie.
Jest wane, aby deklarujc procedur, zaczyna od sowa  i koczy deklaracj
nawiasami. Podkrelam, e to wane, bo uwaam, i od pocztku naley stosowa
waciw skadni. Jeeli pominiesz nawiasy, edytor VBA wstawi je za Ciebie, gdy
tylko naciniesz Enter.
Zwykle w nawiasach umieszcza si wszelkie argumenty, jakich oczekuje procedura,
ale nawet gdy nie ma adnych argumentw, puste nawiasy musz pozosta.
Zaraz po naciniciu klawisza Enter edytor VBA doda, zamykajc procedur, lini
. Cay napisany przez Ciebie kod musisz umieci midzy wyraeniem otwierajcym i zamykajcym.
Na kolejnych kartach ksiki bd robi uwagi o tym, jakie zwyczaje i praktyki programistyczne uwaam za dobre. Cho nie s one bezwzgldnie obowizujce, s akceptowane przez wielu programistw i stay si standardami przemysowymi.

Cz II Poznanie rodowiska VBA

90

Zgodnie z pierwszym zwyczajem, nazwa nadawana procedurze musi opisywa jej dziaanie, np. #  (dodaj liczby). Kady programista od razu rozpozna, do czego ta
procedura suy. Dodatkowo, cho VBA nie rozrnia liter wielkich i maych, czasami
musi wspdziaa z programami, ktre to robi. Oglna konwencja nazw, wspomniana
w rozdziale 4, nakazuje rozpoczynanie nazwy od maej litery, wyrnianie wielkimi
literami pocztkw wyrazw w zbitkach sownych, niestosowanie spacji i zaczynanie
nazw raczej od liter ni cyfr. Rozpoczynanie nazw od liter, a nie od cyfr to w wielu
jzykach, rwnie w VBA, wicej ni zwyczaj to obowizujca zasada, narzucona
przez reguy jzyka VBA.
Drugi zwyczaj to zalecenie wcinania kodu procedury. Dziki temu atwo odszuka, gdzie
si procedura rozpoczyna, a gdzie koczy. Aby zrobi wcicie, zwykle trzykrotnie
naciskam klawisz spacji lub uywam klawisza Tab. Edytor VBA zapamita wcicie
i automatycznie bdzie je stosowa do nastpnych linii.
Trzecim zwyczajem jest staranne komentowanie kodu. Moesz to z atwoci robi,
wpisujc pojedynczy apostrof na pocztku linii. Dziki temu VBA zignoruje t lini,
traktujc j jako komentarz.
Poniszy przykad pokazuje wcicie i komentarz:

  
'Deklaracja zmiennych


Zauwa kolor, jakiego VBA uywa do wyrnienia komentarza. Rozumienie znaczenia


kolorw uywanych przez edytor VBA podczas kodowania pomoe Ci ledzi, co si
z kodem dzieje. Na przykad wywietlenie tekstu na czerwono oznacza bd skadni.
Co oznaczaj poszczeglne kolory, moesz zobaczy, wydajc polecenie Tools/Options.
Po otwarciu okna dialogowego Options karta Editor Format pokae znaczenie poszczeglnych kolorw, a ponadto pozwoli na dokonanie zmian schematu.

Deklarowanie zmiennych
Dwoma zasadniczymi skadnikami procedur s zmienne i metody. Mwic po prostu,
zmienna to kawaek informacji przechowywanej gdzie w pamici komputera. Moe
to by liczba, litera lub cae zdanie. Okrelenie miejsca przechowywanej informacji
jest moliwe dziki nadanej nazwie. Powiedzmy, e w kodzie mamy tak lini:
  

Od tego momentu, jeeli kod gdziekolwiek odwoa si do nazwy  , w to miejsce


zostanie wstawiona liczba 23. Oczywicie, pniej moesz zmiennej o nazwie 
nada inn warto.
Aby zmienna dziaaa prawidowo, powiniene zadeklarowa, jakiego typu informacj
ma przechowywa (w miar uczenia si przyczyny tego stan si dla Ciebie oczywiste).
W tabeli 6.1 zostay podane typy zmiennych i ich zastosowanie.

Rozdzia 6. Podstawy programowania w VBA

91

Tabela 6.1. Typy zmiennych


Typ zmiennej

Opis




Zmienna 
 zwraca wartoci   lub 
 (
!
lub 
"#). Mona je rwnie
wyrazi liczbowo: $
 , %&  .

'

To jeden z najrzadziej uywanych typw zmiennych. Moe przechowywa tylko


pojedyncz warto od 0 do 255.

 '

Robi to, co opisuje nazwa (waluta). Przechowuje wartoci walutowe z czterema


miejscami po przecinku, od 922 337 203 685 477,5808 do 922 337 203 685 477,5807.

Przechowuje daty i czas. Ciekawe, e dopuszczalne lata to od 100 do 9999.



To jeden z dwch typw zmiennych zmiennoprzecinkowych. Drugi to ( .


Zmienne  su do przechowywania bardzo dugich liczb w zakresie
od 1.79769313486231 * 10308 do 4.94065645841247 * 10324 dla wartoci
ujemnych i od 4.94065645841247 * 10324 do 1.79769313486232* 10308
dla wartoci dodatnich.

) (

To jeden z dwch typw zmiennych cakowitych. Drugi to *(. Zmienne ) (


przechowuj liczby z zakresu od 32 768 do 32 767.

*(

*( to drugi to zmiennych cakowitych. Pierwszy to ) ( . Zmienne *(


przechowuj liczby z zakresu od 2 147 483 648 do 2 147 483 657.

+ 

Suy do przechowywania obiektw, ktre maj by pniej uyte.

(

To drugi typ liczb zmiennoprzecinkowych. Pierwszym by  .

 (

To najczciej uywany typ zmiennych. Zmienna typu  ( moe przechowywa


do 2 miliardw znakw.

Do deklarowania zmiennych suy sowo kluczowe  . Na przykad:


   ,) (

Ta deklaracja oznacza, e zmienna o nazwie  bdzie przechowywaa wycznie


dane typu !$ . Zauwa, e jeszcze nie nadalimy zmiennej adnej wartoci (i edytor
by nam na to nie pozwoli). Jedynie zadeklarowalimy nazw i typ zmiennej. Gdzie
w dalszej czci kodu umiecimy lini w rodzaju:
  

Pamitaj, e VBA nie odrnia liter wielkich i maych. Nazwy zmiennej  , #
i  bd rozpoznawane jako ta sama nazwa.

Nadajc zmiennej warto, musisz zdawa sobie spraw z wielu rzeczy. Po pierwsze,
warto nadawana zmiennej typu  $ musi by wzita w cudzysw1. Prawidowe
przypisanie wartoci zmiennej typu  $ moe wyglda nastpujco:
 

, (


-.!
/-

Nie stosujemy cudzysoww drukarskich przyp. tum.

Cz II Poznanie rodowiska VBA

92

Ponadto musisz pamita, e warto nadawana zmiennej typu  musi by ujta
w znaki %. Prawidowe przypisanie wartoci zmiennej typu  moe wyglda
nastpujco2:
 0
 ,

0
 1&$2$32$1

W rozdziale 5 omwilimy konwencj nazw poczonych z obiektami bazy danych.


Te same zasady odnosz si do zmiennych. Pamitaj, e nie s to zasady obowizujce,
lecz tylko konwencje przyjte przez wikszo programistw. Przedrostki nazw s podane
w tabeli 6.2.
Tabela 6.2. Przedrostki zmiennych
Typ zmiennej

Przedrostek






'

'

 '










) (



*(

(

+ 

+

(

(

 (



Dobrym pomysem jest, aby przy nadawaniu nazw obiektom jakiegokolwiek typu
stosowa nazwy opisowe. W ten sposb kod staje si samoopisujcym.
Oto przykad prawidowego zadeklarowania zmiennej daty:
 
0
 ,


Wrmy do procedury # , dodajc deklaracje trzech zmiennych:



  
'Deklaracja zmiennych
    &,) (
    ,) (
   ,) (


Powiniene ju rozumie znaczenie tych deklaracji. W zmiennych #  i 


# & zostan zapamitane dwie liczby. Po dodaniu ich suma zostanie zapamitana
w zmiennej .

Data podawana w stylu amerykaskim: miesic, dzie, rok przyp. tum.

Rozdzia 6. Podstawy programowania w VBA

93

Variant
Typ zmiennej, o jakim jeszcze nie mwilimy, to ' . Zalenie od tego, z jakim
programist rozmawiasz, dowiesz si albo e jest to potne narzdzie programistyczne,
albo e to rozwizanie dla niechlujnych programistw.
'  pozwala VBA na samodzielne okrelanie, jaki typ danych jest zapamitywany.

Jest to domylny typ zmiennych, uywany, jeeli w deklaracji zmiennej pominiesz


klauzul  
. Przedrostkiem oznaczajcym ten typ zmiennej jest ( .
Przykadowa deklaracja zmiennej typu '  moe mie posta:
 4
5'


Poniewa pominlimy parametr  


, zostanie uyty domylny typ ' .
Taki sam efekt daoby uycie deklaracji:
 4
5'

,6



Powiedzmy, e tej zmiennej przypiszesz warto w nastpujcy sposb:


4
5'

-+ #  
6

-

VBA przeksztaci wwczas typ (  na  $. Jeeli potem dokonasz kolejnego
przypisania wartoci:
4
5'

&

VBA zmieni typ (  na !$ .


Jak si przekonamy w trakcie dalszej nauki, czasem prowadzi to do sytuacji, gdy zmienna
'  staje si zmienn nieoczekiwanego typu lub, co gorsza, kocowym rezultatem
jest bd. Wielu programistw uwaa, e uycie zbyt wielu zmiennych typu ' 

powoduje zbdne zajmowanie pamici i spowalnia dziaanie kodu. Zanim wic zdecydujesz si na uywanie zmiennych ' , rozwa dobrze wszystkie za i przeciw.
Najlepiej, aby jako pocztkujcy traktowa zmienne '  z wielk ostronoci
i stosowa przede wszystkim jawne deklaracje typw podstawowych.

Constant
Wielokrotnie chcesz zadeklarowa wartoci, ktre nie bd si zmienia. Uywamy
do tego typu , deklarowanego za pomoc sowa kluczowego , zamiast
 , stosowanego w normalnych deklaracjach.
Oto przykad:
  &,) ( &

 ,
 122$$71

Zauwa uycie przedrostka  zamiast standardowego przedrostka typu. Pamitaj


take, e deklarujc sta, musisz przypisa jej warto, gdy jeeli tego nie zrobisz,
przy opuszczaniu linii zostanie zgoszony bd skadni.

Cz II Poznanie rodowiska VBA

94

Wejcie i wyjcie
Zatem wiesz ju, jak za pomoc zmiennych zachowywa dane. Ale w jaki sposb wprowadzi informacj, jaka ma by zapamitana przez zmienn? Albo jak odczyta informacje zapamitane przez zmienne? Pod wieloma wzgldami wanie tego bdziemy
si uczy w pozostaej czci ksiki. Ale dla przetestowania naszego kodu zacznijmy
od paru najprostszych technik.
Jednym z najprostszych sposobw pobrania informacji od uytkownika i podstawienia
jej pod zmienn jest uycie wbudowanej funkcji !. Spowoduje to wywietlenie
prostego okna dialogowego z wezwaniem.
Kod naszego prostego przykadu uzupenij pokazanymi niej liniami, napisanymi pismem
pogrubionym:

  
'Deklaracja zmiennych
    &,) (
    ,) (
   ,) (
'Uycie InputBox do wprowadzenia liczb

  


  



Zauwa, e dla jasnoci dodaem komentarz informujcy, co robi.


Wyraenie # )! jest nazywane wyraeniem przypisania, gdy przypisuje do zmiennej warto podan przez uytkownika. W tym przypadku zostay stworzone dwa przypisania jedno dla # , a drugie dla # &.
Moesz uruchomi kod, klikajc przycisk Run:

Spowoduje to wywietlenie pokazanego tu okna dialogowego do wprowadzenia pierwszej liczby (do wprowadzenia drugiej liczby zostanie wywietlone oddzielne okno).

Jeeli wykonae poprzednie kroki, kod powinien dziaa, zapamitujc w zmiennych


podane liczby. Jednake w aden sposb nie informuje nas o tym. S dwa sposoby
stworzenia wyjcia. Pierwszy to dopisanie dwch linii, napisanych poniej pismem
pogrubionym:

Rozdzia 6. Podstawy programowania w VBA

95


  
'Deklaracja zmiennych
    &,) (
    ,) (
   ,) (
'Uycie InputBox do wprowadzenia liczb
  &)-8# !#9#:-
  )-8# (9#:-
'Dodanie obu liczb
   &;  
'Wyjcie informacji
 !"
"# $%
%%&




Jeeli teraz uruchomisz kod, ponownie zostan wywietlone dwa okienka, te same co
poprzednio, za komunikat wyjciowy pojawi si w oknie Immediate widocznym na
dole okna edytora VBA.

To okno suy nam jako tymczasowe i przydatne jest w pocztkowej fazie testowania kodu.
Warto tu omwi kilka spraw. Po pierwsze linia:
!"
"# $%
%%&



jest przykadem konkatenacji, gdy czy w cao rne skadniki. Tekst znakowy jest
ujty w cudzysowy, za zmienne nie. Oba typy s oddzielone znakiem *.
Zauwa, e linia zostaa podzielona spacj i znakiem podkrelenia. VBA wymaga
tego, jeeli jedno wyraenie jest dzielone na wiele linii. W ksice bdziemy tak robili
z powodu wymaga typograficznych. Jeeli chcesz, moesz zapisywa wyraenia kodu
w jednej linii.
Innym sposobem formatowania wyjcia danych jest technika, z ktr ju si spotkalimy w rozdziale 4. Moesz uy okna komunikatw, jeeli poprzedni lini wyjcia
zastpisz nastpujc:
5(- 
 #'-<  &<--<  

Spowoduje to wywietlenie okna komunikatu:

A wic masz ju swj pierwszy dziaajcy program napisany w VBA.

Cz II Poznanie rodowiska VBA

96

Struktury sterujce
Komputer dziaa sekwencyjnie. Wykonuje pierwsze polecenie i jeeli nie ma adnego
bdu, przechodzi do nastpnego. Nazywamy to struktur sekwencyjn. Ale co masz
zrobi, jeeli nie chcesz, aby kolejnym krokiem byo wykonanie nastpnej linii kodu?
W pewnych sytuacjach moesz zechcie przekaza sterowanie programem do innego
bloku linii kodu. Albo zechcesz, aby pewien blok linii kodu by powtarzany wielokrotnie, a do wystpienia okrelonej sytuacji (albo okrelon liczb razy).
Mechanizmy suce realizacji tych zada nazywamy strukturami sterujcymi. Struktury
te dzielimy na dwie bardzo szerokie kategorie: struktury decyzyjne i struktury powtarzajce. Jak si zaraz przekonasz, struktury decyzyjne pozwalaj programowi na podejmowanie decyzji. Najpopularniejsz z nich jest struktura !"+++,. Ale VBA ma ich
wicej: !"+++,+++ , !",  i !!".
Struktury powtarzajce powoduj wielokrotne wykonanie bloku linii albo okrelon
liczb razy, albo do zaistnienia sytuacji, ktra spowoduje przerwanie ptli.
W VBA mamy dwie gwne struktury powtarzajce:  +++# i +++-. W ramach
tych dwch struktur zasadniczych istnieje wiele wariacji.

Struktury decyzyjne
Rozwamy pseudokod dla porannych czynnoci. Dla okrelenia dziaania w pewnym
momencie moesz napisa:
'( ) 

 ##
*+ ! # :


, #
 $$#- =+:
0

Wyrazy pogrubione to sowa kluczowe konieczne do podjcia decyzji.


Rozpoczynamy struktur decyzyjn od porwnania dwch wartoci. Czy A jest rwne B?
Czy A jest wiksze od B? Czy B jest prawdziwe? S to tak zwane wyraenia warunkowe.
Symbole uywane w tych wyraeniach s podane w tabeli poniej.
)
./
/
.
/)
.)

jest rwne
jest rne
jest wiksze od
jest mniejsze od
jest wiksze lub rwne
jest mniejsze lub rwne

Zobaczmy, jak prosta struktura decyzyjna dziaa w procedurze:


> 
   ,) (
   5 
( , (

Rozdzia 6. Podstawy programowania w VBA

97

 &
)> ?&$0 
 5 
( -*#
+  =!
-<
)>
 (@  5 
(


W tym kodzie naley zauway kilka rzeczy. Linia zawierajca wyraenie warunkowe
rozpoczyna si od !" i koczy na ,. Ponadto, tak jak wszystkie struktury w VBA,
rwnie struktura warunkowa !" musi si koczy instrukcj . W tym przypadku
jest to !".
Jeeli uruchomisz t przykadow procedur, w oknie Immediate zobaczysz wynik
pokazany na rysunku poniej:

Rozwamy kilka problemw. Kod dziaa dobrze, ale co by si stao, gdyby liczba nie
bya wiksza od 10? A co waniejsze, skoro warto zmiennej jest sztywno ustalona,
bdzie ona zawsze wiksza od 10. Przyjrzyjmy si temu bliej.
Za pomoc polecenia  moesz wewntrz struktury !" umieci ciek alternatywn.
Zmodyfikujmy nieco nasz kod:
> 
   ,) (
   5 
( , (
 A
)> ?&$0 
 5 
( -*#
+ !:/#
&$
 5 
( -*#
+   +#
 =!
&$)>
 (@  5 
(


Zauwa, e teraz nadalimy zmiennej # now warto oraz dodalimy instrukcj
. Poniewa instrukcja  jest czci instrukcji !", nie potrzeba dodatkowej
instrukcji .
Poniewa warto # jest mniejsza od 10, po uruchomieniu procedury zostanie
wczona instrukcja , dajc wynik pokazany na rysunku na nastpnej stronie.

Cz II Poznanie rodowiska VBA

98

Oczywicie, tak jak poprzednio moesz uy funkcji wbudowanych ! i $


do wprowadzania liczby i wywietlania wyjciowego komunikatu.

AND, OR, NOT


W niektrych przypadkach zechcesz sprawdzi spenienie warunkw zoonych. Czy
#.0 #/)1? Sowa kluczowe 2#, 0 i # s nazywane operatorami
logicznymi i su do sprawdzania warunkw zoonych.
W przypadku operatora logicznego 2# oba wyraenia logiczne musz by prawdziwe,
aby warunek !" by speniony.
Poniej zostaa podana tabela wszystkich moliwych wynikw logicznych dla operatora 2#.
Pierwszy argument logiczny

Drugi argument logiczny

Wynik

True

True

True

True

False

False

False

True

False

False

False

False

Jeeli zostanie uyty operator 0, tylko jeden argument logiczny musi by prawdziwy,
aby warunek !" zosta speniony. Nastpna tabela podaje wszystkie moliwe wyniki
logiczne dla operatora 0.
Pierwszy argument logiczny

Drugi argument logiczny

Wynik

True

True

True

True

False

True

False

True

True

False

False

False

Ostatni operator logiczny # zwraca zgodnie z oczekiwaniami warto przeciwn.


Jeeli wyraenie warunkowe (A NIE jest rwne B) jest prawdziwe, to jego zaprzeczenie # (A NIE jest rwne B) jest faszywe i odwrotnie jeeli A jest rwne B,
wyraenie jest faszywe, a wynik ostateczny prawdziwy. Nie przejmuj si, jeeli potrzebujesz nieco czasu, aby sobie to wszystko wyobrazi.
Bdziemy nadal zajmowa si t sam co poprzednio procedur " i uyjemy jej
do wyjanienia wielokrotnego uycia instrukcji !"3 . Chcemy rwnie ograniczy
wprowadzanie przez uytkownika liczb do zakresu od 1 do 15.

Rozdzia 6. Podstawy programowania w VBA

99

Zmie swj kod, aby wyglda tak jak pokazany poniej.


 





4
  ,) (
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
> 
   5 
( , (
 )-8##:&&B-CD
- !
  / ')>-
)> ?&, E&B0 
> 

5(-*#
 'F# # #
"&&B)>

%%%%%%%%%%%%%%%%%%%%%%%%%%%%
> 
)> ?&$0 
5( <-+ #9!:/#9&$
5( <-+ #9  +#9 =!9&$)>


Zauwa, e musiae przedefiniowa # na zmienn globaln. Jeszcze o tym nie


mwilimy, ale przypomnij sobie z pocztku tej czci, e wszystko, co jest umieszczone w czci deklaracji globalnych, obowizuje dla caego moduu.
Procedura " sprawdza, czy warto # zawiera si w zakresie od 1 do 15. Jeeli
tak, wywouje procedur "& zawierajc kod, ktrego uywalimy poprzednio,
a jeeli nie wywietla komunikat dla uytkownika. Jeeli jedna procedura uruchamia
inn, nazywamy to wywoaniem procedury.
Sprbuj uruchomi ten kod wielokrotnie. Jeeli wprowadzisz liczb z przedziau
od 1 do 15, otrzymasz komunikat, e jest ona wiksza albo mniejsza lub rwna 10.
Jeeli wprowadzona liczba bdzie spoza przedziau od 1 do 15, zostanie wywietlony
komunikat pokazany poniej.

Struktura ElseIf
Za pomoc !" moesz poczy kilka struktur !". Na przykad:
> 
   ,) (
 &

Cz II Poznanie rodowiska VBA

100

)> &0 
 (@ -+ 
+  +#
#
 )> &B0 
 (@ -+ 
+!:/#
#

 (@ -
#
+ !:/#
&  +#
&B)>


Moesz uywa tylu polece !", ilu potrzebujesz do sprawdzenia potrzebnej liczby
warunkw.

Struktura Select Case


Jeeli bdziesz musia wielokrotnie stosowa !", powiniene zastanowi si nad
uyciem struktury . Dziki temu kod stanie si czytelniejszy. Uycie !"
z poprzedniego przykadu mona w nastpujcy sposb zastpi kodem korzystajcym
z :
> 
   ,) (
 
  
 

 &
 (@ -+ 
+  +#
#

 &B
 (@ -+ 
+!:/#
#

 
 (@ -
#
+ !:/#
&  +#
&B  


Oczywicie, moesz doda wicej przypadkw, zalenie od potrzeby. VBA bdzie


bada wszystkie przypadki, a znajdzie ten, ktry odpowiada wartoci # i wykona
zapisane w nim instrukcje. Jeeli aden przypadek nie bdzie odpowiada wartoci
#, wykonane zostan instrukcje domylnego przypadku  . Uycie 
 jest opcjonalne, ale bardzo zalecane, aby struktura zawsze obejmowaa wszystkie
moliwe przypadki.
Jeeli te same instrukcje maj by wykonane dla wielu przypadkw, moesz uy
nastpujcej skadni:

 &CC@@@

lub

 &7

IIf
Przyjrzymy si jeszcze szybko strukturze !!", ktrej nazwa pochodzi od Immediate If3.
!!" jest przydatne, gdy chcemy nada ostateczn warto zmiennej, gdy jego skadnia
jest samo wystarczalna. Prawidowa skadnia wyglda tak:
3

Natychmiastowe (bezporednie) jeeli przyp. tum.

Rozdzia 6. Podstawy programowania w VBA

101

))>!
 /C!
GF
  C!
GF

 

Kod roboczy moe wyglda mniej wicej tak:


 5 
( ))> ?&$C-*#
+ !:/#
&$-CD
-*#
 + !:/#
&$-

Struktura !!" dziaa do wolno i dlatego nie jest zbyt czsto uywana w duych programach.
Teraz zwrmy uwag na struktury sterujce drugiego rodzaju, czyli ptle.

Ptle
Ptli uywamy, gdy pewien blok instrukcji kodu ma by wykonywany albo okrelon
liczb razy, albo dopty, dopki co si nie zdarzy. Jeeli liczba wykona ptli jest
okrelona, ptla jest sterowana przez licznik. Mwimy wwczas o powtarzaniu sterowanym licznikiem. Drugim rodzajem s ptle wykonywane tak dugo, jak dugo warunek
jest speniony. Mwimy wwczas o powtarzaniu sterowanym warunkiem. Przyjrzymy
si obu typom.

Ptla For...Next
 +++# jest przykadem ptli sterowanej licznikiem. Za pomoc rzeczywistych liczb

lub zmiennych moesz sterowa nastpujcymi elementami ptli:


 Counter (licznik) to serce ptli. ledzi liczb powtrze wykonanych przez ptl.
 Start to warto pocztkowa licznika. Rzadko si zdarza ustawianie innej

wartoci startowej ni 1 (czasami robi si to w przypadku rnych oblicze


matematycznych).
 End (koniec) to liczba wyznaczajca koniec ptli. Gdy licznik przekroczy t

warto, wykonywanie ptli koczy si.


 Step (krok) wyznacza, o ile warto licznika zwiksza si przy kadym

wykonaniu ptli. Uycie kroku jest opcjonalne.


Oto przykad skadni ptli  +++#:
  ,) (
  &B
@@@
 

Pamitaj, e   i  mog by zmiennymi. Zauwa, e ostatni lini ptli jest #,
a nie , jak w strukturach, z jakimi dotychczas mielimy do czynienia. Jest to instrukcja
zwikszenia wartoci licznika o jeden krok.
Do zadeklarowania ptli moemy uy rwnie takiej skadni:
  &B B

Cz II Poznanie rodowiska VBA

102

Taka definicja powoduje zwikszenie licznika ptli, w tym przypadku intCounter,


o pi po kadym wykonaniu ptli. W rezultacie tego ptla ta wykona si pi razy
(intCounter bdzie mia kolejne wartoci 1, 6, 11, 16, 21).
Nie jest rzecz niezwyk uycie struktury If Then wewntrz petli, tak jak w poniszym przykadzie:
>  
   ,) (
  &&$
)> 5$0 
 (@  <-+ #9
#'9
 (@  <-+ #9 
#'9)>
 


Ju sysz mojego wydawc pojkujcego, e wprowadziem tu kilka rzeczy dodatkowych. Zatem przyjrzyjmy si dokadniej uytemu kodowi.
Jest to ptla  +++# majca wykona 10 powtrze. Zadaniem instrukcji wewntrz
ptli jest sprawdzenie, czy jest to przebieg parzysty, czy nieparzysty. Do tego celu
posuya mi struktura !"+++,+++ . Mamy zatem struktur !"+++,+++ 
wewntrz struktury  +++#. Jeeli jedna struktura wystpuje wewntrz innej, mwimy
o strukturach zagniedonych, ktre s w programowaniu powszechnie stosowane.
Uyte wyraenie warunkowe wykonuje specyficzne dzielenie. Uyem sowa kluczowego , ktre jest skrtem od modulus. 2  zwraca reszt z dzielenia liczby A
przez liczb B. Jeeli liczb parzyst podzielimy przez 2, reszt z dzielenia bdzie 0.
Zatem jeeli licznik zostanie podzielony przez 2 i reszt z dzielenia bdzie 0, warunek
!" zostanie speniony i kolejna instrukcja wykonana. Jeeli reszta z dzielenia bdzie
rna od zera, zostanie wykona instrukcja z czci .
# po prostu zwiksza warto licznika.

Gdy uruchomisz t procedur, w oknie Immediate pojawi si nastpujce wyniki:

Zajmijmy si teraz innym rodzajem ptli.

Rozdzia 6. Podstawy programowania w VBA

103

Ptla Do
 jest ptl z powtarzaniem sterowanym warunkiem. Innymi sowy ptl dziaajc
dopty, dopki okrelony warunek jest speniony (na przykad co jest czemu rwne
lub od czego wiksze).

Istniej dwa rodzaje ptli  4,  i 5 . Przyjrzyjmy si im.

Do While
Ptla 4,  sprawdza, czy warunek jest speniony. Jeeli tak, instrukcje ptli s
wykonywane. Dla przykadu przyjrzyjmy si poniszej procedurze.
 
   ,) (
   ,) (
 &
 &
 80  &
 (@ -+ :
 -<
)> ?B0 
 $
)>
  ;&
*


Jak widzisz, inaczej ni omawiana wczeniej  +++#, ptla 4,  nie jest samowystarczalna. W tym przypadku musiae nada wartoci dwm zmiennym jedna
posuya jako licznik, za druga jako zmienna testowa. W tym przypadku chciaem,
aby procedura zakoczya dziaanie po wykonaniu pitego powtrzenia ptli.
Przeciwnie ni w ptli  , tutaj przebieg nie jest sterowany licznikiem, a powtarzanie
ptli trwa, dopki warto  jest rwna 1. Wewntrz ptli zagniedziem struktur
!"+++,, sprawdzajc warto licznika. Po osigniciu przez ni wartoci 5 struktura !" spowodowaa zmian wartoci  na 0, co zakoczyo dziaanie ptli.
Poniewa sprawdzany jest warunek, a nie liczba iteracji, w ptlach  nie musisz uywa
licznika. W tym przypadku wprowadziem go, dodajc zmienn  i podnoszc jej warto w ostatniej linii. Mona to zastpi wieloma innymi rozwizaniami.
Zauwa, e ta struktura koczy si sowem -. Pamitaj, e stosowanie licznika nie
jest tu wymagane.
Jeeli uruchomisz ptl 4, , wyniki otrzymane w oknie Immediate powinny wyglda jak na rysunku na nastpnej stronie.

Cz II Poznanie rodowiska VBA

104

Powstaje pytanie, co si stanie, jeeli z jakiego powodu warto zmiennej  nigdy
nie bdzie rwna 1. Czy ptla  w ogle zostanie wykonana? Odpowied brzmi: nie.
Nie zostanie wykonana. Co zatem pocz, aby ptla zostaa wykonana cho jeden raz?
> 
   5 
( , (
 )-8##:&&B-CD
- !
  / ')>-
)> ?&, E&B0 
> 

5(-*#
 'F# # #
"&&B)>

%%%%%%%%%%%%%%%%%%%%%%%%%%%%
> 
)> ?&$0 
5( <-+ #9!:/#9&$
5( <-+ #9  +#9&$)>


Zauwa, e procedura " zawiera sprawdzenie, czy uytkownik wprowadzi liczb


z przedziau od 1 do 15, a jeeli wprowadzona liczba bdzie spoza tego zakresu, program
po prostu zostanie zakoczony i bdziesz musia uruchomi go ponownie. Chcemy,
aby proba o wprowadzenie liczby bya ponawiana do czasu, a zostanie wpisana liczba
speniajca ustalone kryteria.
Zmie procedur " w nastpujcy sposb:
> 
   5 
( , (
   ,) (
 &
 
 )-8##:&&B-CD
- !
  / ')>-

Rozdzia 6. Podstawy programowania w VBA

105

)> ?&, E&B0 


 $
> 

5(-*#
 'F# # #
"&&B)>
*80  &


Zauwa, e nie uylimy licznika w adnej postaci. Zamiast tego jest sprawdzana
warto zmiennej . Interesujce, gdzie to sprawdzanie si odbywa. Inaczej ni
w poprzednim przykadzie, moemy sprawdzanie warunku umieci na kocu ptli,
a nie na pocztku. Dziki temu ptla zawsze zostanie wykonana przynajmniej jeden
raz, co okazuje si bardzo przydatne w sytuacjach podobnych do zilustrowanej.

Do Until
Jest to ptla nieznacznie rnic si od poprzednio omwionej. W 4,  ptla jest
wykonywana, dopki warunek jest speniony, za ptla 5  dziaa, dopki warunek nie zostanie speniony.
Podana poprzednio procedura, pokazujca dziaanie ptli 4, , po niewielkich
zmianach moe korzysta z ptli 5 :
 
   ,) (
   ,) (
 &
 &
 H E?&
 (@ -+ :
 -<
)> ?B0 
 $
)>
  ;&
*


Zauwa, e teraz ptla bdzie dziaa dopty, dopki warto  bdzie rna
od 1. Poza tym wszystko w tym przykadzie jest takie samo jak w poprzednim. Wynik
dziaania powinien by taki sam jak w przykadzie z ptl 4, .
Podobnie jak w ptli 4,  moesz sprawdzanie warunku umieci na kocu, dziki
czemu ptla bdzie zawsze wykonywana przynajmniej jeden raz.
W dalszej czci ksiki bdziemy czsto uywa ptli. Tak jak zmienne s one integraln czci wikszoci programw.

Cz II Poznanie rodowiska VBA

106

Tablice
Na wiele sposobw dyskusja o tablicach cile dotyczy zmiennych. Tablica to zmienna
zawierajca wiele wartoci. Liczba wartoci przechowywanych przez tablic musi by
z gry okrelona i zadeklarowana. Musisz si take nauczy odwoywania do wartoci
wewntrz tablicy.
Gdy to pisaem, wydawca spyta: A co z tablicami dynamicznymi? Jak si potem
przekonasz, tablice dynamiczne s poniekd oszustwem. Nadal musisz z gry zadeklarowa liczb wartoci zapamitywanych wewntrz tablicy. Jedyn rnic jest to, e
deklaracj robisz przed uyciem, podczas dziaania programu, a nie przy pisaniu kodu.
Dowiesz si take, jak waciwie rezerwowa (alokowa) pami tak, aby Twoje tablice
nie zajmoway zbyt wiele pamici.

Skadniki tablicy
Kada wartoci w tablicy jest jej elementem. Poniewa zmienna tablicowa zawiera
wiele elementw, musisz wiedzie, jak poszczeglne z nich wybiera i jak si do nich
odwoywa. Moesz to robi za pomoc liczby zwanej indeksem. Najczciej pierwszy
element tablicy ma indeks rwny 0.
Gdyby mg zajrze za kulisy tablicy  # zawierajcej nazwiska, zobaczyby
mniej wicej taki obraz:
 

$-I
.!
/&-I
 / '#/-J#

 /
-,
* 
/
7-0
K
! /-

Zauwa, e tablica zawiera pi elementw, cho najwiksz wartoci indeksu jest 4.


Powtarzam, e zwykle indeks pierwszego elementu jest rwny 0 (w dalszej czci tego
rozdziau poznasz kilka odstpstw od tej zasady).
Jeeli chcesz pobra z tablicy i wydrukowa imi i nazwisko Anity Leparskiej, musisz
uy instrukcji
 


Anita jest na pozycji odpowiadajcej indeksowi 3, co aby nie byo zbyt prosto
oznacza czwarty element tablicy. Jest to przyczyn wielu problemw programistycznych i nieco dalej poznamy sposb korygowania tej komplikacji.
W VBA mamy dwa typy tablic:
 Tablice statyczne w ktrych liczba elementw, zwana dugoci tablicy,

jest z gry okrelona i pozostaje niezmienna.


 Tablice dynamiczne ktrych zmienna dugo nie jest ustalana z gry.

Rozdzia 6. Podstawy programowania w VBA

107

Tablice statyczne deklaruje si podobnie jak zmienne z jedn niewielk rnic:


 5' &$,) (

Widzc co takiego, musisz by ostrony. Zapewne mylisz, e w ten sposb deklarujesz 10-elementow tablic. W rzeczywistoci tak zadeklarowana tablica ma 11 elementw o indeksach od 0 do 10 (indeks o najmniejszej wartoci nazywamy doln granic,
a indeks o najwikszej wartoci grn granic).
W przypadku naszej tablicy dolna granica, czyli najmniejszy indeks, wynosi 0.
Musisz o tym pamita, aby waciwie alokowa pami potrzebn do przechowywania
tablicy.
Jeeli chcesz, moesz w procedurze zadeklarowa wiele tablic:
  
L, (C5' &$,) (

Domylnie najmniejszy indeks jest rwny 0, acuchy znakw s inicjowane jako puste,
a zmienne cakowite z wartoci zero.
Zobaczmy przykad. W tej procedurze stworzysz dwie ptle  +++#. Pierwsza
spowoduje wypenienie tablicy, za druga wydrukowanie jej zawartoci. Kod tej procedury jest nastpujcy:


' 
  ,) (
  5' &$,) (
 $&$
5' )-8#!
GF  -<CD
- 
'
'# +-
 
 $&$
 (@ -8
GF  
'# / -<<-#
-<D
5' 
 


Programici lubi uywa maej litery jako zmiennej reprezentujcej indeks tablicy.
To tylko przyjta konwencja. Tutaj uylimy jej w podwjnej roli: licznika ptli
 +++# oraz indeksu tablicy. Zauwa, e do elementu tablicy zawsze odwoujemy
si przez jej nazw z numerem elementu, czyli indeksem ujtym w nawiasy. W podanym
przykadzie jako indeksu uywamy licznika ptli , co pozwala nam na wypenienie
tablicy.
Maym przyjemnym dodatkiem jest konkatenacja tekstu objaniajcego i indeksu
w komunikacie wzywajcym do podania liczby, dziki czemu wiadomo, ktry element
tablicy wypeniamy.

Cz II Poznanie rodowiska VBA

108

Okno wprowadzania wartoci powinno wyglda mniej wicej tak:

Po wprowadzeniu elementw zostaje uruchomiona druga ptla  , wywietlajca


wartoci w oknie Immediate.

Rozmiar tablicy statycznej jest deklarowany bezporednio w kodzie. Mwic inaczej,


jest to robione w czasie projektowania.
W podanym przykadzie jest jeden problem. Jeeli bdnie zadeklarujesz doln lub
grn granic, moe to doprowadzi do bdu wykonania. VBA czciowo pomaga
Ci tego unikn za pomoc dwch wbudowanych funkcji: -6  7 i 5
6  7, ktre zwracaj granice tablicy.
Skadni ptli z poprzedniego przykadu moesz zmieni nastpujco:
 *5' H5' 
5' )-8#!
GF  -<CD
- 
'
'# +-
 

Tablice dynamiczne
Wielu programistw uwaa tablice dynamiczne VBA poniekd za fikcj. W zasadzie
s to nadal tablice statyczne, ale ich rozmiary nie s deklarowane przed uruchomieniem
programu. Tak wic jedyn rnic jest to, kiedy rozmiary tablic s deklarowane.
Zaczynasz od zadeklarowanie pustej tablicy, na przykad:


' 
  ,) (
  5' ,) (
  ,
'# ,) (
,
'# )-) !'/=!#
 #
#!
FM-C-J# 

'-

Rozdzia 6. Podstawy programowania w VBA

109

J  5' ,


'# 
 $,
'#
5' )-8#!
GF  -<CD
- 
'
'# +-
 
 $,
'#
 (@ -8
GF  
'# / -<<-#
-<D
5' 
 


Zauwa, e najpierw zadeklarowalimy   jako pust tablic. Potem za pomoc


sowa kluczowego 0  zadeklarowalimy tablic statyczn z grn granic okrelon
przez zmienn 2  , ktrej warto zostaa wprowadzona przez uytkownika.
Nastpnie zmienna 2   posuya do sterowania ptl.
ledzc ten przykad, dostrzeesz sprzeczno. Jeeli wpiszesz, e chcesz wprowadzi 5 wynikw, skoczy si na wprowadzeniu 6, gdy warto indeksu rozpoczyna
si od 0. To czsty bd pocztkujcych programistw.
Poprawiajc nieco kod, moesz pierwszemu elementowi tablicy przypisa indeks 1 zamiast 0. To uatwi koordynacj dziaa. Przyjrzyjmy si nastpujcemu kodowi:


' 
  ,) (
  5' ,) (
  ,
'# ,) (
,
'# )-) !'/=!#
 #
#!
FM-C-J# 

'-
J  5' &,
'# 
 &,
'#
5' )-8#!
GF  -<CD
- 
'
'# +-
 
 &,
'#
 (@ -8
GF  
'# / -<<-#
-<D
5' 
 


Jeeli uruchomisz ten kod, w oknie Immediate zobaczysz wyniki wywietlone jak na
pierwszym rysunku na nastpnej stronie.
2   jest teraz grn granic tablicy, za 1 granic doln. Potem mamy dwie
ptle  +++# startujce od 1 (pamitaj, e teraz nie istnieje element 0).

Cz II Poznanie rodowiska VBA

110

Istnieje rwnie inna technika pozwalajca na rozpoczcie indeksowania od 1. W sekcji


deklaracji oglnej moesz napisa  1 lub  . W ten sposb ustalisz doln granic tablic w danym module. Masz do wyboru tylko dwie wartoci: 0 i 1.

Poza granicami
Co si stanie, jeeli programujc, zrobisz bd, w wyniku ktrego nastpi prba uzyskania
dostpu do wikszej liczby elementw tablicy, ni zostao zadeklarowane w instrukcji
  lub 0 ?
VBA nie odkryje tego bdu, dopki program nie zostanie uruchomiony. Tego rodzaju
bd jest nazywany bdem wykonania (runtime error). Jeeli nastpi, zostanie wywietlony komunikat podobny do pokazanego poniej:

Kliknicie przycisku Debug spowoduje pokazanie linii kodu uznanej przez program
za bdn.
Bd jednak ostrony! Wskazana linia jest t, na ktrej program si zaama, jednake
zablokowanie wykonania programu moe by wynikiem bdu popenionego o wiele
wczeniej. Moge zmiennej okrelajcej wielko nada z warto lub pomyli si
w deklaracji   lub 0 . Znalezienie przyczyny bdu moe wymaga nieco pracy
detektywistycznej.

Zmniejszanie tablicy
Co si stanie, jeeli zadeklarowae grn granic tablicy rwn 10, ale nadae warto
jedynie czterem elementom?

Rozdzia 6. Podstawy programowania w VBA

111

Pamitaj, e 10 okrela pozycj ostatniego elementu tablicy. Jednake w przeciwiestwie


do przekroczenia wielkoci tablicy, nie ma adnych zasad nakazujcych wykorzystanie
wszystkich jej elementw. Uycie jedynie czterech z nich nie spowoduje adnych problemw. Ale za kulisami tkwi pewien problem.
Jako pocztkujcy nie musisz si tym przejmowa, ale wanym zagadnieniem w programowaniu jest kontrola wykorzystania zasobw. Pojemno pamici komputera jest
skoczona. Jeeli deklarujesz, e Twoja tablica bdzie miaa 10 elementw, VBA
rezerwuje pami odpowiedniej wielkoci. Oznacza to, e cz pamici pozostanie
niewykorzystana. Jest to straszne marnowanie zasobw.
Zapewne Twoim pierwszym odruchem bdzie prba uycia 0  do zmiany wielkoci deklaracji, ale to spowoduje inny, raczej powany problem. Gdy w poprzednim
przykadzie uylimy deklaracji 0 , tablica nadal nie miaa adnych elementw.
Jeeli uyjesz 0  przy wypenionej tablicy, zostanie ona wymazana i stworzona od
nowa. Istnieje spore prawdopodobiestwo, e nie bdziesz z tego zadowolony.
VBA pozwala nam na wyjcie z kopotu przez poczenie 0  z innym sowem
kluczowym, jak to zostao pokazane poniej:
J    4 5' 7

Sowo kluczowe
 ( powoduje ponown alokacj pamici, pozostawiajc jej
elementy nietknite.

Czyszczenie tablic
Czasami bdziesz chcia zachowa deklaracj tablicy, ale wyczyci jej elementy.
Moesz to zrobi z atwoci za pomoc sowa kluczowego 8 tak jak to zostao
pokazane poniej:

 5' 

Powoduje to wyczyszczenie zawartoci tablicy z zachowaniem jej deklaracji.


Rne rzeczy mog si zdarzy, zalenie od typu tablicy. Jeeli jest to tablica numeryczna, jej elementom zostanie nadana warto 0. Jeeli jest to tablica tekstowa (acuchw znakw), jej elementom zostanie nadana warto "". Jest to pusty acuch
znakw. W przypadku tablicy typu  jej elementy zostan ustawione na .

IsArray
Jak mona sprawdzi, czy zmienna jest tablic? VBA posiada ma wygodn funkcj
do testowania zmiennych. Przyjrzyj si poniszemu kodowi.


' 
   &,) (
   7,) (

Cz II Poznanie rodowiska VBA

112

 (@ -#' &+ 


9M-<),
' &
 (@ -#' + 
9M-<),
' 


Rezultat dziaania tego kodu bdzie nastpujcy:

Jak widzisz, !2  jest funkcj typu . Zwraca warto   lub . W pierwszym przypadku powyej wynikiem jest , gdy pierwsza zmienna nie zostaa
zadeklarowana jako tablica. W drugim przypadku wynikiem jest  , gdy druga
zmienna jest tablic.

Podsumowanie
Wiele si nauczylimy w tym rozdziale. Poznalimy zmienne oraz rne struktury VBA.
Pomimo to nasza znajomo podstaw VBA jest wci dalece niepena. Podczas dalszej
lektury ksiki poznamy kolejne elementy.
W pozostaych rozdziaach tej czci z jeszcze wiksz uwag i bardziej szczegowo
przyjrzymy si edytorowi VBA i poznanym ju strukturom.

You might also like