You are on page 1of 13

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

Tworzenie makr w VBA


dla Excela 2002/XP PL.
wiczenia zaawansowane
Autor: Mirosaw Lewandowski
ISBN: 83-7361-204-1
Format: B5, stron: 178

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

Najpopularniejszy arkusz kalkulacyjny Microsoft Excel posiada ok. 300 funkcji


gotowych do wykorzystania w sytuacjach, w ktrych mog przyda si obliczenia.
Jakby tego byo mao, mamy do dyspozycji potne narzdzie jakim jest Visual Basic
for Applications (VBA) przejrzysty i prosty jzyk programowania, zoptymalizowany
specjalnie pod ktem rozszerzania moliwoci innych aplikacji.
Celem tej ksiki jest nauka wykorzystania VBA w poczeniu z Excelem. Zaoono
wic, e nie chcesz zgbia teorii poszczeglnych skadnikw jzyka, lecz interesuje
Ci strona praktyczna Twoich dziaa. Dlatego te kady przykad zosta przez autora
szeroko omwiony, zarwno od strony algorytmu, jak i wykorzystanego kodu.
Dowiesz si jak:

CZYTELNIA
FRAGMENTY KSIEK ONLINE

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

Zautomatyzowa rutynowe czynnoci


Rejestrowa makrodefinicje
Korzysta z danych zawartych w skoroszytach
Tworzy wasne funkcje
Komunikowa si z uytkownikiem
Zamienia liczby na format sownie
Wspomaga prac Excela
Losowa liczby

Spis treci
Zapytaj Autora przez Internet!............................................................................................................ 5
Rozdzia 1.

Automatyzacja czsto powtarzanych zada................................................................................ 7


Wprowadzenie..............................................................................................................................7
Dla pocztkujcych rejestrowanie makr .................................................................................7
Uruchamianie zapisanych projektw ...........................................................................................9
Szybkie sortowanie danych........................................................................................................13

Rozdzia 2. Podstawy..................................................................................................................................................... 21
Wymiana danych midzy VBA a skoroszytem. Zmienne i stae ...............................................21
Czytanie i umieszczanie danych ..........................................................................................21
Zmienne i stae .....................................................................................................................24
Deklarowanie zmiennych i ich zasig ........................................................................................26
Zmienne lokalne...................................................................................................................26
Zmienne moduu i zmienne publiczne .................................................................................28
Zmienne tablicowe .....................................................................................................................30
Co bdzie, jeli? .........................................................................................................................32
Ptle............................................................................................................................................35
For Each ...............................................................................................................................36
DoLoop ............................................................................................................................40
Id do, id i wr........................................................................................................................43
Dialog z uytkownikiem ............................................................................................................45
Okna komunikatw ..............................................................................................................45
Okna dialogowe ...................................................................................................................49
Formularze ...........................................................................................................................50
Obsuga bdw..........................................................................................................................54
Makro a funkcja .........................................................................................................................56
Tworzenie funkcji uytkownika ..........................................................................................56
Opisywanie funkcji uytkownika ........................................................................................58

Rozdzia 3. Przykady..................................................................................................................................................... 61
Liczby sownie ...........................................................................................................................61
Wygld zaleny od warunkw ...................................................................................................65
Nawigacja midzy arkuszami.....................................................................................................67
Wspomaganie pracy Excela .......................................................................................................69
Jednorazowe losowanie .......................................................................................................69
Autostart...............................................................................................................................71
Rozdzielanie tekstu ..............................................................................................................72
Poszukiwanie dni tygodnia ..................................................................................................74
Poszukiwanie nazw w skoroszycie ......................................................................................76

Tworzenie makr w VBA dla Excel 2002/XP PL. wiczenia zaawansowane

Hipercza...................................................................................................................................77
Dodawanie polecenia do menu ............................................................................................82
Matematyka dla dziewiciolatka ................................................................................................84
Tworzenie dodatku Kalendarz w pasku narzdzi.....................................................................103
Generowanie dwiku ..............................................................................................................117
Obliczanie gbi ostroci ..........................................................................................................120
Arkusz ofert..............................................................................................................................130
Kko i krzyyk........................................................................................................................134

