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. Oceń książkę Księgarnia internetowa Lubię to!» Nasza społeczność
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 wiczenia 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 codzienn prac z Excelem i zautomatyzowa cz sto powtarzane czynno ci. W a ciwie niezbyt przyda a si wiedza na temat VBA wystarczy o Ci uruchomienie rejestratora makr i pokazanie, 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 przynajmniej 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 sposobó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 wiczenia WICZENIE 2.1 Czytanie i umieszczanie danych Utwórz arkusz tabliczki mno enia w zakresie od 1 do 10 wed ug rysunku 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). Poznasz 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 WICZENIE 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 Zauwa, e w ró ny sposób wpisano argumenty Range. Obydwa sposoby s poprawne. Jak wida, za pomoc Range mo emy zaznacza ca e zakresy komórek. 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 wiczenia 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 WICZENIE 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: zaznaczonej komórki; komórki z pierwszego wiersza aktywnej kolumny; 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 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 wiczenia 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. 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. 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). 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 sposób jest niemo liwa i ko czy si wy wietleniem komunikatu o b dzie. W VBA rozpoznawanych jest kilka typów zmiennych: Boolean zmienna logiczna przybiera warto ci true lub false. Byte warto ci ca kowite przybiera warto ci od 0 do 255 (czyli tyle, ile jeden bajt). Integer warto ci ca kowite przybiera warto ci od 32 768 do 32 767.