Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu
niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą
kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym,
magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji.
Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź
towarowymi ich właścicieli.
Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte
w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej
odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie
praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również
żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji
zawartych w książce.
Redaktor prowadzący: Ewelina Burska
Projekt okładki: Maciej Pasek
Materiały graficzne na okładce zostały wykorzystane za zgodą Shutterstock.
Wydawnictwo HELION
ul. Kościuszki 1c, 44-100 GLIWICE
tel. 32 231 22 19, 32 230 98 63
e-mail: helion@helion.pl
WWW: http://helion.pl (księgarnia internetowa, katalog książek)
Drogi Czytelniku!
Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres
http://helion.pl/user/opinie/cwvba3
Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
ISBN: 978-83-246-8932-3
Copyright © Helion 2014
Printed in Poland.
Spis treĂci
Opisz swój problem
5
Rozdziaï 1. Zabawy z rejestratorem makr
7
Wprowadzenie
7
ParÚ sïów o wstÈĝkach i paskach narzÚdzi
8
Bezpieczeñstwo makr
12
Rejestrowanie makr
16
Uruchamianie zapisanych projektów
20
Szybkie sortowanie danych
29
Rozdziaï 2. Podstawy
45
Interakcja ze skoroszytem. Zmienne i staïe
45
Zmienne i staïe
50
Deklarowanie typów zmiennych
53
Deklarowanie typów zmiennych
za pomocÈ znaków specjalnych
54
Deklarowanie typów zmiennych zaleĝnie od ich nazw
55
OkreĂlanie zasiÚgów zmiennych
56
Co bÚdzie, jeĂli?
63
PÚtle
67
Idě do, idě i wróÊ
76
Dialog z uĝytkownikiem
79
Formularze
85
Obsïuga bïÚdów
91
Makro a funkcja
94
4
Tworzenie makr w VBA dla Excela 2010/2013 • mwiczenia
Rozdziaï 3. Przykïady
101
Z ĝycia wziÚte
101
Sïowo o Windows API
123
Praca z wieloma skoroszytami
140
WstÈĝka w Office. RibbonX to nie VBA, ale...
146
Rozdziaï 4. Dodatki
151
Okno edytora VBA
151
Zdarzenia
154
Skróty klawiaturowe uĝywane w Excelu
170
Skróty klawiaturowe uĝywane w edytorze VBA
175
2
Podstawy
Pierwszy rozdziaï podpowiadaï, jak moĝna sobie uïatwiÊ co-
dziennÈ pracÚ z Excelem i zautomatyzowaÊ czÚsto powta-
rzane czynnoĂci. WïaĂciwie niezbyt przydaïa siÚ wiedza na
temat VBA — wystarczyïo Ci uruchomienie rejestratora makr i poka-
zanie, czego oczekujesz od komputera.
Jak juĝ zdÈĝyïeĂ siÚ przekonaÊ, rejestrator — choÊ bardzo pomocny
— nie oferuje moĝliwoĂci zapisania operacji warunkowej, przypisania
zmiennej czy wyĂwietlenia okien dialogowych. Nie mówiÈc juĝ o pÚtli.
CzynnoĂci te musieliĂmy wykonywaÊ z poziomu edytora. Dobrze byïoby
zatem poznaÊ podstawowe polecenia i struktury odpowiedzialne za
wykonywanie operacji, których rejestrowanie jest niemoĝliwe lub przy-
najmniej karkoïomne.
Interakcja ze skoroszytem.
Zmienne i staïe
CzÚsto zdarza siÚ, ĝe napisane przez Ciebie makro umieszcza dane
w arkuszu roboczym lub pobiera je stamtÈd. VBA oferuje kilka sposo-
bów adresowania komórek arkusza w zaleĝnoĂci od tego, jakie dane sÈ
dla uĝytkownika dostÚpne.
46
Tworzenie makr w VBA dla Excela 2010/2013 • mwiczenia
m W I C Z E N I E
2.1
Czytanie i umieszczanie danych
Utwórz arkusz tabliczki mnoĝenia w zakresie od 1 do 10 wedïug ry-
sunku 2.1. Pomiñ formatowanie.
Rysunek 2.1.
Arkusz tabliczki
mnoĝenia
RozwiÈzanie
1.
Otwórz nowy skoroszyt, uruchom edytor VBA (Alt+F11)
i wstaw moduï (Insert/Module).
2.
W module wprowadě nastÚpujÈcy kod:
Sub tabliczka_mnoĝenia()
For wiersz = 1 To 10
For kolumna = 1 To 10
Cells(wiersz, kolumna) = wiersz * kolumna
Next kolumna
Next wiersz
End Sub
3.
Ustaw kursor w obrÚbie makra i naciĂnij klawisz F5, aby
uruchomiÊ makro.
WyjaĂnienia
Zastosowane tu zostaïy instrukcje pÚtli (struktury
For...Next
). Po-
znasz je w dalszych rozdziaïach tego podrÚcznika. Wpisanie warto-
Ăci do komórki wykonywane jest w poniĝszym wierszu kodu:
Cells(wiersz, kolumna) = wiersz * kolumna
WïaĂciwoĂÊ
Cells
, okreĂlajÈca adres komórki, ma dwa argumenty.
Jak widaÊ w instrukcji
For...Next
, zmienne
wiersz
i
kolumna
przyjmujÈ
Rozdziaï 2. • Podstawy
47
wartoĂci od
1
do
10
. W poleceniu
Cells
zatem zarówno wiersz, jak
i kolumna sÈ okreĂlane za pomocÈ wartoĂci liczbowych.
atwo pomyliÊ kolejnoĂÊ wspóïrzÚdnych. Z pomocÈ przyjdzie wtedy
edytor (patrz rysunek 2.2), który sam podpowie, czego od Ciebie
oczekuje.
Rysunek 2.2.
Podpowiedzi edytora VBA
bywajÈ bardzo pomocne
m W I C Z E N I E
2.2
Wpïywanie na wyglÈd arkusza
Zaciemnij wnÚtrza komórek od
A1
do
J1
i od
A2
do
A10
, jak pokazano
na rysunku 2.1.
RozwiÈzanie
Wprowadě do moduïu nastÚpujÈcy kod i uruchom go:
Sub wypeïnij()
Range("A1", "J1").Interior.ColorIndex = 15
Range("A2:A10").Interior.ColorIndex = 15
End Sub
Wskazówki
T
Zauwaĝ, ĝe w róĝny sposób wpisano argumenty
Range
.
Obydwa sposoby sÈ poprawne.
T
Jak widaÊ, za pomocÈ
Range
moĝemy zaznaczaÊ caïe zakresy
komórek.
T
Jako argumentów moĝemy uĝywaÊ zmiennych (jeĝeli ich
wartoĂÊ bÚdzie siÚ skïadaÊ z liter i cyfr) lub znanych Ci
juĝ poleceñ
Cells
. Nasze makro mogïoby wiÚc wyglÈdaÊ tak:
Sub wypeïnij()
a = "A1"
b = "J1"
Range(a, b).Interior.ColorIndex = 15
Range(Cells(1, 1), Cells(10, 1)).Interior.ColorIndex = 15
End Sub
Odczytywanie wartoĂci z komórek odbywa siÚ w sposób odwrotny, niĝ
sÈ umieszczane. PrzeÊwiczymy to na bardziej uĝytecznym przykïadzie.
48
Tworzenie makr w VBA dla Excela 2010/2013 • mwiczenia
Dla chÚtnych
Wykonaj to Êwiczenie, korzystajÈc na poczÈtku z rejestratora makr.
Zobacz, jakich wpisów dokona rejestrator, jeĝeli wymyĂlisz sobie
bardziej finezyjne wypeïnienie komórek (patrz rysunek 2.3).
Rysunek 2.3. Zakres A1:J10 zostaï zdefiniowany jako tabela danych
(Zakïadka NarzÚdzia gïówne/Formatuj jako tabelÚ). Zauwaĝ, ĝe gdy jesteĂ
w takim zakresie, na wstÈĝce pojawia siÚ zakïadka NarzÚdzia tabel.
Oprócz fajnej predefiniowanej grafiki warto zauwaĝyÊ fakt, ĝe Excel dodaï
ten zakres do kolekcji obiektów. Tabela zatem bÚdzie przez niego inaczej
traktowana niĝ zestaw niepowiÈzanych komórek. Kod opisujÈcy jej stronÚ
graficznÈ teĝ wyglÈda zupeïnie inaczej
Rozdziaï 2. • Podstawy
49
m W I C Z E N I E
2.3
Pobieranie danych z arkusza
Na podstawie tabliczki mnoĝenia, utworzonej w Êwiczeniu 2.1, utwórz
procedurÚ, która pobierajÈc dane o adresie zaznaczonej komórki, bÚ-
dzie pobieraÊ dane z:
T
zaznaczonej komórki;
T
komórki z pierwszego wiersza aktywnej kolumny;
T
komórki z pierwszej kolumny aktywnego wiersza.
Dane zostanÈ wyĂwietlone w postaci komunikatu (patrz rysunek 2.4).
Dodatkowo niech procedura wyĂwietla komunikaty tylko w przypadku
klikniÚcia komórki z zakresu od
A1
do
J10
.
RozwiÈzanie
Sub pobieraj_dane()
If ActiveCell.Row <= 10 And ActiveCell.Column <= 10 Then
a = ActiveCell.Value
mnoĝn1 = Cells(ActiveCell.Row, 1)
mnoĝn2 = Cells(1, ActiveCell.Column)
MsgBox (mnoĝn1 & " razy " & mnoĝn2 & " = " & a)
End If
End Sub
Rysunek 2.4.
W oknie komunikatu
wyĂwietlane sÈ dane
z pierwszych komórek
aktywnego wiersza
i kolumny oraz
z aktywnej komórki
Wskazówki
T
W pierwszym wierszu procedurze nadawana jest nazwa. Makro
zawsze rozpoczyna siÚ sïowem kluczowym
Sub
, po którym
podawana jest jego nazwa i ewentualnie parametry.
50
Tworzenie makr w VBA dla Excela 2010/2013 • mwiczenia
T
W nastÚpnym wierszu zawarty jest warunek, ĝe dalsze czynnoĂci
bÚdÈ wykonane tylko wtedy, gdy aktywna komórka znajduje siÚ
nie niĝej niĝ w
10
wierszu i nie dalej niĝ w
10
kolumnie arkusza.
T
W trzech kolejnych wierszach z aktywnej (zaznaczonej)
komórki oraz pierwszych komórek kolumny i wiersza dane sÈ
pobierane i przypisywane zmiennym. Przypisanie wartoĂci
komórek zmiennym uïatwi Ci zapisanie argumentu dla polecenia
MsgBox
w nastÚpnym wierszu kodu. Jak widaÊ, pobranie danych
z komórek arkusza nie wymaga ĝadnych poleceñ. Wystarczy
operacja przypisania.
T
Po wyĂwietleniu okna dialogowego (skïadniÚ polecenia
MsgBox
poznasz w dalszej czÚĂci podrÚcznika) nastÚpuje zamkniÚcie
sekwencji operacji warunkowych, czyli wykonywanych po
speïnieniu warunku poczÈtkowego (
End If
).
T
Ostatnie sïowo kluczowe informuje o koñcu procedury (makra).
Pozostaje jeszcze pytanie: jak sprawiÊ, aby makro byïo uruchamiane
po kaĝdym klikniÚciu myszÈ? DecydujÈ o tym procedury zdarzeniowe,
których opis zawarty jest w rozdziale 4. podrÚcznika.
Zmienne i staïe
Korzystanie ze staïych ma sens wtedy, gdy czÚsto stosujesz tÚ samÈ
wartoĂÊ w procedurze. Moĝesz na przykïad za pomocÈ staïej wyraziÊ
czÚĂÊ komunikatu czÚsto wyĂwietlanego w oknie dialogowym. Staïe
definiuje siÚ za pomocÈ sïowa kluczowego
Const
:
Const a = "WartoĂÊ komórki wynosi: "
Const b = 13
NiewÈtpliwÈ zaletÈ staïej jest to, ĝe próba jej zmiany w jakikolwiek spo-
sób jest niemoĝliwa i koñczy siÚ wyĂwietleniem komunikatu o bïÚdzie.
W VBA rozpoznawanych jest kilka typów zmiennych:
T
Boolean
— zmienna logiczna — przybiera wartoĂci
true
lub
false
.
T
Byte
— wartoĂci caïkowite — przybiera wartoĂci od
0
do
255
(czyli tyle, ile jeden bajt).
T
Integer
— wartoĂci caïkowite — przybiera wartoĂci od
–32 768
do
32 767
.