Rozdzia 4. Dodatki....................................................................................................................................................... 151


Okno edytora VBA...................................................................................................................151
Procedury zdarzeniowe ............................................................................................................154
Waciwoci formantw formularza ........................................................................................162

2.
Podstawy
Rozdzia

Pierwszy rozdzia podpowiada, jak mona sobie uatwi codzienn prac z Excelem i zautomatyzowa czsto powtarzane czynnoci. Waciwie niezbyt przydaa si wiedza na temat
VBA wystarczyo Ci uruchomienie rejestratora makr i pokazanie, czego oczekujesz od
komputera.
Jak ju zdye si przekona, rejestrator cho bardzo pomocny nie oferuje moliwoci zapisania operacji warunkowej, przypisywania zmiennej czy wywietlenia okien
dialogowych. Dobrze byoby zatem pozna podstawowe polecenia i struktury, odpowiedzialne za wykonywanie operacji, ktrych rejestrowanie jest niemoliwe lub przynajmniej karkoomne.
Wszystkie zamieszczone tu wiczenia moesz znale na stronie http://excel.vip.interia.pl.

Wymiana danych midzy VBA


a skoroszytem. Zmienne i stae
Czytanie i umieszczanie danych
Czsto zdarza si, e napisane przez Ciebie makro umieszcza dane w aktywnym arkuszu
roboczym lub pobiera je stamtd. VBA oferuje kilka sposobw adresowania komrek
arkusza w zalenoci od tego, jakie dane s dla uytkownika dostpne.

22

Tworzenie makr w VBA dla Excel 2002/XP PL. wiczenia zaawansowane

wiczenie 2.1.

Utwrz arkusz tabliczki mnoenia w zakresie od 1 do 10 wedug rysunku 2.1. Pomi


formatowanie.
Rysunek 2.1.
Arkusz tabliczki
mnoenia

Rozwizanie
1. Otwrz nowy skoroszyt, uruchom edytor VBA (Alt+F11) i wstaw modu

(Insert/Module).
2. W module wprowad nastpujcy kod:

 


  

  
  
   
 

!"

3. Ustaw kursor w obrbie makra i nacinij klawisz F5, aby uruchomi makro.

Wyjanienia
Zastosowane tu zostay instrukcje ptli (struktury ). Poznasz je w dalszych
rozdziaach tego podrcznika. Wpisanie wartoci do komrki dokonywane jest w poniszym
wierszu kodu:

  
  

Waciwo 

, okrelajca adres komrki, posiada dwa argumenty. Jak wida w instrukcji , zmienne   i 
 przyjmuj wartoci od  do . W poleceniu


zatem zarwno wiersz, jak i kolumna s okrelane za pomoc wartoci liczbowych.


atwo pomyli kolejno wsprzdnych. Z pomoc przyjdzie wtedy edytor (patrz rysunek 2.2), ktry sam podpowie, czego od Ciebie oczekuje.
Rysunek 2.2.
Podpowiedzi
edytora VBA bywaj
bardzo pomocne

Rozdzia 2.  Podstawy

23

wiczenie 2.2.

Zaciemnij wntrza komrek od A1 do J1 i od A2 do A10, jak pokazano na rysunku 2.1.


Rozwizanie
Wprowad do moduu nastpujcy kod i uruchom go.
#$%&
'()*))+),-,-" .
'()*/0*),-,-" .
!"

Wskazwki
 Zauwa, e w rny sposb wpisano argumenty . Obydwa sposoby s poprawne.
 Jak wida, za pomoc  moemy zaznacza cae zakresy komrek.
 Jako argumentw moemy uy zmiennych (jeeli ich warto bdzie si skada
z liter i cyfr) lub znanych nam ju polece 

. Nasze makro mogoby wic


wyglda tak:
#$%&
)*)
)+)
'(,-,-" .
'(,-,-" .
!"

Odczytywanie wartoci z komrek odbywa si w sposb odwrotny do ich umieszczania.


Przewiczymy to na bardziej uytecznym przykadzie.
wiczenie 2.3.

Na podstawie tabliczki mnoenia, utworzonej w wiczeniu 2.1, utwrz procedur, ktra


na podstawie zaznaczonej komrki bdzie pobiera dane z:
 zaznaczonej komrki;
 komrki z pierwszego wiersza aktywnej kolumny;
 komrki z pierwszej kolumny aktywnego wiersza.
Dane zostan wywietlone w postaci komunikatu (rysunek 2.3). Dodatkowo niech procedura
wywietla komunikaty tylko w przypadku kliknicia komrki w zakresie od  do .
Rozwizanie
$& "
-1* 2,'3*"* 2, 34
* 2,5
 * 2,'
 /* 2, 
6(7  8)
#)8 /8))8
!"-1
!"

24

Tworzenie makr w VBA dla Excel 2002/XP PL. wiczenia zaawansowane

Rysunek 2.3.
W oknie komunikatu
wywietlane s dane
z pierwszych komrek
aktywnego wiersza
i kolumny oraz
z aktywnej komrki

Wskazwki
 W pierwszym wierszu procedurze nadawana jest nazwa. Makro zawsze rozpoczyna
si sowem kluczowym , po ktrym podawana jest jego nazwa i ewentualnie
parametry.
 W nastpnym wierszu zawarty jest warunek, e dalsze czynnoci bd wykonane
tylko wtedy, gdy aktywna komrka znajduje si nie niej ni w 10. wierszu i nie dalej
ni w 10. kolumnie arkusza.
 W kolejnych trzech wierszach z aktywnej (zaznaczonej) komrki oraz pierwszych
komrek kolumny i wiersza dane s pobierane i przypisywane zmiennym. Przypisanie
wartoci komrek zmiennym uatwi Ci zapisanie argumentu dla polecenia  
w kolejnym wierszu kodu. Jak wida, pobranie danych z komrek arkusza nie wymaga
adnych polece. Wystarczy operacja przypisania.
 Po wywietleniu okna dialogowego (skadni polecenia   poznasz w dalszej
czci podrcznika) nastpuje zamknicie sekwencji operacji wykonywanych
po spenieniu warunku pocztkowego ( !").
 Ostatnie sowo kluczowe informuje o kocu procedury (makra).
Pozostaje jeszcze pytanie: jak sprawi, aby makro byo uruchamiane po kadym klikniciu
mysz? Decyduj o tym procedury zdarzeniowe, ktrych opis zawarty jest w czwartym
rozdziale podrcznika.

Zmienne i stae
Korzystanie ze staych ma sens wtedy, gdy czsto stosujesz t sam warto w procedurze.
Moesz na przykad za pomoc staej wyrazi cz komunikatu czsto wywietlanego
w oknie dialogowym. Stae definiuje si za pomoc sowa kluczowego  :
)9:;  < #0)
=

Niewtpliw zalet staej jest to, e prba jej zmiany w jakikolwiek sposb jest niemoliwa
i koczy si wywietleniem komunikatu o bdzie (patrz rysunek 2.4).

Rozdzia 2.  Podstawy

25

Rysunek 2.4.
Prba zmiany
wartoci zadeklarowanej
jako staa niesie
opakane skutki

W VBA rozpoznawane jest kilka typw zmiennych:


1. 
 zmienna logiczna przybiera wartoci  lub "
.
2. # wartoci cakowite przybiera wartoci od  do $%% (czyli tyle, ile jeden bajt).
3. ! wartoci cakowite przybiera wartoci od &'$ ()* do '$ ()(.
4. + wartoci cakowite przybiera wartoci od &$ ,( ,*' ),* do $ ,( ,*' ),(.
Jeeli operujesz na adresach caego arkusza, musisz pamita, e pojemno zmiennej
zadeklarowanej jako ! jest zbyt maa. Arkusz ma bowiem 65 536 wierszy. Jeeli wic
dochodzi do deklaracji zmiennej przechowujcej numer wiersza, musisz uy typu >(.
5.  
 wartoci liczb rzeczywistych przybiera wartoci od &'-,.
do '-,. z dokadnoci 6 cyfr po przecinku.
6. /
 wartoci liczb rzeczywistych przybiera wartoci od -(0.
do -(0. (z dokadnoci do 14 cyfr po przecinku).
7. 1# wartoci kwot pieninych przybiera wartoci od &0-$$.
do 0-$$. (z dokadnoci do czterech miejsc po przecinku).
8.   zmienna tekstowa moe zawiera tekst do 2 mld znakw.
9. / data i godzina moe zawiera informacje o czasie od 01.01.100 roku

do 31.12.9999, przy czym data 31 grudnia 1899 jest reprezentowana przez warto ,
1 stycznia 1900 to warto $ itd. Cyfry po przecinku oznaczaj tak jak w arkuszu
Excela czci doby, czyli godzin. Czas przed 31.12.1899 reprezentowany jest
przez liczby ujemne.
Zauwa, e VBA w przeciwiestwie do arkusza Excela moe wykorzystywa daty
sprzed 1 stycznia 1900 roku. Naley jednak pamita, e nawet prawidowo obliczonego
wyniku sprzed roku 1900 nie uda si wywietli w arkuszu roboczym w formacie daty.
Musisz wspomc si formatem tekstowym.

10. 231 zmienna obiektowa moe zawiera odwoanie do dowolnego obiektu,


na przykad 4 5, ,  i wielu innych. Bdziemy z niej czsto

korzysta w dalszych wiczeniach. Istotne s tutaj dwa fakty:


 zazwyczaj deklarujesz odpowiedni typ zmiennej obiektowej, a nie sam zmienn;
 aby przypisa warto zmiennej obiektowej, musisz skorzysta ze sowa
kluczowego .
Przykad:
Aby przypisa zmiennej obiektowej arkusz Twojego skoroszytu, musisz wpisa:
? 
  *9 4

  4)* 
)

26

Tworzenie makr w VBA dla Excel 2002/XP PL. wiczenia zaawansowane

Aby przypisa zmiennej pasek narzdzi, wpisz:


? 
  * "7

  *$$ , "7@

W tym przypadku zmiennej zosta przypisany pasek narzdzi Formularze.


Jak wida, uyem od razu deklaracji /     4 5. Naley raczej
unika deklaracji /     231 i stosowa j tylko wtedy, gdy nie wiadomo,
jakiego obiektu si spodziewamy.
11. 6  to zmienna uniwersalna. Moe zawiera zarwno warto logiczn
(
) czy acuch znakw, jak i dat czy liczb wielkoci /
.

Visual Basic nie wymaga deklaracji zmiennych. Jeeli nie dokonasz tej czynnoci, program
przypisze uytym przez Ciebie zmiennym typ 6 .
Po co wic to wszystko?
 Deklarowanie zmiennych pozwala programowi panowa nad bdami wynikajcymi
z pomyek (zamierzonych lub nie) przy wprowadzaniu danych przez uytkownika.
Nie jest bowiem moliwe przypisanie acucha tekstowego zmiennej zadeklarowanej
jako na przykad /.
 Zmienne typu 6  rezerwuj sobie nawet 20 i wicej razy (!) miejsca ni
zajmowaaby zadeklarowana zmienna innego typu. Jest si wic nad czym zastanowi,
szczeglnie gdy nie pracujesz na superkomputerze, w tle cigasz kilka plikw
z Internetu, korzystasz z czata, a z gonikw sczy si muzyczka z plikw mp3.
 Warto deklarowa wszystkie zmienne. Wiem z dowiadczenia, e zdarza si uycie
zmiennej o tej samej nazwie (nadawanej najczciej intuicyjnie) w tym samym
programie do przechowywania rnych danych. Efekty takiego postpowania bywaj
komiczne tylko wtedy, gdy masz wielkie poczucie humoru i duo wolnego czasu.
W przeciwnym wypadku lepiej zajrze do obszaru deklaracji zmiennych i wybra
nieuywan jeszcze nazw.

Deklarowanie zmiennych i ich zasig


Zanim rozpoczniesz wiczenia z deklaracjami zmiennych, musisz pozna jeszcze kilka
ogranicze dotyczcych ich nazw. Nazwa zmiennej:
 musi rozpoczyna si od litery;
 nie moe by nazw polecenia, funkcji ani sowa kluczowego;
 nie moe zawiera spacji;
 moe by kombinacj liter i cyfr.

Zmienne lokalne
Zmienne deklaruje si za pomoc sowa kluczowego /  lub  1. Rnice midzy
sposobami deklaracji zmiennych wyjani ponisze wiczenie.

Rozdzia 2.  Podstawy

27

wiczenie 2.4.

Zadeklaruj zmienne w programie za pomoc sw Dim i Static. Dodawaj zmienne do


uprzednio wyliczonego wyniku i wywietl go. Uruchom makro kilkakrotnie. Policz, ile
razy uruchomie makro.
Rozwizanie


? # " *-(
  "#  *-(
A""
# 4"
.0# "
# " B
A""
# 4
.0"# 
#   B"
B
6(7 )# " )8# " 84=8)#  )8#  
84=8)   4 )88)
#)
!"

Rnice w dziaaniu sposobu deklaracji przedstawia rysunek 2.5.


Rysunek 2.5.
Zmienne wynik_dim i wynik_static
s wynikiem tych samych oblicze.
Jednak sposb deklaracji powoduje,
e po kilku uruchomieniach
makra wyniki znacznie si rn

Wyjanienia
 Pierwsze trzy wiersze kodu to nagwek procedury i deklaracje zmiennych.
 Nastpny wiersz jest komentarzem. Na jego pocztku znajduje si apostrof,
wic zawarto wiersza nie jest analizowana przez program.
 W pitym wierszu nastpuje przypisanie wartoci zmiennym. Zmienna  przyjmuje
warto %, a zmienna  warto zmiennej # 7 . Zmienna  przyjmuje warto
, bowiem # 7  nie jest znany przy pierwszym uruchomieniu makra.
 Std w wierszu szstym warto zmiennej # 7  wynosi %8,
czyli % co jest widoczne w oknie informacyjnym na rysunku 2.3.
 W wierszach 7. 9. powysze czynnoci s powtarzane w stosunku do kolejnych
zmiennych.
 W wierszu 10. zmienna  jest zwikszana o  po kadym wykonaniu programu.
Warto pocztkowa zmiennej  nie zostaa ustalona, a jej typ to !,
wic program przyj dla niej pocztkow warto zero.
 Przy kolejnym uruchomieniu makra zmiennym zadeklarowanym sowem kluczowym
  zostaj przywrcone domylne wartoci pocztkowe. A zatem wartoci zmiennych
 i # 7  ponownie wynosz zero.

28

Tworzenie makr w VBA dla Excel 2002/XP PL. wiczenia zaawansowane

 Inaczej jest ze zmiennymi zadeklarowanymi za pomoc sowa  1. Ich wartoci


nie s zerowane. Przy drugim uruchomieniu moliwe jest wic powikszenie licznika
 do $, a zmienna  przyjmie wwczas warto %, obliczon w czasie poprzedniego
uruchomienia makra. W zwizku z tym warto zmiennej # 7  1 po drugim
uruchomieniu makra bdzie wynosi .
 Wartoci omawianych zmiennych po jedenastu uruchomieniach makra widoczne
s na rysunku 2.5.
 Sposb wywietlania komunikatw za pomoc polecenia   zostanie wyjaniony
w dalszej czci podrcznika.
W zalenoci od miejsca, w ktrym dokonasz deklaracji, zmienne bd miay rny zasig. Jeeli zmienne zadeklarowano wewntrz makra (funkcji), bd one dotyczy tylko
tego makra (funkcji) i poza nim nie bd odczytywane. Zmienne takie nazywamy zmiennymi lokalnymi. To wszystkie zmienne, ktre deklarowae dotychczas.

Zmienne moduu i zmienne publiczne


Budujc bardziej zoony program, dojdziesz do wniosku, e w celu zmniejszenia objtoci kodu dobrze jest wydzieli czsto powtarzane czynnoci (na przykad wywietlanie komunikatw), umieszczajc je w osobnych programach, uruchamianych przez
inne makra tylko wtedy, gdy jest to potrzebne.
Wyjani to ponisze wiczenie.
wiczenie 2.5.

Utwrz dwa makra: jedno odczytujce dane z arkusza, a drugie wywietlajce odczytane
dane w oknie komunikatu. Przeka wartoci midzy makrami za pomoc zmiennych.
Rozwizanie
$
"
  < 
 )9:;  < *#)
  
!"
   
6(7  8  < 
!"

Wyjanienia
 Makro pobierz_dane odczytuje warto komrki  i przypisuje j zmiennej
79 .
 Dodatkowo ustalana jest warto zmiennej  , ktra jest wykorzystywana przez
makro komunikat.
 Po nadaniu wartoci wykonywane jest makro komunikat, majce na celu wywietlenie
na ekranie wartoci zmiennych.

Rozdzia 2.  Podstawy

29

Wpisz do komrki  dowoln warto i uruchom makro pobierz_dane. Jego efekty ilustruje rysunek 2.6.
Rysunek 2.6.
Mimo e skadniowo
wszystko jest
w porzdku,
nie takiego efektu
si spodziewalimy

W oknie komunikatu nie zostay wywietlone adne informacje, poniewa nie zadeklarowano zmiennych na poziomie moduu. VBA uzna zatem, e ich wartoci obowizuj
tylko w obrbie makra, w ktrym zostay uyte.
Aby moliwe byo przekazywanie wartoci zmiennych midzy makrami (funkcjami),
musisz je zadeklarowa na poziomie moduu. Dokonuje si tego na pocztku moduu,
przed pierwszym sowem  lub "1 . Tak zadeklarowane zmienne nazywamy (jak
nietrudno si domyli) zmiennymi moduu. Kompletna zawarto moduu powinna wic
wyglda tak:
C$! $ 
?    < 
$
"
  < 
 )9:;  < *#)
#:
!"
#:
6(7  8  < 
!"

Komentarz
 Makro wywietl moe oczywicie by uruchamiane przez uytkownika,
z tym e nie ma on moliwoci podania wymaganych przez nie zmiennych.
Najbardziej funkcjonalnym jego wykorzystaniem bdzie ustalanie wartoci
zmiennych w poszczeglnych makrach i wywoywanie ich nazw tak, jak zostao
to przedstawione w powyszym przykadzie. Masz wic raz napisane makro,
ktre moesz przywoywa w dowolnym miejscu programu.
 Polecenie 2:  :
1  wymusza deklarowanie wszystkich zmiennych.
Jeeli podczas wykonywania makra zostanie wykryta nie zadeklarowana zmienna,
spowoduje to bd programu (patrz rysunek 2.7).
Rysunek 2.7.
Polecenie Option Explicit
wymusza porzdek
w kodzie Twojego programu.
adna nie zadeklarowana
zmienna nie ma racji bytu

30

Tworzenie makr w VBA dla Excel 2002/XP PL. wiczenia zaawansowane

 Zauwa, e w deklaracji nie podaem typu zmiennych. Program domylnie przypisa


im typ 6 . W tym wypadku deklaracja nie miaa na celu okrelenie typu,
lecz zasigu zmiennych. Teraz ich wartoci bd odczytywane przez wszystkie
makra i funkcje umieszczone w module.
 Moliwe jest take zadeklarowanie zmiennych moduu za pomoc sowa kluczowego
: ;. Zasig zmiennych jest taki sam: bd one dostpne w module, w ktrym
zostay uyte.
D2   < 

Powysze makra bd przekazywa midzy sob wartoci pod warunkiem, e zostay


umieszczone w tym samym module. Czsto jednak zdarza si, e dla zwikszenia
przejrzystoci procedury (podprogramy) wywoywane przez inne programy umieszcza
si w oddzielnym module. Aby zapewni przenoszenie wartoci zmiennych pomidzy
wszystkimi elementami programu, naley zadeklarowa je (w dowolnym module) za
pomoc sowa kluczowego 2WDNKE.
D    < 

Tak zadeklarowane zmienne nazywamy zmiennymi publicznymi.

You might also like