Beruflich Dokumente
Kultur Dokumente
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/vbae16_ebook
Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
ISBN: 978-83-283-2866-2
Co to jest VBA?
Skrót VBA pochodzi od angielskich słów Visual Basic for Applications. Spróbujmy
rozszyfrować tę nazwę.
Basic
W pierwszej kolejności mam skojarzenie ze słowem BASIC. Jest to język programo-
wania opracowany na początku lat 60. Skrót oznacza Beginner’s All-purpose Symbolic
Instruction Code, czyli uniwersalny kod instrukcji symbolicznych dla początkujących.
BASIC był przeznaczony do nauki programowania.
Wielką popularność BASIC zyskał dzięki temu, że można było programować w nim
komputery Amstrad CPC, Atari, Commodore, IBM PC i Sinclair ZX Spectrum. Wielu
Czytelników zna komputery tych marek tylko z opowiadań. Widać więc, że BASIC jako
język programowania nieco trąci myszką.
Visual Basic
Kolejne skojarzenie, a mianowicie Visual Basic, jest bardziej trafne. Visual Basic jest ję-
zykiem programowania wysokiego poziomu. Jego składnia jest oparta na języku BASIC,
ale unowocześniona. Pisząc aplikację, a potem używając jej, można korzystać z interfejsu
graficznego (rysunek W.1).
Rysunek W.1.
Visual Basic ma
interfejs graficzny
BASIC jest językiem działającym w środowisku tekstowym. Linie kodu należało wpi-
sywać ręcznie. Popełnienie pomyłki uniemożliwiało uruchomienie programu aż do
usunięcia błędu.
Począwszy od Microsoft Office 2000, pakiet został wyposażony w Edytor Visual Basic.
Ułatwia on pracę z kodem. W wersji 2000 dodano także możliwość współpracy programu
Microsoft Access z bazą danych Microsoft SQL Server w architekturze klient-serwer.
10 VBA dla Excela 2016 PL. 222 praktyczne przykłady
W pakietach Microsoft Office 2007, 2010, 2013 i 2016 można uruchamiać makro-
polecenia osadzone w istniejących dokumentach i szablonach. Pakiety zawierają język
programowania Visual Basic for Applications (VBA). Zostało w nich więc udostępnione
środowisko dla makropoleceń. Obsługiwane są COM API (COM — Component Object
Model to standard definiowania i tworzenia interfejsów programistycznych; API — Ap-
plication Programming Interface to interfejs programowania aplikacji). Pozwala to ma-
kropoleceniom na wyzwalanie funkcji i przechwytywanie zdarzeń w takich aplikacjach,
jak Outlook czy Word.
Wsteczna zgodność jest bardzo istotna dla makropoleceń. Są one szeroko stosowane
przez użytkowników i deweloperów. Pozwalają na integrowanie Microsoft Office z in-
nymi aplikacjami. Zastosowanie makropoleceń pozwala wybierać dane z listów elek-
tronicznych zapisanych w Outlooku, przeglądać informacje zgromadzone w systemach
CRM (ang. Customer Relationship Management — zarządzanie relacjami z klientem),
generować arkusze Excela na podstawie danych zawartych w systemach ERP (ang. en-
terprise resource planning — planowanie zasobów przedsiębiorstwa).
W Microsoft Office 2007 zastąpiono wiele menu i pasków narzędzi wstążkami. W konse-
kwencji menu i paski narzędzi tworzone przez użytkownika Microsoft Office 2003 nie
mają gdzie się pojawić. Są przenoszone na kartę Dodatki. Może to utrudnić zlokalizowa-
nie obiektu, a gdy zostanie on już odnaleziony, będzie działał poprawnie.
Za pomocą programów pakietów Microsoft Office 2007, Microsoft Office 2010, Microsoft
Office 2013 i Microsoft Office 2016 można otwierać, tworzyć i zapisywać dokumenty
w formatach zgodnych z wcześniejszymi wersjami pakietu Microsoft Office. W takich
przypadkach pliki będą zawierały makropolecenia. W tabeli w.1. podano rozszerzenia
plików, które pozwalają i nie pozwalają na zapisywanie w nich makropoleceń.
Rysunek W.3.
Dopiero po wyrażeniu
zgody makra zostaną
włączone. Okno
Microsoft Office 2016
Rysunek W.4.
W Microsoft Office 2013
i 2016 żółty pasek
został zastąpiony
przez trudniejsze
do przeoczenia
powiadomienie
o zabezpieczeniach
Rysunek W.5.
Komputer znacznie
szybciej wykona pracę,
która dla człowieka
jest męcząca przez
swą monotonię
Istnieją trzy przesłanki do stosowania VBA. Z VBA warto skorzystać wówczas, gdy:
1. Czynność jest powtarzalna. Zmiana stylu akapitu na górze każdej strony
utworzonej w edytorze Word, formatowanie wielu arkuszy programu Excel
czy aktualizacja wielu kontaktów programu Outlook są czynnościami, które
można zautomatyzować. Pozostaje do rozważenia kwestia, czy warto pisać
program, gdy tę samą czynność musimy powtórzyć 3 – 5 razy i więcej do niej
nie wracać. Moim zdaniem nie. Mniej czasu zajmie wykonanie tej czynności
ręcznie niż napisanie programu. Jeżeli natomiast jakąś operację musisz
wykonać sto lub więcej razy, to warto pokusić się o napisanie programu.
2. Pożądana jest interakcja z użytkownikiem. Nie można zmusić użytkownika,
aby np. w samym dokumencie utworzonym w edytorze Word czy arkuszu
Excela zapisał zmiany przed wykonaniem wydruku. Można w takiej sytuacji
napisać makropolecenie, które zmusi do tego użytkownika lub mu o tym
przypomni. Dzięki temu zmniejszy się prawdopodobieństwo powstawania
różnic między wydrukiem a wersją dokumentu zapisaną do pliku.
3. Pożądana jest interakcja między aplikacjami pakietu Microsoft Office.
Często jest spotykana sytuacja, w której dane są przygotowane w jednej
aplikacji, a wykorzystane w innej. Stajemy wówczas przed koniecznością
skopiowania kontaktów z programu Outlook do dokumentu edytora Word
i sformatowania ich lub skopiowania danych z arkusza Excel do prezentacji
utworzonej w programie PowerPoint. W tych zastosowaniach również można
posłużyć się VBA.
14 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Przed rozpoczęciem pisania programu warto zadać sobie pytanie: „Czy istnieje prost-
szy sposób rozwiązania problemu niż ten, który nasuwa się w pierwszej kolejności?”.
Postawienie go i chwila zastanowienia mogą uchronić nas przed zabrnięciem w ślepą
uliczkę. Jeżeli musisz wykonać złożone zadanie edycyjne, może się okazać, że uda się
wykonać je raz przy wykorzystaniu stylów, a następnie… powtórzyć tyle razy, ile będzie
trzeba, naciskając kombinację klawiszy Ctrl+Y.
Jak napisać
najprostszy program w VBA?
Żeby napisać program w VBA, wcale nie trzeba znać VBA. Wystarczy zarejestrować
makro (rysunek W.6).
Rysunek W.6.
Wystarczą trzy
kliknięcia myszą
i można
rejestrować
makro
Podsumowanie
Skrót VBA pochodzi od angielskich słów Visual Basic for Applications.
Został on zaimplementowany w aplikacjach pakietu Microsoft Office.
Pozwala na automatyzację pracy z dokumentami. Jednym z najprostszych
zastosowań VBA są makropolecenia.
VBA jest instalowany wraz z pakietem Microsoft Office. Z jego aplikacji
korzystają wszyscy użytkownicy, np. wtedy, gdy uruchamiają arkusz
programu Excel lub edytor Word. Pisanie w nim programów wymaga dobrej
znajomości pakietu Office.
Z VBA warto skorzystać wówczas, gdy w pakiecie Office wielokrotnie
wykonujesz tę samą czynność, pożądana jest interakcja z użytkownikiem
lub między aplikacjami pakietu Office.
Zdecydowanie odradzam rozpoczynanie pisania programu, jeśli istnieje
prostsze narzędzie, nie masz warunków do skupienia się nad programem
lub nie dysponujesz pewną rezerwą czasową.
16 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rozdział 1.
Makropolecenia
Z tego rozdziału dowiesz się:
Jakie zastosowanie mają makropolecenia
Jak przygotować się do zarejestrowania makropolecenia
Jak zarejestrować makropolecenie
Jak zapisać makropolecenie wraz z arkuszem
Jak otworzyć makropolecenie do edycji
W trzecim przypadku możesz „napisać” program w VBA bez znajomości VBA. Ty uru-
chamiasz rejestrator i wykonujesz czynności, które mają zostać zapisane w postaci pro-
gramu. Rejestrator opisuje wykonywane przez Ciebie czynności w języku VBA. Dba on
o poprawność składni. Ty musisz tylko:
uruchomić rejestrator,
wykonać czynności, które mają zostać zapamiętane,
po wykonaniu wszystkich czynności wyłączyć rejestrator.
Dalsza lektura tego rozdziału pozwoli Ci dowiedzieć się, jak zarejestrować makro-
polecenie.
Planowanie makropolecenia
Poznawanie VBA zaczynamy od czynności najprostszej. Nie wymaga ona znajomości
zasad programowania, a jedynie posługiwania się arkuszem Excel. Czynnością tą jest
rejestrowanie makropolecenia. Nie znaczy to, że można ją wykonać bez przygotowania.
Postaraj się kilka razy wykonać czynności, które mają zostać zarejestrowane w makro-
poleceniu. Dla uzyskania powtarzalności wyników wykonania makropolecenia istotne
są warunki początkowe (np. to, która komórka jest zaznaczona, gdy makropolecenie
jest uruchamiane). Jeżeli istnieje choć jeden parametr, którego wykonanie może mieć
wpływ na wykonanie makropolecenia, zanotuj to spostrzeżenie. Nie zakładaj, że użyt-
kownik makropolecenia zachowa się dokładnie tak jak Ty. Uwzględnij to spostrzeżenie
w makropoleceniu lub zamieść odpowiedni komentarz.
Rejestrowanie makropolecenia
Czynności wchodzące w skład makropolecenia powinny zostać przed zarejestrowaniem
przećwiczone. Nie trzeba wykonywać ich szybko. Ważne jest zachowanie logicznej
kolejności i zminimalizowanie liczby operacji.
Przykład 1.
Załóżmy, że w arkuszu Excel chcemy skopiować zawartość komórek od A1 – A3 do
C1 – C3.
Edytowanie makropolecenia
Przykład 2.
Aby edytować makropolecenie:
1. Wyświetl wstążkę Widok.
2. Kliknij czarną strzałkę widoczną pod przyciskiem Makra.
3. Z rozwiniętego menu wybierz polecenie Wyświetl makra (rysunek 1.4).
Rysunek 1.4.
Na liście, która
jest rozwijana
po kliknięciu ikony,
znajdują się polecenia
umożliwiające
rejestrowanie i edycję
makropoleceń
Rysunek 1.5.
Okno programu
do zarządzania
makropoleceniami
Rysunek 1.6.
Okno
z wyświetlonym
kodem
makropolecenia
Zapisywanie arkusza
Przykład 3.
W dokumentach zapisanych w domyślnych formatach aplikacji pakietu Microsoft
Office 2007 nie można przechowywać makropoleceń. Sprawdzimy, jak ta właściwość
wpływa na zapisywanie dokumentów:
1. Zarejestruj makropolecenie.
2. Kliknij ikonę oznaczoną symbolem dyskietki (rysunek 1.7).
Rysunek 1.7.
Kliknięcie dyskietki
inicjuje zapisanie
dokumentu do pliku
Rysunek 1.8. Arkusz Microsoft Excel 2007 domyślnie nie może zawierać projektu VB
4. Zmienimy format pliku. Rozwiń listę Zapisz jako typ. Wybierz format
Skoroszyt programu Excel z obsługą makr (rysunek 1.9).
Rysunek 1.11. Plik ma nie tylko zmieniony format, ale i zmienioną nazwę
Rozdział 1. Makropolecenia 25
Rysunek 1.12. Na pasku u góry ekranu nazwa Zeszyt1 została zastąpiona przez Kajet
10. Sprawdzimy jeszcze, jak wygląda plik po zapisaniu. Wyświetl folder docelowy.
Jest w nim widoczna ikona pliku. W kolumnie Typ widnieje informacja Arkusz
programu Microsoft Office Excel z obsługą makr (rysunek 1.13).
Rysunek 1.13. O tym, że dokument został zapisany w formacie innym niż domyślny, informuje ikona
i zapis w kolumnie Typ
Rysunek 1.14. W Microsoft Excel 2010 zachowano wstążki i ikony pogrupowane tematycznie
26 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Przykład 4.
Załóżmy, że w arkuszu Excel chcemy skopiować zawartość komórek A1 – A3 do C1– C3.
Musimy w tym celu:
1. Zaznaczyć komórki od A1 do A3 (rysunek 1.15).
Rysunek 1.15.
Obszar z danymi
Rysunek 1.16.
Dane zostały
skopiowane
do schowka
Rysunek 1.17.
Zaznaczona komórka
wyznacza początek
obszaru docelowego
Rysunek 1.18.
Dane z obszaru A1 – A3
zostały skopiowane
do obszaru C1 – C3
Rysunek 1.19.
Zaznaczenie
obszaru źródłowego
zostało usunięte
Rejestrowanie makropolecenia
Rejestrowanie makropolecenia to nie casting do kolejnych odcinków kultowego serialu.
Nadal siedzisz przy komputerze. Jedyna różnica między ćwiczeniem a rejestrowaniem
makropolecenia polega na tym, że uruchamiasz program rejestrujący polecenia przezna-
czone do zrealizowania w arkuszu Excel.
Jeżeli się pomylisz — nic się nie stanie. Możesz przerwać rejestrowanie i uruchomić je
ponownie. Rejestrowanie możesz powtarzać tak długo, aż będziesz zadowolony z uzy-
skanego efektu.
Przykład 5.
Po sprawdzeniu, że polecenia, które chcemy zarejestrować, można wykonać, przepro-
wadź następujące operacje:
1. Wyświetl wstążkę Deweloper (rysunek 1.20). Jeżeli nie jest widoczna, możesz
ją włączyć, wybierając kolejno: Plik/Opcje/Dostosowywanie wstążki.
Rysunek 1.20.
W ten oto sposób staniesz się
deweloperem oprogramowania
Rysunek 1.21.
Sprawa wygląda
na poważną.
Będziemy tworzyć
kod programu!
Rysunek 1.22.
Makropoleceniu
można nadać nazwę
28 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 1.23.
Domyślnie jest wyświetlany
klawisz Ctrl. Wpisz literę,
która będzie uzupełniała skrót
Rysunek 1.24.
Miejsce
przechowywania
makra określa
jego dostępność
Rysunek 1.25.
Pole pozwala
na wprowadzenie
dodatkowego opisu
Rysunek 1.26.
Okno Rejestrowanie
makra z wpisanymi
informacjami
Rozdział 1. Makropolecenia 29
Rysunek 1.27.
Nazwa makropolecenia
zawiera spację
(patrz rysunek 1.26)
Rysunek 1.28.
W nazwie
makropolecenia
występuje
podkreślenie
11. W sekcji Kod w miejscu przycisku Zarejestruj makro pojawił się przycisk
Zatrzymaj rejestrowanie (rysunek 1.29). Wykonane od tej pory czynności
zostaną zarejestrowane.
Rysunek 1.29.
Wykonywane
polecenia są
rejestrowane
w arkuszu
Rysunek 1.30.
Przycisk Zatrzymaj
rejestrowanie
30 VBA dla Excela 2016 PL. 222 praktyczne przykłady
13. W sekcji Kod ponownie pojawił się przycisk Zarejestruj makro (rysunek 1.31).
Makropolecenie zostało zarejestrowane.
Rysunek 1.31.
Sekcja Kod
po zakończeniu
rejestrowania
makropolecenia
Testowanie makropolecenia
Przetestowanie makropolecenia polega na wykonaniu go.
Dla poprawnego wykonania makropolecenia bardzo istotne jest, aby zostały zacho-
wane takie same warunki początkowe, jakie zastosowano podczas jego rejestrowania
(np. położenie komórki aktywnej).
Przykład 6.
Aby przetestować makropolecenie:
1. Przygotuj arkusz z wypełnionymi i zaznaczonymi tymi samymi komórkami,
którymi posłużyłeś się przy rejestrowaniu makropolecenia (rysunek 1.32).
Nie jest istotna zawartość komórek, ale ich położenie.
Rysunek 1.32.
Komórki A1, A2 i A3
wypełnione danymi
Rysunek 1.33.
Narzędzia do pracy
z makrami znajdują się
na wstążce Deweloper
Rysunek 1.34.
Sekcja Kod,
ikona Makra
Rozdział 1. Makropolecenia 31
Rysunek 1.35.
Makro przeznaczone
do uruchomienia
Rysunek 1.36.
Komórki skopiowane
dzięki wykorzystaniu
makropolecenia
Przykład 7.
Aby przypisać makropolecenie przyciskowi:
1. Kliknij wstążkę Deweloper (rysunek 1.33).
2. W sekcji Formanty kliknij ikonę Wstaw (rysunek 1.37).
32 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 1.37.
Nawet bez znajomości
nazw można wybrać
odpowiedni formant,
klikając jego miniaturę
Rysunek 1.38.
Przecięcie ramion krzyża
wskazuje miejsce na arkuszu
Rysunek 1.39.
Wraz z kursorem
przemieszcza się narożnik
prostokąta przeciwległy
do tego, od którego
rozpoczęto rysowanie
Rysunek 1.40.
W oknie można
przypisać przyciskowi
nazwę makropolecenia
10. W arkuszu pojawił się przycisk (rysunek 1.41). Nosi on nazwę, która
nie informuje o przeznaczeniu przypisanego mu makropolecenia.
Rysunek 1.41.
Przyciskowi jest
nadawana nazwa
domyślna
Rysunek 1.42.
Tekst widoczny
na przycisku
można edytować
Rysunek 1.43.
Można zmienić opis
i rozmiary przycisku
Rysunek 1.44.
Przycisk
ze zmienionym opisem
Przykład 8.
Aby przetestować działanie makropolecenia uruchamianego przyciskiem:
1. Przygotuj arkusz z wypełnionymi i zaznaczonymi tymi samymi komórkami,
którymi posłużyłeś się przy rejestrowaniu makropolecenia (rysunek 1.45).
Nie jest istotna zawartość komórek, ale ich położenie.
34 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 1.45.
Arkusz przygotowany
do testowania
makropolecenia
Rysunek 1.46.
Efekt działania
makropolecenia
uruchamianego
przyciskiem
Przykład 9.
Aby zmienić krój czcionki używanej do opisywania przycisku:
1. Kliknij przycisk prawym klawiszem myszy.
2. Stosując przeciąganie, zaznacz opis przycisku.
3. Ponownie kliknij przycisk prawym klawiszem myszy.
4. Z menu podręcznego wybierz polecenie Formatuj formant (rysunek 1.47).
Rysunek 1.47.
Opis przycisku
został przygotowany
do edycji
Rysunek 1.48.
Można zmienić
nie tylko krój czcionki,
ale i istotne jej atrybuty
Rysunek 1.49.
Przycisk
o zmodyfikowanym
wyglądzie
Zapisywanie makropolecenia
Domyślny format arkusza programu Excel 2010 nie pozwala na zapisanie arkusza wraz
z makropoleceniem. Użytkownik jest ostrzegany przed utratą makropolecenia, ale gdy
zbagatelizuje komunikat, makropolecenie przestanie działać.
Aby nie utracić makropolecenia, należy do zapisu wybrać format pozwalający na ob-
sługę makropoleceń. Podczas wczytywania pliku z makropoleceniem trzeba wyrazić
zgodę na uruchomienie makra.
Przykład 10.
Aby zapisać arkusz zawierający makropolecenie w formacie pozwalającym na obsługę
makr:
1. Utwórz nowy arkusz z makropoleceniem.
2. Kliknij ikonę Zapisz (rysunek 1.50).
3. Zostało wyświetlone okno Zapisywanie jako. Zmień nazwę pliku, aby można
było łatwo zorientować się, którego przykładu dotyczy (rysunek 1.51).
36 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 1.50.
Arkusz
z makropoleceniem,
który nie był jeszcze
zapisywany
4. Z listy Zapisz jako typ wybierz Skoroszyt programu Excel z obsługą makr
(*.xlsm).
5. Kliknij przycisk Zapisz.
6. Sprawdzimy, czy właściwości arkusza nie uległy zmianie. Zamknij arkusz.
7. Odszukaj plik, do którego został zapisany arkusz (rysunek 1.52).
Rysunek 1.52.
Plik zawierający makra
można rozpoznać po:
rozszerzeniu xlsm,
ikonie z wykrzyknikiem,
informacji wyświetlanej
po wskazaniu pliku myszą
Rysunek 1.53. Bez wyrażenia zgody na uaktywnienie makr będzie widoczny tylko przycisk
Przykład 11.
Aby zapisać arkusz zawierający makropolecenie w formacie niepozwalającym na ob-
sługę makr:
1. Wybierz kolejno polecenia Plik/Zapisz jako (rysunek 1.54).
Rysunek 1.54.
Arkusz z przykładu 10.
zostanie zapisany
pod inną nazwą
2. Zostało wyświetlone okno Zapisywanie jako. Zmień nazwę pliku, aby można
było łatwo zorientować się, którego przykładu dotyczy (rysunek 1.55).
Rysunek 1.55.
Arkusz zostanie
zapisany w formacie
domyślnym
— niepozwalającym
na obsługę
makropoleceń
Rysunek 1.57.
Plik niezawierający makr
można rozpoznać po:
rozszerzeniu xlsx, ikonie
z wykresem słupkowym,
braku informacji
o makropoleceniu
w dymku wyświetlanym
po wskazaniu pliku myszą
Rysunek 1.58.
Arkusz przygotowany
do testowania
makropolecenia
Przykład 12.
Aby wczytać do edycji makro z przykładu 11.:
1. Dwukrotnie kliknij plik (rysunek 1.57).
2. Po wczytaniu pliku kliknij wstążkę Deweloper.
3. W sekcji Kod kliknij ikonę Makra (rysunek 1.60).
Rysunek 1.60.
Ikona Makra
4. Zostało wyświetlone okno Makro (rysunek 1.61). Nie widać w nim żadnych
makropoleceń.
Rysunek 1.61.
Arkusz nie zawiera
makropoleceń
Przykład 13.
Aby wczytać do edycji makro z przykładu 10.:
1. Dwukrotnie kliknij plik (rysunek 1.52).
2. Po wczytaniu pliku kliknij wstążkę Deweloper.
3. W sekcji Kod kliknij ikonę Makra (rysunek 1.60).
4. Zostało wyświetlone okno Makro (rysunek 1.62).
5. Zaznacz nazwę makropolecenia, które będzie edytowane.
6. Kliknij przycisk Edycja.
7. W oknie edytora Visual Basic for Applications jest widoczna hierarchiczna
lista wszystkich otwartych skoroszytów i dodatków. Makro jest zapisane
w gałęzi Module1. Kliknij ją dwukrotnie. Kod makra został wyświetlony
(rysunek 1.63).
40 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 1.62.
W tym arkuszu są
dostępne
makropolecenia
Po komentarzach znajdują się linie programu. Aby poprawić makro, należy zmienić frag-
ment kodu makra. Jest do tego niezbędna znajomość poleceń Visual Basic. Najpierw
trzeba zrozumieć, co jest zapisane w programie, a następnie wiedzieć, co wpisać, aby
uzyskać oczekiwaną zmianę działania makropolecenia.
Rysunek 1.64. Microsoft Excel 2013. Wstążki pozornie nie różnią się od znanych z Microsoft Excel 2010
Przykład 14.
Załóżmy, że w arkuszu Excel chcemy skopiować zawartość komórek A1 – A3 do
C1 – C3. Musimy w tym celu:
1. Zaznaczyć komórki od A1 do A3 (rysunek 1.65).
Rysunek 1.65.
Obszar z danymi
Rysunek 1.66.
Dane zostały
skopiowane
do schowka
Rysunek 1.67.
Zaznaczona komórka
wyznacza początek
obszaru docelowego
Rysunek 1.68.
Dane z obszaru
A1 – A3 zostały
skopiowane
do obszaru C1 – C3
Rysunek 1.69.
Zaznaczenie
obszaru źródłowego
zostało usunięte
Rejestrowanie makropolecenia
Do rejestrowania makropolecenia należy przystąpić wówczas, gdy zostało sprawdzone
w praktyce, że wykonanie sekwencji czynności w arkuszu Excel prowadzi do oczeki-
wanego rezultatu.
Ważne jest, aby makropolecenie było rejestrowane przy takich samych warunkach począt-
kowych (np. aktywna komórka), przy jakich sekwencja czynności została sprawdzona.
Jeżeli się pomylisz — nic się nie stanie. Możesz przerwać rejestrowanie i uruchomić je
ponownie. Rejestrowanie możesz powtarzać tak długo, aż będziesz zadowolony z uzy-
skanego efektu.
Przykład 15.
Po sprawdzeniu, że polecenia, które chcemy zarejestrować, można wykonać, przepro-
wadź następujące operacje:
1. Wyświetl wstążkę Deweloper (rysunek 1.70). Jeżeli nie jest widoczna,
możesz ją włączyć, wybierając kolejno: Plik/Opcje/Dostosowywanie wstążki.
Rozdział 1. Makropolecenia 43
Rysunek 1.70.
W ten oto sposób staniesz się
deweloperem oprogramowania
Rysunek 1.71.
Kliknięcie przycisku
rozpoczyna
rejestrowanie makra
Rysunek 1.72.
Makropoleceniu
można nadać nazwę
Rysunek 1.73.
Domyślnie jest wyświetlany
klawisz Ctrl. Wpisz literę,
która będzie uzupełniała skrót
Rysunek 1.74.
Miejsce
przechowywania
makra określa
jego dostępność
44 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 1.75.
Pole pozwala
na wprowadzenie
dodatkowego opisu
Rysunek 1.76.
Okno Rejestrowanie
makra z wpisanymi
informacjami
Rysunek 1.78.
Podkreślenie w nazwie
makropolecenia jest
akceptowane
Rozdział 1. Makropolecenia 45
11. W sekcji Kod w miejscu przycisku Zarejestruj makro pojawił się przycisk
Zatrzymaj rejestrowanie (rysunek 1.79). Wykonane od tej pory czynności
zostaną zarejestrowane.
Rysunek 1.79.
Arkusz „rejestruje”
wykonywane polecenia
Rysunek 1.80.
Do klinięcia przycisku
Zatrzymaj wszystkie
polecenia wydane
z klawiatury są
rejestrowane
13. W sekcji Kod ponownie pojawił się przycisk Zarejestruj makro (rysunek 1.81).
Makropolecenie zostało zarejestrowane.
Rysunek 1.81.
Sekcja Kod
po zakończeniu
rejestrowania
makropolecenia
Testowanie makropolecenia
Przetestowanie makropolecenia polega na wykonaniu go.
Dla poprawnego wykonania makropolecenia bardzo istotne jest, aby zostały zacho-
wane takie same warunki początkowe, jakie wykorzystano podczas jego rejestrowania
(np. położenie komórki aktywnej).
46 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Przykład 16.
Aby przetestować makropolecenie:
1. Przygotuj arkusz z wypełnionymi i zaznaczonymi tymi samymi komórkami,
co przy rejestrowaniu makropolecenia (rysunek 1.82). Nie jest istotna zawartość
komórek, ale ich położenie.
Rysunek 1.82.
Komórki A1, A2 i A3
wypełnione danymi
Rysunek 1.83.
Narzędzia do pracy
z makrami znajdują się
na wstążce Deweloper
Rysunek 1.84.
Sekcja Kod,
ikona Makra
Rysunek 1.86.
Komórki skopiowane
dzięki wykorzystaniu
makropolecenia
Przykład 17.
Aby przypisać makropolecenie przyciskowi:
1. Kliknij wstążkę Deweloper (rysunek 1.83).
2. W sekcji Formanty kliknij ikonę Wstaw (rysunek 1.87).
Rysunek 1.87.
Nawet bez znajomości
nazw można wybrać
odpowiedni formant,
klikając jego
miniaturę
Rysunek 1.88.
Przecięcie ramion krzyża
wskazuje miejsce na arkuszu
48 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 1.89.
Wraz z kursorem
przemieszcza się narożnik
prostokąta przeciwległy
do tego, od którego
rozpoczęto rysowanie
Rysunek 1.90.
W oknie można
przypisać przyciskowi
nazwę makropolecenia
Rysunek 1.91.
Przyciskowi jest
nadawana nazwa
domyślna
Rysunek 1.92.
Tekst widoczny
na przycisku
można edytować
Rysunek 1.93.
Można zmienić opis
i rozmiary przycisku
15. Aby zakończyć edytowanie, kliknij obok przycisku. W arkuszu pojawił się
przycisk z nowym napisem i dostosowanymi do niego rozmiarami (rysunek 1.94).
Rysunek 1.94.
Przycisk
ze zmienionym opisem
Przykład 18.
Aby przetestować działanie makropolecenia uruchamianego przyciskiem:
1. Przygotuj arkusz z wypełnionymi i zaznaczonymi tymi samymi komórkami,
co przy rejestrowaniu makropolecenia (rysunek 1.95). Nie jest istotna zawartość
komórek, ale ich położenie.
Rysunek 1.95.
Arkusz przygotowany
do testowania
makropolecenia
Rysunek 1.96.
Efekt działania
makropolecenia
uruchamianego
przyciskiem
Przykład 19.
Aby zmienić krój czcionki używanej do opisywania przycisku:
1. Kliknij przycisk prawym klawiszem myszy.
2. Z menu podręcznego wybierz polecenie Formatuj formant (rysunek 1.97).
Rysunek 1.97.
Opis przycisku
został przygotowany
do edycji
Rysunek 1.98.
Można zmienić
nie tylko krój czcionki,
ale i jej istotne
atrybuty
Rysunek 1.99.
Przycisk
o zmodyfikowanym
wyglądzie
Udostępnianie makropolecenia
Aby makro było dostępne zawsze, gdy jest używany program Excel, należy przy zapisie
wybrać pozycję Osobisty skoroszyt makr. Po jej wybraniu w programie Excel zostanie
utworzony (jeśli jeszcze nie istnieje) ukryty osobisty skoroszyt makr (Personal.xlsb)
i makro zostanie w tym skoroszycie.
Aby udostępnić innym osobom tylko jedno makro lub kilka makr, można przesłać im
skoroszyt zawierający te makra w wiadomości e-mail. Skoroszyt można także upu-
blicznić na udostępnionym dysku sieciowym lub przez bibliotekę programu SharePoint
Services.
Zapisywanie makropolecenia
Domyślny format arkusza programu Excel 2013 nie pozwala na zapisanie arkusza
wraz z makropoleceniem. Użytkownik jest ostrzegany przed utratą makropolecenia,
ale gdy zbagatelizuje komunikat, makropolecenie przestanie działać.
Aby nie utracić makropolecenia, należy do zapisu wybrać format pozwalający na ob-
sługę makropoleceń. Podczas wczytywania pliku z makropoleceniem trzeba wyrazić
zgodę na uruchomienie makra.
Przykład 20.
Aby zapisać arkusz zawierający makropolecenie w formacie pozwalającym na obsługę
makr:
1. Utwórz nowy arkusz z makropoleceniem.
2. Kliknij ikonę Zapisz (rysunek 1.100).
Rysunek 1.100.
Arkusz
z makropoleceniem,
nie był on jeszcze
zapisywany
52 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 1.101.
Arkusz
z makropoleceniem,
zostanie zapisany
na dysku twardym
4. Zostało wyświetlone okno Zapisywanie jako. Zmień nazwę pliku, aby można
było łatwo zorientować się, którego przykładu on dotyczy (rysunek 1.102).
5. Z listy Zapisz jako typ wybierz Skoroszyt programu Excel z obsługą makr.
6. Kliknij przycisk Zapisz.
7. Sprawdzimy, czy właściwości arkusza nie uległy zmianie. Zamknij arkusz.
8. Odszukaj plik, do którego został zapisany arkusz (rysunek 1.103).
9. Dwukrotnie kliknij plik.
Rozdział 1. Makropolecenia 53
Rysunek 1.103.
Plik zawierający makra
można rozpoznać po:
rozszerzeniu xlsm,
ikonie z wykrzyknikiem,
informacji wyświetlanej
po wskazaniu pliku myszą
10. Plik został załadowany. Aby makra działały, należy wyrazić zgodę na ich
włączenie (rysunek 1.104).
Rysunek 1.104. Bez wyrażenia zgody na uaktywnienie makr będzie widoczny tylko przycisk
Przykład 21.
Aby zapisać arkusz zawierający makropolecenie w formacie niepozwalającym na ob-
sługę makr:
1. Wybierz kolejno polecenia Plik/Zapisz jako (rysunek 1.105).
Rysunek 1.105.
Arkusz z przykładu 20.
zostanie zapisany
pod inną nazwą
2. Wybierz lokalizację i w oknie Zapisywanie jako zmień nazwę pliku, aby można
było łatwo zorientować się, którego przykładu dotyczy (rysunek 1.106).
3. Z listy Zapisz jako typ wybierz Skoroszyt programu Excel.
54 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 1.108.
Plik niezawierający makra
można rozpoznać po:
ikonie z wykresem
słupkowym
Rozdział 1. Makropolecenia 55
Rysunek 1.109.
Arkusz przygotowany
do testowania
makropolecenia
11. Jeżeli zapiszesz arkusz w formacie bez obsługi makr, a następnie spróbujesz je
uruchomić, zostanie wyświetlony komunikat informujący o niemożności
wykonania makra (rysunek 1.110).
Przykład 22.
Aby wczytać do edycji makro z przykładu 20.:
1. Dwukrotnie kliknij plik (rysunek 1.103).
2. Po wczytaniu pliku kliknij wstążkę Deweloper.
56 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 1.111.
Ikona Makra
4. Zostało wyświetlone okno Makro (rysunek 1.112). Nie widać w nim żadnych
makropoleceń.
Rysunek 1.112.
Arkusz nie zawiera
makropoleceń
Przykład 23.
Aby wczytać do edycji makro z przykładu 15.:
1. Dwukrotnie kliknij plik (rysunek 1.113).
Rysunek 1.113.
Arkusz
z makropoleceniami
Po komentarzach znajdują się linie programu. Aby poprawić makro, należy zmienić linie
programu. Jest do tego niezbędna znajomość poleceń Visual Basic. Najpierw trzeba zro-
zumieć, co jest zapisane w programie, a następnie wiedzieć, co wpisać, aby uzyskać
oczekiwaną zmianę działania makropolecenia.
Przykład 24.
Załóżmy, że w arkuszu Excel chcemy skopiować zawartość komórek A1 – A3 do
C1 – C3. Musimy w tym celu:
1. Zaznaczyć komórki od A1 do A3 (rysunek 1.116).
Rysunek 1.116.
Obszar z danymi
Rysunek 1.117.
Dane zostały
skopiowane
do schowka
Rysunek 1.118.
Zaznaczona komórka
wyznacza początek
obszaru docelowego
Rysunek 1.119.
Dane z obszaru
A1 – A3 zostały
skopiowane
do obszaru C1 – C3
Rysunek 1.120.
Zaznaczenie
obszaru źródłowego
zostało usunięte
Rejestrowanie makropolecenia
Do rejestrowania makropolecenia należy przystąpić wówczas, gdy zostało sprawdzone
w praktyce, że wykonanie sekwencji czynności w arkuszu Excel prowadzi do oczeki-
wanego rezultatu.
Ważne jest, aby makropolecenie było rejestrowane przy takich samych warunkach począt-
kowych (np. aktywna komórka), przy jakich sekwencja czynności została sprawdzona.
Jeżeli się pomylisz — nic się nie stanie. Możesz przerwać rejestrowanie i uruchomić je
ponownie. Rejestrowanie możesz powtarzać tak długo, aż będziesz zadowolony z uzy-
skanego efektu.
Przykład 25.
Po sprawdzeniu, że polecenia, które chcemy zarejestrować, można wykonać, przepro-
wadź następujące operacje:
1. Wyświetl wstążkę Widok (rysunek 1.121). Jeżeli nie jest widoczna, możesz ją
włączyć, wybierając kolejno: Plik/Opcje/Dostosowywanie wstążki.
60 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 1.121.
W ten oto sposób staniesz się
deweloperem oprogramowania
Rysunek 1.122.
Naciśnięcie przycisku
rozpoczyna
rejestrowanie makra
Rysunek 1.123.
Makropoleceniu
można nadać nazwę
Rysunek 1.124.
Domyślnie jest wyświetlany
klawisz Ctrl. Wpisz literę,
która będzie uzupełniała skrót
Rysunek 1.125.
Miejsce
przechowywania
makra określa
jego dostępność
Rysunek 1.126.
Pole pozwala
na wprowadzenie
dodatkowego opisu
Rysunek 1.127.
Okno Rejestrowanie
makra z wpisanymi
informacjami
Rysunek 1.128.
Nazwa makropolecenia
zawiera spację
(patrz rysunek 1.123)
Rysunek 1.129.
Podkreślenie w nazwie
makropolecenia
jest akceptowane
11. W menu, które pojawia się po kliknięciu czarnej strzałki widocznej pod
napisem Makra w miejscu przycisku Zarejestruj makro (rysunek 1.122),
pojawił się przycisk Zatrzymaj rejestrowanie (rysunek 1.130). Wykonane
od tej pory czynności zostaną zarejestrowane.
Rysunek 1.130.
Arkusz „rejestruje”
wykonywane polecenia
Rysunek 1.131.
Sekcja Makra
po zakończeniu
rejestrowania
makropolecenia
Testowanie makropolecenia
Przetestowanie makropolecenia polega na wykonaniu go.
Dla poprawnego wykonania makropolecenia bardzo istotne jest, aby zostały zacho-
wane takie same warunki początkowe, jakie wykorzystano podczas jego rejestro-
wania (np. położenie komórki aktywnej).
Rozdział 1. Makropolecenia 63
Przykład 26.
Aby przetestować makropolecenie:
1. Przygotuj arkusz z wypełnionymi i zaznaczonymi tymi samymi komórkami,
co przy rejestrowaniu makropolecenia (rysunek 1.132). Nie jest istotna
zawartość komórek, ale ich położenie.
Rysunek 1.132.
Komórki A1, A2 i A3
wypełnione danymi
Rysunek 1.133.
Narzędzia do pracy
z makrami znajdują się
na wstążce Widok
Rysunek 1.134.
Sekcja Kod,
ikona Makra
Przykład 27.
Aby przypisać makropolecenie przyciskowi:
1. Kliknij wstążkę Deweloper. Jeżeli nie jest ona widoczna, wybierz kolejno
polecenia: Plik/Opcje/Dostosowywanie Wstążki/Deweloper/OK (rysunek 1.137).
Rysunek 1.138.
Nawet bez znajomości
nazw można wybrać
odpowiedni formant,
klikając jego miniaturę
Rysunek 1.139.
Symbol przypomina
przycisk. Nie widać
tylko na nim napisu
4. Kursor zmienił kształt ze strzałki w krzyżyk (rysunek 1.140). Umieść kursor
tam, gdzie ma się znajdować lewy górny róg przycisku.
Rysunek 1.140.
Przecięcie ramion krzyża
wskazuje miejsce na arkuszu
Rysunek 1.141.
Wraz z kursorem
przemieszcza się narożnik
prostokąta przeciwległy
do tego, od którego
rozpoczęto rysowanie
Rysunek 1.142.
W oknie można
przypisać przyciskowi
nazwę makropolecenia
Rysunek 1.143.
Przyciskowi jest
nadawana nazwa
domyślna
Rysunek 1.144.
Tekst widoczny
na przycisku
można edytować
Rysunek 1.145.
Można zmienić opis
i rozmiary przycisku
Rozdział 1. Makropolecenia 67
Rysunek 1.146.
Przycisk
ze zmienionym opisem
Przykład 28.
Aby przetestować działanie makropolecenia uruchamianego przyciskiem:
1. Przygotuj arkusz z wypełnionymi i zaznaczonymi tymi samymi komórkami,
co przy rejestrowaniu makropolecenia (rysunek 1.147). Nie jest istotna zawartość
komórek, ale ich położenie.
Rysunek 1.147.
Arkusz przygotowany
do testowania
makropolecenia
Rysunek 1.148.
Efekt działania
makropolecenia
uruchamianego
przyciskiem
Przykład 29.
Aby zmienić krój czcionki używanej do opisywania przycisku:
1. Kliknij przycisk prawym klawiszem myszy.
2. Z menu podręcznego wybierz polecenie Formatuj formant (rysunek 1.149).
Rysunek 1.149.
Opis przycisku
został przygotowany
do edycji
68 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 1.150.
Zmienić można
nie tylko krój czcionki,
ale i jej istotne atrybuty
Rysunek 1.151.
Przycisk o zmodyfikowanym
wyglądzie
Zapisywanie makropolecenia
Domyślny format arkusza programu Excel 2016 nie pozwala na zapisanie arkusza
wraz z makropoleceniem. Użytkownik jest ostrzegany przed utratą makropolecenia,
ale gdy zbagatelizuje komunikat, makropolecenie przestanie działać.
Aby nie utracić makropolecenia, należy do zapisu wybrać format pozwalający na ob-
sługę makropoleceń. Podczas wczytywania pliku z makropoleceniem trzeba wyrazić
zgodę na uruchomienie makra.
Przykład 30.
Aby zapisać arkusz zawierający makropolecenie w formacie pozwalającym na obsługę
makr:
1. Utwórz nowy arkusz z makropoleceniem.
2. Kliknij ikonę Zapisz (rysunek 1.152).
Rysunek 1.152.
Arkusz z makropoleceniem,
nie był on jeszcze zapisywany
3. Wskaż lokalizację, w której ma zostać zapisany plik (rysunek 1.153).
Rysunek 1.153
Arkusz
z makropoleceniem,
zostanie zapisany
na dysku twardym
4. Zostało wyświetlone okno Zapisywanie jako. Zmień nazwę pliku, aby można
było łatwo zorientować się, którego przykładu on dotyczy (rysunek 1.154).
5. Z listy Zapisz jako typ wybierz Skoroszyt programu Excel z obsługą makr.
6. Kliknij przycisk Zapisz.
7. Sprawdzimy, czy właściwości arkusza nie uległy zmianie. Zamknij arkusz.
8. Odszukaj plik, do którego został zapisany arkusz (rysunek 1.155).
Rysunek 1.155.
Plik zawierający makra
można rozpoznać po:
rozszerzeniu xlsm,
ikonie z wykrzyknikiem,
informacji wyświetlanej
po wskazaniu pliku myszą
Rysunek 1.156.
Bez wyrażenia zgody
na uaktywnienie makr
będzie widoczny tylko
przycisk
Przykład 31.
Aby zapisać arkusz zawierający makropolecenie w formacie niepozwalającym na ob-
sługę makr:
1. Wybierz kolejno polecenia Plik/Zapisz jako (rysunek 1.157).
Rysunek 1.157.
Arkusz z przykładu 30.
zostanie zapisany
pod inną nazwą
Rozdział 1. Makropolecenia 71
2. Wybierz lokalizację i w oknie Zapisywanie jako zmień nazwę pliku, aby można
było łatwo zorientować się, którego przykładu dotyczy (rysunek 1.158).
Rysunek 1.160.
Plik niezawierający makra
można rozpoznać po:
ikonie z wykresem
słupkowym
Rysunek 1.161.
W arluszu nie są
dostępne żadne
makropolecenia
12. Jeżeli zapiszesz arkusz w formacie bez obsługi makr, a następnie spróbujesz je
uruchomić, zostanie wyświetlony komunikat informujący o niemożności
wykonania makra (rysunek 1.162).
Przykład 32.
Aby wczytać do edycji makro z przykładu 30.:
1. Dwukrotnie kliknij plik (rysunek 1.155).
2. Po wczytaniu pliku kliknij wstążkę Deweloper.
3. W sekcji Kod kliknij ikonę Makra (rysunek 1.163).
Rysunek 1.163.
Ikona Makra
Rysunek 1.164.
Okno wyboru
makropolecenia
Po komentarzach znajdują się linie programu. Aby poprawić makro, należy zmienić linie
programu. Jest do tego niezbędna znajomość poleceń Visual Basic. Najpierw trzeba zro-
zumieć, co jest zapisane w programie, a następnie wiedzieć, co wpisać, aby uzyskać ocze-
kiwaną zmianę działania makropolecenia.
Kopiowanie formuł jest niezwykle użyteczne w Excelu. Formuła raz napisana może
być skopiowana w ciągu kilku sekund do wielu komórek i właściwe wartości zostaną
obliczone w każdej z nich. W przypadku formuł należy jednak uważać przy ich kopio-
waniu. Istotne są bowiem adresy komórek.
Jako domyślne jest stosowane przez program adresowanie względne. Ma ono postać
np. A1.
Rozdział 1. Makropolecenia 75
W adresowaniu bezwzględnym istotny jest konkretny adres komórki, a nie jej położenie
względem innych danych. Aby komórkę oznaczyć adresem bezwzględnym, należy do
adresu komórki wprowadzić dodatkowe oznaczenia w postaci symbolu $, np. $A$1.
Każde kolejne wciśnięcie F4 powoduje ponowne przejście przez powyżej opisany cykl.
Tyle teorii. A teraz dobra wiadomość dla praktyków. Excel 2016 pozwala na reje-
strowanie makropoleceń z zastosowaniem odwołań względnych (rysunek 1.166).
Rysunek 1.166.
Okno wyboru
makropolecenia
Krok za krokiem
Tworzenie makropoleceń jest prawdziwą sztuką. Z podręcznika można poznać jedy-
nie ogólne jej zasady. Dalsze umiejętności można zdobyć poprzez rejestrowanie ma-
kropoleceń i ich testowanie. Kolejnym stopniem wtajemniczenia jest rejestrowanie
makropoleceń, które wywołują inne makropolecenia.
Nie wszystko można wykonać, gdy korzysta się z makropoleceń. Narzędziem znacznie
potężniejszym, ale wymagającym głębszej wiedzy, jest korzystanie z języka programo-
wania Visual Basic for Applications. Do posługiwania się nim są konieczne:
poznanie kilku pojęć,
umiejętność obsługi edytora VBA,
poznanie zasad programowania w VBA.
Podsumowanie
Makropolecenie umożliwia zarejestrowanie czynności wykonywanych
w arkuszu.
Planując makropolecenie, zastanów się, jakie czynności elementarne trzeba
wykonać, aby uzyskać oczekiwany efekt. Zadanie należy podzielić na kroki.
Muszą to być elementarne czynności, które można wykonać za pomocą
klawiatury.
Zanim przystąpisz do rejestrowania makropolecenia, postaraj się kilka razy
wykonać czynności, które mają zostać zarejestrowane w makropoleceniu.
Dla uzyskania powtarzalności wyników wykonania makropolecenia istotne są
warunki początkowe (np. to, która komórka jest zaznaczona, gdy makropolecenie
jest uruchamiane). Jeżeli istnieje choć jeden parametr, którego wykonanie
może mieć wpływ na wykonanie makropolecenia, zanotuj to spostrzeżenie.
Nie zakładaj, że użytkownik makropolecenia zachowa się dokładnie tak jak
Ty. Uwzględnij to spostrzeżenie w makropoleceniu lub zamieść odpowiedni
komentarz.
Domyślny format arkusza programu Excel 2010, 2013 i 2016 nie pozwala na
zapisanie arkusza wraz z makropoleceniem. Aby nie utracić makropolecenia,
należy do zapisu wybrać format pozwalający na obsługę makropoleceń.
Podczas wczytywania pliku z makropoleceniem trzeba wyrazić zgodę na
uruchomienie makra.
Makropolecenia można edytować, korzystając z edytora Visual Basic for
Applications.
Rozdział 2.
Jak uruchomić
edytor Visual Basic
for Applications
Z tego rozdziału dowiesz się:
Jak uruchomić edytor VBA
Jakie są domyślne zabezpieczenia arkusza Excela przed makropoleceniami
Jak napisać i uruchomić najprostszy program w VBA
Edytor Visual Basic lub Visual Basic for Applications umożliwiają edycję makropole-
ceń i programów napisanych w VBA. Edytora nie można używać bez wcześniejszego
uruchomienia aplikacji, która z nim współdziała, np. arkusza Excela.
W dalszej części książki zostanie opisane posługiwanie się edytorem Visual Basic
współdziałającym z arkuszem kalkulacyjnym Excel 2007 i Visual Basic for Applications
współdziałającym z arkuszem kalkulacyjnym Excel 2010, 2013 i 2016.
Excel 2007
Edytor Visual Basic można uruchomić na dwa sposoby:
1. Posługując się skrótem klawiaturowym.
2. Posługując się przyciskiem umieszczonym na wstążce.
Przykład 33.
Aby uruchomić edytor Visual Basic, posługując się skrótem klawiaturowym:
1. Uruchom aplikację, z którą edytor ma współdziałać, np. arkusz kalkulacyjny
Excel.
2. Wciśnij kombinację klawiszy Alt+F11.
Zapis „Alt+F11” oznacza: wciśnij i przytrzymaj klawisz Alt, naciśnij klawisz F11, po
czym zwolnij oba klawisze.
Przykład 34.
Aby uruchomić edytor Visual Basic, posługując się przyciskiem umieszczonym na
wstążce:
1. Wczytaj arkusz zawierający makropolecenie.
2. W arkuszu Excel jest domyślnie włączone blokowanie makropoleceń.
O wyłączeniu makr informuje komunikat wyświetlony pod wstążkami
(rysunek 2.2). Kliknij przycisk Opcje.
Rysunek 2.2.
Komunikat informujący
o wyłączeniu makr
Rysunek 2.3.
Makropolecenie
zostanie włączone
Rysunek 2.4. Po kliknięciu wstążki Widok będzie ona wyświetlana na pierwszym planie
80 VBA dla Excela 2016 PL. 222 praktyczne przykłady
6. Po prawej stronie wstążki Widok znajduje się ikona Makra (rysunek 2.5).
Kliknij widoczną poniżej ikony strzałkę.
Rysunek 2.5.
Pod ikoną Makra
znajduje się czarna
strzałka skierowana
ku dołowi
7. Została rozwinięta lista poleceń. Kliknij pozycję Wyświetl makra (rysunek 2.6).
Rysunek 2.6.
Lista poleceń,
które można wykonać,
wykorzystując
makropolecenia,
nie jest długa
8. Zostało wyświetlone okno Makro (rysunek 2.7). Jest w nim widoczna lista
poleceń dostępnych we wszystkich otwartych skoroszytach. Zaznacz nazwę
makropolecenia, które będzie edytowane.
Rysunek 2.7.
Makropolecenie
Kopiuj zostanie
poddane edycji
Przykład 35.
1. Otwórz edytor Visual Basic.
2. Wpisz w nim program:
Sub Raport()
x = MsgBox("Zawartość partycji systemowej została skasowana", vbOKOnly +
vbInformation, "Wykryto nielicencjonowane oprogramowanie")
End Sub
3. Zapisz program.
4. Uruchom makropolecenie Raport.
5. Na ekranie został wyświetlony komunikat (rysunek 2.9).
82 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Przykład 36.
1. Otwórz edytor Visual Basic.
2. Wpisz w nim program:
Sub Raport()
x = MsgBox("Zawartość partycji systemowej została skasowana", vbOKOnly +
vbCritical, "Wykryto nielicencjonowane oprogramowanie")
End Sub
3. Zapisz program.
4. Uruchom makropolecenie Raport.
5. Na ekranie został wyświetlony komunikat (rysunek 2.10).
6. Kliknij przycisk OK.
Rozdział 2. Jak uruchomić edytor Visual Basic for Applications 83
Jak mogłeś zorientować się na podstawie przykładów 35. i 36., napisanie programiku,
którego wykonanie może wprowadzić w konsternację osobę uruchomiającą go, nie
zajmuje wiele czasu. Z drugiej strony skutki działania makra nie są bardzo destrukcyjne.
Mam nadzieję, że wiedzy zdobytej podczas lektury tej książki nie będziesz wykorzy-
stywał do takich celów. Chciałem Ci jedynie pokazać, z jakimi niebezpieczeństwami
może się wiązać uruchamianie makropoleceń.
Przykład 37.
Aby uruchomić edytor Visual Basic, posługując się skrótem klawiaturowym:
1. Uruchom aplikację, z którą edytor ma współdziałać, np. arkusz kalkulacyjny
Excel.
2. Wciśnij kombinację klawiszy Alt+F11.
Zapis „Alt+F11” oznacza: wciśnij i przytrzymaj klawisz Alt, naciśnij klawisz F11,
następnie zwolnij oba klawisze.
Po chwili na ekranie zostanie wyświetlone okno edytora Visual Basic for Applications
(rysunek 2.11).
Przykład 38.
Aby uruchomić edytor Visual Basic for Applications, posługując się przyciskiem umiesz-
czonym na wstążce:
1. Wczytaj arkusz zawierający makropolecenie.
Rozdział 2. Jak uruchomić edytor Visual Basic for Applications 85
Rysunek 2.12.
Komunikat informujący
o wyłączeniu makr
Rysunek 2.13. Po kliknięciu wstążki Widok będzie ona wyświetlana na pierwszym planie
4. Po prawej stronie wstążki Widok znajduje się ikona Makra (rysunek 2.14).
Kliknij widoczną poniżej ikony strzałkę.
Rysunek 2.14.
Pod ikoną Makra
znajduje się czarna
strzałka skierowana
ku dołowi
5. Została rozwinięta lista poleceń. Kliknij pozycję Wyświetl makra
(rysunek 2.15).
Rysunek 2.15.
Lista poleceń,
które można wykonać,
wykorzystując
makropolecenia,
nie jest długa
6. Zostało wyświetlone okno Makro (rysunek 2.16). Jest w nim widoczna lista
poleceń dostępnych we wszystkich otwartych skoroszytach. Zaznacz nazwę
makropolecenia, które będzie edytowane.
Przycisk Makra może znajdować się również na wstążce Deweloper. Sposób jej wy-
świetlenia został omówiony w rozdziale 1.
86 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 2.16.
Makropolecenie
Kopiowanie_komórek
zostanie poddane
edycji
Aby zmienić treść opisu makra, po wyświetleniu okna Makro i zaznaczeniu nazwy
kliknij przycisk Opcje. W polu Opis wprowadź nowy opis.
Rysunek 2.17. Kod makra wyświetlony w oknie edytora Visual Basic for Applications
Rozdział 2. Jak uruchomić edytor Visual Basic for Applications 87
Czy makropolecenie
może spowodować szkody?
Makropolecenie to nic innego jak program. Może on wykonać rzecz pożyteczną. Może
też siać spustoszenie. W celach dydaktycznych uruchomimy program, który może na-
straszyć użytkownika. Nic nie stoi na przeszkodzie, aby program wykonał groźbę. Zagro-
żenie jest realne.
Przykład 39.
1. Uruchom arkusz Excela.
2. Kliknij kartę Deweloper.
3. W sekcji Kod kliknij ikonę Visual Basic (rysunek 2.18).
Rysunek 2.18.
Ikona, za pomocą
której można
uruchomić edytor VBA
Rysunek 2.21.
Polecenia
umożliwiające
zapisanie programu
do pliku
Rysunek 2.22.
Aby program
napisany w VBA
został zapisany
do pliku, należy
wybrać format
obsługujący makra
Rysunek 2.23.
Program można
uruchomić,
klikając ikonę
Rysunek 2.24.
Czy rzeczywiście
zawartość partycji
systemowej została
usunięta?
Przykład 40.
1. Uruchom arkusz Excela.
2. Otwórz edytor Visual Basic.
Rysunek 2.25.
Program został
zapisany do arkusza
Przyklad_040.xlm
Rysunek 2.26.
Czy takie okno wygląda
bardziej przekonująco?
Jak mogłeś zorientować się na podstawie przykładów 39. i 40., napisanie niewielkiego
programu, którego wykonanie może wprowadzić w konsternację osobę uruchomiającą
go, nie zajmuje wiele czasu. Z drugiej strony skutki działania makra nie są bardzo de-
strukcyjne.
Mam nadzieję, że wiedzy zdobytej podczas lektury tej książki nie będziesz wykorzy-
stywał do takich celów. Chciałem Ci jedynie pokazać, z jakimi niebezpieczeństwami
może się wiązać uruchamianie makropoleceń.
Podsumowanie
Aby uruchomić edytor Visual Basic, posługując się skrótem klawiaturowym,
załaduj aplikację, z którą edytor ma współdziałać, np. arkusz kalkulacyjny
Excel. Wciśnij kombinację klawiszy Alt+F11.
W arkuszu Excel jest domyślnie włączone blokowanie makropoleceń.
O wyłączeniu makr informuje komunikat wyświetlony pod wstążkami
(rysunek 2.12). W postaci makropolecenia do komputera może dostać
się szkodliwy program. Jeżeli jesteś pewien, że makropolecenie, które
zostanie uruchomione, nie spowoduje szkody, możesz wyrazić zgodę
na jego uruchomienie. Kliknij przycisk Włącz zawartość.
Aby napisać program w VBA, otwórz edytor VBA. Zostało wyświetlone
puste okno edytora. Dwukrotnie kliknij pozycję Arkusz1 (Arkusz1). Zostało
wyświetlone okno do wpisywania kodu. Wpisz w nim program, a następnie
go zapisz. Wybierz format zezwalający na obsługę makr.
92 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rozdział 3.
Okno edytora Visual
Basic for Applications
Z tego rozdziału dowiesz się:
W której części okna edytora VBA można odczytać, jakie skoroszyty
są otwarte w Excelu
Gdzie w oknie edytora VBA można edytować właściwości obiektów
Jak umieścić obiekt na formatce VBA
Czy można wyrównać wymiary i położenie obiektów
Po otwarciu edytora Visual Basic for Applications (rozdział 2. został poświęcony uru-
chamianiu edytora VBA) są domyślnie wyświetlane dwa okna (rysunek 3.1):
Project (eksplorator projektów),
Properties (właściwości projektów).
94 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Okno Project
W oknie Project są wyświetlone w postaci drzewa skoroszyty otwarte w Excelu. Na
rysunku 3.2 pokazano bieżący projekt, który nosi nazwę VBAProject. Poniżej jest wi-
doczny jeden arkusz (Arkusz1). Pod nim znajduje się skoroszyt (Ten_skoroszyt).
Rysunek 3.2.
Eksplorator projektów
Jeżeli skoroszyt zawiera makra, znajdują się one w folderze Modules. Moduły klas i for-
mularze użytkownika znajdują się w folderach Class Modules (moduły klas) i Forms
(formularze) (rysunek 3.3). Moduły klas są definicjami obiektów zdefiniowanych przez
użytkownika dla danego skoroszytu.
Rysunek 3.3.
Wygląd okna
eksploratora
projektów jest zależny
od zawartości projektu
Rozdział 3. Okno edytora Visual Basic for Applications 95
Jeżeli otworzymy kolejne okno Excela, to obiekty w nim występujące zostaną rów-
nież wyświetlone w sekcji Project – VBAProject (rysunek 3.4).
Rysunek 3.4.
Mimo, że zostały
otworzone dwa
oddzielne zeszyty,
to informacje
o nich są dostępne
w jednym oknie
Okno Properties
Pod oknem Project znajduje się okno Properties. Umożliwia ono odczytywanie i edy-
towanie właściwości obiektu zaznaczonego w oknie Project.
Rysunek 3.5.
Właściwości arkusza
96 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 3.6.
Właściwości
formularza
Właściwością modułu jest nazwa (ang. Name). Nazwa obiektu w polu właściwości nie
musi pokrywać się z nazwą obiektu w programie Excel.
Arkusze mają więcej właściwości. Niektóre z nich mają wartość logiczną (ang. True
— prawda, opcja aktywna, lub ang. False — fałsz, opcja wyłączona). Do tej grupy należy
np. Enable Calculation (zezwól na wykonywanie obliczeń). Inne parametry mają wartość
liczbową, np.: StandardWidth (standardowa szerokość arkusza).
Okno Code
Okno Code w nowym arkuszu domyślnie nie jest widoczne (patrz rysunek 3.1). Aby
je wyświetlić, dwukrotnie kliknij nazwę arkusza lub skoroszytu, któremu ma zostać
przypisane (rysunek 3.7).
Okno Code jest największym spośród okien edytora Visual Basic for Applications.
W jego górnej części są widoczne dwie listy rozwijane.
Lista rozwijana z lewej strony służy do wybierania edytowanego obiektu. Podczas pracy
z samym kodem w polu listy jest wyświetlany domyślny obiekt General (ogólny).
Pasek menu
W górnej części okna edytora VBA jest widoczny pasek menu (rysunek 3.8).
Pasek narzędziowy
Zasady posługiwania się ikonami znajdującymi się na standardowym pasku narzę-
dziowym (rysunek 3.9) poznamy w praktyce, pisząc pierwszy program w VBA.
Pierwszy program
Czy programowanie w Visual Basicu jest trudne? Zależy to od zadania, które ma re-
alizować program. Korzystając ze zdobytych do tej pory wiadomości, możesz napisać
program, który po kliknięciu przycisku będzie wyświetlał komunikat. Pracę podzielimy na
kilka etapów:
1. Przygotowanie formularza (formatki) (przykład 41.).
2. Umieszczenie przycisku (przykład 42.).
3. Przypisanie zdarzenia przyciskowi (przykład 43.).
4. Określenie reakcji na zdarzenie (przykład 44.).
Przykład 41.
Aby przygotować formatkę:
1. Uruchom arkusz Excela 2016.
2. Kliknij wstążkę Deweloper (rysunek 3.10).
Rysunek 3.10. Narzędzia do zarządzania projektem w VBA znajdują się na wstążce Deweloper
Rysunek 3.11.
Ikona Visual Basic nie jest
widoczna na pierwszym
planie bezpośrednio
po uruchomieniu arkusza
Rozdział 3. Okno edytora Visual Basic for Applications 99
Rysunek 3.12.
Ikona Insert
UserForm
5. W oknie edytora Visual Basic for Applications pojawił się szary prostokąt
(rysunek 3.13). Jest to obszar, na którym można umieszczać obiekty.
Obok jest wyświetlany pasek narzędziowy elementów kontrolnych.
Rysunek 3.13.
Formatka i pasek
narzędziowy
Aby wyświetlić lub ukryć pasek narzędziowy, kliknij przycisk Toolbox (rysunek 3.14).
Rysunek 3.14.
Przycisk umożliwiający ukrywanie lub
wyświetlanie paska narzędziowego
Rysunek 3.15.
Z podręcznego
menu można
wybrać polecenie
umożliwiające zmianę
właściwości formatki
100 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 3.16.
Właściwość Name
odpowiada
za nazwę formatki
Rysunek 3.17.
Formatka
ma nową nazwę
11. Zmienimy kolor tła formatki. W oknie Properties kliknij właściwość BackColor.
13. Kliknij kartę Palette (rysunek 3.19). Została wyświetlona pełna paleta barw.
Rysunek 3.19.
Pełna paleta barw
Rozdział 3. Okno edytora Visual Basic for Applications 101
Rysunek 3.20.
Formatka
zmieniła kolor
Rysunek 3.21.
Formatka
będzie wyświetlana
na środku ekranu
Przykład 42.
Aby umieścić na formatce przycisk:
1. Wykonaj polecenia zawarte w przykładzie 41.
2. Zatrzymaj działanie programu. W oknie edytora Microsoft Visual Basic for
Application kliknij ikonę Reset (rysunek 3.23).
Rysunek 3.23.
Przed rozpoczęciem edycji
programu należy zatrzymać
jego działanie
3. Na pasku Toolbox kliknij przycisk CommandButton (rysunek 3.24).
102 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 3.24.
Przycisk
CommandButton
znajduje się
na pasku Toolbox
Rysunek 3.25.
Krzyżyk wskazuje,
gdzie zostanie
umieszczony obiekt.
Prostokąt informuje
o rodzaju obiektu
5. Umieść kursor nad miejscem, w którym ma się znaleźć jeden narożnik przycisku.
6. Wciśnij i przytrzymaj lewy przycisk myszy.
7. Przeciągnij kursor do miejsca, w którym ma się znaleźć przeciwległy
narożnik przycisku.
8. Zwolnij lewy przycisk myszy.
9. Na formatce pojawił się przycisk (rysunek 3.26).
10. Zmienimy kolor przycisku. Kliknij przycisk lewym klawiszem myszy.
11. Z podręcznego menu wybierz polecenie Properties.
12. W oknie Properties kliknij właściwość BackColor.
Rozdział 3. Okno edytora Visual Basic for Applications 103
Rysunek 3.26.
Na formatce
pojawił się przycisk
Rysunek 3.27.
Barwy dostępne
w systemie
14. Kliknij kartę Palette (rysunek 3.28). Została wyświetlona pełna paleta barw.
Rysunek 3.28.
Pełna paleta barw
104 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 3.29.
Przycisk zmienił kolor
Rysunek 3.30.
Napis na przycisku
można edytować
Rysunek 3.31.
Tekst wpisywany
w polu Caption
jest widoczny
na przycisku
Rysunek 3.32.
Trzy kropki wskazują,
że po kliknięciu
właściwości zostanie
otworzone okno
19. Z listy czcionek wybierz Arial, styl — Pogrubiona, rozmiar 16 (rysunek 3.33).
Rysunek 3.33.
Zmiana wyglądu
napisu na przycisku
Rysunek 3.34.
Napis na przycisku
po zmianie
wyglądu czcionki
Przykład 43.
Aby automatycznie dostosować rozmiar przycisku do napisu:
1. Wykonaj przykład 42.
2. W oknie Properties odszukaj właściwość AutoSize (rysunek 3.35). Rozwiń
listę dostępnych wartości. Zaznacz True (prawda).
106 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 3.35.
Wartość True
powoduje, że opcja
staje się aktywna
Rysunek 3.36.
Wartość True
powoduje, że opcja
staje się aktywna
4. Zmień opis przycisku (rysunek 3.37).
Rysunek 3.37.
Zmiana rozmiaru
napisu powoduje, że
przycisk dostosowuje
swoje rozmiary
Przykład 44.
Aby przypisać zdarzenie przyciskowi:
1. Wykonaj przykład 43.
2. Kliknij puste pole obok przycisku, aby usunąć zaznaczenie (rysunek 3.38).
Rysunek 3.38.
Przycisk nie jest
aktywnym obiektem
Rysunek 3.39.
Okno edycji kodu
z początkiem
i końcem kodu
obsługi pojedynczego
kliknięcia
Rozdział 3. Okno edytora Visual Basic for Applications 107
5. W oknie Code rozwiń listę znajdującą się po prawej stronie. Zaznacz DblClick
(rysunek 3.40).
Rysunek 3.40.
Zdarzenie DblClick
zachodzi, gdy przycisk
zostanie dwukrotnie
kliknięty
Rysunek 3.41.
Okno z zaznaczonym
kodem obsługi
pojedynczego
kliknięcia
Przykład 45.
Aby określić reakcję na zdarzenie:
1. Wykonaj polecenia zawarte w przykładzie 44.
2. W oknie kodu pomiędzy liniami początku i końca procedury wpisz
X=MsgBox("Hej!") (rysunek 3.42).
Rysunek 3.42. Po dwukrotnym kliknięciu przycisku na ekranie powinno pojawić się okno z tekstem: Hej!
Rysunek 3.44.
Okno komunikatu
Przykład 46.
Aby przełączać program między widokiem kodu a obiektu:
1. Wykonaj polecenia zawarte w przykładzie 45.
2. Wybierz polecenia View/Code lub naciśnij klawisz F7 (rysunek 3.45).
Rysunek 3.45.
Polecenia
umożliwiające
wyświetlenie
widoku kodu
Wyrównywanie obiektów
Obiekty na formularzu można umieszczać ręcznie. Aby miały one równe wymiary
i były wyrównane do linii, trzeba żmudnie śledzić kropki rastra. Pół biedy, gdy trzeba
umieścić dwa przyciski. O oczopląs może przyprawić umieszczenie kilkudziesięciu.
Na szczęście tę czynność można przerzucić na program.
Przykład 47.
Aby wyrównać wymiary obiektów na formularzu:
1. Umieść na formatce dwa przyciski (patrz przykład 42.).
2. Wciśnij i przytrzymaj klawisz Shift.
3. Kliknij oba obiekty.
4. Zwolnij klawisz Shift (rysunek 3.48).
Rysunek 3.48.
Formatka
z zaznaczonymi
dwoma przyciskami
Rysunek 3.49.
Przyciski będą miały
tę samą szerokość
i wysokość
Rysunek 3.50.
Przyciski
z rysunku 3.48
mają ujednolicone
wymiary
Rozdział 3. Okno edytora Visual Basic for Applications 111
Przykład 48.
Aby wyrównać do lewej krawędzi położenie obiektów na formularzu:
1. Umieść na formatce dwa przyciski i wyrównaj ich wymiary
(patrz przykłady 42. i 47.). Istotna jest kolejność zaznaczania obiektów.
Punktem odniesienia jest element, który został wybrany jako ostatni.
2. Wybierz polecenie Format/Align/Lefts (rysunek 3.51).
Rysunek 3.51.
Przyciski zostaną
wyrównane do lewej
Rysunek 3.52.
Przyciski
z rysunku 3.50 zostały
wyrównane do lewej
krawędzi przycisku
odniesienia
Przykład 49.
Aby wycentrować w poziomie położenie obiektów na formularzu:
1. Umieść na formatce dwa przyciski i wyrównaj ich wymiary
(patrz przykłady 42. i 47.).
2. Wybierz polecenie Format/Center in Form/Horizontally (rysunek 3.53).
Rysunek 3.53.
Przyciski zostaną
wyśrodkowane
w poziomie
Rysunek 3.54.
Przyciski zostały
wyśrodkowane
w poziomie
Przykład 50.
Aby obiekty umieścić jeden pod drugim:
1. Umieść na formatce dwa przyciski i wyrównaj ich wymiary
(patrz przykłady 42. i 47.).
2. Wybierz polecenie Format/Vertical spacing/Remove (rysunek 3.55).
Rysunek 3.55.
Przyciski zostaną
umieszczone
jeden pod drugim
Rysunek 3.56.
Przyciski zostały
umieszczone jeden
przy drugim. Punktem
odniesienia jest
element, który został
wybrany jako ostatni.
Rozdział 3. Okno edytora Visual Basic for Applications 113
W środowisku Windows często stosuje się technikę „przeciągnij i upuść”. Jest ona wy-
konywana przy wykorzystaniu myszy, dlatego rejestrator makropoleceń jej nie zapisze.
Jeśli terminy użyte w ostatnim akapicie zabrzmiały obco — nie zrażaj się. Co one ozna-
czają i jak praktycznie z nich korzystać, dowiesz się z kolejnych rozdziałów książki.
Podsumowanie
W oknie Project są wyświetlone w postaci drzewa skoroszyty otwarte w Excelu.
Okno Properties umożliwia odczytywanie i edytowanie właściwości obiektu
zaznaczonego w oknie Project. Okno Code umożliwia edycję kodu programu.
Obiekty można umieszczać na formatce, wybierając je na pasku Toolbox,
a następnie wskazując miejsce, w którym mają się znaleźć.
Aby wyrównać położenie lub wymiary obiektów, trzeba je zaznaczyć,
a następnie wybrać polecenie Format/Align i symbol linii wyrównania
lub Make Same Size i symbol wymiaru, który ma zostać ujednolicony.
Aby wyrównać do lewej krawędzi położenie obiektów, trzeba je zaznaczyć,
a następnie wybrać polecenie Format/Align/Lefts.
Aby wycentrować położenie obiektów na formularzu, trzeba je zaznaczyć,
a następnie wybrać polecenie Format/Center in Form/Horizontally.
Aby umieścić obiekty jeden pod drugim, trzeba je zaznaczyć, a następnie
wybrać polecenie Format/Vertical spacing/Remove.
Punktem odniesienia jest element, który został wybrany jako ostatni.
114 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rozdział 4.
Zmienne
Z tego rozdziału dowiesz się:
Czy zmienna może mieć dowolną nazwę
Jaką rolę odgrywają deklaracje typów danych
Jak wymusić deklarowanie wszystkich zmiennych
Rysunek 4.1.
Dane zawarte
w zakresie arkusza
Przypisanie ma postać:
Nazwa_zmiennej = wartość_zmiennej
Przykład 51.
Aby sprawdzić, jak edytor VBA sygnalizuje wprowadzenie nazwy zmiennej, która nie
jest literą:
1. Kliknij arkusz prawym przyciskiem myszy.
2. Z podręcznego menu wybierz polecenie View Code (rysunek 4.2).
Rysunek 4.2.
Polecenie,
które pozwala
na wyświetlenie
okna służącego
do edycji kodu
programu
Rozdział 4. Zmienne 117
Rysunek 4.4.
Pierwsza linia kodu
Rysunek 4.5.
Linie wyznaczające
początek i koniec
procedury
Rysunek 4.6.
Dopóki nie damy edytorowi
znać, że skończyliśmy
wpisywanie linii, błąd
nie jest sygnalizowany
118 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 4.7.
Nazwa zmiennej nie
zaczyna się od litery
Rysunek 4.8.
Nazwa zmiennej
została zaakceptowana
Przykład 52.
Aby sprawdzić, jak edytor VBA sygnalizuje wprowadzenie nazwy zmiennej, która będzie
identyczna jak słowo zastrzeżone:
1. Wykonaj polecenia z przykładu 30. do punktu 6. włącznie.
2. Sprawdzimy, jak zostanie zasygnalizowana sytuacja, w której nazwa zmiennej
będzie identyczna jak słowo zastrzeżone. Wpisz if=1 (rysunek 4.9).
Rysunek 4.9.
Nazwa zmiennej
jest identyczna jak
słowo zastrzeżone
Rysunek 4.10.
Nazwa zmiennej
jest identyczna
jak instrukcja
programu
Rysunek 4.11.
ii jest poprawną
nazwą zmiennej
Na rysunku 4.7 jest widoczny komunikat Syntax error, czyli „błąd składni”. W połą-
czeniu z zaznaczeniem znaku, którego dotyczy, pozwala na wydedukowanie, co trzeba
poprawić.
Na rysunku 4.10 został wyświetlony komunikat Syntax error. Edytor analizuje kod od
strony lewej do prawej. Po napotkaniu instrukcji if zakłada, że została ona użyta pra-
widłowo, a błędne jest to, co znajduje się na prawo od instrukcji. W przykładzie chodziło
nam o przypisanie zmiennej wartości liczbowej. Prawidłowe jest to, co znajduje się na
prawo od zmiennej. Błędna jest nazwa zmiennej.
120 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Typy danych
Typy danych określają, ile miejsca powinno być zarezerwowane w pamięci dla da-
nych określonego typu oraz jak należy interpretować zawartość tej pamięci. Teore-
tycznie użytkownik nie musi zastanawiać się, jakiego rodzaju lub z jakiego przedziału
wartości zostaną przypisane zmiennej. Visual Basic for Applications zrobi to za niego.
Zdanie się na ustawienia domyślne powoduje, że spada szybkość działania programu,
a zarządzanie zasobami pamięci jest bardzo rozrzutne. Podczas pracy z małymi progra-
mami nie jest to istotna wada. Z czasem Twoje programy będą coraz większe. Może
dojść do sytuacji, w której ich wykonywanie będzie trwało zbyt długo lub nie powiedzie się
z powodu braku pamięci. Warto zatem od samego początku nauki programowania zwra-
cać uwagę na zakres wartości, jakie mogą przyjmować przetwarzane dane (tabela 4.1).
Do numerowania wierszy arkusza należy używać zmiennej typu Long. Zmiennej typu
Integer nie stosuje się w tym celu z uwagi na zbyt małą wartość.
Przykład 53.
Aby zadeklarować, że zmienna Gucio może przyjmować wartości logiczne:
1. Wyświetl okno Code (rysunek 4.3).
2. W oknie Code wpisz Sub Gucio() (rysunek 4.12).
Rysunek 4.12.
Pierwsza linijka
programu
Rysunek 4.13.
Pierwsza i ostatnia
linia procedury
Rysunek 4.14.
Edytor podpowiada,
jakiego słowa można
użyć w programie
Rysunek 4.15.
Zmienna Gucio
może przyjmować
wartość logiczną
Rysunek 4.16.
Zmienna logiczna
może przyjmować
dwie wartości
Rysunek 4.17.
Zmienna logiczna
z przypisaną wartością
Zmienna nie musi, ale może nazywać się tak samo jak procedura.
Przykład 54.
Aby sprawdzić, jak deklaracje typów danych wpływają na czas wykonywania programu:
1. Uruchom arkusz kalkulacyjny Excel i edytor VBA. W oknie Code wpisz
program (rysunek 4.18). Składa się on z modułu deklaracji, wyliczeń oraz
pomiaru czasu. Zmienne: A, B, C, D, E, F, i, j są typu Integer. Mogą
przechowywać liczby całkowite. W przykładzie jest to wystarczające. Pozwala
na oszczędność miejsca w pamięci (jedna zmienna jest zapisywana przy
wykorzystaniu 2 bajtów — patrz tabela 4.1). Zmienne: Start, Koniec są typu
Date. Przechowują one informacje o czasie. Jedna zmienna jest zapisywana
przy wykorzystaniu 8 bajtów. Jest to oszczędność w porównaniu z brakiem
deklaracji. Jeżeli typ danych nie zostanie wyspecyfikowany, VBA domyślnie
zarezerwuje dla niego maksymalną liczbę bajtów, czyli… 22 bajty + długość
łańcucha.
Rysunek 4.18.
Program do pomiaru
wpływu deklaracji
na czas wykonywania
programu
124 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 4.19.
Czas wykonania
programu
z deklaracjami
typu zmiennych
Rysunek 4.20.
Program
z rysunku 4.19
po usunięciu
deklaracji typów
zmiennych
Rysunek 4.21.
Czas wykonywania
programu bez
deklaracji typów
zmiennych był
pięć razy dłuższy
Rozdział 4. Zmienne 125
Czasy wykonywania obu wersji programu na różnych komputerach mogą się różnić
od pokazanych na obrazkach, ale generalnie zadeklarowanie typów zmiennych skraca
czas wykonywania programu.
Rysunek 4.22.
Program
z rysunku 4.19
po zmianie deklaracji
typów zmiennych
jednoliterowych
na Variant
10. Naciśnij klawisz F5. Program został uruchomiony. Przez chwilę na ekranie
— zamiast strzałki kursora — jest wyświetlana klepsydra.
11. Po zakończeniu programu jest wyświetlane okno z podanym w sekundach
czasem wykonywania programu (rysunek 4.23). Zadeklarowanie typu zmiennej
na wyrost powoduje takie same problemy jak niezadeklarowanie jej w ogóle.
Rysunek 4.23.
Czas wykonywania
programu bez deklaracji
typów zmiennych
i z deklaracją zmiennych
typu Variant
jest identyczny
126 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 4.24.
Program
z rysunku 4.19
po zmianie deklaracji
typów zmiennych
jednoliterowych
na Byte
Rysunek 4.25.
Program nie został
wykonany. Wyliczona
wartość nie zmieściła
się w przewidzianym
dla niej typie zmiennej
Rysunek 4.26.
W programie zostaje
wyróżnione miejsce,
w którym wykryto
błąd. Nie oznacza to,
że wyróżniona
instrukcja jest
niepoprawna.
W przykładzie błędna
jest deklaracja na
samym początku
programu. Podczas
wykonywania pętli
błąd dał o sobie znać
Przy deklarowaniu typów zmiennych należy posługiwać się typami, zajmującymi naj-
mniejszą liczbę bajtów, ale obsługującymi wszystkie dane, które mogą im zostać
przypisane.
Przykład 55.
Aby sprawdzić, jak zmieniają się typy danych w zależności od wykonanego działania:
1. Uruchom arkusz kalkulacyjny Excel i edytor VBA. W oknie Code wpisz program
(rysunek 4.27). W drugiej linii zmiennej Zmienna jest przypisywany trójznakowy
łańcuch 002. W linii trzeciej jest wyświetlana zawartość zmiennej Zmienna.
128 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 4.27.
Program obrazujący,
jak interpreter
zmienia typy danych
Rysunek 4.28.
Po dojściu do linii
trzeciej zmienna
ma wartość tekstową
— na lewo od liczby
są wyświetlane zera
Rysunek 4.29.
Po dojściu do linii
piątej zmienna
ma wartość liczbową
— na lewo od liczby
nie są wyświetlane
zera
Przykład 56.
Aby sprawdzić, jak nieuwzględnienie typu danych może wprowadzić w błąd:
1. Uruchom arkusz kalkulacyjny Excel i edytor VBA. W oknie Code wpisz
program (rysunek 4.30). W drugiej linii zmiennej Zmienna jest przypisywany
trójznakowy łańcuch 002. W linii trzeciej jest wyświetlana zawartość zmiennej
Zmienna. W linii czwartej na zmiennej jest wykonywane działanie. Jest ona
sumowana z taką samą zmienną. W linii piątej jest wyświetlana zawartość
zmiennej Zmienna.
Rozdział 4. Zmienne 129
Rysunek 4.30.
Program obrazujący,
jak nieuwzględnienie
typu danych prowadzi
do błędu
Rysunek 4.31.
Zmienna o nazwie
Zmienna zawiera
liczbę 002
Rysunek 4.32.
W przypadku łańcuchów
znaków znak + został
potraktowany nie jako
symbol dodawania,
ale łączenia łańcuchów
Rysunek 4.33.
Zsumowanie zmiennej
z taką samą zmienną
zostało zastąpione
pomnożeniem
przez dwa
Rysunek 4.34.
Znak * został
potraktowany jako
symbol mnożenia
Przykład 57.
Aby włączyć wymuszanie deklarowania zmiennych:
1. Uruchom arkusz kalkulacyjny Excel i edytor VBA. Wybierz polecenia
Tools/Options (rysunek 4.35).
Rysunek 4.35.
Fragment menu Tools
2. Zostało wyświetlone okno Options (rysunek 4.36). Domyślnie aktywna jest karta
Editor. W sekcji Code Settings zaznacz opcję Require Variable Declaration.
Rysunek 4.36.
Interpreter
może wymuszać
deklarowanie
wszystkich zmiennych
Rozdział 4. Zmienne 131
Aby ustawienia odnosiły się do programu, należy w pierwszym wierszu wpisać in-
strukcję Option Explicit.
Przykład 58.
Aby sprawdzić, jak sygnalizowany jest brak deklaracji zmiennej:
1. Uruchom arkusz kalkulacyjny Excel i edytor VBA. W oknie Code wpisz
program (rysunek 4.37). W linii pierwszej jest wpisana instrukcja wymuszająca
sprawdzanie zadeklarowania wszystkich zmiennych. W liniach trzeciej
i czwartej są zadeklarowane typy zmiennych x i y. W liniach piątej i szóstej są
przypisane wartości zmiennych x i y. W linii siódmej znajduje się zmienna Z,
której typ nie został zadeklarowany.
Rysunek 4.37.
Program
z niezadeklarowaną
zmienną
Rysunek 4.38.
Zostało zaznaczone
miejsce wykrycia błędu
Zasięg deklaracji
W przykładzie 53. do deklarowania zmiennych było używane wyrażenie Dim. W za-
leżności od miejsca zastosowania deklaracji w programie ma ona różny zasięg.
Zmienne lokalne
Jeżeli deklaracja zostanie umieszczona wewnątrz procedury, obowiązuje tylko wewnątrz
tej procedury. Zmienna jest wówczas zwana zmienną lokalną. Po zakończeniu procedury
zmienna lokalna przestaje istnieć, a zajmowany przez nią obszar pamięci jest zwalniany.
Jeżeli w deklaracji zmiennej zamiast wyrażenia Dim zostanie użyte wyrażenie Static,
zmienna zachowa swą wartość po zakończeniu procedury. Zmienna przestanie istnieć,
jeśli procedura jest zakończona instrukcją End.
Rozdział 4. Zmienne 133
Zmienne globalne
Aby deklaracja obowiązywała we wszystkich modułach, przed pierwszą procedurą
modułu należy zadeklarować zmienną za pomocą wyrażenia Public, np. Public A As
String. Tak zadeklarowaną zmienną nazywamy zmienną globalną.
Przykład 59.
Aby sprawdzić, jaki wpływ na działanie programu ma zadeklarowanie różnych typów
tej samej zmiennej:
1. Uruchom arkusz kalkulacyjny Excel i edytor VBA. W oknie Code wpisz
program (rysunek 4.40). Edytor nie zasygnalizował błędu.
Rysunek 4.40.
Zmiennej A wewnątrz
tej samej procedury
przypisano dwa
różne typy
Rysunek 4.41.
Komunikat o błędzie
Przykład 60.
Aby sprawdzić, jaki wpływ na działanie programu ma zadeklarowanie różnych typów
tej samej zmiennej w oddzielnych procedurach:
1. Uruchom arkusz kalkulacyjny Excel i edytor VBA. W oknie Code wpisz
program. Rozdziel go na dwie procedury. Pierwszej procedurze nadaj nazwę
deklaracja1. Pozostaw w niej deklarację Dim A As String. Drugiej
procedurze nadaj nazwę procedura2. Umieść w niej deklarację Dim A As
Integer (rysunek 4.42).
Rysunek 4.42.
Dla tej samej
zmiennej w różnych
procedurach
zadeklarowano
różne typy
Rysunek 4.43.
Program został
wykonany. Zmienna A
ma wartość 0
Przykład 61.
Aby sprawdzić, jaki wpływ na wartość zmiennej ma jej zasięg:
1. Uruchom arkusz kalkulacyjny Excel i edytor VBA. W oknie Code wpisz
program (rysunek 4.44). W procedurze pierwszej zmiennej jest przypisana
wartość 1. W kolejnej linii jest wyświetlane okno z informacją o wartości
zmiennej. W procedurze drugiej zmiennej nie jest przypisana żadna wartość.
Domyślnie ma ona wartość zero. W kolejnej linii jest wyświetlane okno
z informacją o wartości zmiennej. W procedurze trzeciej są kolejno
wywoływane dwie pierwsze procedury. Wywołanie procedury polega
na podaniu jej nazwy.
Rozdział 4. Zmienne 135
Rysunek 4.44.
Program obrazujący
zasięg deklaracji
procedury
Rysunek 4.45.
Zostanie
uruchomiona
procedura
zawierająca
wywołania dwóch
pozostałych
Rysunek 4.46.
Zmienna A
ma wartość 1
136 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 4.47.
Zmienna A
ma wartość 0
Przykład 62.
Aby sprawdzić, jaki zasięg ma deklaracja zmiennej w procedurze wywołującej inne
procedury:
1. Uruchom arkusz kalkulacyjny Excel i edytor VBA. W oknie Code wpisz
program (rysunek 4.48). W procedurze pierwszej jest wyświetlana wartość
zmiennej A. W procedurze drugiej jest wyświetlana wartość zmiennej A.
W procedurze trzeciej jest wywoływana procedura pierwsza. Zmiennej A
jest nadawana wartość, a następnie jest ona wyświetlana. Na koniec jest
wyświetlana procedura druga.
Rysunek 4.48.
Program obrazujący
zasięg przypisania
wartości zmiennej
Rysunek 4.49.
Zmienna ma wartość
domyślną, czyli 0
Rysunek 4.50.
Zmiennej A została
przypisana wartość 1
Rysunek 4.51.
Wywołanie procedury
powoduje
wyzerowanie
wartości zmiennych
Rysunek 4.52.
Program obrazujący
zasięg przypisania
wartości zmiennej
Rysunek 4.53.
Zmienna ma wartość
domyślną, czyli 0
Rysunek 4.54.
Przypisanie wartości
zmiennej o zasiegu
globalnym
Rysunek 4.55.
Przypisanie wartości
zmiennej o zasiegu
globalnym
Przekazanie wartości
przez wywołanie procedury z parametrem
Przykład 64.
Aby sprawdzić, czy jest możliwe przekazanie do procedury wartości przez wywołanie jej:
1. Uruchom arkusz kalkulacyjny Excel. Wypełnij komórki tak, jak pokazano
na rysunku 4.56.
Rysunek 4.56.
Dane zostały wpisane
do arkusza
Rysunek 4.57.
Program
wykorzystujący dane
zawarte w arkuszu
Rysunek 4.58.
W komórce
nie ma formuły,
a pojawiła się wartość
Deklaracja typu
i instrukcja przypisania
W tabeli 4.1 zebrano typy danych używanych w VBA. Co one oznaczają w praktyce?
Jakiego typu powinna być zmienna, aby przechowywała tekst? Odpowiedzi na te pytania
uzyskamy, wykonując polecenia zawarte w przykładach.
Przykład 65.
Nadaj zmiennej x wartość Konstantynopolitaneczka. Wyświetl wartość przypisaną
zmiennej x w oknie komunikatu.
1. Uruchom arkusz kalkulacyjny Excel i edytor VBA. W oknie Code wpisz program
(rysunek 4.59). Zmienna x jest typu String. W wyniku zastosowania funkcji
MsgBox zostaje wyświetlone okno.
Rozdział 4. Zmienne 141
Rysunek 4.60.
W oknie została
wyświetlona wartość
zmiennej x
Rysunek 4.62.
Zadeklarowanie typu
zmiennej Variant
nie wpłynęło na
wykonanie programu
Przykład 66.
Sprawdź, jakie wartości mają domyślnie zmienna typu Boolean oraz Date.
1. Uruchom arkusz kalkulacyjny Excel i edytor VBA. W oknie Code wpisz program
(rysunek 4.65). Zmienna x jest typu Boolean. W wyniku zastosowania funkcji
MsgBox zostaje wyświetlone okno.
Rysunek 4.65. Program, którego zastosowanie pozwala wyświetlić domyślną wartość zmiennej x
w oknie komunikatu
2. Naciśnij klawisz F5.
3. Program został wykonany (rysunek 4.66).
Rysunek 4.66.
Zmienna typu
logicznego domyślnie
ma wartość False
Rysunek 4.68.
Domyślnie zmiennym
jest przypisywana
wartość zero. Sposób
jej wyświetlania zależy
od zadeklarowanego
typu zmiennej
Przykład 67.
Napisz program, którego zastosowanie pozwoli odczytać dane z komórek A1 i A2,
zsumować je, a wynik zapisać w komórce A3.
1. Uruchom arkusz kalkulacyjny Excel i edytor VBA. W oknie Code wpisz
program (rysunek 4.69).
Rysunek 4.69. Program, którego zastosowanie pozwala zsumować zawartość komórek A1 i A2,
a wynik wyświetlić w komórce A3
Rysunek 4.70.
Puste komórki mają
wartość zero, a zatem
wynik sumowania
również wynosi 0
Rysunek 4.71.
Wynik nie został
automatycznie
zaktualizowany
Rysunek 4.72.
Liczba jest widoczna
zarówno w komórce,
jak i na pasku formuły
W programowaniu wiele zadań można rozwiązać na więcej niż jeden sposobów. Oprócz
niepodważalnych kryteriów, takich jak maksymalizacja szybkości działania programu,
minimalizacja zajętości pamięci, jest wiele innych zależnych od przyjętych w programie
konwencji. W przykładzie 67. komórki były adresowane przez podanie adresu (tak jak
w grze w okręty). Alternatywnym sposobem adresowania jest zapis Cells(numer_
wiersza, numer_kolumny). Ponieważ obie wartości są liczbowe, łatwiej jest z nich ko-
rzystać np. przy konstruowaniu pętli, która przeszukuje kolejne komórki.
Przykład 68.
Napisz program, którego zastosowanie pozwoli odczytać dane z komórek A1 i A2,
zsumować je, a wynik zapisać w komórce A3. Do adresowania komórek wykorzystaj
zapis Cells(numer_wiersza, numer_kolumny).
1. Uruchom arkusz kalkulacyjny Excel i edytor VBA. W oknie Code wpisz
program (rysunek 4.73).
Rozdział 4. Zmienne 147
Rysunek 4.73. Program, którego zastosowanie pozwala zsumować zawartość komórek A1 i A2,
a wynik wyświetlić w komórce A3
2. Naciśnij klawisz F5.
3. Program został wykonany. Wyświetl okno arkusza Excela (rysunek 4.74).
Rysunek 4.74.
Puste komórki mają
wartość zero, a zatem
wynik sumowania
również wynosi 0
Rysunek 4.75.
Wynik nie został
automatycznie
zaktualizowany
Rysunek 4.76.
Liczba widoczna jest
zarówno w komórce,
jak i na pasku formuły
148 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Dla osób mających doświadczenie w pracy z arkuszem Excel może być zaskocze-
niem, że wynik nie jest aktualizowany po zmianie danych. Co się stanie, jeśli komórce,
która zawiera formułę, przypiszemy wynik wykonania programu w VBA? Najlepiej
sprawdzić to na przykładzie.
Przykład 69.
Wykonaj przykład 68. W arkuszu w komórki B1 i B2 wpisz liczby. W komórce A3
wyświetl wynik ich sumowania przy użyciu formuły. Wykonaj program w VBA. Sprawdź,
czy nadpisanie formuły przez wynik obliczeń jest sygnalizowane.
1. Uruchom arkusz kalkulacyjny Excel i edytor VBA.
2. W arkuszu zostały przygotowane dane i wpisana formuła (rysunek 4.77).
Rysunek 4.77.
Liczba jest widoczna
zarówno w komórce,
jak i na pasku formuły
Rysunek 4.78. Program zsumuje zawartość komórek A1 oraz A2, a wynik wstawi do komórki A3
4. Naciśnij klawisz F5.
5. Program został wykonany. Wyświetl okno arkusza Excela (rysunek 4.79).
Rysunek 4.79.
W komórce A5
formuła została
nadpisana przez wynik
wykonania programu
Rozdział 4. Zmienne 149
Czy można zabezpieczyć arkusz przed wpisywaniem danych przez programy VBA?
Tak, można włączyć ochronę arkusza (Recenzja/Chroń arkusz). Przy próbie wpisania
do komórki chronionego arkusza przez program VBA zostanie wyświetlony komunikat
o błędzie (rysunek 4.80).
Rysunek 4.80.
Tak jest
sygnalizowana próba
wpisania przez
program VBA do
chronionego arkusza
Przykład 70.
Napisz program, którego zastosowanie pozwoli ciągi znaków przypisane zmiennym
połączyć w jeden ciąg i zapisać je w komórce A1 arkusza.
1. Uruchom arkusz kalkulacyjny Excel i edytor VBA. W oknie Code wpisz
program (rysunek 4.81). W trzecim wierszu znajduje się instrukcja przypisania
zawartości komórki A1 zmiennej A. W czwartym wierszu znajduje się instrukcja
przypisania zawartości komórki B1 zmiennej B. W piątym wierszu obie
zmienne są łączone. Wynik łączenia zostaje wyświetlony w komórce C1.
Rysunek 4.81. Program, którego zastosowanie pozwala dokonać łączenia łańcuchów tekstowych
150 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 4.82.
W komórkach A1 i B1
zostały wpisane
ciągi znaków
Rysunek 4.83.
Wynik połączenia
ciągów został wstawiony
do komórki C1
Co się stanie, gdy zamiast tekstów w komórki A1 i A2 wpiszemy liczby? Czy kom-
puter zorientuje się, że dane mają charakter liczbowy, a nie tekstowy? Najłatwiej do-
wiedzieć się o tym, analizując przykład.
Przykład 71.
Sprawdź, jak działa program z przykładu 70., gdy argumentami są liczby.
1. W komórki A1 i A2 wpisz liczby 11 i 12 (rysunek 4.84).
Rysunek 4.84.
Komórki zawierają
liczby
Rysunek 4.85.
Rezultatem połączenia
dwóch liczb jest ciąg
tekstowy
Rysunek 4.86.
Według Excela wartość
komórki C1 wynosi zero
Rozdział 4. Zmienne 151
Przykład 72.
Napisz program, którego zastosowanie pozwoli z adresu w postaci kod_pocztowy nazwa_
miejscowości wydzielić kod pocztowy.
1. Uruchom arkusz kalkulacyjny Excel i edytor VBA. W oknie Code wpisz
program (rysunek 4.87). W trzecim wierszu znajduje się instrukcja przypisania
zawartości zmiennej N. W czwartym wierszu znajduje się instrukcja
przypisania zawartości komórki A1 zmiennej A. W piątym do komórki B1 jest
wpisywanych N pierwszych od lewej znaków wczytanych z komórki A1.
Rysunek 4.87. Program, którego zastosowanie pozwala wpisać N pierwszych znaków z komórki A1
do komórki B1
Rysunek 4.88.
W komórce A1 zostały
wpisane dane
Rysunek 4.89.
Wydzielenie ciągu
o stałej długości znaków
152 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Podsumowanie
Nazwa zmiennej nie może być dowolna. Pierwszy znak nazwy zmiennej musi
być literą. W nazwie mogą występować znaki alfanumeryczne i niektóre znaki
interpunkcyjne. W nazwach nie mogą znajdować się słowa zastrzeżone
(np. if, next). W nazwach nie mogą występować spacje i kropki. W celu
zwiększenia czytelności nazw zamiast spacji można używać znaku
podkreślenia _, np. rata_kredytu. W VBA w nazwach nie jest rozróżniana
wielkość liter. Aby zwiększyć czytelność złożonych nazw, można stosować
w środku wyrazów wielkie litery, np. RataKredytu. W nazwach nie można
umieszczać znaków używanych w deklaracjach: #, $, & oraz !. Maksymalna
długość nazwy wynosi 256 znaków. To ograniczenie rzadko ma znaczenie
praktyczne, ponieważ nazwy stosowane w programach są znacznie krótsze.
Deklaracje typów danych pozwalają na racjonalne gospodarowanie zasobami
komputera oraz wskazują programowi, jak ma poprawnie interpretować dane.
Aby włączyć wymuszanie deklarowania zmiennych, uruchom arkusz
kalkulacyjny Excel i edytor VBA. Wybierz polecenia Tools/Options.
W sekcji Code Settings zaznacz opcję Require Variable Declaration.
Kliknij przycisk OK. W pierwszym wierszu programu wpisz instrukcję
Option Explicit.
Rozdział 5.
Komunikacja
z użytkownikiem
Z tego rozdziału dowiesz się:
Jaka instrukcja służy do wyświetlenia okna dialogowego
Jaka instrukcja umożliwia wyświetlenie okna komunikatu
Jaka instrukcja pozwala na wpisywanie danych do komórek arkusza
Jak rozpoznać, który przycisk okna został kliknięty
Jak sprawdzać poprawność wpisywanych danych
To, co jest najprostsze dla programisty, zwykle jest najbardziej uciążliwe dla użytkow-
nika. Wprowadzanie nowych danych wymaga ingerencji w kod programu. Nie każdy
użytkownik ma ochotę edytować program i potrafi to zrobić. Jeśli programista zezwo-
li na taki sposób wprowadzania danych, może on przyczynić się do tego, że użytkow-
nik zmodyfikuje jeszcze jakąś część programu, który w efekcie przestanie działać.
Wprowadzanie danych przez podstawianie ich do zmiennych nie jest więc optymalnym
rozwiązaniem.
Wprowadzanie danych
Do wprowadzania danych służy funkcja InputBox. Umożliwia ona: wyświetlenie okna
dialogowego z polem do wpisania informacji, wstrzymanie wykonywania programu
do czasu wprowadzania przez użytkownika informacji i kliknięcia przycisku, przypi-
sanie wartości zmiennej.
gdzie:
prompt — parametr wymagany. Zawiera on tekst wyświetlany w oknie
dialogowym. Maksymalna długość tekstu wynosi 1024 znaki. Jest
ona dodatkowo zależna od szerokości używanych znaków. Jeżeli tekst ma być
wyświetlany w więcej niż jednej linii, należy zastosować znak separujący.
W tym celu są używane (Chr(13)) — carriage return lub (Chr(10)) —
linefeed character. Jest również możliwe łączenie obu znaków (Chr(13)
& Chr(10)) pomiędzy każdą linią.
title — parametr opcjonalny. Zawiera on tekst wyświetlany na pasku
tytułu okna dialogowego. Jeżeli parametr zostanie pominięty, na pasku
tytułu zostanie wyświetlona nazwa aplikacji.
default — parametr opcjonalny. Zawiera on tekst wyświetlany w polu
edycji jako domyślny. Jeżeli parametr zostanie pominięty, jest wyświetlane
puste pole edycji.
xpos — parametr opcjonalny. Wyrażenie liczbowe określające odległość
w poziomie lewej krawędzi okna dialogowego od krawędzi ekranu.
Jeżeli parametr zostanie pominięty, okno jest centrowane w poziomie.
ypos — parametr opcjonalny. Wyrażenie liczbowe określające odległość
w pionie górnej krawędzi okna dialogowego od krawędzi ekranu.
Jeżeli parametr zostanie pominięty, okno jest wyświetlane w ⅓ wysokości,
licząc od góry ekranu.
helpfile — parametr opcjonalny. Zawiera ciąg znaków, który umożliwia
korzystanie z pomocy kontekstowej dla okna.
context — parametr opcjonalny. Wyrażenie liczbowe wskazujące na numer
tematu pomocy.
Jeżeli zostaną użyte zarówno helpfile, jak i context, naciśnięcie klawisza F1 spowoduje
wyświetlenie tematu pomocy odpowiadającego kontekstowi. Niektóre aplikacje, jak np.
Microsoft Excel, automatycznie dodają przycisk pomocy do okna dialogowego.
Jeżeli użytkownik kliknie przycisk OK lub naciśnie klawisz Enter, funkcja InputBox
zwraca ciąg znaków wpisany w polu edycji. Jeśli użytkownik kliknie przycisk Anuluj
lub naciśnie klawisz Esc, funkcja InputBox zwraca łańcuch o długości zerowej.
Przykład 73.
Wyświetl okno funkcji InputBox zawierające: w pasku tytułu tekst Tytuł okna, w miejscu
przeznaczonym na objaśnienia tekst Treść objaśnienia, a w polu edycji tekst Pole edycji.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz w nim program (rysunek 5.1). Pierwsza linia zawiera wymuszenie
deklaracji wszystkich zmiennych. W programie dane między podprogramami
są przekazywane za pośrednictwem zmiennych. Zmienne muszą być
zadeklarowane globalnie — na początku programu, a nie w procedurze.
W linijce drugiej i trzeciej są zadeklarowane zmienne, które będą przechowywać
ciągi znaków. Podprogram główny ma za zadanie wywołanie podprogramów:
czytacz i pisacz. Zastosowanie podprogramu czytacz prowadzi do wyświetlenia
okna dialogowego. W polu edycji jest wpisany ciąg znaków. Zastosowanie
podprogramu pisacz prowadzi do wyświetlenia ciągu znaków wpisanych
w polu edycji.
Miejsce, w którym znajduje się punkt wstawiania (kursor) podczas naciskania kla-
wisza F5, wskazuje procedurę, która zostanie uruchomiona.
Rysunek 5.2.
Zostanie uruchomiony
podprogram główny
Rysunek 5.3.
Okno wyświetlone
w trakcie wykonania
podprogramu czytacz
Rysunek 5.4.
Okno wyświetlone
w trakcie wykonania
podprogramu pisacz
Przykład 74.
Wyświetl okno funkcji InputBox zawierające: w pasku tytułu tekst Tytuł okna, w miejscu
przeznaczonym na objaśnienia tekst Wpisz dane do komórki A1, a w polu edycji —
puste miejsce. Ciąg znaków wprowadzony w polu edycji wpisz do komórki A1 arkusza.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz w nim program (rysunek 5.5). Pierwsza linia zawiera wymuszenie
deklaracji wszystkich zmiennych. Dane między podprogramami są przekazywane
za pośrednictwem zmiennych. Zmienne muszą być zadeklarowane globalnie
— na początku programu, a nie w procedurze. W linijce drugiej i trzeciej są
zadeklarowane zmienne, które będą przechowywać ciągi znaków. Podprogram
główny ma za zadanie wywołanie podprogramów: czytacz i pisacz. Zastosowanie
podprogramu czytacz prowadzi do wyświetlenia okna dialogowego. Zastosowanie
podprogramu pisacz prowadzi do wpisania do komórki A1 ciągu znaków
zarejestrowanego w polu edycji.
Rysunek 5.5. Program, za pomocą którego wczytany ciąg znaków zostaje umieszczony w komórce A1
Rysunek 5.6.
Zostanie uruchomiony
podprogram główny
Rysunek 5.7.
Okno do wpisywania
danych — efekt
wykonania
podprogramu
czytacz
Rysunek 5.8.
Arkusz z wypełnioną
komórką
Przykład 75.
Napisz program, który pozwala na wczytanie adresu komórki, danych i wpisanie ich do
wybranej w pierwszym oknie komórki arkusza.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz w nim program (rysunek 5.9). Pierwsza linia zawiera wymuszenie
deklaracji wszystkich zmiennych. Dane między podprogramami są przekazywane
za pośrednictwem zmiennych. Zmienne muszą być zadeklarowane globalnie
— na początku programu, a nie w procedurze. W linijce drugiej i trzeciej są
zadeklarowane zmienne, które będą przechowywać ciągi znaków. Podprogram
główny ma za zadanie wywołanie podprogramów: komórka, dane i arkusz.
Zastosowanie podprogramu komórka prowadzi do wyświetlenia okna dialogowego
z prośbą o wpisanie adresu komórki. Adres jest przypisany zmiennej k.
Zastosowanie podprogramu dane prowadzi do wyświetlenia okna dialogowego
z prośbą o wpisanie danych (zawartości komórki). Dane są przypisane
zmiennej a. Zastosowanie podprogramu arkusz prowadzi do wpisania
do komórki k ciągu a.
Rysunek 5.9. Program, którego zastosowanie prowadzi do umieszczenia wczytanego ciągu znaków
w komórce o adresie podanym przez użytkownika
Rysunek 5.10.
Lista programów.
Najtrudniej wybrać
właściwy — później
wszystko następuje
automatycznie
Rysunek 5.11.
Współrzędne komórki
Rysunek 5.12.
Zawartość,
która ma zostać
wprowadzona
do komórki
o współrzędnych
z rysunku 5.11
Rysunek 5.13.
Ciąg znaków został
wpisany do komórki
o podanym przez
użytkownika adresie
Przykład 76.
Okno dialogowe wyświetl tak, aby jego lewy górny róg znajdował się w lewym górnym
rogu ekranu.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz w nim program (rysunek 5.14).
Rysunek 5.15.
Okno wyświetlone
po wykonaniu
programu
z rysunku 5.14
162 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Przykład 77.
Napisz program, który będzie wyświetlał okno z prośbą o wpisanie ciągu znaków. Jeśli
nic nie zostanie wpisane, ponowi prośbę. Gdy ciąg zostanie wprowadzony, program
wyświetli go w oknie komunikatu i zakończy działanie.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz w nim program (rysunek 5.16). Będzie w nim używana tylko jedna
zmienna ciąg. Program składa się z dwóch podprogramów: niepusta i komunikat.
Podprogram niepusta rozpoczyna się od wyzerowania zmiennej ciąg. Przy
pierwszym uruchomieniu programu jest ona niepotrzebna. Jeżeli program
zostanie wykonany ponownie, wówczas zmiennej ciąg zostanie przypisana
wartość… z poprzedniego wykonania. Instrukcje zawarte pomiędzy Do Until
i Loop są wykonywane, aż zostanie spełniony warunek ciąg <> "". Ten zapis
oznacza, że zmienna ciąg ma być niepusta. Dopóki zmiennej nie zostanie nic
przypisane, będzie wyświetlane okno z prośbą o wpisanie ciągu. Gdy ciąg zostanie
wpisany, zostaje on przypisany zmiennej ciąg. Jest wówczas wykonywana
procedura komunikat, której zadaniem jest wyświetlenie zawartości
zmiennej ciąg.
Rysunek 5.17.
Programy warto
nazywać tak,
aby nawet osoba
niewtajemniczona
dokonała dobrego
wyboru
Rysunek 5.18.
Okno jest wyświetlane tak długo,
aż w polu dialogowym zostanie
wpisany znak. Nawet próba
zamknięcia okna przez kliknięcie
przycisku X widocznego w prawym
górnym rogu na nic się nie zdaje
Rysunek 5.19.
Ciąg znaków
został wpisany
13. Zostało wyświetlone okno komunikatu (rysunek 5.20). Oznacza to, że jest
wykonywany podprogram komunikat.
Rysunek 5.20.
Ciąg znaków wpisany
w polu dialogowym
(rysunek 5.19)
został wyświetlony
w oknie komunikatu
Rysunek 5.21.
Teoretycznie spacja
też jest znakiem,
ale okno wygląda
dziwnie
Wyświetlanie komunikatów
Do wyświetlania komunikatów służy funkcja MsgBox. Umożliwia ona: wyświetlenie
okna komunikatu, wstrzymanie wykonywania programu do czasu kliknięcia przycisku,
zwrócenie liczby całkowitej (zmienna typu Integer) o wartości zależnej od klikniętego
przycisku.
gdzie:
prompt — parametr wymagany. Zawiera on tekst wyświetlany w oknie
komunikatu. Maksymalna długość tekstu wynosi 1024 znaki. Jest
ona dodatkowo zależna od szerokości używanych znaków. Jeżeli tekst ma
być wyświetlany w więcej niż jednej linii, należy zastosować znak separujący.
Do tego celu są używane (Chr(13)) — carriage return lub (Chr(10))
— linefeed character. Możliwe jest również łączenie obu znaków
(Chr(13) & Chr(10)) pomiędzy każdą linią.
buttons — parametr opcjonalny. Wyrażenie numeryczne, które jest sumą
wartości określającej liczbę i typ wyświetlanych przycisków, styl ikony,
przycisk domyślny, modalność okna. Wyrażenie numeryczne jednoznacznie
określa wygląd okna. Jeżeli parametr nie zostanie podany, jest przyjmowana
wartość 0. Sposób generowania przycisków szerzej opisano w tabeli 5.1.
Rozdział 5. Komunikacja z użytkownikiem 165
Jeżeli zostaną użyte zarówno helpfile, jak i context, naciśnięcie klawisza F1 spowoduje
wyświetlenie tematu pomocy odpowiadającego kontekstowi.
Z tabel od 5.1 do 5.6 możesz się dowiedzieć, jak wartość poszczególnych parametrów
wpływa na wygląd wyświetlanego okna oraz wartość zwracaną.
vbOKCancel 1
vbAbortRetryIgnore 2
vbYesNoCancel 3
166 VBA dla Excela 2016 PL. 222 praktyczne przykłady
vbRetryCancel 5
Naciśnięcie klawisza Esc daje taki sam efekt jak kliknięcie przycisku Anuluj.
vbQuestion 32
vbExclamation 48
vbInformation 64
Rozdział 5. Komunikacja z użytkownikiem 167
vbDefaultButton2 256
vbDefaultButton3 512
VbDefaultButton4 768
Przykład 78.
Wyświetl w oknie Excela okno komunikatu, które będzie zawierało przycisk OK. Na
pasku tytułu będzie widoczny napis Tytuł okna. Nad przyciskiem będzie widoczny napis
Komunikat.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz w nim program (rysunek 5.22). Będzie w nim używana tylko jedna
zmienna x. Do niej funkcja MsgBox zwraca (czyli zapisuje) wynik swojego
działania. W jednej procedurze może wystąpić tylko jedna zmienna o danej
nazwie. Program składa się z deklaracji i programu właściwego. W linii
czwartej znajduje się przypisanie zmiennej okna komunikatu. Parametrami
wyświetlenia okna są: napis wyświetlany nad przyciskiem, typ okna, napis
wyświetlany na pasku tytułu.
Rysunek 5.22.
Program, którego
zastosowanie
prowadzi do
wyświetlenia
okna komunikatu
z przyciskiem OK
3. Uruchom program.
4. Wyświetl okno arkusza Excela. Na pierwszym planie jest widoczne okno
komunikatu (rysunek 5.23).
Rysunek 5.23.
Okno wyświetlone
w wyniku wykonania
programu
z rysunku 5.22
Przykład 79.
Wyświetl w oknie Excela okno komunikatu, które będzie zawierało przyciski Anuluj
oraz OK. Na pasku tytułu będzie widoczny napis Tytuł okna. Nad przyciskiem będzie
widoczny napis Komunikat.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz w nim program (rysunek 5.24). Będzie w nim używana tylko jedna
zmienna x. Program składa się z deklaracji i programu właściwego. W linii
czwartej znajduje się przypisanie zmiennej okna komunikatu. Parametrami
wyświetlenia okna są: napis wyświetlany nad przyciskiem, typ okna, napis
wyświetlany na pasku tytułu.
Rysunek 5.24.
Program, którego
wykonanie prowadzi
do wyświetlenia
okna komunikatu
z przyciskami
Anuluj i OK
3. Uruchom program.
4. Wyświetl okno arkusza Excela. Na pierwszym planie jest widoczne okno
komunikatu (rysunek 5.25).
Rysunek 5.25.
Okno arkusza Excela
wyświetlone w wyniku
wykonania programu
z rysunku 5.24
Przykład 80.
Wyświetl w oknie Excela okno komunikatu jak w przykładzie 79. Odczytaj i wyświetl na
ekranie wartości zwracane przez program w zależności od naciśniętego przycisku.
Rysunek 5.26.
Program, którego
wykonanie prowadzi
do wyświetlenia
okna komunikatu
z przyciskami
Anuluj i OK oraz
wartością zmiennej x
3. Uruchom program.
4. Zostało wyświetlone okno Macros. Zaznacz w nim jedyny program,
który można uruchomić — okna.
5. Kliknij przycisk Run.
6. Zostało wyświetlone okno z dwoma przyciskami (rysunek 5.27).
Jest to wynik wykonania czwartej linii programu. Kliknij przycisk OK.
Rysunek 5.27.
Użytkownik widzi
okno z przyciskami.
Klika jeden z nich.
Jaka informacja
jest przekazywana
do programu?
Rysunek 5.28.
Naciśnięcie przycisku
OK (rysunek 5.27)
spowodowało nadanie
zmiennej x wartości 1
Przykład 81.
Wyświetl w oknie Excela okno oznaczone znakiem zapytania. Musi ono zawierać cztery
przyciski: Tak, Nie, Anuluj, Pomoc. Przycisk drugi będzie domyślny. Na pasku tytułu
będzie widoczny napis: Próba wyjścia z programu bez zapisania danych! Nad przyciska-
mi będzie wyświetlony napis: Czy chcesz zamknąć program? Odczytaj i wyświetl
na ekranie wartości zwracane przez program w zależności od naciśniętego przycisku.
Rozdział 5. Komunikacja z użytkownikiem 171
Rysunek 5.29.
Okno z czterema
przyciskami
do wyboru
Rysunek 5.30.
Kliknięcie przycisku
Tak spowodowało
nadanie zmiennej x
wartości 6
Przykład 82.
Wyświetl okno komunikatu, które będzie zawierało przycisk OK. Na pasku tytułu będzie
widoczny napis: Tytuł okna. Nad przyciskiem będzie widoczny napis w dwóch wierszach.
W górnym wierszu będzie znajdował się tekst: Wiersz1. W dolnym wierszu będzie
znajdował się tekst: Wiersz2.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz w nim program (rysunek 5.31). Będą używane następujące zmienne:
napis1, napis2 oraz x. Po części z deklaracjami zmiennym napis1 i napis2
zostają przypisane ciągi znaków. W kolejnej linii znajduje się przypisanie
zmiennej okna komunikatu. Pomiędzy zmiennymi napis1 i napis2 znajduje
się znak przejścia do nowej linii. Pozostałymi parametrami wywołania są:
rodzaj przycisku oraz napis wyświetlany w pasku tytułu.
Rysunek 5.31.
Program, którego
zastosowanie
prowadzi do
wyświetlenia
okna komunikatu
z napisami
w dwóch wierszach
i z przyciskiem OK
3. Uruchom program.
4. Na pierwszym planie jest widoczne okno komunikatu (rysunek 5.32).
Rysunek 5.32.
Okno wyświetlane
po wykonaniu
programu
z rysunku 5.31
Przykład 83.
Zmodyfikuj program z przykładu 82. tak, aby dowiedzieć się, jaka wartość została
przypisana zmiennej x przed wyświetleniem okna z rysunku 5.32 oraz po kliknięciu
przycisku OK.
Przykład 84.
Wyświetl okno komunikatu, które będzie zawierało przycisk OK. Na pasku tytułu będzie
widoczny napis Data i czas systemu. Nad przyciskiem będzie widoczny napis w dwóch
wierszach. W górnym wierszu będzie znajdowała się data systemowa. W dolnym wierszu
będzie znajdował się czas systemowy.
3. Uruchom program.
4. W oknie Macros wybierz jedyny program, który można uruchomić — Przyklad84.
5. Kliknij przycisk Run.
6. Na pierwszym planie jest widoczne okno komunikatu (rysunek 5.34).
Rysunek 5.34.
Okno wyświetlone
po wykonaniu
programu
z rysunku 5.33
Przykład 85.
Napisz program, po wykonaniu którego będzie wyświetlane okno dialogowe. W pasku
tytułu powinno ono zawierać tekst: Cześć. Poniżej powinno wyświetlać pytanie: Jak
ci na imię?. W polu edycji powinien być wpisany tekst: Tu wpisz swoje imię. Po wpi-
saniu odpowiedzi i kliknięciu przycisku OK powinno zostać wyświetlone okno komu-
nikatu. Pasek tytułu powinien zawierać napis: Cześć. Nad przyciskiem OK powinien być
widoczny tekst wprowadzony w polu edycji.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz w nim program (rysunek 5.35). Będą tu używane zmienne: x oraz y.
Zmiennej x zostaje przypisane imię. Zmienna y odpowiada za wyświetlenie
imienia w oknie komunikatu.
Rysunek 5.35.
Program, po
którego wykonaniu
jest wyświetlany
tekst wpisany
w polu dialogowym
3. Uruchom program.
4. Na pierwszym planie jest widoczne okno umożliwiające wpisanie tekstu
(rysunek 5.36).
Rysunek 5.36.
Okno do
wprowadzania danych
Rysunek 5.37.
Imię wpisane
w polu dialogowym
Rysunek 5.38.
Imię wpisane w oknie
InputBox zostało
wyświetlone
w oknie MsgBox
Dane wczytywane z urządzenia czy pliku mogą być zweryfikowane w trakcie ich
przygotowywania. Dane wprowadzane z klawiatury są najbardziej narażone na błędy.
Warto zastosować w programie procedurę, która będzie kontrolowała poprawność
danych. Nie sprawdzi ona sensu informacji, ale pomoże stwierdzić, czy dane są zgodne
z zadeklarowanym typem zmiennej.
Zastosowanie tej zasady nie pozwoli na wykrycie błędów w zmiennych typu String.
Może ona zawierać dane różnego typu, a jedynym ograniczeniem, które można wyko-
rzystać do weryfikacji, jest długość ciągu.
lub:
On Error Resume Next
lub:
On Error GoTo 0.
Przykład 86.
Napisz program, który będzie umożliwiał wprowadzenie liczby całkowitej z klawiatu-
ry. Gdy liczba będzie poprawna, zostanie wyświetlona na ekranie. Gdy wprowadzony
ciąg nie będzie liczbą całkowitą, zostanie wyświetlona informacja o błędzie.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz w nim program (rysunek 5.39). Będzie w nim używana zmienna x. Jako
zmienna typu całkowitego została zadeklarowana jako Integer. W kolejnej
linii znajduje się instrukcja warunkowa skoku do procedury obsługi błędu
Error. Procedura obsługi błędu znajduje się na samym końcu programu. Skok
do niej powoduje wyświetlenie okna komunikatu z informacją o wpisaniu
błędnej liczby. Dane można wprowadzić w oknie dialogowym, które jest
wyświetlane po wykonaniu funkcji InputBox. Jeżeli dane są prawidłowe
— w przykładzie liczba całkowita — następuje wyświetlenie wprowadzonej
liczby (instrukcja MsgBox) i zakończenie działania programu.
Rysunek 5.39. Program, którego zastosowanie pozwala sprawdzić, czy wprowadzona liczba
jest typu całkowitego
3. Uruchom program.
4. Zostało wyświetlone okno umożliwiające wprowadzenie danych.
5. Wpisz liczbę 7.
6. Kliknij przycisk OK (rysunek 5.40).
Rysunek 5.40.
Okno, którego
wyświetlenie jest
wynikiem wykonania
funkcji InputBox
Rozdział 5. Komunikacja z użytkownikiem 177
Rysunek 5.41.
Okno, którego
wyświetlenie jest
wynikiem wykonania
pierwszej funkcji
MsgBox
Rysunek 5.42.
Wprowadzono daną,
która jest innego
typu niż zmienna x
Rysunek 5.43.
Okno, którego
wyświetlenie jest
wynikiem wykonania
drugiej funkcji MsgBox
Przykład 87.
Napisz program, który będzie umożliwiał wprowadzenie daty z klawiatury. Gdy liczba
będzie poprawna, zostanie wyświetlona na ekranie. Gdy wprowadzony ciąg nie będzie
datą, zostanie wyświetlony numer błędu.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz w nim program (rysunek 5.44). Będzie tu używana zmienna x, która
została zadeklarowana jako zmienna typu Date. W kolejnej linii znajduje się
instrukcja warunkowa skoku do procedury obsługi błędu Error. Procedura
obsługi błędu znajduje się na samym końcu programu. Skok do niej powoduje
wyświetlenie okna komunikatu o błędzie. Dane można wprowadzić w oknie
dialogowym, które jest wyświetlane po wykonaniu funkcji InputBox. Jeżeli
dane są prawidłowe — w tym przykładzie są prawidłową datą — następuje
wyświetlenie wprowadzonej liczby (instrukcja MsgBox) i zakończenie
działania programu.
Rysunek 5.44. Program, którego zastosowanie pozwala sprawdzić, czy wprowadzona liczba jest datą,
i wyświetlić ją lub komunikat o błędzie
3. Uruchom program.
4. Zostało wyświetlone okno umożliwiające wprowadzenie danych (rysunek 5.45).
Rysunek 5.45.
Wpisany ciąg
ma format daty
Rysunek 5.46.
Dane zostały
wprowadzone
w odpowiednim
formacie
Rysunek 5.47.
Zamiast daty wpisano
numer telefonu
Jeżeli chcesz, aby w oknie komunikatu (rysunek 5.48) były wyświetlane spacje pomię-
dzy członami komunikatu, możesz je wstawić w kodzie obsługi błędu (rysunek 5.44).
Rysunek 5.48.
Komunikat o błędzie
Przykład 89.
Napisz program, który będzie umożliwiał wprowadzenie numeru błędu z klawiatury.
Program będzie wyświetlał opis błędu. Po uruchomieniu powinien działać tak długo,
jak długo użytkownik będzie wpisywał numery błędów.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz w nim program (rysunek 5.49). Będzie w nim używana zmienna Err,
której będzie przypisywany numer błędu. Numery błędów są liczbami
całkowitymi. Zmienna powinna być więc typu Integer. Aby można
było korzystać z programu wielokrotnie po jednorazowym uruchomieniu,
zastosowano w nim instrukcję GoTo. Po wyświetleniu okna dialogowego
i okna komunikatu powoduje ona skok do etykiety ErrorNumer.
Rysunek 5.49.
Program
do wyświetlania
objaśnień
komunikatów
o błędzie
3. Uruchom program.
4. W oknie dialogowym wpisz liczbę 1 (rysunek 5.50).
Rysunek 5.50.
Wartości zmiennej Err
można symulować,
wpisując je w oknie
dialogowym
Rozdział 5. Komunikacja z użytkownikiem 181
Rysunek 5.51.
Opis błędu
dla zmiennej Err=1
Rysunek 5.52.
Opis błędu
dla zmiennej Err=3
Wycinanie tekstu
Opisane w tym rozdziale sposoby kontroli poprawności wprowadzanych danych nie
są idealne. Może się zdarzyć tak, że przyjdzie nam pracować z danymi otrzymanymi
od kogoś lub importowanymi z pliku. Może wówczas okazać się, że zawierają one błędy.
Gdy okaże się, że ich skorygowanie wymaga więcej niż kilku godzin pracy, warto
pokusić się o napisanie programu, który wyręczy człowieka.
Przykład 91.
Napisz program, który będzie zwracał określoną liczbę znaków wyciętych z prawej
strony tekstu. Tekst powinien być wpisany w komórce A2. Liczba znaków powinna
być wpisana w komórce B2. Tekst po obcięciu powinien być wpisany do komórki C2.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz w nim program (rysunek 5.53). Tekst jest wczytywany do zmiennej txt.
Liczba znaków jest przypisywana zmiennej n. Funkcja Right zwraca określoną
liczbę znaków wyciętych z prawej strony tekstu. Ma ona następującą składnię:
Right(tekst,liczba_znaków)
Rysunek 5.53.
Program wycinający
z tekstu zapisanego
w komórce (2, 1)
n znaków, licząc
od prawej. Liczba n
jest odczytywana
z komórki (2, 2)
Rysunek 5.54.
Z ciągu znaków zapisanych
w komórkach od A2 do C2
zostanie wpisanych tyle
znaków, ile wynosi wartość
zapisana w komórce B2
4. Uruchom program.
5. W oknie Macros zaznacz program przyklad91.
6. Kliknij przycisk Run.
7. Wyświetl ponownie arkusz (rysunek 5.55).
Rozdział 5. Komunikacja z użytkownikiem 183
Rysunek 5.55.
Znaki interpunkcyjne
są traktowane
tak jak litery
Przykład 92.
Napisz program, który będzie zwracał określoną liczbę znaków wyciętych z tekstu, licząc
od pierwszego zadeklarowanego znaku. Tekst powinien być wpisany w komórce A2.
Numer znaku odniesienia powinien być wpisany w komórce B2. Liczba znaków powinna
być wpisana w komórce C2. Tekst po obcięciu powinien być wpisany do komórki D2.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz w nim program (rysunek 5.56). Tekst jest wczytywany do zmiennej txt.
Numer znaku odniesienia jest przypisywany zmiennej m. Liczba znaków jest
przypisywana zmiennej n. Funkcja Mid zwraca określoną liczbę znaków
wyciętych z tekstu, licząc od pierwszego zadeklarowanego znaku.
Ma ona następującą składnię:
Mid (tekst,indeks_początku,liczba_znaków)
Rysunek 5.56.
Program, którego
zastosowanie
pozwala wyciąć
z tekstu zapisanego
w komórce A2
n znaków, licząc
od znaku m
Rysunek 5.57. Z ciągu znaków zapisanych w komórkach od A2 do D2 zostanie wpisanych tyle znaków,
ile wynosi wartość zapisana w komórce C2. Numer znaku odniesienia zapisano w komórce B2
4. Uruchom program.
5. W oknie Macros zaznacz program przyklad92.
6. Kliknij przycisk Run.
184 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 5.58. W komórce D2 zostało zapisanych dziewięć znaków z tekstu widocznego w komórce A2,
licząc od znaku trzeciego
Przykład 93.
Napisz program, którego zastosowanie pozwoli zwracać liczbę całkowitą odpowiadają-
cą długości tekstu wpisanego do komórki A2. Powinny być liczone wszystkie znaki
włącznie z niedrukowanymi (spacja, znacznik akapitu itp.). Wynik powinien zostać
wpisany do komórki B2.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz w nim program (rysunek 5.59). Tekst wpisany w komórce A2 jest
argumentem formuły Len. Zwracany przez nią wynik jest zapisywany
w komórce B2. Funkcja Len zwraca liczbę całkowitą odpowiadającą długości
tekstu. Są liczone wszystkie znaki kodowane łącznie z niedrukowanymi
(spacja, znacznik akapitu etc.). Ma ona następującą składnię:
Len(tekst)
Rysunek 5.59.
Program, którego
zastosowanie pozwala zliczyć
długość tekstu zapisanego
w komórce A2 i zapisać
wynik w B2
Rysunek 5.60.
Tekst w komórce A2
jest wyśrodkowany.
Czy efekt uzyskano
przy użyciu spacji?
4. Uruchom program.
5. W oknie Macros zaznacz program przyklad93.
6. Kliknij przycisk Run.
7. Wyświetl ponownie arkusz (rysunek 5.61).
Rozdział 5. Komunikacja z użytkownikiem 185
Rysunek 5.61.
W komórce A2 są
wpisane 24 znaki!
Przykład 94.
Napisz program, który usunie wszystkie znaki białe (niedrukowalne) wpisane po lewej stro-
nie ciągu widocznego w komórce A2. Wynik powinien zostać wpisany do komórki B2.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz w nim program (rysunek 5.62). Tekst wpisany w komórce A2 jest
argumentem formuły LTrim. Zwracany przez nią wynik jest zapisywany
w komórce B2. Funkcja LTrim zwraca tekst z pominięciem znaków białych
(niedrukowalnych) napotkanych z lewej strony tekstu. Ma ona następującą
składnię:
LTrim(tekst)
Rysunek 5.62.
Program, którego
zastosowanie pozwala
usunąć znaki
niedrukowalne z tekstu
zapisanego w komórce A2
i zapisać wynik w B2
3. Przygotuj zestaw danych testowych (rysunek 5.63).
Rysunek 5.63.
Tekst w komórce A2
prawdopodobnie jest
poprzedzony znakami
białymi
4. Uruchom program.
5. W oknie Macros zaznacz program przyklad94.
6. Kliknij przycisk Run.
7. Wyświetl ponownie arkusz (rysunek 5.64).
Rysunek 5.64.
W komórce A2 tekst
był poprzedzony
przez znaki białe
Przykład 95.
Napisz program, którego zastosowanie pozwoli usunąć wszystkie znaki białe (niedruko-
walne) wpisane po lewej i prawej stronie ciągu widocznego w komórce A2. Wynik powi-
nien zostać wpisany do komórki B2.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz w nim program (rysunek 5.65). Tekst wpisany w komórce A2 jest
argumentem formuły Trim. Zwracany przez nią wynik jest zapisywany
w komórce B2. Funkcja Trim zwraca tekst z pominięciem znaków białych
(niedrukowalnych) napotkanych z lewej i prawej strony tekstu. Ma ona
następującą składnię:
Trim(tekst)
Rysunek 5.65.
Program, którego zastosowanie
pozwala usunąć znaki
niedrukowalne z tekstu zapisanego
w komórce A2 i zapisać
wynik w B2
Rysunek 5.66.
Tekst w komórce A2 jest
prawdopodobnie poprzedzony
i zakończony znakami białymi
4. Uruchom program.
5. W oknie Macros zaznacz program przyklad95.
6. Kliknij przycisk Run.
7. Wyświetl ponownie arkusz (rysunek 5.67).
8. Stosując wyrównanie komórki B2 do lewej i do prawej strony, sprawdź,
czy przed i za tekstem znajdują się znaki białe.
Rysunek 5.67.
W komórce A2 tekst
był poprzedzony
przez znaki białe
Rozdział 5. Komunikacja z użytkownikiem 187
Podsumowanie
Do wprowadzania danych służy funkcja InputBox. Umożliwia ona: wyświetlenie
okna dialogowego z polem do wpisania informacji, wstrzymanie wykonywania
programu do czasu wprowadzania przez użytkownika informacji i kliknięcia
przycisku, przypisanie wartości zmiennej.
Do wyświetlania komunikatów służy funkcja MsgBox. Umożliwia ona:
wyświetlenie okna komunikatu, wstrzymanie wykonywania programu
do czasu kliknięcia przycisku, zwrócenie liczby całkowitej (zmienna
typu Integer) o wartości zależnej od klikniętego przycisku.
Wpisanie danych do komórki arkusza umożliwia obiekt Range,
np. Range("Adres_komórki").value=wpisana_wartość.
Funkcja MsgBox zwraca liczbę całkowitą (zmienną typu Integer) o wartości
zależnej od klikniętego przycisku.
Do wykrywania błędów można użyć instrukcji On Error. Może ona zostać
wykorzystana przy wyświetlaniu kodu i opisu wykrytego błędu.
Funkcja Len zwraca liczbę całkowitą odpowiadającą długości tekstu. Są liczone
wszystkie znaki kodowane łącznie z niedrukowanymi (spacja, enter etc.).
Ma ona następującą składnię: Len(tekst).
Funkcja RTrim zwraca tekst z pominięciem znaków białych (niedrukowalnych)
napotkanych z prawej strony tekstu. Ma ona następującą składnię RTrim(tekst).
Funkcja LTrim zwraca tekst z pominięciem znaków białych (niedrukowalnych)
napotkanych z lewej strony tekstu. Ma ona następującą składnię LTrim(tekst).
Funkcja Trim zwraca tekst z pominięciem znaków białych (niedrukowalnych)
napotkanych z lewej i prawej strony tekstu. Ma ona następującą składnię
Trim(tekst).
188 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rozdział 6.
Korzystanie z obiektów
Z tego rozdziału dowiesz się:
Co to jest obiekt
Co to jest właściwość
Co to jest metoda
Obiekty
Obiektem jest element składowy aplikacji, np. komórka, zakres komórek, wykres
umieszczony na arkuszu, arkusz, skoroszyt, arkusz programu Excel.
Właściwości
Obiekty mają właściwości. Właściwość jest cechą obiektu. Właściwościami zakresu
komórek (obiektu Range) są: zawartość komórki, styl czcionki itp.
gdzie:
Object — nazwa obiektu,
Property — nazwa właściwości.
190 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Metody
Z obiektami są związane metody. Metoda jest operacją wykonaną na obiekcie — stanowi
ją np. wpisanie tekstu do komórki czy zaznaczenie zakresu komórek.
Metoda jest działaniem, które można wykonać na obiekcie. Jest sposobem postępowania,
który prowadzi do określonego rezultatu.
W celu posłużenia się metodą należy za nazwą obiektu wstawić kropkę, a następnie
nazwę wybranej metody.
Zaznaczanie komórki
Do zaznaczania komórek można wykorzystać metodę Select.
Przykład 96.
Napisz program, którego zastosowanie pozwoli zaznaczyć komórkę B2.
1. W arkuszu Excel zaznacz komórkę A1.
2. Wyświetl okno Code (rysunek 4.3).
3. Wpisz w nim program (rysunek 6.1). Pierwsza linia zawiera wymuszenie
deklaracji wszystkich zmiennych. W linii drugiej znajduje się nazwa procedury.
W linii trzeciej zapisano obiekt (Range("B2")). W ten sposób oznaczono
pojedynczą komórkę B2. Następnie po kropce została zapisana metoda
(Select), która umożliwia zaznaczenie komórki.
Rysunek 6.1.
Program, którego
zastosowanie
pozwala zaznaczyć
komórkę B2
4. Uruchom program.
5. W oknie Macros zaznacz przyklad96.
6. Wyświetl arkusz Excela (rysunek 6.2).
Rysunek 6.2.
Zaznaczenie zostało
przeniesione
do komórki B2
Rozdział 6. Korzystanie z obiektów 191
Elektroniczny sufler
Podczas pisania programu dużo problemów sprawiają:
potrzeba dokładnej znajomości nazw obiektów i metod,
literówki popełniane przy ich wpisywaniu.
Przykład 97.
Napisz program, którego zastosowanie pozwoli zaznaczyć komórkę B2.
1. Wyświetl okno Code (rysunek 4.3).
2. Utwórz szkielet programu. Linia kończąca procedurę pojawia się automatycznie
po wprowadzeniu jej nagłówka (rysunek 6.3).
Rysunek 6.3.
Szkielet programu
Rysunek 6.4.
Znak wstawiania
został umieszczony
między liniami
ograniczającymi
procedurę
Rysunek 6.5.
Edytor podpowiada,
jak można zdefiniować
zakres
Rysunek 6.6.
Lista metod
i właściwości
Rysunek 6.7.
Lista metod
i właściwości
o nazwach
rozpoczynających
się od litery S
Rysunek 6.8.
Program
po dodaniu metody
11. Teraz pora na sprawdzenie, czy program działa. Wyświetl okno arkusza Excel
(rysunek 6.9). Domyślnie jest wybrana komórka A1.
Rysunek 6.9.
Arkusz z wybraną
komórką A1
Rysunek 6.10.
Kliknięcie ikony
spowoduje
uruchomienie
programu
14. Program został wykonany.
15. Wyświetl okno arkusza Excel (rysunek 6.11). Wybraną komórką jest B2.
Rysunek 6.11.
Arkusz z wybraną
komórką B2
Przykład 98.
Napisz program, którego zastosowanie pozwoli czyścić i przywracać domyślne for-
matowanie komórek w zakresie od A1 do C3.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz w nim program (rysunek 6.12). Pierwsza linia zawiera wymuszenie
deklaracji wszystkich zmiennych. W linii drugiej znajduje się nazwa procedury.
W linii trzeciej znajduje się komenda czyszczenia zawartości i przywracania
domyślnego formatowania komórek arkusza leżących w zakresie od A1 do C3.
Rysunek 6.12.
Program, ktorego
zastosowanie pozwala
usunąć zawartość
i formatowanie
komórek w obszarze
od A1 do C3
Rysunek 6.13.
Arkusz z danymi
194 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 6.14.
Kliknięcie ikony
spowoduje
uruchomienie
programu
Rysunek 6.15.
Z komórek w zakresie
od A1 do C3 zostały
usunięte zawartość
i formatowanie
Usuwanie zawartości
Usunięcie zawartości z komórek wymaga zaznaczenia zakresu komórek i posłużenia
się metodą ClearContents.
Przykład 99.
Napisz program, którego zastosowanie pozwoli usunąć zawartość komórek w zakresie
od A1 do C3.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz w nim program (rysunek 6.16). Pierwsza linia zawiera wymuszenie
deklaracji wszystkich zmiennych. W linii drugiej znajduje się nazwa
procedury. W linii trzeciej znajduje się komenda usuwania zawartości
komórek arkusza leżących w zakresie od A1 do C3.
Rysunek 6.16.
Program, którego
zastosowanie pozwala
usunąć zawartość
komórek w obszarze
od A1 do C3
Rozdział 6. Korzystanie z obiektów 195
Rysunek 6.17.
Arkusz z danymi
Rysunek 6.18.
Kliknięcie ikony
spowoduje
uruchomienie
programu
Rysunek 6.19.
Z komórek z zakresu
od A1 do C3 została
usunięta zawartość,
ale nie formatowanie
Usuwanie formatowania
Zastąpienie dotychczasowego formatowania przez domyślne formatowanie komórek
wymaga zaznaczenia zakresu komórek i posłużenia się metodą ClearFormats.
Przykład 100.
Napisz program, którego zastosowanie pozwoli przywrócić domyślne formatowanie
komórek w zakresie od A1 do C3.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz w nim program (rysunek 6.20). Pierwsza linia zawiera wymuszenie
deklaracji wszystkich zmiennych. W linii drugiej znajduje się nazwa procedury.
W linii trzeciej znajduje się komenda usuwania formatowania komórek arkusza
leżących w zakresie od A1 do C3.
196 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 6.20.
Program, którego
zastosowanie pozwoli
usunąć formatowanie
komórek
w ograniczonym
obszarze
Rysunek 6.21.
Arkusz z danymi
Rysunek 6.22.
Z komórek z zakresu
od A1 do C3 zostało
usunięte
formatowanie,
ale nie dane
Przykład 101.
Napisz program, którego zastosowanie pozwoli przeszukiwać Arkusz1 w zakresie od
A1 do E5. Zawartość komórek o wartościach mniejszych od 0 będzie usuwana.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz w nim program (rysunek 6.23). Pierwsza linia zawiera wymuszenie
deklaracji wszystkich zmiennych. W linii drugiej została zadeklarowana
zmienna komórka. Ponieważ nie wiadomo, jakie dane może zawierać arkusz,
został zadeklarowany typ Variant. W trzeciej linii znajduje się nazwa procedury.
Za pomocą pętli For Each… Next będzie przeszukiwany zakres komórek od
A1 do E5 arkusza Excela o nazwie Arkusz1. Przy użyciu metody ClearContents
zawartość komórek o wartościach mniejszych od 0 jest usuwana.
Rozdział 6. Korzystanie z obiektów 197
Rysunek 6.23.
Program, którego
zastosowanie pozwala
usunąć komórki
o wartości mniejszej
od 0 Arkusza1
w zakresie od A1
do E5
Rysunek 6.24.
Dane wpisane
do Arkusza1
Rysunek 6.25.
Z komórek z zakresu
od A1 do E5 zostały
usunięte dane
o wartościach
mniejszych niż zero
Właściwości
Właściwością jest cecha obiektu. Może nią być np. liczba wpisana w komórkę, kolor
komórki itp.
Przykład 102.
Napisz program, którego zastosowanie pozwoli wpisać liczbę 1 do komórki A1.
1. Wyświetl okno Code (rysunek 4.3).
198 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 6.26.
Do komórki A1
zostanie wpisana
wartość 1
Rysunek 6.27.
Arkusz z liczbą
wpisaną przez
program
Przykład 90.
Napisz program, którego zastosowanie pozwoli wpisywać słowo misio do komórek
w zakresie od A1 do E5.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz w nim program (rysunek 6.28). Pierwsza linia zawiera wymuszenie
deklaracji wszystkich zmiennych. W linii drugiej znajduje się nazwa procedury.
W linii trzeciej komórkom należącym do zakresu od A1 do E5 jest przypisywana
wartość. Wartością jest ciąg znaków — słowo misio.
Rysunek 6.28.
Komórki należące do
zakresu od A1 do E5
zostaną wypełnione
identycznym ciągiem
znaków
Rysunek 6.29.
Rezultatem wykonania
programu jest
błyskawiczne
„rozmnożenie”
słowa „misio”
Rozdział 6. Korzystanie z obiektów 199
Przykład 104.
Napisz program, który będzie przeszukiwał Arkusz1 w zakresie od A1 do E5. W ko-
mórkach o wartościach równych zeru będzie wpisywane słowo zero.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz w nim program (rysunek 6.30). Pierwsza linia zawiera wymuszenie
deklaracji wszystkich zmiennych. W drugiej linii została zadeklarowana
zmienna komórka. Ponieważ nie wiadomo, jakie dane może zawierać arkusz,
został zadeklarowany typ Variant. W trzeciej linii znajduje się nazwa procedury.
Za pomocą pętli For Each… Next będzie przeszukiwany zakres komórek od A1
do E5 arkusza programu Excel o nazwie Arkusz1. Przy użyciu metody Value
do komórek o wartościach równych 0 będzie wpisywane słowo zero.
Rysunek 6.30.
Program, za pomocą
którego można
zastąpić wartość
liczbową jej słownym
odpowiednikiem
Rysunek 6.31.
Dane wpisane
do Arkusza1
Rysunek 6.32.
Oto dowód na to,
że wartość komórek
pustych wynosi 0
200 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Przykład 106.
Napisz program, za pomocą którego będzie można przeszukiwać Arkusz1 w zakresie od A1
do E5. W komórkach, w których znajduje się liczba, zostanie wpisana jej wartość słownie.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz w nim program (rysunek 6.33). Pierwsza linia zawiera wymuszenie
deklaracji wszystkich zmiennych. W drugiej linii została zadeklarowana
zmienna komórka. Ponieważ nie wiadomo, jakie dane może zawierać arkusz,
został zadeklarowany typ Variant. W trzeciej linii znajduje się nazwa
procedury. Za pomocą pętli For Each… Next będzie przeszukiwany zakres
komórek od A1 do E5 arkusza Excel o nazwie Arkusz1. Przy użyciu metody
Value do komórek o wartościach równych 0 będzie wpisywane słowo zero.
Analogiczny warunek jest sprawdzany dla liczb o wartościach do 9 włącznie.
Niespełnienie warunku powoduje, że będzie wykonywana kolejna linia
programu. Spełnienie warunku powoduje, że do komórki będzie wpisywany
ciąg znaków.
Rysunek 6.33.
Program, za pomocą
którego można
zastąpić wartość
liczbową z przedziału
od 0 do 9 jej słownym
odpowiednikiem
Rozdział 6. Korzystanie z obiektów 201
Rysunek 6.34.
Dane wpisane
do Arkusza1
Rysunek 6.35.
Wartości liczbowe
zostały wyrażone
słownie
Przykład 107.
Napisz program, za pomocą którego będzie można kopiować zawartość obszaru od
A1 do A3 do obszaru od B1 do B3.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz w nim program (rysunek 6.36). Pierwsza linia zawiera wymuszenie
deklaracji wszystkich zmiennych. W drugiej linii znajduje się nazwa
procedury. W trzeciej linii obiektowi, którym jest zakres komórek od B1
do B3, została przypisana zawartość komórek z zakresu od A1 do A3.
Rysunek 6.36.
Program, za pomocą
którego będzie można
zakresowi komórek
od B1 do B3 przypisać
wartość komórek
od A1 do A3
Rysunek 6.37.
Arkusz z zestawem
danych
Rysunek 6.38.
W komórkach od B1
do B3 została wpisana
zawartość komórek
od A1 do A3
Przykład 108.
Napisz program, za pomocą którego będzie można kopiować zawartość obszaru od
A1 do A3 z arkusza 1. do obszaru od A1 do A3 arkusza 2.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz w nim program (rysunek 6.39). Pierwsza linia zawiera wymuszenie
deklaracji wszystkich zmiennych. W linii drugiej znajduje się nazwa
procedury. W linii trzeciej obiektowi, którym jest zakres komórek od B1
do B3, została przypisana zawartość komórek z zakresu od A1 do A3.
Rysunek 6.39. Program, za pomocą którego będzie można pomiędzy arkuszami 1. i 2. skopiować
wartość komórek od A1 do A3
Rysunek 6.40.
Arkusz 1. z zestawem
danych
Rozdział 6. Korzystanie z obiektów 203
Rysunek 6.41.
Arkusz 2. z zestawem
danych skopiowanych
z arkusza 1.
Przykład 109.
Napisz program, za pomocą którego będzie można nadawać komórkom z obszaru
od A1 do A3 kolor żółty.
1. Uruchom arkusz kalkulacyjny Excel. Sprawdź, jaki kolor mają komórki.
Domyślnie nie mają one żadnego wypełnienia.
2. Wyświetl okno Code (rysunek 4.3).
3. Wpisz w nim program (rysunek 6.42). Pierwsza linia zawiera wymuszenie
deklaracji wszystkich zmiennych. W drugiej linii znajduje się nazwa
procedury. W trzeciej linii obiektowi, którym jest zakres komórek od A1
do A3, zostaje przypisany kolor żółty.
Rysunek 6.42.
Komórki od A1 do A3
będą miały kolor żółty
Rysunek 6.43.
Komórki, których
kolor został zmieniony
204 VBA dla Excela 2016 PL. 222 praktyczne przykłady
W tabeli 6.1 zebrano stałe, których przypisanie właściwości Interior powoduje wy-
świetlenie tła komórki w określonym kolorze.
Przykład 110.
Napisz program, którego zastosowanie pozwoli nadawać komórkom z obszaru od A1
do A56 kolory z palety barw dostępnej za pośrednictwem właściwości ColorIndex.
1. Uruchom arkusz kalkulacyjny Excel. Sprawdź, jaki kolor mają komórki.
Domyślnie nie mają one żadnego wypełnienia.
2. Wyświetl okno Code (rysunek 4.3).
3. Wpisz w nim program:
Option Explicit
Sub przykład110()
Range("A1").Interior.ColorIndex = 1
Range("A2").Interior.ColorIndex = 2
Range("A3").Interior.ColorIndex = 3
Range("A4").Interior.ColorIndex = 4
Range("A5").Interior.ColorIndex = 5
Range("A6").Interior.ColorIndex = 6
Range("A7").Interior.ColorIndex = 7
Range("A8").Interior.ColorIndex = 8
Range("A9").Interior.ColorIndex = 9
Range("A10").Interior.ColorIndex = 10
Range("A11").Interior.ColorIndex = 11
Range("A12").Interior.ColorIndex = 12
Rozdział 6. Korzystanie z obiektów 205
Range("A13").Interior.ColorIndex = 13
Range("A14").Interior.ColorIndex = 14
Range("A15").Interior.ColorIndex = 15
Range("A16").Interior.ColorIndex = 16
Range("A17").Interior.ColorIndex = 17
Range("A18").Interior.ColorIndex = 18
Range("A19").Interior.ColorIndex = 19
Range("A20").Interior.ColorIndex = 20
Range("A21").Interior.ColorIndex = 21
Range("A22").Interior.ColorIndex = 22
Range("A23").Interior.ColorIndex = 23
Range("A24").Interior.ColorIndex = 24
Range("A25").Interior.ColorIndex = 25
Range("A26").Interior.ColorIndex = 26
Range("A27").Interior.ColorIndex = 27
Range("A28").Interior.ColorIndex = 28
Range("A29").Interior.ColorIndex = 29
Range("A30").Interior.ColorIndex = 30
Range("A31").Interior.ColorIndex = 31
Range("A32").Interior.ColorIndex = 32
Range("A33").Interior.ColorIndex = 33
Range("A34").Interior.ColorIndex = 34
Range("A35").Interior.ColorIndex = 35
Range("A36").Interior.ColorIndex = 36
Range("A37").Interior.ColorIndex = 37
Range("A38").Interior.ColorIndex = 38
Range("A39").Interior.ColorIndex = 39
Range("A40").Interior.ColorIndex = 40
Range("A41").Interior.ColorIndex = 41
Range("A42").Interior.ColorIndex = 42
Range("A43").Interior.ColorIndex = 43
Range("A44").Interior.ColorIndex = 44
Range("A45").Interior.ColorIndex = 45
Range("A46").Interior.ColorIndex = 46
Range("A47").Interior.ColorIndex = 47
Range("A48").Interior.ColorIndex = 48
Range("A49").Interior.ColorIndex = 49
Range("A50").Interior.ColorIndex = 50
Range("A51").Interior.ColorIndex = 51
Range("A52").Interior.ColorIndex = 52
Range("A53").Interior.ColorIndex = 53
Range("A54").Interior.ColorIndex = 54
Range("A55").Interior.ColorIndex = 55
Range("A56").Interior.ColorIndex = 56
End Sub
4. Uruchom program.
5. Wyświetl okno arkusza Excel.
6. W komórkach od A1 do A56 zostały wyświetlone próbki kolorów
(rysunek 6.44).
206 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 6.44.
Numer wiersza
odpowiada wartości
parametru ColorIndex
Przykład 111.
Napisz program, którego zastosowanie pozwoli nadawać komórkom z obszaru od A1
do A56 kolory z palety barw dostępnej za pośrednictwem właściwości ColorIndex.
Wykorzystaj instrukcję pętli.
1. Uruchom arkusz kalkulacyjny Excel. Sprawdź, jaki kolor mają komórki.
Domyślnie nie mają one żadnego wypełnienia.
2. Wyświetl okno Code (rysunek 4.3).
3. Wpisz w nim program (rysunek 6.45). Pierwsza linia zawiera wymuszenie
deklaracji wszystkich zmiennych. W drugiej linii nazwa procedury Dim wiersz
As Integer jest deklaracją zmiennej o nazwie wiersz typu Integer. Zmienna
będzie przechowywała wartości licznika pętli. W linii For wiersz=1 To 56
została zdefiniowana pętla. Przy pierwszym wykonaniu pętli wartość zmiennej
wiersz równa się 1. Ponieważ nie została określona wartość kroku pętli, jest
przyjmowana wartość domyślna, czyli 1. Wartość zmiennej wiersz jest
zwiększana o wartość 1 przy każdym wykonaniu pętli. Pętla jest wykonywana
ostatni raz, gdy wartość tej zmiennej osiągnie 56. Zmienna wiersz przybiera
wartości numeryczne od 1 do 56 i pełni funkcję licznika pętli. Po podstawieniu
do linii Cells(wiersz,1).Interior.ColorIndex=wiersz określa adres komórki
i przypisany jej kod koloru. W przykładzie stały numer ma kolumna. Numer
wiersza zaś jest określany przez zmienną wiersz i przy każdym wykonaniu
pętli jest zwiększany o jeden. Instrukcja Next wiersz powoduje zapętlenie.
W instrukcji Next nazwa licznika (wiersz) nie jest wymagana. Dzięki podaniu
nazwy licznika w instrukcji kończącej pętlę staje się ona bardziej czytelna.
Rozdział 6. Korzystanie z obiektów 207
Rysunek 6.45.
Zamiast definiowania
56 operacji
przypisania wartości,
jak w poprzednim
przykładzie,
można posłużyć się
instrukcją pętli
4. Uruchom program.
5. Wyświetl okno arkusza Excel.
6. W komórkach od A1 do A56 zostały wyświetlone próbki kolorów
(rysunek 6.46).
Rysunek 6.46.
Rezultat identyczny
jak na rysunku 6.44
osiągnięto znacznie
mniejszym nakładem
pracy
Przykład 112.
Napisz program, którego zastosowanie pozwoli nadawać czcionkom z obszaru od A1
do A56 kolory z palety barw dostępnej za pośrednictwem właściwości ColorIndex. Wy-
korzystaj instrukcję pętli.
1. Uruchom arkusz kalkulacyjny Excel. Wpisz tekst do komórek od A1 do A56
(rysunek 6.47).
Rysunek 6.47.
Domyślnie tekst
ma kolor czarny
Rysunek 6.48.
Program, którego
zastosowanie pozwoli
zamienić napisy
czarne w wielobarwne
4. Uruchom program.
5. Wyświetl okno arkusza Excel.
6. W komórkach od A1 do A56 zostały wyświetlone próbki kolorów (rysunek 6.49).
Rysunek 6.49.
Fragment arkusza
z rysunku 6.47
po zmianie kolorów
czcionki
gdzie:
x — przesunięcie w poziomie,
y — przesunięcie w pionie.
Przykład 113.
Napisz program, którego zastosowanie pozwoli przesuwać aktywną komórkę o jedną
komórkę w dół i trzy komórki w prawo, a następnie wstawić do niej tekst Zawartość.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz w nim program (rysunek 6.50). Pierwsza linia zawiera wymuszenie
deklaracji wszystkich zmiennych. W drugiej linii jest widoczna nazwa
procedury. W trzeciej linii znajduje się instrukcja zmiany aktywnej komórki.
Punktem odniesienia jest komórka A1. Właściwość Offset pozwala
na przesunięcie zaznaczenia o jedną komórkę w dół i trzy komórki w prawo.
Ciąg znaków widoczny po znaku równości zostanie wstawiony do zaznaczonej
komórki.
Rysunek 6.50.
Program, którego
zastosowanie pozwoli
na wstawienie napisu
do komórki, która nie
jest zaznaczona
3. Uruchom program.
4. Wyświetl okno arkusza Excel.
5. W komórce D2 pojawił się napis (rysunek 6.51).
Rysunek 6.51.
Jest zaznaczona komórka
A1. Treść została wpisana
do komórki odległej
o zadane przesunięcie
Przykład 100.
Napisz program, którego zastosowanie pozwoli przesuwać zaznaczenie komórki o jedną
komórkę w dół i trzy komórki w prawo.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz w nim program (rysunek 6.52). Pierwsza linia zawiera wymuszenie
deklaracji wszystkich zmiennych. W drugiej linii jest widoczna nazwa
procedury. W trzeciej linii znajduje się instrukcja wyboru zaznaczenia
komórki. Punktem odniesienia jest bieżąca komórka. Właściwość Offset(1, 3)
powoduje przesunięcie zaznaczenia względem aktualnego o jedną komórkę
w dół i trzy komórki w prawo. Metoda Offset pozwala na wybranie komórki
i oznaczenie jej pogrubioną ramką.
Rysunek 6.52.
Program, którego
zastosowanie pozwala
przesuwać zaznaczenie
komórki o jedną
komórkę w dół i trzy
komórki w prawo
Rysunek 6.53.
Komórka zaznaczona
domyślnie
Rysunek 6.54.
Jest zaznaczona
komórka D2
Podsumowanie
Obiektem jest element składowy aplikacji, np. komórka, zakres komórek,
wykres umieszczony na arkuszu, arkusz, skoroszyt.
Obiekty mają właściwości. Właściwość jest cechą obiektu. Właściwościami
zakresu komórek są: zawartość komórki, styl czcionki itp.
Metoda jest operacją wykonaną na obiekcie, umożliwia np. wpisanie tekstu
do komórki lub zaznaczenie zakresu komórek.
Rozdział 7.
Instrukcje warunkowe
Z tego rozdziału dowiesz się:
Do czego służy instrukcja skoku GoTo
Do czego służy konstrukcja If … Then
Jakiej instrukcji należy użyć, jeżeli w programie zachodzi konieczność
wyboru jednej z trzech opcji
Jaką pętlę trzeba zastosować, jeżeli w programie zachodzi konieczność
powtórzenia grupy instrukcji określoną liczbę razy
Jaką pętlę należy zastosować, gdy nie jest znana liczba powtórzeń pętli,
ale jest znany warunek, po spełnieniu którego pętla kończy działanie
Czym różnią się pętle Do Until i Do While
Instrukcje warunkowe nie są tworem sztucznym. Na co dzień również z nimi się spoty-
kamy. Znanym przykładem jest „Być albo nie być” (ang. To be, or not to be) — fraza
pochodząca z utworu Hamlet, książę Danii autorstwa Williama Shakespeare'a. Skoro
program ma być modelem rzeczywistości, w nim również powinna być możliwość wy-
konania operacji w zależności od warunków.
Porównywanie
Do porównywania wartości są wykorzystywane:
znak równości =,
znak mniejszości <,
znak większości >,
znak: mniejsze lub równe <=,
znak: większe lub równe >=,
znak: różny od <>.
Rozdział 7. Instrukcje warunkowe 215
Można porównywać nie tylko liczby, ale również teksty. Najczęściej do porównywania
tekstów są używane znaki: = oraz <>.
Wiele osób ma problemy z zapamiętaniem, po której stronie znaku > lub < powinna
znajdować się większa wartość. Problem ten miałem i ja. Był on szczególnie do-
kuczliwy, gdy wracałem do szkoły po wakacjach. Na szczęście nauczyciel matema-
tyki podpowiedział mi, jak zapamiętać, który znak co oznacza. < lub > przypomina
otwarty pysk psa. Pies jest sprytny i otwiera pysk w tę stronę, gdzie jest więcej kiełbasy.
Prawda, że proste?
Skok do etykiety
Instrukcja GoTo etykieta umożliwia skok do oznaczonego etykietą miejsca w pro-
gramie. Skok jest wykonywany zawsze, niezależnie od wprowadzonych parametrów,
wyliczonych wartości itp. Jest on zwany skokiem bezwarunkowym.
Instrukcja GoTo może być wykorzystana do skoku tylko wewnątrz procedury, w której
została użyta.
Przykład 117.
Napisz program, którego zastosowanie umożliwi sprawdzenie, czy wpisana liczba jest
całkowita. Jeśli będzie ona typu Integer, zostanie wyświetlona informacja o popraw-
ności danej. Jeśli wprowadzony znak będzie innego typu, zostanie wyświetlony ko-
munikat o błędzie.
216 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 7.1.
Program ze skokami
bezwarunkowymi
Rysunek 7.2.
Okno do
wprowadzania
danych. Zostanie
wpisana liczba
całkowita
Rysunek 7.3.
Program „wykonał
skok” do etykiety OK
(patrz rysunek 7.1)
Rysunek 7.4.
Okno do wprowadzania
danych. Zostanie
wpisana litera
Rysunek 7.5.
Program „wykonał
skok” do etykiety
Komunikat
(patrz rysunek 7.1)
Przykład 118.
Napisz program, którego zastosowanie pozwoli wykonywać dzielenie liczb wprowa-
dzonych do komórek A2 i B2 arkusza. Jeśli dane będą błędne, zostanie wyświetlony
komunikat o błędzie.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz z klawiatury kod (rysunek 7.6). W pierwszej linii znajduje się
wymuszenie deklaracji wszystkich zmiennych. W drugiej linii jest zapisana
nazwa procedury. W trzeciej linii umieszczono instrukcję obsługi błędów.
Gdy w programie zostanie stwierdzony błąd, np. jeśli użytkownik wprowadził
do określonych komórek wartości inne niż numeryczne lub jeśli dzielnik
ma wartość zero, program „przeskakuje” do etykiety Komunikat. Następuje
wyświetlenie okna komunikatu. Są w nim widoczne: opis błędu i tekst
sprawdź poprawność danych. W linii czwartej są deklarowane zmienne:
Dzielna, Dzielnik i Iloraz. W linii piątej zmiennej Dzielna jest przypisywana
zawartość komórki A2. W kolejnej linii zmiennej Dzielnik jest przypisywana
zawartość komórki B2. Wynik dzielenia jest wyświetlany w komórce C2.
Rysunek 7.6.
Program do
wyliczania ilorazu
zawartości komórek
A2 i B2 z prostą
obsługą błędów
Rysunek 7.7.
Poprawny
zestaw danych
Rysunek 7.8.
Poprawny zestaw
danych dał poprawny
wynik obliczeń
Rysunek 7.9.
Wynik obliczeń zostanie
zaktualizowany dopiero
po uruchomieniu programu
Wygląd arkusza, w którym komórki są wypełniane przez programy VBA, może być
nieco mylący (rysunek 7.9). Zawartość komórki wyliczanej przez formułę jest aktu-
alizowana po każdej zmianie danych. Aby w komórce wypełnianej przez program VBA
został zaktualizowany wynik, należy uruchomić program.
Rysunek 7.10.
Komunikat
informujący o tym,
że dzielnik ma
wartość 0
Rysunek 7.11.
Jako dzielną
wpisano literę
220 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 7.12.
Informacja
o niepoprawnym
typie danej
Rysunek 7.13.
Program z przykładu
118. z usuniętym
modułem do obsługi
błędów
Przykład 120.
Napisz program, którego zastosowanie pozwoli wyświetlać kolejno okna dialogowe do
wpisania: imienia, nazwiska i symbolu działu. Wprowadzane dane będą umieszczane
w kolejnych komórkach tego samego wiersza arkusza Excela. Po wpisaniu danych
jednego pracownika program powinien „zapytać”, czy dane następnej osoby będą wpi-
sywane.
Rozdział 7. Instrukcje warunkowe 221
Rysunek 7.14.
Program, którego
zastosowanie ułatwia
wpisywanie danych
do arkusza
Rysunek 7.15.
Opisy kolumn
Rysunek 7.16.
Okno dialogowe pełni
funkcję formularza do
wprowadzania danych
Rysunek 7.17.
Imię zostało
wstawione do kolumny
przeznaczonej na
imiona. W oknie
dialogowym należy
wpisać nazwisko
Rysunek 7.18.
Jan Kowalski
pracuje w dziale
socjalno-bytowym,
w skrócie SB
Rysunek 7.19.
Program „dotarł”
do szóstej instrukcji
od końca (patrz
rysunek 7.14)
Rysunek 7.20.
Program „wykonał
skok” na początek
pętli i wykonuje ją
z wartością zmiennej
zwiększoną o 1
Rysunek 7.21.
Dane pracowników
zostały wpisane.
Można zakończyć
pracę
Rysunek 7.22.
Dane zostały
wprowadzone
do arkusza
Podejmowanie decyzji
Jeżeli w programie zachodzi konieczność sprawdzenia warunku i wykonania procedury,
gdy warunek jest spełniony, należy zastosować konstrukcję If … Then. Jej podstawowa
składnia jest następująca:
If warunek
Then
Instrukcje_wykonywane_jeśli_warunek_został_spełniony
Przykład 122.
Napisz program, który na podstawie wpisanej temperatury ciała będzie „nakazywał” pój-
ście do pracy lub do lekarza. Jako temperaturę maksymalną, dopuszczalną dla uznania
człowieka za zdrowego, przyjmij 37,5°C.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz z klawiatury kod (rysunek 7.23). W pierwszej linii znajduje się
wymuszenie deklaracji wszystkich zmiennych. W drugiej linii typ zmiennej
i jest zadeklarowany jako String. Można również zadeklarować typ Long.
W drugim przypadku wpisanie litery spowoduje wyświetlenie komunikatu
o błędzie. W linii trzeciej jest zapisana nazwa procedury. Zastosowanie instrukcji
i = InputBox("Wpisz temperaturę") da w efekcie wyświetlenie okna,
w którym można wpisać wysokość temperatury ciała. Wpisana wartość
zostanie przypisana zmiennej i. W kolejnej linii jest sprawdzana wartość
zmiennej i. Jeżeli jest ona mniejsza niż 37,5 lub równa 37,5, jest wyświetlane
okno z komunikatem Do roboty!. W pozostałych przypadkach jest wyświetlane
okno z komunikatem Idź do lekarza!. Program trzeba skonstruować tak, aby
instrukcja warunkowa po wprowadzeniu niepoprawnej wartości generowała
prawidłowy komunikat, lub trzeba dodać procedurę obsługi błędów.
3. Uruchom program.
4. Po wyświetleniu okna z prośbą o wpisanie temperatury wpisz liczbę –10.
5. Naciśnij klawisz Enter.
6. Choć wartość jest bezsensowna, program „uznał”, że pacjent jest zdrów.
226 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 7.24.
Wpisanie zamiast temperatury znaku @
również powoduje wygenerowanie
komunikatu o potrzebie konsultacji
z lekarzem. Słusznie! Może to bowiem
oznaczać, że pacjent jest tak chory,
że nie odróżnia liter od cyfr!
Przykład 112.
Przy ocenie otyłości jest istotny stosunek wagi do wzrostu człowieka. Te wartości wiąże
współczynnik BMI (ang. Body Mass Index — współczynnik masy ciała). Jest on wy-
liczany jako iloraz wagi wyrażonej w kilogramach do podniesionego do kwadratu
wzrostu wyrażonego w metrach. Na podstawie wartości współczynnika można określić,
czy waga człowieka jest prawidłowa (tabela 7.1).
Rysunek 7.25.
Komputerowy
„Strażnik wagi”
3. Uruchom program.
4. Po wyświetleniu okna z prośbą o wpisanie wagi wpisz swoją wagę
w kilogramach (rysunek 7.26).
Rysunek 7.26.
Waga ciała
Rozdział 7. Instrukcje warunkowe 229
Rysunek 7.27.
Wzrost należy wpisać,
używając przecinka
do oddzielenia
pełnych metrów
od centymetrów
Rysunek 7.28.
Program jest
bezlitosny
Pokazany w przykładzie 127. program jest wykonywany bardzo szybko nawet przez
komputery o niewielkich możliwościach obliczeniowych. W praktyce możesz spo-
tkać się z programami, których zastosowanie pozwala sprawdzić więcej warunków
lub działać w pętli. W takiej sytuacji warto przeanalizować prawdopodobieństwo
wystąpienia poszczególnych wyników. Zastosowanie programu będzie pozwalało
sprawdzić warunki zapisane w instrukcji Select Case aż do napotkania pierwszego,
który zostanie spełniony. Im będzie on bliżej początku programu, tym czas poświęcony
na wykonanie instrukcji będzie krótszy.
Przykład 129.
Napisz program, którego zastosowanie w zależności od godziny będzie prowadziło do
wyświetlenia powitania zgodnie z tabelą 7.3.
Rysunek 7.29.
Program, którego
zastosowanie
prowadzi do
wyświetlania
powitania o treści
zależnej od pory dnia
3. Uruchom program.
Rozdział 7. Instrukcje warunkowe 231
Rysunek 7.30.
Godzina 13.08, czyli…
Good afternoon!
Wszystko się zgadza
gdzie:
licznik — wymagany. Zmienna liczbowa przechowująca informacje o liczbie
wykonanych pętli.
start — wymagany. Początkowa wartość licznika.
krok — opcjonalny. Wartość, o którą będzie zwiększany licznik przed każdym
wykonaniem pętli. Jeżeli ta wartość nie zostanie podana, domyślnie będzie
przyjmowana wartość jeden.
instrukcje — opcjonalne. Jedna instrukcja lub więcej instrukcji zawartych
pomiędzy liniami For oraz Next. Są one wykonywane określoną przez parametry
pętli liczbę razy.
Przykład 130.
Napisz program, którego zastosowanie pozwoli wypełniać obszar o wymiarach 100×100
komórek arkusza losowo wybranymi kolorami.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz z klawiatury kod (rysunek 7.31). W pierwszej linii znajduje się wymuszenie
deklaracji wszystkich zmiennych. W drugiej linii zostały zadeklarowane typy
dwóch zmiennych: w oraz k. Zmienna w będzie przechowywać numer wiersza,
a zmienna k — numer kolumny. Wartości obu będą należeć do liczb całkowitych.
232 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 7.31.
Program do losowego
kolorowania
komórek arkusza
Rysunek 7.33. Każde uruchomienie programu prowadzi do wygenerowania innego układu kolorów
Przykład 132.
Napisz program, którego zastosowanie pozwoli generować losowo 6 spośród 49 liczb.
Liczby muszą być całkowite i zawierać się w przedziale od 0 do 49. Po wygenerowaniu
mają być wpisywane w kolejnych komórkach wiersza pierwszego.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz z klawiatury kod (rysunek 7.34). W pierwszej linii znajduje się wymuszenie
deklaracji wszystkich zmiennych. W linii drugiej został zadeklarowany typ
zmiennej l. Zmienna l będzie przechowywać kolejny numer wygenerowanej
liczby oraz numer komórki w wierszu. Wartości powinny należeć do liczb
naturalnych. Instrukcja Randomize uruchamia generator liczb losowych. Pętla służy
do sześciokrotnego generowania liczby. Instrukcja Cells(1, l) = Int(Rnd * 49
określa położenie komórki. Wykorzystanie funkcji Rnd prowadzi do wygenerowania
liczby losowej. Liczba losowa należy do przedziału od 0 do 1. Musi zostać
pomnożona przez 49, aby wynik należał do przedziału od 0 do 49. Po wypełnieniu
6 kolumn w danym wierszu następuje zakończenie programu.
3. Uruchom program.
4. Wyświetl arkusz Excela (rysunek 7.35).
234 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 7.34.
Program do losowania
sześciu liczb
z przedziału od 0 do 49
Rysunek 7.35.
Zestaw
wygenerowanych liczb
Przykład 133.
Napisz program, którego zastosowanie pozwoli generować losowo 6 spośród 49 liczb.
Liczby muszą być całkowite i zawierać się w przedziale od 1 do 49. Po wygenerowaniu
mają być wpisywane w komórkach kolejnych wierszy. Jednorazowe uruchomienie
programu ma spowodować wygenerowanie sześciu zestawów liczb.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz z klawiatury kod (rysunek 7.36). W pierwszej linii znajduje się wymuszenie
deklaracji wszystkich zmiennych. W drugiej linii został zadeklarowany typ
zmiennej l oraz w. Zmienna l będzie przechowywać kolejny numer
wygenerowanej liczby oraz numer komórki w wierszu. Wartości powinny
należeć do liczb naturalnych. Zmienna w będzie przechowywać kolejny numer
wiersza. Wartości powinny należeć do liczb naturalnych. Instrukcja Randomize
uruchamia generator liczb losowych. Pętla służy do sześciokrotnego
generowania liczby. Instrukcja Cells(w, l) = Int(Rnd * 49)określa
położenie komórki. Wykorzystanie funkcji Rnd prowadzi do wygenerowania
liczby losowej. Liczba losowa należy do przedziału od 0 do 1. Aby nie uzyskać
liczby 0, do wyniku jest dodawana liczba 1. Liczba losowa powinna zostać
pomnożona przez 48, aby wynik należał do przedziału od 1 do 49.
Po wypełnieniu 6 kolumn w danym wierszu następuje wykonanie kolejnej
pętli programu. Wygenerowanie sześciu kolumn zawierających po sześć liczb
powoduje zakończenie działania programu.
Rysunek 7.36.
Program do losowania
sześciu zestawów
po sześć liczb
z przedziału od 1 do 49
Rozdział 7. Instrukcje warunkowe 235
3. Uruchom program.
4. Wyświetl arkusz Excela (rysunek 7.37).
Rysunek 7.37.
Zestawy
wygenerowanych liczb
Przykład 134.
Napisz program, którego zastosowanie pozwoli do komórki o losowym adresie z prze-
działu od A1 do E5 wpisywać liczbę 999. Wyświetl okno Code (rysunek 4.3).
1. Wpisz z klawiatury kod (rysunek 7.38). W pierwszej linii znajduje się
wymuszenie deklaracji wszystkich zmiennych. W linii drugiej został
zadeklarowany typ zmiennej l oraz w. Będą one przechowywać numery
komórek. Wartości powinny należeć do liczb naturalnych. Instrukcja
Randomize uruchamia generator liczb losowych. W wyniku zastosowania
instrukcji Cells(w, l) = 999 komórce o losowym adresie zostaje przypisana
liczba 999. Liczba losowa należy do przedziału od 0 do 1. Aby rozciągnąć
przestrzeń adresową na pięć komórek, liczba losowa powinna zostać
pomnożona przez 5.
Rysunek 7.38.
W wyniku zastosowania
programu do losowo
wybranej komórki
z przedziału od A1
do E5 zostaje wpisana
liczba 999
Rysunek 7.39.
Senny koszmar każdego
użytkownika Excela
to losowo wpisane
błędne dane
236 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 7.40.
Ośmiowymiarowy wektor
binarny, czyli bajt
Przykład 136.
Napisz program, którego zastosowanie pozwoli sumować pierwsze n liczb naturalnych.
Liczbę n należy wpisać po uruchomieniu programu.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz z klawiatury kod (rysunek 7.41). W pierwszej linii znajduje się
wymuszenie deklarowania zmiennych. W drugiej linii zapisano nazwę
procedury. Zmienna Suma będzie przechowywała wynik. Została ona
zadeklarowana jako liczba podwójnej precyzji z zapisem zmiennoprzecinkowym.
Zmienne Licznik i n będą przechowywały liczbę zsumowanych liczb oraz
liczbę liczb do zsumowania. Zostały one zadeklarowane jako liczby całkowite.
W wyniku zastosowania instrukcji n = InputBox("Ile liczb naturalnych
zsumować") zostaje wyświetlone okno dialogowe z prośbą o wpisanie, ile liczb
ma zostać zsumowanych. W pętli odbywa się sumowanie n liczb naturalnych.
Wynik jest wyświetlany dzięki instrukcji MsgBox "Suma wynosi: " & Suma.
Rysunek 7.41.
Program
z wykorzystaniem
pętli For… Next
3. Uruchom program.
4. Po wyświetleniu okna z prośbą o wpisanie, ile liczb ma być sumowanych,
wpisz 3.
5. Kliknij przycisk OK.
6. Został wyświetlony wynik (rysunek 7.42).
Rozdział 7. Instrukcje warunkowe 237
Rysunek 7.42.
Wynik sumowania
liczb 1, 2 i 3
Rysunek 7.43.
Wynik sumowania
liczb od 1 do 100
Pętle zagnieżdżone
Instrukcją znajdującą się wewnątrz pętli może być inna pętla. W taki sposób powstają
pętle zagnieżdżone.
Przykład 137.
Napisz program, którego zastosowanie pozwoli w komórki trójwymiarowej tablicy o wy-
miarach 3×3×3 wpisywać liczbę 1. Po każdym wpisie na ekranie będzie wyświetlany
numer komórki.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz z klawiatury kod (rysunek 7.44). W programie zadeklarowano
trójwymiarową tablicę o nazwie Tablica. Ma ona wymiary 3×3×3.
Zadeklarowano również trzy zmienne typu: Integer: X, Y i Z. W kolejnych
liniach programu znajdują się pierwsze linie pętli operujących na zmiennych:
X, Y oraz Z. Gdy wartości zmiennych X, Y i Z zostaną ustalone, do komórki
o współrzędnych X, Y i Z będzie podstawiana liczba 1. W kolejnej instrukcji
następuje wyświetlenie komunikatu ze współrzędnymi komórki.
Tablica jest tworem zadeklarowanym i powstałym w pamięci komputera.
238 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 7.44.
Program, którego
zastosowanie pozwala
generować tablicę
o 27 elementach
i wyświetlać zawartość
dowolnej komórki
Rysunek 7.46.
Jako druga została
odwiedzona komórka
o współrzędnych 112
Rozdział 7. Instrukcje warunkowe 239
Rysunek 7.47.
Współrzędne
ostatniej komórki
Rysunek 7.51.
Do komórki
o współrzędnych 113
została wpisana
liczba 1
Wykonaj program ponownie. Sprawdź, czy można wyświetlić zawartość komórki znaj-
dującej się na zewnątrz tablicy (np. o współrzędnych 4, 1, 1)?
Tym, co odróżnia tablice VBA od arkusza Excela, jest liczba wymiarów. Arkusz Excela
posiada zawsze dwa wymiary określone przez numer wiersza oraz numer kolumny.
Aby przeanalizować np. wysokość sprzedaży oraz kosztów poniesionych w każdym
z dwunastu miesięcy roku, można użyć 24 zmiennych: 12 do opisania sprzedaży
(jedna zmienna na każdy miesiąc) oraz 12 zmiennych opisujących koszty (również
jedna na każdy miesiąc). Problem byłby poważniejszy, gdyby obliczenia wymagały
danych z kilku lat, a dodatkowo w ujęciu dziennym. Oczywiście byłoby to praktycz-
nie niewykonalne, a nawet jeśli ktoś uporałby się z zadeklarowaniem wszystkich
tych zmiennych, to praca z kodem, w którym znajdowałoby się tysiące niemal iden-
tycznych zmiennych, byłaby koszmarem, a niepopełnienie żadnego błędu graniczy-
łoby z cudem.
Właśnie w takich sytuacjach należy sięgnąć po tablice. Zamiast wszystkich zmien-
nych liczbowych można byłoby zadeklarować dwie zmienne tablicowe: przychody
oraz koszty. Każda zawierałaby 12 wierszy i 1 kolumnę (lub odwrotnie). W sytuacji,
gdyby dane miały obejmować kilka lat, wystarczyłoby po prostu dodać nową kolumnę
dla każdego nowego roku.
Deklaracja tablicy ma postać:
Dim tablica (x1 To y1, ..., xn To yn) As typ_danych
Tablica ma tyle wymiarów, ile wyrażeń xn To yn jest zawartych w nawiasie po nazwie
tablicy.
Pętlę Do While można stosować wówczas, gdy nie jest znana liczba powtórzeń pętli,
ale jest znany warunek, po spełnieniu którego pętla kończy działanie.
lub:
Do
[Instrukcje]
[Exit Do]
[instrukcje]
Loop [While warunek]
Przykład 139.
Napisz program, którego zastosowanie polega na oczekiwaniu na wpisanie liczby, a na-
stępnie ― wyświetlaniu jej pierwiastka kwadratowego. Obliczenia nie zostaną wyko-
nane, gdy liczba nie zostanie wprowadzona. Warunek jest sprawdzany na końcu pętli.
Rysunek 7.52.
Program, który
najpierw liczy,
a potem sprawdza
3. Uruchom program.
4. Po wyświetleniu okna z prośbą o podanie liczby wpisz 3 (rysunek 7.53).
Rysunek 7.53.
Okno do wprowadzania
danej
Rysunek 7.54.
Wynik obliczeń
Rysunek 7.55.
Komunikat o błędzie
Rozdział 7. Instrukcje warunkowe 243
Podsumowanie
Instrukcja GoTo etykieta umożliwia skok do oznaczonego etykietą miejsca
w programie. Skok jest wykonywany zawsze, niezależnie od wprowadzonych
parametrów, wyliczonych wartości itp. Jest on zwany skokiem bezwarunkowym.
Sprawdzanie warunków musi odbywać się przy wykorzystaniu innej
instrukcji. Instrukcja GoTo jest używana głównie do obsługi błędów
i rozgałęziania programów.
Jeżeli w programie zachodzi konieczność sprawdzenia warunku i wykonania
procedury, gdy warunek jest spełniony, należy zastosować konstrukcję If … Then.
Jeżeli w programie zachodzi konieczność dokonania wyboru jednej spośród
trzech lub więcej opcji, należy zastosować konstrukcję Select Case.
Jeżeli w programie zachodzi konieczność powtórzenia grupy instrukcji
określoną liczbę razy, należy zastosować pętlę For ... Next.
Pętlę Do While można stosować wówczas, gdy nie jest znana liczba powtórzeń
pętli, ale znany jest warunek, po spełnieniu którego pętla kończy działanie.
244 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rozdział 8.
Elementy sterujące
arkusza
Z tego rozdziału dowiesz się:
Jak utworzyć formularz
Jak na formularzu umieszczać obiekty
Jak przypisywać właściwości obiektom
Jeżeli wprowadzanie danych odbywa się z klawiatury, może być źródłem błędów. Naj-
częściej ich przyczyny są dwie.
Pierwszą z nich są literówki. Człowiek może domyślić się, co miał oznaczać dany wy-
raz. Komputer tego nie zrobi.
Aby uniknąć takich sytuacji, autor programu nie powinien dawać każdemu użytkow-
nikowi możliwości dopisywania nowych nazw. Powinien jedynie zezwolić na wybie-
ranie nazw spośród dostępnych.
Pole listy
Pole listy zawiera listę pozycji, które użytkownik może wybrać. Jest ono symbolizo-
wane przez ikonę pokazaną na rysunku 8.1.
Rysunek 8.1.
Ikona pola listy
Pozycje widoczne w polu listy można wstawić na dwa sposoby: określając zakres za-
wierający pozycje lub posługując się instrukcjami języka VBA.
Przykład 142.
Wstaw do projektu pole listy.
1. Wyświetl okno Code (rysunek 4.3).
2. Wybierz polecenie Insert/UserForm (rysunek 8.2).
Rysunek 8.2.
Menu Insert umożliwia
wstawienie do
projektu formularza
Rysunek 8.3.
Ikona umożliwiająca
wstawienie pola listy
Rysunek 8.4.
Położenie pola listy
jest wskazywane przez
przerywaną linię
Rysunek 8.5.
Wyróżniony obszar
wskazuje, gdzie
będzie się znajdowało
pole listy
Jeżeli pasek Toolbox jest ukryty, kliknij ikonę Toolbox (rysunek 8.6).
Rysunek 8.6.
Ikona Toolbox
Przykład 143.
Wyświetl kod pola listy.
1. Umieść w projekcie pole listy (patrz przykład 127.).
2. Kliknij prawym przyciskiem myszy pole listy.
3. Z podręcznego menu wybierz polecenie View Code (rysunek 8.7).
Rysunek 8.7.
Menu podręczne
pola listy
248 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 8.8.
Kod, którego
zastosowanie pozwala
na wyświetlenie
pola listy
Aby ukryć okno kodu, kliknij przycisk Close Window (rysunek 8.9).
Rysunek 8.9.
Przycisk, którego
kliknięcie powoduje
zakmnięcie okna
Przykład 144.
Napisz program, którego zastosowanie doprowadzi do wyświetlenia formularza na
ekranie.
1. Wyświetl okno Code (rysunek 4.3).
2. Wpisz z klawiatury kod (rysunek 8.10).
Rysunek 8.10.
Program, którego
zastosowanie prowadzi
do wyświetlenia na
ekranie formularza
UserForm
3. Uruchom program.
4. Na ekranie została wyświetlona formatka arkusza (rysunek 8.11).
Rysunek 8.11.
Okno arkusza
z formatką
Rozdział 8. Elementy sterujące arkusza 249
Przykład 145.
Rysunek 8.12.
Aby wstawić do
programu okno
formularza, należy
wybrać polecenie
Insert/UserForm
Rysunek 8.13.
Pole listy można
wstawić
po kliknięciu
ikony ListBox
Rysunek 8.14.
Położenie pola listy
wskazuje linia
przerywana
Rysunek 8.15.
Położenie i rozmiar
pola listy można
zmienić,
przeciągając
prostokąty
znajdujące się
w narożnikach
i na środkach
krawędzi
Rysunek 8.16.
Arkusz z wypełnionymi
komórkami A1 i A2
Rysunek 8.17.
Pole listy musi być
wybrane, aby można
było modyfikować
jego właściwości
Rysunek 8.18.
Pole, w którym można
wpisać adres obszaru
zawierającego dane
do wyświetlenia
w polu listy
Rysunek 8.19.
Tekst wpisany
w arkuszu
kalkulacyjnym
został wyświetlony
w polu listy
Rysunek 8.20.
Formularz
użytkownika
z polem listy
Rysunek 8.21.
Ikona pola kombi
Pozycje widoczne w polu kombi można wstawiać na dwa sposoby: określając zakres
zawierający pozycje lub posługując się instrukcjami języka VBA.
Przykład 146.
Napisz program, którego zastosowanie doprowadzi do wyświetlenia w polu kombi dwóch
pozycji: Sekretariat i Sklep. Pozycje powinny być wpisane w arkuszu kalkulacyjnym.
1. Wyświetl arkusz Excela.
2. W komórkach od A1 do A2 wpisz Sekretariat, Sklep (rysunek 8.22).
Rysunek 8.22.
Dane do utworzenia
pola kombi
Rysunek 8.23.
Pole kombi
umieszczone
na formatce
Rozdział 8. Elementy sterujące arkusza 253
Rysunek 8.24.
W dolnej części okna będą
wyświetlane właściwości
pola kombi
Rysunek 8.25.
Parametr RowSource
określa zakres
komórek arkusza
wyświetlanych
w polu kombi
Rysunek 8.26.
Pole kombi
z pozycjami
wczytanymi
ze wskazanego
zakresu arkusza
Rysunek 8.27.
Nad kreską pierwszą
od góry jest widoczny
kod procedury, której
zastosowanie
prowadzi
do wyświetlenia
formularza
Rysunek 8.28.
Formularz
z polem kombi
Pasek Toolbox
i elementy sterujące arkusza
Z przykładów opisanych w tym rozdziale wynika, że sposób postępowania w celu
umieszczenia elementu na formatce jest podobny w wielu przypadkach. Nie zależy on
w znacznym stopniu od typu elementu. Największą trudność może sprawić początkują-
cemu programiście odszukanie odpowiedniej ikony na pasku Toolbox. W pokonaniu
tej trudności może okazać się pomocna tabela 8.1. Pokazano w niej, jaki element
pojawi się na formatce po przeciągnięciu na nią ikony z paska Toolbox.
Właściwości
Umieszczenie na formatce elementu sterującego to dopiero początek pracy związanej
z umożliwieniem komunikowania się z programem. Elementowi sterującemu należy
przypisać wartości, które będzie można wybierać za jego pośrednictwem, określić
czcionkę używaną do opisów, kolory tła i obramowania, domyślną wartość itd. Wła-
ściwości elementu można zdefiniować za pośrednictwem okna Properties. Okno jest
wyświetlane po lewej stronie okna edytora VBA. Pola widoczne w oknie Properties
są zależne od elementu (rysunek 8.29 i 8.30).
Aby zmienić właściwość, wystarczy kliknąć pozycję w oknie Properties i wpisać lub
wybrać nową. Niektóre właściwości mogą przyjmować tylko skończoną liczbę wartości.
Po kliknięciu takiej właściwości jest wyświetlana lista, z której można wybierać wła-
ściwości (rysunek 8.31).
Rozdział 8. Elementy sterujące arkusza 257
Rysunek 8.31.
Lista dostępnych
właściwości
Inne właściwości pozwalają np. na wybranie elementu graficznego (rysunek 8.32) lub
wpisywanie dowolnych wartości (rysunek 8.33).
Rysunek 8.32. Kliknięcie pola z trzema kropkami spowodowało wyświetlenie okna umożliwiającego
załadowanie obrazka
Rysunek 8.33.
Właściwość Height
może mieć dowolną
wartość
Z paska Toolbox można wybrać piętnaście kontrolek. Każda z nich ma ponad trzy-
dzieści właściwości. Aby dowiedzieć się, jakie znaczenie ma właściwość, należy sko-
rzystać z okna pomocy.
258 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Przykład 147.
Wyświetl informację o właściwości AutoSize kontrolki CommandButton.
1. Uruchom arkusz Excela.
2. Wyświetl okno edytora VBA.
Rysunek 8.34.
Formularz z kontrolką
CommandButton
Rysunek 8.35.
W oknie Properties są
wyświetlane właściwości
kontrolki CommandButton
6. Zaznacz właściwość AutoSize (rysunek 8.36).
Rysunek 8.36.
Fragment
okna Properties
z zaznaczoną
właściwością AutoSize
Podsumowanie
Aby na arkuszu utworzyć formularz, należy w oknie edytora VBA wybrać
polecenie Insert/UserForm.
Aby na formatce pojawił się obiekt, należy przeciągnąć go z okna Toolbox.
Aby przypisać obiektowi właściwości, trzeba kliknąć go prawym przyciskiem
myszy i z menu podręcznego wybrać polecenie Properties, a następnie
zastąpić ustawienia domyślne własnymi.
Rozdział 9.
Zdarzenia
Z tego rozdziału dowiesz się:
Jak nazywa się zdarzenie, które zachodzi po raz pierwszy
Jak nazywa się zdarzenie polegające na wprowadzeniu w arkuszu zmiany
przez użytkownika
Jak nazywa się właściwość określająca treść opisu widocznego na przycisku
Przykład 148.
W edytorze VBA wprowadź kod procedury obsługi zdarzenia polegającego na otwieraniu
skoroszytu.
1. Uruchom arkusz Excela.
2. Wyświetl okno edytora Visual Basic.
3. W polu eksploratora projektu widocznego w oknie Microsoft Visual Basic
for Applications kliknij pozycję Ten_skoroszyt (rysunek 9.1).
262 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 9.1.
Okno VBA
z zaznaczoną pozycją
Ten_skoroszyt
Rysunek 9.2.
Workbook znajduje się
na liście obiektów
6. W oknie Ten skoroszyt (Code) rozwiń znajdującą się po prawej stronie listę procedur.
7. Zaznacz na niej Open (rysunek 9.3).
Rysunek 9.3.
Lista procedur
z zaznaczoną
pozycją Open
8. W oknie Ten skoroszyt (Code) pojawił się szkielet kodu obsługi procedury
(rysunek 9.4). Pierwsza linia stanowi początek procedury, która jest uruchamiana
podczas otwierania skoroszytu. Ostatnia linia informuje program, że za nią nie
ma już instrukcji do wykonywania. Instrukcje wskazujące, co komputer ma
zrobić podczas otwierania skoroszytu, należy wpisać pomiędzy liniami:
rozpoczynającą i kończącą procedurę.
Rysunek 9.4. Linie kodu procedury powinny znajdować się pomiędzy linią z nazwą procedury a linią
kończącą procedurę End Sub
Rozdział 9. Zdarzenia 263
Rysunek 9.5.
Okno z rozwiniętą
listą procedur
obsługi zdarzeń
Pięć zdarzeń wymienionych w tabeli 9.1 nosi nazwy rozpoczynające się od słowa
Before. Są to zdarzenia, do których jeszcze nie doszło. Do tej grupy należy np.
BeforeClose. Dotyczy ono sytuacji, gdy arkusz nie był jeszcze zapisywany. Po klik-
nięciu ikony oznaczonej dyskietką zostanie wyświetlone okno, w którym można po-
dać zarówno lokalizację, jak i nazwę pliku.
Przykład 149.
Napisz program, którego zastosowanie pozwoli przed zakończeniem pracy ze skoro-
szytem wyświetlać komunikat Dziękuję za skorzystanie z programu XXX.
1. Uruchom arkusz Excela.
2. Wyświetl okno edytora VBA.
3. W oknie Project - VBA Project dwukrotnie kliknij pozycję Ten_skoroszyt
(rysunek 9.6).
Rozdział 9. Zdarzenia 265
Rysunek 9.6.
Procedura
będzie związana
ze skoroszytem
(obiekt Ten_skoroszyt)
Rysunek 9.7.
Należy wybrać z listy
obiekt Workbook
Rysunek 9.8.
Procedurę Deactivate
należy wybrać z listy
znajdującej się po
prawej stronie okna
Rysunek 9.9.
Procedura
przeznaczona
do usunięcia
Rysunek 9.10.
W cudzysłowie
wpisano tekst
wyświetlany
w oknie komunikatu
Rysunek 9.11.
Okno komunikatu
Przykład 151.
Napisz program, którego zastosowanie doprowadzi do wyświetlenia adresu zmodyfi-
kowanego zakresu komórek skoroszytu.
1. Uruchom arkusz Excela.
2. Wyświetl okno edytora VBA.
3. W oknie Project - VBA Project dwukrotnie kliknij pozycję Ten_skoroszyt
(rysunek 9.12).
Rysunek 9.12.
Jak w poprzednich
przykładach
— rozpocznij
od wskazania
skoroszytu, którego
będzie dotyczył
program
Rysunek 9.13.
Lista Object
Rysunek 9.14.
Z listy procedur
należy wybrać tę,
która uaktywni
się po zmianie
zawartości arkusza
— SheetChange
Rysunek 9.17. Wykonanie procedury doprowadzi do wyświetlenia okna z informacją o modyfikacji zakresu
Rysunek 9.18.
W oknie komunikatu
został wyświetlony
adres zmodyfikowanej
komórki
Rysunek 9.19.
Okno komunikatu
z informacją
o zakresie
zmodyfikowanych
komórek
Rysunek 9.20.
Fragment listy
procedur obsługi
zdarzeń mających
zastosowanie
do arkusza
Przykład 153.
Napisz program, którego zastosowanie pozwoli wyświetlić adres zmodyfikowanego
zakresu komórek arkusza.
1. Uruchom arkusz Excela.
2. Pracę rozpocznij od przygotowania danych, które będą monitorowane przez
procedurę. W komórce A1 wpisz 1.
3. W komórce A2 wpisz 2.
4. W komórce A3 wpisz =suma(A1;A2) (rysunek 9.21).
Rysunek 9.21.
Arkusz
z przygotowanym
zestawem danych
Rysunek 9.22.
Obiekt Arkusz1
Rysunek 9.24. Zastosowanie procedury doprowadzi do wyświetlenia okna z adresem zakresu Target
Rysunek 9.25.
Choć zostały
zmienione komórki
A1 i A3, jest
wyświetlana
tylko informacja
o komórce A1
Na szczęście, aby sprawnie napisać program w Visual Basicu, nie trzeba się uczyć na
pamięć nazw obiektów oraz ich właściwości i metod.
272 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Przykład 155.
Znajdź obiekty obsługujące w arkuszu Excel zdarzenie DoubleClick.
1. Uruchom arkusz Excela.
2. Wyświetl okno edytora VBA.
3. Naciśnij klawisz F2. Została wyświetlona przeglądarka obiektów.
4. Z listy aplikacji (w lewym górnym rogu okna) wybierz Excel.
Rozdział 9. Zdarzenia 273
5. W polu Search Text (pod listą aplikacji) wpisz doubleclick (rysunek 9.26).
Rysunek 9.26.
Kryteria wyszukiwania
Rysunek 9.27.
Lista obiektów Excela
reagujących na
podwójne kliknięcie
Nazwy zdarzenia, obiektu lub składnika należące do różnych bibliotek mogą być
identyczne. Różnią się one spełnianą funkcją.
Komunikacja z programem
Pisząc program, musisz z jednej strony wyobrażać sobie, co ma lub może pojawić się na
ekranie. Z drugiej strony musisz się zastanowić, jakie informacje zdarzenia przekazują
do programu.
Przykład 157.
Napisz program, którego zastosowanie pozwoli wyświetlić formularz z dwoma przyci-
skami: Ziemniaki i Kasza. Po kliknięciu przycisku zostanie wyświetlona nazwa wy-
branej potrawy, a formularz zostanie zamknięty.
1. Uruchom arkusz Excela.
2. Wyświetl okno edytora VBA.
3. Wstaw do projektu formularz użytkownika. Wybierz polecenie Insert/UserForm.
4. Przeciągnij z paska Toolbox na formularz (formatkę) dwa przyciski
CommandButton (rysunek 9.28).
Rysunek 9.28.
Formularz z dwoma
przyciskami
Rysunek 9.29.
Na liście będą
wyświetlane
właściwości
klawisza
CommandButton1
Rozdział 9. Zdarzenia 275
Rysunek 9.30.
Na przycisku będzie
widoczny napis
Ziemniaki
Rysunek 9.31.
Na przycisku
będzie widoczny
napis Kasza
Rysunek 9.32.
Z menu podręcznego
można wybrać
polecenie,
pozwalające
wyświetlić
kod programu
276 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 9.33.
Procedury
odpowiedzialne
za obsługę
zdarzenia kliknięcia
12. Uzupełnij szkielet kodu procedury dwiema liniami kodu (rysunek 9.34).
Pierwsza linia odpowiada za wyświetlenie komunikatu znajdującego się
w cudzysłowie. Druga linia odpowiada za usunięcie programu z pamięci.
Rysunek 9.34.
Do każdej procedury
zostały dopisane
dwie linie kodu
Rysunek 9.35.
Okno formularza
Rozdział 9. Zdarzenia 277
Rysunek 9.36.
Efekt naciśnięcia
górnego przycisku
w formularzu
Rysunek 9.37.
Efekt naciśnięcia
dolnego przycisku
w formularzu
Przykład 159.
Napisz program, którego zastosowanie pozwoli wyświetlić formularz z prośbą o kliknię-
cie myszą. Po kliknięciu zostanie wyświetlone okno z podziękowaniem.
1. Uruchom arkusz Excela.
2. Wyświetl okno edytora Visual Basic.
Rozdział 9. Zdarzenia 279
Rysunek 9.38.
Z paska Toolbox
można przeciągnąć
obiekt umożliwiający
wstawienie etykiety
Rysunek 9.40.
Wynik uruchomienia
programu z punktu 10.
Rysunek 9.41.
Rezultat wykonania
procedury obsługi
zdarzenia
polegającego
na kliknięciu myszą
formularza
Podsumowanie
Zdarzenia, których nazwy rozpoczynają się od słowa Before, to zdarzenia,
do których jeszcze nie doszło. Do tej grupy należy np. zdarzenie BeforeClose.
Dotyczy ono sytuacji, gdy arkusz nie był jeszcze zapisywany. Po kliknięciu
ikony oznaczonej dyskietką zostanie wyświetlone okno, w którym można
podać zarówno lokalizację, jak i nazwę pliku.
Zdarzenie polegające na wprowadzeniu przez użytkownika zmiany
w wybranym zakresie komórek nosi nazwę SheetChange.
Właściwość określająca nazwę widoczną na przycisku nosi nazwę Caption.
Rozdział 10.
Metody i właściwości
dla zakresu
Z tego rozdziału dowiesz się:
Jaka metoda służy do kopiowania zakresu komórek
Jakiej metody trzeba użyć do sortowania komórek należących do zakresu
Czy istnieje metoda pozwalająca na filtrowanie komórek znajdujących się
w określonym zakresie
Dzięki jakiej metodzie można przeszukiwać komórki należące do zakresu
gdzie:
Zakres_źródłowy — lokalizacja komórek, które zostaną skopiowane.
Jest to zmienna typu Range.
Copy — metoda.
Zakres_przeznaczenia — lokalizacja komórek, do których dane zostaną
skopiowane.
Przykład 161.
Napisz program, którego zastosowanie doprowadzi do skopiowania zawartości bieżą-
cego zakresu ciągłego komórek od A1 do A3 do schowka.
1. Uruchom arkusz Excela.
2. Pracę rozpoczniemy od przygotowania danych. W komórkach od A1 do A3
wpisz kolejno 1, 2, 3 (rysunek 10.1).
Rysunek 10.1.
Zakres źródłowy został
wypełniony danymi
Rysunek 10.2.
Obiekt Ten_skoroszyt
w oknie
Project - VBAProject
Rysunek 10.3.
Kod programu
6. Uruchom program.
7. Wyświetl okno arkusza Excela. Jest na nim widoczne zaznaczenie informujące,
że zawartość komórek zakresu od A1 do A3 została skopiowana do schowka
(rysunek 10.4).
Rysunek 10.4.
Zawartość komórek
od A1 do A3 została
skopiowana
do schowka
Rozdział 10. Metody i właściwości dla zakresu 283
Rysunek 10.5.
Zawartość schowka
zostanie wklejona
do zakresu
rozpoczynającego
się od komórki B1
Rysunek 10.6.
Dane z komórek od A1 do
A3 zostały za pośrednictwem
schowka skopiowane do
komórek od B1 do B3
Przykład 162.
Napisz program, którego zastosowanie spowoduje skopiowanie bieżącego zakresu
ciągłego komórek od A1 do A3 do zakresu komórek od B1 do B3.
1. Uruchom arkusz Excela.
2. Pracę rozpoczniemy od przygotowania danych. W komórkach od A1 do A3
wpisz kolejno 1, 2, 3 (rysunek 10.1).
3. Wyświetl okno edytora VBA.
4. Dwukrotnie kliknij obiekt Ten_skoroszyt.
5. Zostało wyświetlone okno umożliwiające edytowanie kodu. Wpisz w nim
kod pokazany na rysunku 10.7. Zmienna Kom jest typu Range. Kopiowanie
zostaje wykonane z obszaru źródłowego. Obszar docelowy rozpoczyna się
od komórki B1.
284 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 10.7.
Kod programu
6. Uruchom program.
7. Wyświetl okno arkusza Excela. Dane zostały skopiowane z komórek obszaru
od A1 do A3 do komórek obszaru od B1 do B3 (rysunek 10.8).
Rysunek 10.8.
Zawartość komórek
od A1 do A3 została
skopiowana do
komórek od B1 do B3
Przykład 163.
Napisz program, który „zada pytanie” o początek zakresu komórek do skopiowania
i początek zakresu docelowego. Następnie skopiuje zakresy.
1. Uruchom arkusz Excela.
2. Pracę rozpoczniemy od przygotowania danych. W komórkach od A1 do A3
wpisz kolejno 1, 2, 3. W komórkach od A5 do A7 wpisz kolejno 5, 6, 7
(rysunek 10.9).
Rysunek 10.9.
Dane testowe
Rysunek 10.10.
Kod programu
6. Uruchom program.
7. Wyświetl okno arkusza Excela. Jako adres należący do obszaru źródłowego
wpisz a1 (rysunek 10.11).
Rysunek 10.11.
Komórka A1 należy
do obszaru
zawierającego dane
Rysunek 10.12.
Jako adres obszaru
docelowego została
podana komórka C3
Rysunek 10.13.
Obszar danych został
skopiowany
Przykład 164.
Wykorzystując program z przykładu 163., sprawdź, jak można opisać obszar.
1. Do arkusza wpisz dane zgodnie z rysunkiem 10.14.
Rysunek 10.14.
Obszar źródłowy
został wskazany
przez podanie
adresu jednej
z komórek leżących
w jego wnętrzu
2. Uruchom program.
3. Jako adres obszaru źródłowego wpisz adres komórki leżącej w jego środku.
4. Kliknij przycisk OK.
5. Jako adres docelowy wpisz C7 (rysunek 10.15).
Rysunek 10.15.
Obszar docelowy
został wyróżniony
przez podanie
adresu komórki C7
Rysunek 10.16.
Dane źródłowe
zostały skopiowane
do obszaru
docelowego
Rysunek 10.17.
Dane źródłowe
Rysunek 10.18.
Dane źródłowe
i skopiowane
Przykład 166.
Napisz program, którego zastosowanie pozwoli generować dane w arkuszu, a następnie
sortować jego zawartość według zadanych kryteriów.
1. Uruchom arkusz Excela.
2. Wyświetl okno edytora VBA.
Range("A2").Value = "Ebacki"
Range("A3").Value = "Dabacki"
Range("A4").Value = "Cabacki"
Range("A5").Value = "Babacki"
Range("A6").Value = "Abacki"
MsgBox "Dane zostały wygenerowane!", vbInformation
'Zaznaczenie komórki.
Range("A1").Select
'Sortowanie.
MsgBox "Rozpoczynam sortowanie!", vbInformation
With ActiveWorkbook.Worksheets(ActiveSheet.Name).Sort
.SortFields.Clear
.SortFields.Add Key:=Range("A1:A6"), _
SortOn:=xlSortOnValues, Order:=xlAscending,
DataOption:=xlSortNormal
.SetRange Range("A1:A6")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
MsgBox "Sortowanie zakończone!", vbInformation
End Sub
4. Uruchom program.
5. W rezultacie wykonania drugiej linii programu zostało wyświetlone okno
(rysunek 10.19).
Rysunek 10.19.
Komunikat
informujący
o rozpoczęciu
pracy programu
Rysunek 10.20.
W wyniku wykonania
procedury arkusz
został wypełniony
danymi
290 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 10.21.
Kolejność danych
nie została jeszcze
zmieniona
Rysunek 10.22.
Nazwiska zostały
uporządkowane
w kolejności
alfabetycznej
Rysunek 10.23.
Został również
posortowany
nagłówek kolumny
Rozdział 10. Metody i właściwości dla zakresu 291
Sub Przykład_168()
'Zaznaczenie komórki.
Range("A1").Select
'Sortowanie.
MsgBox "Rozpoczynam sortowanie!", vbInformation
With ActiveWorkbook.Worksheets(ActiveSheet.Name).Sort
.SortFields.Clear
.SortFields.Add Key:=Range("A1:A6"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange Range("A1:A6")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
MsgBox "Sortowanie zakończone!", vbInformation
End Sub
Rysunek 10.24.
Fragment arkusza
z danymi
Przykład 172.
Wczytaj arkusz Przyklad_169.xlsm (rysunek 10.25). Napisz program, którego zastosowa-
nie spowoduje włączenie filtru i wyświetlenie odczytów liczników tylko z tych lokali,
które w kolumnie Metraż mają wpisaną liczbę 85. Czarna strzałka umożliwiająca rozwija-
nie filtru ma być widoczna.
Rysunek 10.25.
Arkusz z danymi
294 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 10.26.
Kod programu
3. Uruchom program.
4. Wyświetl arkusz z danymi.
5. W tabeli są widoczne skutki zastosowania filtru. Kryterium pokazania lub
ukrycia wiersza są dane wpisane w kolumnie B (rysunek 10.27). Są wyświetlone
tylko te komórki w filtrowanym zakresie, które zawierają ciąg przypisany
parametrowi Criteria1 (rysunek 10.27).
Rysunek 10.27.
W arkuszu zostały
ukryte wiersze,
które w kolumnie B
zawierają inne
wartości niż 85
Rysunek 10.28.
Został posortowany
również nagłówek
kolumny
Rysunek 10.29.
Gdzie tkwi błąd?
Przykład 174.
Napisz program, którego zastosowanie spowoduje włączenie filtru i wyświetlenie tylko
wierszy zawierających słowo cukier. Przefiltrowane dane powinny zostać skopiowane
z kolumny A do kolumny B.
1. Uruchom arkusz Excela.
2. Wpisz dane (rysunek 10.30).
Rysunek 10.30.
Zestaw danych
Rysunek 10.31.
Kod programu
296 VBA dla Excela 2016 PL. 222 praktyczne przykłady
5. Uruchom program.
6. Wyświetl arkusz Excela (rysunek 10.32).
Przykład 174. ilustruje popularną technikę pisania programów. Jeżeli masz już pro-
gram, który wykonuje część tego, co ma wykonać nowy program, nie pisz wszystkiego
od początku. Wykorzystaj to, co masz. Dodaj tylko nowe elementy.
Rysunek 10.32.
Dane w kolumnie A
zostały odfiltrowane
i skopiowane
do kolumny B
Wyszukiwanie informacji
Do wyszukiwania zawartości komórek należących do zakresu należy wykorzystać
metodę Range.Find.
gdzie expression jest zmienną reprezentującą zakres Range. Metoda zwraca adres
pierwszej komórki, w której odnaleziono szukany ciąg znaków.
Przykład 175.
Napisz program, którego zastosowanie doprowadzi do zamiany w komórkach należą-
cych do zakresu od A1 do H18 wszystkich wystąpień cyfr 1 na 2.
1. Uruchom arkusz Excela.
2. Wpisz dane (rysunek 10.33).
Rysunek 10.34.
Kod programu.
Zastosowanie
programu
doprowadza
do zmiany nie tylko
komórek z wartością 1,
ale też np. 111
5. Uruchom program.
6. Po wyświetleniu okna z komunikatem Zmiana została wykonana kliknij
przycisk OK (rysunek 10.35).
Podsumowanie
Do kopiowania zakresu komórek służy metoda Range.Copy.
Do sortowania komórek należących do zakresu należy wykorzystać metodę
Range.Sort.
Do filtrowania komórek należących do zakresu należy wykorzystać metodę
Range.AutoFilter.
Do wyszukiwania zawartości komórek należących do zakresu należy
wykorzystać metodę Range.Find.
300 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rozdział 11.
Podprogramy
Z tego rozdziału dowiesz się:
Co trzeba zrobić, aby dane były przekazywane pomiędzy podprogramami
Jakie zmienne nazywamy globalnymi
Jak można przerwać działanie programu zapętlonego
Napisanie dużego programu, który będzie bezbłędnie działał, nie jest łatwe. Prost-
szym zadaniem jest podzielenie jednego wyzwania na odpowiednią liczbę mniej-
szych, czyli rozbicie programu na podprogramy. Przy podziale możesz sobie pomóc
rysunkiem. Narysuj podprogramy w postaci prostokątów. Każdy z nich powinien wy-
konywać elementarną czynność. Elementarność jest pojęciem względnym — zależy
od Twojego doświadczenia programistycznego. Poszczególne prostokąty połącz strzał-
kami, które będą wskazywały kierunek przepływu danych. Nad każdą strzałką napisz,
jakie dane mają być przesyłane pomiędzy prostokątami — programami. W każdym
prostokącie napisz w jednym zdaniu, co program ma robić. Jeżeli czas Cię nie goni...
zostaw diagram na dzień lub dwa. Wróć do niego i zastanów się, czy wszystko jest jasne,
czy czegoś nie brakuje. Wprowadź niezbędne poprawki.
Następnym etapem pracy jest napisanie programów, które będą realizowały to, co jest
wpisane w prostokątach. Opisy na strzałkach łączących prostokąty informują, jakie
dane powinny zostać przekazane programowi i jakie powinny zostać zwrócone.
Rysując prostokąty, dzieliliśmy problem na części. Teraz czeka nas zadanie odwrotne.
Programy realizujące elementarne zadania należy połączyć w jeden program. Nie
zawsze udaje się to za pierwszym razem. Jeżeli program nie działa poprawnie lub wy-
świetla komunikaty o błędach, trzeba dopisać do niego polecenia, które pozwolą zo-
rientować się, jak wyglądają cząstkowe wyniki przetwarzania danych. Rolę podglądu
danych cząstkowych mogą odgrywać okna komunikatów. Są one generowane dzięki
wykorzystaniu funkcji MsgBox. Można rozpocząć od wstawienia ich pomiędzy wywo-
łaniami poszczególnych podprogramów. Powinny wyświetlać wartości wymieniane
pomiędzy podprogramami. Na tym etapie testowania może okazać się, że błąd został
popełniony podczas rysowania schematu blokowego. Niestety, bywa i tak. Rysowanie
schematu blokowego nie jest stratą czasu. Pozwoli Ci na przeanalizowanie problemu.
302 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Gdy będziesz miał gotowy schemat, będziesz mógł zająć się tylko programowaniem.
Schemat blokowy pozwoli również na weryfikację założeń. Pamiętaj, aby nanosić na
schemat wszystkie zmiany. Dzięki temu będzie on aktualny i użyteczny.
Najprostszym rodzajem programu jest makropolecenie. Nie wymaga ono podawania pa-
rametrów. Może działać samodzielnie lub być uruchamiane z wnętrza innego polecenia.
Przykład 177.
Napisz program składający się z dwóch procedur. Zastosowanie pierwszej procedury
pozwala wczytać dane. Zastosowanie drugiej umożliwia wyświetlenie ich na ekranie.
1. Narysuj odręcznie schemat blokowy programu (rysunek 11.1).
Rysunek 11.1.
Schemat blokowy
programu
Rysunek 11.2.
Kod programu
Rozdział 11. Podprogramy 303
5. Uruchom program.
6. Po wyświetleniu okna (rysunek 11.3) wpisz dane i kliknij przycisk OK.
Rysunek 11.3.
Ciąg znaków zawiera
wielkie i małe litery,
liczby oraz znak
wpisany za pomocą
kombinacji
z klawiszem Shift
Rysunek 11.4.
Wpisanie
i wyświetlenie
danych nie
spowodowało
błędów
Rysunek 11.5.
Program podzielony
na procedury
304 VBA dla Excela 2016 PL. 222 praktyczne przykłady
9. Uruchom program.
10. Po wyświetleniu okna (rysunek 11.6) wpisz dane i kliknij przycisk OK.
Rysunek 11.6.
Okno dialogowe
wygląda identycznie
jak na rysunku 11.3
11. Zostało wyświetlone okno, lecz nie ma w nim danych, które zostały
przekazane do programu (rysunek 11.7). Kliknij przycisk OK.
Rysunek 11.7.
Zniknęły gdzieś
dane wprowadzone
do programu
Rysunek 11.8.
Zadeklarowanie
zmiennej x na
początku programu
Rysunek 11.9.
Rezultat wykonania
podprogramu
procedura1
Rysunek 11.10.
Rezultat wykonania
procedury procedura2
306 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 11.11.
W procedurze
pierwszej
zadeklarowano
zmienną, która
powinna być
stosowana jako
zmienna globalna
4. Uruchom program.
5. Sprawdź, czy dane są przekazywane między procedurami.
4. Uruchom program.
5. Sprawdź, czy dane są przekazywane między procedurami.
Rozdział 11. Podprogramy 307
Rysunek 11.12.
W procedurze drugiej
zadeklarowano
zmienną, która ma
identyczną nazwę jak
zmienna globalna
Rysunek 11.13.
Deklaracja zmiennej
została wstawiona
w drugiej linii
Rysunek 11.14.
Czy program po
usunięciu ostatniej
procedury będzie
działał?
Przykład 182.
Napisz program składający się z dwóch podprogramów i programu głównego zawiera-
jącego wywołania podprogramów. Umieść w nim polecenia, których wykonanie umożli-
wia wyświetlanie komunikatów informujących o aktualnie wykonywanej instrukcji.
1. Uruchom arkusz Excela.
2. Wyświetl okno edytora VBA.
3. Wpisz kod programu (rysunek 11.15).
Rysunek 11.15.
Program, którego
zastosowanie pozwala
zobaczyć, jak kolejno
są wykonywane
procedury
4. Uruchom program.
Rozdział 11. Podprogramy 309
5. Zostały wyświetlone okna z numerami kolejno: 01, 04, 02, 05, 03. Oznacza
to, że program po uruchomieniu „zadeklarował” zmienną x. Następnie została
wywołana procedura o numerze 1. Po jej wykonaniu program powrócił do
programu głównego. Następnie została wywołana procedura o numerze 2.
Po jej wykonaniu program powrócił do programu głównego i został zakończony.
Przykład 184.
Napisz program składający się z dwóch podprogramów i programu głównego zawiera-
jącego wywołania podprogramów. Umieść w nim polecenia, których wykonanie umoż-
liwia wyświetlanie komunikatów informujących o aktualnie realizowanej instrukcji
i wartości zmiennej.
1. Uruchom arkusz Excela.
2. Wyświetl okno edytora VBA.
3. Wpisz kod programu (rysunek 11.16).
Rysunek 11.16.
Program, którego
zastosowanie pozwala
zobaczyć, jak
procedury są kolejno
wykonywane
4. Uruchom program.
5. Zostały wyświetlone okna z numerami kolejno: 01, 04, 02, 05, 03. Komunikat
o numerze 0n jest wyświetlany, gdy jest wykonywana instrukcja MsgBox ("0n.
Zmienna x:" & x), gdzie n=1, 2 … 5. Zmienna x cały czas miała wartość zero.
Rysunek 11.17.
Co należy zmienić
w programie, aby
po uruchomieniu
wyświetlał liczby
od 1 do 4?
Procedury zagnieżdżone
W dotychczas omawianych przykładach z programu głównego była wywoływana jed-
na procedura. Po jej zakończeniu następował powrót do programu głównego.
Przykład 187.
Napisz program składający się z programu głównego zawierającego wywołanie podpro-
gramu procedura1. Podprogram powinien zawierać wywołanie podprogramu procedura2.
Podprogram procedura2 powinien zawierać wywołanie podprogramu procedura3. Po
wykonaniu procedury procedura3 powinien nastąpić powrót do podprogramu proce-
dura2. Po wykonaniu procedury procedura2 powinien nastąpić powrót do podprogra-
mu procedura1. Po wykonaniu procedury procedura1 powinien nastąpić powrót do
programu głównego.
1. Uruchom arkusz Excela.
2. Wyświetl okno edytora VBA.
3. Wpisz kod programu (rysunek 11.18).
Rozdział 11. Podprogramy 311
Rysunek 11.18.
Program
z procedurami
zagnieżdżonymi
Rysunek 11.19.
Komunikat
informujący
o wykonaniu
drugiej linii
programu
Rysunek 11.20.
Komunikat
informujący
o wywołaniu
podprogramu
procedura1
Rysunek 11.21.
Komunikat
informujący
o wywołaniu
podprogramu
procedura2
312 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 11.22.
Komunikat
informujący
o wywołaniu
podprogramu
procedura3
Rysunek 11.23.
Komunikat
informujący
o wykonaniu
czwartej linii
programu
Procedury zapętlone
Od procedur zagnieżdżonych niedaleka droga do procedur zapętlonych. Z sytuacją tego
typu mamy do czynienia, gdy z procedury n jest wywoływana procedura n+1, a z pro-
cedury n+1 — ponownie procedura n. Procedury będą się wzajemnie wywoływać. Takie
zjawisko powstaje najczęściej na skutek błędu programisty.
Przykład 189.
Napisz program zawierający zapętlone wywołanie procedur.
1. Uruchom arkusz Excela.
2. Wyświetl okno edytora VBA.
3. Wpisz kod programu (rysunek 11.24). Po wywołaniu podprogramu procedura1
jest wywoływany podprogram procedura2. Podprogram procedura2 zawiera
wywołanie podprogramu procedura1 itd. W efekcie komunikat informujący
o zakończeniu programu głównego nie zostanie wyświetlony.
Rozdział 11. Podprogramy 313
Rysunek 11.24.
Program
z procedurami
zapętlonymi
Rysunek 11.26.
W przykładzie
żadne dane nie były
zapisywane w arkuszu
Rysunek 11.27.
Zapętlony program
zakończył działanie
Rozdział 11. Podprogramy 315
Rysunek 11.28.
Program, który
po zapętleniu się
pracuje bez chwili
wytchnienia, aż…
Podsumowanie
Zadeklarowanie zmiennej na początku programu powoduje, że zostaje jej
przydzielona „funkcja transportowa”. Jeżeli pierwsza procedura przypisze jej
wartość, to ta wartość będzie dostępna także w procedurze drugiej. Zmienne
deklarowane w procedurach są nazywane lokalnymi. Są one dostępne tylko
wewnątrz procedury, w której zostały zadeklarowane. Zmienne deklarowane
na początku programu są nazywane globalnymi. Pozwalają na wewnętrzne
komunikowanie się procedur.
Zmienne globalne są widoczne w każdej procedurze. Gdy zmienne są
deklarowane wewnątrz procedury, przestają mieć charakter globalny
i nie mogą spełniać funkcji komunikacyjnej.
Aby przerwać działanie programu, naciśnij klawisze Ctrl+Alt+Del.
Następnie wybierz opcję Uruchom Menedżera zadań. W oknie Menedżer
zadań kliknij kartę Aplikacje. Zaznacz program, którego działanie chcesz
przerwać. Kliknij przycisk Zakończ zadanie.
316 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rozdział 12.
Ściągawka z VBA
Z tego rozdziału dowiesz się:
Jak uzyskać dodatkowe informacje na temat instrukcji języka VBA
W pisaniu własnych programów może być pomocna ściągawka (tabele od 12.1 do 12.9).
Można się z niej dowiedzieć, w jaki sposób uzyskać w programie oczekiwany efekt.
Metody
Tabela 12.1. Wybrane metody
Nazwa Opis
Activate Uaktywnienie pojedynczej komórki
AddComment Dodanie komentarza do zakresu
AdvancedFilter Odfiltrowanie lub skopiowanie danych z listy utworzonej na podstawie kryteriów
ApplyNames Nadanie nazw komórkom w wyspecyfikowanym zakresie
ApplyOutlineStyles Wyróżnienie wyspecyfikowanego zakresu przez dodanie obwódki
AutoFill Automatyczne wypełnienie komórek w wyspecyfikowanym zakresie
AutoFilter Odfiltrowanie listy przy wykorzystaniu filtru
AutoFit Dopasowanie szerokości kolumny lub wysokości wiersza w celu wyświetlenia
pełnej zawartości
AutoOutline Otoczenie obwódką komórek w wyspecyfikowanym zakresie (zaznaczenie).
Stara obwódka zostaje zastąpiona nową
318 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Przykład 172.
Uzyskaj informacje na temat metody BorderAround, które to informacje pozwolą na
wykorzystanie jej w programie.
1. Uruchom przeglądarkę internetową.
2. W wyszukiwarce Google wpisz hasło Range.BorderAround Method.
3. W wynikach wyszukiwania (rysunek 12.1) kliknij odsyłacz do artykułu
ff197210 opublikowanego w msdn.microsoft.com.
Rozdział 12. Ściągawka z VBA 321
Rysunek 12.1.
Okno umożliwia
wyszukiwanie
terminów
i przeglądanie
tematów
Przykład 191.
Napisz program, którego zastosowanie pozwoli otoczyć grubą obwódką w kolorze
czerwonym komórki w obszarze od A1 do H1.
1. Odszukaj w lewej kolumnie tabeli 12.1 hasło Wyróżnienie zakresu obwódką,
kolorem, stylem oraz szerokością linii.
2. W prawej kolumnie tabeli 12.1 znajdź odpowiadającą mu metodę.
3. Uruchom arkusz Excela.
4. Wyświetl okno edytora VBA.
5. W pomocy dotyczącej metody (rysunek 12.2) odszukaj przykład
(rysunek 12.3).
322 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 12.3.
Przykład zastosowania
polecenia, którego
wykonanie pozwala
wyróżnić obszar
obwódką
Rysunek 12.4.
Szkielet kodu
programu
Rysunek 12.5.
Przykład zastosowania
metody został
skopiowany
do programu
10. Zmień nazwę arkusza z Sheet1 na taką, jaka jest widoczna w oknie
Project - VBAProject, czyli na Arkusz1. Kliknij przycisk, za pomocą którego
uruchomisz program (rysunek 12.6).
Rysunek 12.6.
Po usunięciu
niezgodności nazw
można spróbować
uruchomić program
Rysunek 12.7.
Rezultat wykonania
programu
z rysunku 12.6
Rozdział 12. Ściągawka z VBA 323
Rysunek 12.8.
Zakres zaznaczanych
komórek został
zmieniony
Rysunek 12.9.
Zakres jest zgodny
z docelowym
Rysunek 12.10.
Została zmieniona
wartość parametru
odpowiadającego
za kolor linii
Rysunek 12.11.
Obwódka spełnia
wszystkie wymagania
Funkcje
Pisząc program w VBA, możemy korzystać zarówno z metod i instrukcji języka VBA, jak
i funkcji arkusza Microsoft Excel. W szybkim wybraniu odpowiedniej funkcji może
okazać się pomocna tabela 12.2.
324 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Przykład 193.
Napisz program, którego zastosowanie pozwoli przeliczać liczby decymalne na hek-
sadecymalne.
1. W tabeli 12.2 odszukaj funkcję konwertującą liczbę decymalną na heksadecymalną.
2. Uruchom przeglądarkę internetową.
3. W wyszukiwarce Google wpisz hasło HEX VBA EXCEL 2016.
4. W wynikach wyszukiwania (rysunek 12.12) kliknij odsyłacz do artykułu
963zt96e(v=vs.90).aspx opublikowanego w msdn.microsoft.com.
Rozdział 12. Ściągawka z VBA 329
Rysunek 12.12.
Wybieramy wynik
dotyczący Office 2016
Rysunek 12.13.
Przykład zastosowania
metody
Rysunek 12.15.
Okno do
wprowadzania
danych
Rysunek 12.16.
Wynik konwersji
W tabeli 12.3 znajduje się siedemnaście liczb dziesiętnych oraz ich szesnastko-
wych odpowiedników.
Przykład 194.
Napisz program, którego zastosowanie pozwoli wyświetlić datę i czas systemowy.
1. W tabeli 12.2 odszukaj funkcję, której zastosowanie umożliwia pobranie
z systemu daty i czasu.
2. Uruchom przeglądarkę internetową.
3. W polu wyszukiwania wpisz Now.
4. Kliknij odsyłacz do artykułu https://msdn.microsoft.com/en-
us/library/ee634891.aspx (rysunek 12.17).
Rysunek 12.17.
Fragment spisu treści
artykułu z informacjami
na temat funkcji
Rysunek 12.18.
Podstawowe
informacje o funkcji
Rysunek 12.19.
Kod programu
332 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 12.20.
Data i czas zegara
systemowego
Instrukcje
W tabeli 12.4 znajdziesz informacje o wbudowanych instrukcjach VBA. Korzystali-
śmy z nich najczęściej w poprzednich rozdziałach książki. Pominę więc szczegółowe
wyjaśnienia.
Operatory
Operatory arytmetyczne
Operatory arytmetyczne (tabela 12.5) służą do wykonywania podstawowych działań
arytmetycznych.
336 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Przykład 195.
Napisz program, którego zastosowanie pozwoli wyliczyć resztę z dzielenia liczby
przez siedem.
1. W tabeli 12.5 odszukaj operator wyliczający resztę z dzielenia.
2. Załaduj przeglądarkę internetową.
3. W pasku adresu wpisz adres http://msdn.microsoft.com/en-US/office.
4. W polu wyszukiwarki wpisz termin mod (rysunek 12.21). Kliknij ikonę lupki.
Rysunek 12.21.
Serwis msdn jest
wyposażony w wygodną
wyszukiwarkę
Rysunek 12.22.
Odsyłacz do artykułu
10. Wpisz kod programu (rysunek 12.24). W drugiej linii programu jest
wyświetlane okno z prośbą o wpisanie dzielnej. Wprowadzona liczba jest
przypisywana zmiennej number1. W drugiej linii programu zmiennej number2
jest przypisywana liczba 7. W kolejnej linii jest wyliczana reszta z dzielenia
zmiennej number1 przez zmienną number2. W przedostatniej linii znajduje się
polecenie, którego wykonanie umożliwi wyświetlenie wyniku.
Rysunek 12.25.
Okno do
wprowadzania
liczby, której reszta
z dzielenia przez
siedem ma zostać
wyliczona
Rysunek 12.26.
Wynik
Operatory porównania
Operatory porównania (tabela 12.6) umożliwiają porównywanie wartości liczb,
zmiennych, wyników zwracanych przez funkcje itp. Jeżeli relacja opisana operatorem
jest prawdziwa, wówczas jest zwracana wartość True. Jeżeli relacja opisana operato-
rem nie zachodzi, jest zwracana wartość False. Gdy jedna z porównywanych wielko-
ści ma wartość Null, jest zwracana wartość Null. Operatory można wykorzystywać do
konstruowania warunków.
Przykład 196.
Napisz program, którego zastosowanie pozwoli na podawanie prowizji w zależności
od wysokości sprzedaży. Dane znajdują się w tabeli 12.7.
Rysunek 12.27.
Kod programu
4. Uruchom program.
5. Zostało wyświetlone okno umożliwiające wpisanie wyników sprzedaży
(rysunek 12.28).
Rysunek 12.28.
Okno do
wprowadzania
wysokości sprzedaży
Rysunek 12.29.
Porównaj wynik
z tabelą 12.7
Operator konkatenacji
Operator konkatenacji (tabela 12.8) może być wykorzystywany np. do wyświetlania
w tym samym oknie opisu i wyniku, czyli wartości zmiennej.
Przykład 197.
Napisz program, którego zastosowanie pozwoli wczytać zawartość komórek A1 i B1,
połączyć je i zapisać w komórce C1.
1. Uruchom arkusz Excela.
2. Wyświetl okno edytora Visual Basic.
3. Wpisz kod programu (rysunek 12.30). W trzeciej linii programu zmiennej
Lewa jest przypisywana zawartość komórki A1. W czwartej linii programu
zmiennej Prawa jest przypisywana zawartość komórki B1. W linii kolejnej
zawartość zmiennych jest łączona i wstawiana do komórki C1.
Rysunek 12.30.
Kod programu
Rysunek 12.31.
W oddzielnych
komórkach zapisano
kod pocztowy i nazwę
miejscowości
5. Uruchom program.
6. Ponownie obejrzyj arkusz Excela (rysunek 12.32).
Rysunek 12.32.
W komórce C1 znajdują
się połączone dane
z komórek A1 i B1
Rysunek 12.33.
W komórce C1 ciągi
z komórek A1 i B1 zostały
oddzielone spacją
342 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Operatory logiczne
Operatory logiczne (tabela 12.9) umożliwiają zbudowanie formuły logicznej.
Przykład 199.
Napisz program, którego zastosowanie umożliwi podawanie w komórce C1 sumy lo-
gicznej wartości zapisanych w komórkach A1 oraz B1.
1. Uruchom arkusz Excela.
2. W komórce A1 wpisz 0.
3. W komórce B1 wpisz 1.
4. Wyświetl okno edytora VBA.
5. Wpisz kod programu (rysunek 12.34). Zmienne A, B oraz Y zostały zadeklarowane
jako zmienne typu logicznego. W trzeciej linii programu zmiennej A jest
przypisywana wartość odczytana z komórki A1 arkusza Excel. W czwartej
linii programu zmiennej B jest przypisywana wartość odczytana z komórki
B1 arkusza Excela. W linii piątej jest wyznaczana suma logiczna zmiennych A
i B. Wynik jest przypisywany zmiennej Y. W przedostatniej linii wartość
zmiennej Y jest wstawiana do komórki C1.
Rysunek 12.34.
Program
6. Uruchom program.
7. Wyświetl arkusz kalkulacyjny Excel. W komórce C1 jest widoczny wynik
sumy logicznej komórek A1 i B1 (rysunek 12.35).
Rozdział 12. Ściągawka z VBA 343
Rysunek 12.35.
W komórce C1
nie ma formuły,
a jest wpisana wartość
8. Sprawdź, czy program działa poprawnie dla wartości podanych w tabeli 12.10.
Podsumowanie
Aby uzyskać informacje o poleceniach języka VBA, uruchom arkusz Excela.
Wyświetl okno edytora VBA. Naciśnij klawisz F1. W polu widocznym
w lewym górnym rogu okna pomocy wpisz szukany termin. Naciśnij klawisz
Enter. Kliknij odsyłacz do szczegółowych informacji.
344 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rozdział 13.
Funkcje arkuszowe
Z tego rozdziału dowiesz się:
Jak korzystać z funkcji arkuszowych w programach VBA.
Spośród funkcji arkuszowych w VBA nie są dostępne te, które mają swoje dokładne
odpowiedniki wśród funkcji wbudowanych.
Przykład 200.
Wyświetl listę dostępnych funkcji arkuszowych. Odszukaj i wstaw do programu
funkcję odpowiedzialną za konwersję liczb rzymskich na arabskie.
1. Uruchom arkusz Excela.
2. Uruchom edytor VBA.
3. Wpisz początek programu (rysunek 13.1). Zmiennej A zostanie przypisana
wartość wyliczona przez funkcję arkuszową. Wpisz ciąg znaków
A = Application.WorksheetFunction. i zaczekaj, aż zostanie wyświetlone
okno elektronicznego suflera.
346 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 13.1.
Po wpisaniu kropki
po słowie
WorksheetFunction
jest wyświetlana lista
funkcji
Rysunek 13.2.
Niestety okno z listą
funkcji jest dosyć
małe i jego zawartość
należy przewijać
Rysunek 13.3.
Wybrana z listy nazwa
funkcji została dodana
do programu.
Rysunek 13.4.
Dana jest wpisana do
programu. Wyliczona
wartość jest przypisywana
zmiennej A.
Na rysunku 13.5 pokazano wersję programu, która konwertuje liczbę rzymską XXI na
arabską. Wartość jest przypisywana zmiennej A. Program jest poprawny składniowo,
działa, ale wynik pozostaje w jego wnętrzu. Jeżeli taka sekwencja poleceń zostanie
wewnątrz dłuższego kodu, nie będzie robiła nic za wyjątkiem spowalniania działania.
Rozdział 13. Funkcje arkuszowe 347
Rysunek 13.5.
Niestety okno z listą
funkcji jest dosyć małe
i jego zawartość
należy przewijać
Rysunek 13.6.
A2 — tu można wpisać
liczbę do konwersji.
B2 — w tej komórce
zostanie wyświetlony
wynik
Na tym na szczęście koniec komplikacji. W tabeli 13.1 znajdują się najczęściej wybie-
rane funkcje Excela i ich odpowiedniki w VBA
Tabela 13.1. Wybrane funkcje arkuszowe i ich odpowiedniki w VBA (ciąg dalszy)
Funkcja arkuszowa Nazwa w VBA
BD.MIN Application.WorksheetFunction.DMin
BD.ODCH.STANDARD Application.WorksheetFunction.DStDev
BD.ODCH.STANDARD.POPUL Application.WorksheetFunction.DStDevP
BD.POLE Application.WorksheetFunction.DGet
BD.SUMA Application.WorksheetFunction.DSum
BD.ŚREDNIA Application.WorksheetFunction.DAverage
BD.WARIANCJA Application.WorksheetFunction.DVar
BD.WARIANCJA.POPUL Application.WorksheetFunction.DVarP
COS Cos
COSH Application.WorksheetFunction.Cosh
CZAS TimeSerial
CZAS.WARTOŚĆ CDate
CZĘSTOŚĆ Application.WorksheetFunction.Frequency
CZY.BŁ Application.WorksheetFunction.IsErr
CZY.BŁĄD Application.WorksheetFunction.IsError
CZY.BRAK Application.WorksheetFunction.IsNA
CZY.LICZBA Application.WorksheetFunction.IsNumber
CZY.LOGICZNA Application.WorksheetFunction.IsLogical
CZY.NIE.TEKST Application.WorksheetFunction.IsNonText
CZY.PUSTA IsEmpty
CZY.TEKST Application.WorksheetFunction.IsText
DATA DateSerial
DATA.WARTOŚĆ CDate
DB Application.WorksheetFunction.Db
DDB Application.WorksheetFunction.Ddb
DŁ Len
DNI.360 Application.WorksheetFunction.Days360
DZIEŃ Day
DZIEŃ.TYG Application.WorksheetFunction.Weekday
DZIŚ Date
EXP Exp
FRAGMENT.TEKSTU Mid
FV Application.WorksheetFunction.Fv
GODZINA Hour
ILE.LICZB Application.WorksheetFunction.Count
ILE.NIEPUSTYCH Application.WorksheetFunction.CountA
ILOCZYN Application.WorksheetFunction.Product
IMPT Application.WorksheetFunction.Ipmt
INDEKS Application.WorksheetFunction.Index
Rozdział 13. Funkcje arkuszowe 349
Tabela 13.1. Wybrane funkcje arkuszowe i ich odpowiedniki w VBA (ciąg dalszy)
Funkcja arkuszowa Nazwa w VBA
IRR Application.WorksheetFunction.Irr
ISPMT Application.WorksheetFunction.Ispmt
JEŻELI If
KOD Application.WorksheetFunction.Asc
KOMBINACJE Application.WorksheetFunction.Combin
KOWARIANCJA Application.WorksheetFunction.Covar
KURTOZA Application.WorksheetFunction.Kurt
KWARTYL Application.WorksheetFunction.Quartile
KWOTA Application.WorksheetFunction.Dollar
LEWY Left
LICZ.JEŻELI Application.WorksheetFunction.CountIf
LICZ.PUSTE Application.WorksheetFunction.CountBlank
LICZBA.CAŁK Int
LITERY.MAŁE LCase
LITERY.WIELKIE UCase
LN Application.WorksheetFunction.Ln
LOG Application.WorksheetFunction.Log
LOG10 Application.WorksheetFunction.Log10
LOS Rnd
LUB Application.WorksheetFunction.Or
MACIERZ.ILOCZYN Application.WorksheetFunction.MMult
MACIERZ.ODW Application.WorksheetFunction.Minverse
MAX Application.WorksheetFunction.Max
MAX.K Application.WorksheetFunction.Large
MEDIANA Application.WorksheetFunction.Median
MIESIĄC Month
MIN Application.WorksheetFunction.Min
MIN.K Application.WorksheetFunction.Small
MINUTA Minute
MIRR Application.WorksheetFunction.MIrr
MOD Mod
MODUŁ.LICZBY Abs
NACHYLENIE Application.WorksheetFunction.Slope
NIE Not
NORMALIZUJ Application.WorksheetFunction.Standardize
NPER Application.WorksheetFunction.NPer
NPV Application.WorksheetFunction.Npv
OCZYŚĆ Application.WorksheetFunction.Clean
ODCH.KWADRATOWE Application.WorksheetFunction.DevSq
350 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Tabela 13.1. Wybrane funkcje arkuszowe i ich odpowiedniki w VBA (ciąg dalszy)
Funkcja arkuszowa Nazwa w VBA
ODCH.STANDARD.POPUL Application.WorksheetFunction.StDevP
ODCH.STANDARDOWE Application.WorksheetFunction.StDev
ODCH.ŚREDNIE Application.WorksheetFunction.AveDev
ODCIĘTA Application.WorksheetFunction.Intercept
ORAZ Application.WorksheetFunction.And
PEARSON Application.WorksheetFunction.Pearson
PERCENTYL Application.WorksheetFunction.Percentile
PERMUTACJE Application.WorksheetFunction.Permut
PI Application.WorksheetFunction.Pi
PIERWIASTEK Sqr
PMT Application.WorksheetFunction.Pmt
PODAJ.POZYCJĘ Application.WorksheetFunction.Match
PODSTAW Application.WorksheetFunction.Substitute
POTĘGA Application.WorksheetFunction.Power
POWT Application.WorksheetFunction.Rept
POZYCJA Application.WorksheetFunction.Rank
PPMT Application.WorksheetFunction.Ppmt
PRAWDPD Application.WorksheetFunction.Prob
PRAWY Right
PROCENT.POZYCJA Application.WorksheetFunction.PercentRank
PRÓG.ROZKŁAD.DWUM Application.WorksheetFunction.CritBinom
PRZESUNIĘCIE Offset
PV Application.WorksheetFunction.Pv
R.KWADRAT Application.WorksheetFunction.RSq
RADIANY Application.WorksheetFunction.Radians
RATE Application.WorksheetFunction.Rate
REGBŁSTD Application.WorksheetFunction.StEyx
REGEXPP Application.WorksheetFunction.LogEst
REGEXPW Application.WorksheetFunction.Growth
REGLINP Application.WorksheetFunction.LinEst
REGLINW Application.WorksheetFunction.Trend
REGLINX Application.WorksheetFunction.Forecast
ROK Year
ROZKŁAD.BETA Application.WorksheetFunction.BetaDist
ROZKŁAD.BETA.ODW Application.WorksheetFunction.BetaInv
ROZKŁAD.CHI Application.WorksheetFunction.ChiDist
ROZKŁAD.CHI.ODW Application.WorksheetFunction.ChiInv
ROZKŁAD.DWUM Application.WorksheetFunction.BinomDist
ROZKŁAD.DWUM.PRZEC Application.WorksheetFunction.NegBinomDist
Rozdział 13. Funkcje arkuszowe 351
Tabela 13.1. Wybrane funkcje arkuszowe i ich odpowiedniki w VBA (ciąg dalszy)
Funkcja arkuszowa Nazwa w VBA
ROZKŁAD.EXP Application.WorksheetFunction.ExponDist
ROZKŁAD.F Application.WorksheetFunction.FDist
ROZKŁAD.F.ODW Application.WorksheetFunction.FInv
ROZKŁAD.FISHER Application.WorksheetFunction.Fisher
ROZKŁAD.FISHER.ODW Application.WorksheetFunction.FisherInv
ROZKŁAD.GAMMA Application.WorksheetFunction.GammaDist
ROZKŁAD.HIPERGEOM Application.WorksheetFunction.HypGeomDist
ROZKŁAD.LIN.GAMMA Application.WorksheetFunction.GammaLn
ROZKŁAD.LOG Application.WorksheetFunction.LogNormDist
ROZKŁAD.LOG.ODW Application.WorksheetFunction.LogInv
ROZKŁAD.NORMALNY Application.WorksheetFunction.NormDist
ROZKŁAD.NORMALNY.ODW Application.WorksheetFunction.NormInv
ROZKŁAD.NORMALNY.S Application.WorksheetFunction.NormSDist
ROZKŁAD.NORMALNY.S.ODW Application.WorksheetFunction.NormSInv
ROZKŁAD.POISSON Application.WorksheetFunction.Poisson
ROZKŁAD.T Application.WorksheetFunction.TDist
ROZKŁAD.T.ODW Application.WorksheetFunction.TInv
ROZKŁAD.WEIBULL Application.WorksheetFunction.Weibull
RTD Application.WorksheetFunction.RTD
RZYMSKIE Application.WorksheetFunction.Roman
SEKUNDA Second
SILNIA Application.WorksheetFunction.Fact
SIN Sin
SINH Application.WorksheetFunction.Sinh
SKOŚNOŚĆ Application.WorksheetFunction.Skew
SLN Application.WorksheetFunction.Sln
STOPNIE Application.WorksheetFunction.Degrees
SUMA Application.WorksheetFunction.Sum
SUMA.ILOCZYNÓW Application.WorksheetFunction.SumProduct
SUMA.JEŻELI Application.WorksheetFunction.SumIf
SUMA.KWADRATÓW Application.WorksheetFunction.SumSq
SUMA.X2.M.Y2 Application.WorksheetFunction.SumX2MY2
SUMA.X2.P.Y2 Application.WorksheetFunction.SumX2PY2
SUMA.XMY.2 Application.WorksheetFunction.SumXMY2
SUMY.POŚREDNIE Application.WorksheetFunction.Subtotal
SYD Application.WorksheetFunction.Syd
SZUKAJ.TEKST Application.WorksheetFunction.Search
ŚREDNIA Application.WorksheetFunction.Average
ŚREDNIA.GEOMETRYCZNA Application.WorksheetFunction.GeoMean
352 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Tabela 13.1. Wybrane funkcje arkuszowe i ich odpowiedniki w VBA (ciąg dalszy)
Funkcja arkuszowa Nazwa w VBA
ŚREDNIA.HARMONICZNA Application.WorksheetFunction.HarMean
ŚREDNIA.WEWN Application.WorksheetFunction.TrimMean
TAN Tan
TANH Application.WorksheetFunction.Tanh
TEKST Application.WorksheetFunction.Text
TERAZ Now
TEST.CHI Application.WorksheetFunction.ChiTest
TEST.F Application.WorksheetFunction.FTest
TEST.T Application.WorksheetFunction.TTest
TEST.Z Application.WorksheetFunction.ZTest
TRANSPONUJ Application.WorksheetFunction.Transpose
UFNOŚĆ Application.WorksheetFunction.Confidence
USUŃ.ZBĘDNE.ODSTĘPY Application.WorksheetFunction.Trim
VDB Application.WorksheetFunction.Vdb
WARIANCJA Application.WorksheetFunction.Var
WARIANCJA.POPUL Application.WorksheetFunction.VarP
WARTOŚĆ CByte / CInteger / CLong / CSingle / CDouble
WSP.KORELACJI Application.WorksheetFunction.Correl
WYBIERZ Application.WorksheetFunction.Choose
WYST.NAJCZĘŚCIEJ Application.WorksheetFunction.Mode
WYSZUKAJ Application.WorksheetFunction.Lookup
WYSZUKAJ.PIONOWO Application.WorksheetFunction.VLookup
WYSZUKAJ.POZIOMO Application.WorksheetFunction.HLookup
WYZNACZNIK.MACIERZY Application.WorksheetFunction.MDeterm
ZAOKR Application.WorksheetFunction.Round
ZAOKR.DO.CAŁK Int
ZAOKR.DO.NPARZ Application.WorksheetFunction.Odd
ZAOKR.DO.PARZ Application.WorksheetFunction.Even
ZAOKR.DO.TEKST Application.WorksheetFunction.Fixed
ZAOKR.DÓŁ Application.WorksheetFunction.RoundDown
ZAOKR.GÓRA Application.WorksheetFunction.RoundUp
ZAOKR.W.DÓŁ Application.WorksheetFunction.Floor
ZAOKR.W.GÓRĘ Application.WorksheetFunction.Ceiling
ZASTĄP Application.WorksheetFunction.Replace
ZŁĄCZ.TEKSTY &
ZNAJDŹ Application.WorksheetFunction.Find
ZNAK Chr
ZNAK.LICZBY Sgn
Rozdział 13. Funkcje arkuszowe 353
Przykład 202.
Napisz program, który będzie przesuwać w lewo liczbę wpisaną w komórce A2 o liczbę
bitów wpisaną w komórce B2. Wynik będzie zapisywany w komórce C2.
1. Uruchom arkusz Excela.
2. Uruchom edytor VBA.
3. Wpisz program (rysunek 13.7).
Rysunek 13.7. Program przesuwający liczbę zapisaną w komórce A2 o liczbę bitów zapisanych
w komórce B2 i zapisujący wynik w komórce C2
Rysunek 13.8.
Dane testowe
5. Uruchom program.
6. Ponownie obejrzyj arkusz Excela (rysunek 13.9).
Rysunek 13.9.
Funkcja działa na liczbach
binarnych. Przesunięcie
bitów o jeden w lewo
oznacza pomnożenie
liczby przez dwa
Przykład 203.
Napisz program, który będzie przesuwać w prawo liczbę wpisaną w komórce A2 o liczbę
bitów wpisaną w komórce B2. Wynik będzie zapisywany w komórce C2.
1. Uruchom arkusz Excela.
2. Uruchom edytor VBA.
3. Wpisz program (rysunek 13.10).
Rysunek 13.10. Program przesuwający liczbę zapisaną w komórce A2 o liczbę bitów zapisanych
w komórce B2 i zapisujący wynik w komórce C2
354 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 13.11.
Dane testowe
5. Uruchom program.
6. Ponownie obejrzyj arkusz Excela (rysunek 13.12).
Rysunek 13.12.
Funkcja działa na
liczbach binarnych.
Przesunięcie bitów
o jeden w prawo
oznacza podzielenie
liczby przez dwa
Przykład 204.
Napisz program, którego zastosowanie pozwoli porównać pozycje bitów postaci bi-
narnych dwóch liczb zapisanych w komórkach A2 i B2. Jeśli w którejkolwiek pozycji
znajduje się wartość 1, program zwraca liczbę 2 podniesioną do odpowiedniej potęgi,
w zależności od pozycji bitu. Następnie te liczby są sumowane. Wynik będzie zapisywany
w komórce C2.
1. Uruchom arkusz Excela.
2. Uruchom edytor VBA.
3. Wpisz program (rysunek 13.13).
Rysunek 13.13. Funkcja Bitor nazywa się tak samo w wersji polskiej i angielskiej Excela
Rysunek 13.14.
Arkusz z danymi
testowymi
5. Uruchom program.
6. Ponownie obejrzyj arkusz Excela (rysunek 13.15).
Rozdział 13. Funkcje arkuszowe 355
Rysunek 13.15. Postacią binarną liczby 23 jest 10111. Postacią binarną liczby 10 jest 1010.
W każdej z pięciu pozycji liczba 1 występuje w co najmniej jednej z porównywanych liczb. Aby obie
liczby miały tę samą liczbę cyfr, liczbę 1010 można przedstawić w postaci 01010. Liczby 2^0, 2^1, 2^2,
2^3 i 2^4 są sumowane, a ich suma jest równa 31, gdyż 1 + 2 + 4 + 8 + 16=31
Rysunek 13.17. Żeby sprawdzić, czy obliczenia zostały wykonane poprawnie, należy obie dane
zamienić na postać binarną. Następnie należy przenalizować występowanie liczby 1 w każdej
z porównywanych liczb. Aby obie liczby miały tę samą liczbę cyfr, liczbę 1010 można przedstawić
w postaci 01010.
Przykład 206.
Napisz program, którego zastosowanie pozwoli wczytać wartość wpisaną do komórki A2,
a jej cosinus hiperboliczny zwrócić do komórki B2.
1. Uruchom arkusz Excela.
2. Uruchom edytor VBA.
3. Wpisz program (rysunek 13.18).
Rysunek 13.18. Program, którego zastosowanie pozwala wczytać liczbę z komórki A2, a do komórki
B2 zwrócić jej cosinus hiperboliczny
356 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 13.19.
Dane testowe
5. Uruchom program.
6. Wyświetl ponownie arkusz Excela (rysunek 13.20).
Rysunek 13.20.
Argument i wynik
Przykład 207.
Napisz program, którego zastosowanie pozwoli wczytać wartość wpisaną do komórki A2,
a jej cosecans zwrócić do komórki B2.
1. Uruchom arkusz Excela.
2. Uruchom edytor VBA.
3. Wpisz program (rysunek 13.21).
Rysunek 13.21. Program, którego zastosowanie pozwala odczytać wartość z komórki A2 i wpisać
odpowiadający jej cosecans do komórki B2
Rysunek 13.22.
Arkusz do testowania
programu
5. Uruchom program.
6. Wyświetl ponownie arkusz kalkulacyjny (rysunek 13.23).
Rozdział 13. Funkcje arkuszowe 357
Rysunek 13.23.
Argument i wyliczona
wartość
Przykład 210.
Napisz program, którego zastosowanie pozwoli wczytać wartość wpisaną do komórki A2,
a cosecans hiperboliczny liczby zespolonej zwrócić do komórki B2.
1. Uruchom arkusz Excela.
2. Uruchom edytor VBA.
3. Wpisz program (rysunek 13.24).
Rysunek 13.24. Funkcja operująca na liczbach zespolonych nosi nazwę rozpoczynającą się od Im
(ang. Imagine — urojony)
Rysunek 13.25.
Liczba zespolona składa
się z części rzeczywistej
i urojonej (poprzedzonej
literą i)
5. Uruchom program.
6. Wyświetl ponownie arkusz (rysunek 13.26).
358 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 13.26.
Wynik, tak jak argument,
składa się z części
rzeczywistej i urojonej
Przykład 211.
Napisz program, którego zastosowanie pozwoli wczytać daty wpisane do komórek A2
i B2, a liczbę dni pomiędzy nimi zapisać do komórki C2.
1. Uruchom arkusz Excela.
2. Uruchom edytor VBA.
3. Wpisz program (rysunek 13.27).
Rysunek 13.28.
Arkusz z danymi
5. Uruchom program.
6. Ponownie wyświetl arkusz (rysunek 13.29).
Rysunek 13.29.
Czas napisania programu
i wykonania obliczeń przez
komputer był krótszy niż
policzenie dni dzielących obie
daty przy użyciu kalendarza
Przykład 212.
Napisz program, którego zastosowanie pozwala wczytać postać tekstową liczby z ko-
mórki A2. Podstawa jest określona w komórce B2. Wartość dziesiętna jest zwracana
do komórki C2.
1. Uruchom arkusz Excela.
2. Uruchom edytor VBA.
Rozdział 13. Funkcje arkuszowe 359
Rysunek 13.31.
Jaką wartość w układzie
dziesiętnym ma liczba
FF w zapisie
heksadecymalnym?
5. Uruchom program.
6. Zapoznaj się z wyglądem arkusza (rysunek 13.32).
Rysunek 13.32.
Liczbie
heksadecymalnej FF
odpowiada 255
w układzie dziesiętnym
Przykład 213.
Napisz program, którego zastosowanie pozwoli wczytać wartość wpisaną do komórki A2,
a jej wartość funkcji gamma — zwrócić do komórki B2.
1. Uruchom arkusz Excela.
2. Uruchom edytor VBA.
3. Wpisz program (rysunek 13.33).
Rysunek 13.33. Program, którego zastosowanie pozwala wczytać argument z komórki A2 oraz
wyliczyć i zapisać wartość funkcji do komórki B2
4. Przygotuj arkusz z danymi (rysunek 13.34).
360 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 13.34.
Arkusz testowy
5. Uruchom program.
6. Ponownie obejrzyj arkusz (rysunek 13.35).
Rysunek 13.35.
Arkusz z wyliczoną
funkcją gamma
Przykład 214.
Napisz program, którego zastosowanie pozwoli wczytać datę wpisaną do komórki A2,
a następnie zwrócić do komórki B2 numer tygodnia roku w formacie ISO.
1. Uruchom arkusz Excela.
2. Uruchom edytor VBA.
3. Wpisz program (rysunek 13.36).
Rysunek 13.36. Program, którego zastosowanie pozwala podać numer tygodnia roku w formacie ISO
na podstawie daty
4. Przygotuj arkusz testowy (rysunek 13.37).
Rysunek 13.37.
Fragment arkusza
testowego
5. Uruchom program.
6. Zapoznaj się z wyglądem arkusza (rysunek 13.38).
Rysunek 13.38.
Data i wyznaczony
na jej podstawie
numer tygodnia
Rozdział 13. Funkcje arkuszowe 361
Przykład 215.
Napisz program, którego zastosowanie pozwala wczytać wartość wpisaną do komórki A2,
a wyliczoną dla niej liczbę kombinacji (wraz z powtórzeniami) zwrócić do komórki B2.
1. Uruchom arkusz Excela.
2. Uruchom edytor VBA.
3. Wpisz program (rysunek 13.39).
Rysunek 13.39. Program, którego zastosowanie pozwala wyliczyć liczbę kombinacji (wraz z powtórzeniami)
Rysunek 13.40.
Arkusz do testowania
programu
5. Uruchom program.
6. Zapoznaj się z wyglądem arkusza (rysunek 13.41).
Rysunek 13.41.
3 elementy spośród
4 mogą utworzyć
20 kombinacji
z powtórzeniami
Przykład 216.
Napisz program, którego zastosowanie pozwala zwrócić liczbę okresów wymaganych
przez inwestycję do osiągnięcia określonej wartości. Wartość inwestycji jest wpisana
do komórki A2. Wynik obliczeń powinien zostać zwrócony do komórki B2.
1. Uruchom arkusz Excela.
2. Uruchom edytor VBA.
3. Wpisz program:
Option Explicit
Sub przykład_216()
Range("D2").Value =
Application.WorksheetFunction.PDuration((Range("A2").Value),
(Range("B2").Value), (Range("C2").Value))
End Sub
362 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Rysunek 13.42.
Przyjęto, że roczna stopa
procentowa wynosi 2,5%.
Aby uzyskać wynik
w miesiącach, należy użyć
do obliczeń oprocentowania
miesięcznego
5. Uruchom program.
6. Zapoznaj się z wyglądem arkusza (rysunek 13.43).
Rysunek 13.43.
Przy przyjętych
założeniach podwojenie
kapitału nastąpi
po nieco ponad
333 miesiącach
Przykład 217.
Napisz program, którego zastosowanie pozwala wczytać wartość wpisaną do komórki A2,
a jej gęstość dla standardowego rozkładu normalnego zwrócić do komórki B2.
1. Uruchom arkusz Excela.
2. Uruchom edytor VBA.
3. Wpisz program (rysunek 13.44).
Rysunek 13.44. Program, którego zastosowanie pozwala wyliczać wartość standardowego rozkładu
normalnego
Rysunek 13.45.
Arkusz do testowania
programu
5. Uruchom program.
6. Wyświetl arkusz (rysunek 13.46).
Rozdział 13. Funkcje arkuszowe 363
Rysunek 13.46.
Liczba w komórce B2
jest efektem wykonania
programu
Przykład 218.
Napisz program, którego zastosowanie pozwala konwertować liczbę dziesiętną na
odpowiednik tekstowy o podanej podstawie. Liczba w układzie dziesiętnym jest wpi-
sana do komórki A2. Podstawa nowej liczby jest wpisana do komórki B2. Minimalna
długość liczby w postaci tekstowej jest wpisana do komórki C2. Program zwraca wynik
do komórki D2.
1. Uruchom arkusz Excela.
2. Uruchom edytor VBA.
3. Wpisz program:
Sub przykład_218()
Range("D2").Value = Application.WorksheetFunction.Base((Range("A2").Value),
(Range("B2").Value), (Range("C2").Value))
End Sub
Rysunek 13.47.
Dane do testowania
programu
5. Uruchom program.
6. Zapoznaj się z wyglądem arkusza (rysunek 13.48).
7. Odczytaj komunikat.
Rysunek 13.48.
Liczba w komórce D2
jest uzupełniana zerami,
aby w sumie miała taką
długość, jaka jest podana
w komórce C2. Aby zera
nie były usuwane, komórce D2
należy nadać format tekstowy
364 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Przykład 219.
Napisz program, którego zastosowanie pozwala wyliczać wartość stopy procentowej.
Liczba okresów inwestycji jest wpisana do komórki A2. Wartość obecna inwestycji
jest wpisana do komórki B2. Wartość przyszła inwestycji jest wpisana do komórki C2.
Program zwraca wynik do komórki D2.
1. Uruchom arkusz Excela.
2. Uruchom edytor VBA.
3. Wpisz program:
Option Explicit
Sub przykład_219()
Range("D2").Value = Application.WorksheetFunction.Rri((Range("A2").Value),
(Range("B2").Value), (Range("C2").Value))
End Sub
Rysunek 13.49. Wiemy, ile mamy pieniędzy i ile będziemy potrzebowali za 96 miesięcy
5. Uruchom program.
6. Wyświetl ponownie arkusz (rysunek 13.50).
Rysunek 13.50. Stopa procentowa to 0,0009933 miesięcznie lub około 12% rocznie
Przykład 220.
Napisz program, którego zastosowanie pozwala wczytać wartość wpisaną do komórki A2,
a jej secans hiperboliczny zwrócić do komórki B2.
1. Uruchom arkusz Excela.
2. Uruchom edytor VBA.
3. Wpisz program (rysunek 13.51).
Rozdział 13. Funkcje arkuszowe 365
Rysunek 13.52.
Arkusz z danymi
testowymi
5. Uruchom program.
6. Zapoznaj się z wyglądem arkusza (rysunek 13.53).
Rysunek 13.53.
Arkusz z danymi
testowymi i wynikiem
obliczeń
Przykład 221.
Napisz program, którego zastosowanie pozwala zwracać liczbę (punkt kodowy) od-
powiadającą pierwszemu znakowi tekstu. Tekst jest wczytywany z komórki A2. Punkt
kodowy jest zwracany do komórki B2.
1. Uruchom arkusz Excela.
2. Uruchom edytor VBA.
3. Wpisz program (rysunek 13.54).
Rysunek 13.54. Program, którego zastosowanie pozwala zwracać kod pierwszego znaku tekstu
Rysunek 13.55.
Formuła chemiczna
Kingsize?
366 VBA dla Excela 2016 PL. 222 praktyczne przykłady
5. Uruchom program.
6. Ponownie obejrzyj arkusz (rysunek 13.56).
Rysunek 13.56.
Litera C ma kod 67
Przykład 222.
Napisz program, którego zastosowanie pozwala na podstawie wartości logicznych wpi-
sanych do komórek A2 i B2 zwrócić wartość logiczną alternatywy wykluczającej.
Wynik zostaje wpisany do komórki C2.
1. Uruchom arkusz Excela.
2. Uruchom edytor VBA.
3. Wpisz program (rysunek 13.57).
Rysunek 13.57. Program, którego zastosowanie pozwala wyznaczyć wartość XOR na podstawie
wyrażeń zapisanych w komórkach A2 i B2
Rysunek 13.58.
Dane testowe
Rysunek 13.59.
Wartość funkcji XOR
wyznaczona na
podstawie wartości
logicznej wyrażeń 1 i 2
Podsumowanie
Aby skorzystać z funkcji arkuszowej w programie VBA, należy użyć jej
angielskiej nazwy i poprzedzić ciągiem Application.WorksheetFunction.
Dodatek A
Wybrane
kody błędów VBA
Jeżeli podczas działania programu VBA zostanie wykryty błąd, aplikacja przestanie
działać. Jest wówczas wyświetlany komunikat o błędzie. Zawarte w nim informacje
pozwalają na łatwiejsze znalezienie przyczyny błędu. Poniższe zestawienie zawiera
znaczenie najczęściej spotykanych kodów błędów języka VBA.
Programowanie proceduralne
a obiektowe
Jeżeli pisałeś program w BASIC-u, C, Fortranie, Pascalu itp., posługiwałeś się progra-
mowaniem proceduralnym. Ten typ programowania zawdzięcza swoją nazwę moż-
liwości pisania procedur. Każda procedura ma do wykonania elementarne zadanie. Na-
stępnie procedury łączy się w program.
Modułowa budowa programu ułatwia jego testowanie. Prosty program może składać
się z trzech procedur:
1. Wprowadzania danych (np. procedura „prosi” o podanie imienia użytkownika);
2. Przetwarzania danych (np. zastosowanie procedury pozwala odczytać datę
z zegara systemowego i sprawdzić w tablicy z datami imienin, czy dziś są
imieniny użytkownika);
3. Wyświetlenia wyniku (np. zastosowanie procedury pozwala wyświetlić samo
powitanie lub powitanie i życzenia).
Rysunek B.1.
Do właściwości
obiektu „żarówka”
należą: kolor bańki,
napięcie znamionowe,
moc, typ gwintu itp.
W taki sposób dziecko poznaje świat. Widzi rzecz (obiekt), a następnie poznaje jej cechy
(właściwości). Gdy dziecko zaczyna myśleć logicznie i zna już wiele rzeczy, zaczyna
je klasyfikować i łączyć w grupy na podstawie cech wspólnych. W programowaniu obiek-
towym zbiór obiektów, które mają cechę wspólną, nosi nazwę klasy.
Skąd wziął się pomysł programowania obiektowego? Otóż okazało się, że programo-
wanie przy wykorzystaniu języków strukturalnych było niewystarczające do niektórych
zastosowań, np. symulacji zachowań statków. Żeby poradzić sobie z problemem, posta-
nowiono pogrupować statki w rożne klasy obiektów pływających. Każda z klas sama
odpowiadała za określanie własnych danych i zachowań.
Właściwości
Właściwości opisują obiekt. Są jego cechami. W oknie edytora Visual Basic są zgru-
powane w oknie Properties (właściwości). Właściwością obiektu w programie Excel
jest nazwa (ang. Name). Zawiera ona wartość identyfikującą obiekt (rysunek B.2).
Rysunek B.2.
Obiekt nosi nazwę
Arkusz1
Metody
Metoda jest operacją, którą można wykonać na obiekcie. Wykonuje ją nie użytkownik,
a program zapisany w języku VBA.
Arkusz wyświetlony w oknie programu Excel na pierwszym planie jest nazywany ar-
kuszem aktywnym. Jeżeli jednocześnie jest otworzonych kilka okien, aktywne jest to
okno, które zostało ostatnio kliknięte lub zostało wybrane po naciśnięciu kombinacji
klawiszy Alt+Tab.
Zdarzenia
Zdarzenie jest akcją, której wystąpienie obiekt wykrywa. Zdarzeniem może być np.
naciśnięcie klawisza (lub kombinacji klawiszy), kliknięcie wykresu, wpisanie danych
w komórce, ale także otwarcie lub zamknięcie skoroszytu.
Gdy akcja wystąpi, a użytkownik zdefiniował reakcję na nią, Excel uruchamia kod
z procedury obsługi zdarzenia. Na przykład po utworzeniu nowego skoroszytu w ko-
mórkach A1, A2 i A3 może zostać wpisany odpowiednio tekst: Lp., Towar, Cena.
374 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Kolekcje
Kolekcja to grupa obiektów tego samego typu zawartych w innym obiekcie. Na przykład
skoroszyt składa się z wszystkich arkuszy należących do tego zeszytu (rysunek B.3).
Rysunek B.3.
Skoroszyt zawiera pięć
arkuszy
Modele obiektowe
Pakiet Microsoft Office składa się z kilku programów: Access, Excel, Word. Każdy
z programów z uwagi na swoją specyfikę ma unikatowy model obiektowy.
Metoda kropkowa
Dostęp do metod, podobnie jak do właściwości, można uzyskać za pośrednictwem no-
tacji kropkowej. Chcąc na przykład skopiować zaznaczony obszar do schowka, użyj pole-
cenia Seletion.Copy (rysunek B.4).
Rysunek B.4.
Przed kropką znajduje się
informacja, czego dotyczy
działanie, a po kropce znajduje
się informacja, jakie działanie
należy wykonać
Jeżeli odwołanie dotyczy obiektu składowego, należy określić jego lokalizację. Do tego
celu jest także wykorzystywany zapis z kropkami.
Obiekty aktywne
Jeżeli na ekranie komputera jest wyświetlonych kilka okien, to znaki wpisane z klawiatury
będą odnosiły się do okna aktywnego (rysunek B.5). Okno aktywne jest widoczne na
pierwszym planie. Ma pasek tytułu w intensywniejszym kolorze niż okna nieaktywne.
Rysunek Z.1.
Im więcej problemów
projektant rozwiąże
i im solidniej to zrobi,
tym większa będzie
jego wiedza
Ostatnio na rynku pojawia się coraz więcej książek, które prezentują gotowe szablony
umożliwiające prowadzenie firmy przy wykorzystaniu edytora Word lub arkusza Excela.
Po uruchomieniu tego typu aplikacji na komputerze nikt nie będzie programistą. Będzie
najwyżej użytkownikiem ciekawego programu.
378 VBA dla Excela 2016 PL. 222 praktyczne przykłady
Jeżeli zaś spodziewałeś się, że dzięki tej książce zdobędziesz podstawy wiedzy umoż-
liwiające szybkie i prawidłowe rozwiązywanie problemów związanych z użytko-
waniem arkusza Excela za pomocą języka VBA — jest to książka dla Ciebie.
Skorowidz
sortowanie, 287
uaktywnienie, 317
kolumn, 259
kombinacji, 361
M
usuwanie formatowania, 193 konwertowanie, 325, 363 MacID, 326
usuwanie zawartości, 193, 194 losowa, 327 MACIERZ.ILOCZYN, 349
wstawienie, 319 okresów spłaty, 327 MACIERZ.ODW, 349
wypełnianie, 198, 319 okresów wymaganych przez MacScript, 326
zakres, 259 inwestycję, 361 Make Same Size, 110
zaznaczanie, 190 przesuwanie w lewo, 353 Makra, 60
zmiana zawartości, 269 przesuwanie w prawo, 353 makropolecenie, 10, 113, 302
komunikat, 164, 165, 308 reprezentująca czas, 328 blokowanie, 12
o błędzie, 119, 177, 178 sekund od północy, 328 dostępność, 20, 28
komunikowanie się procedur, 304 spacji, 327 edycja, 21, 38, 56, 73
koniec pliku tekstowego, 325 zaokrąglona, 327 klawisz skrótu, 20
kontrolka zespolona, 357 klawisz, 47
dodanie, 278 znaków, 184, 326 niebezpieczne, 81
opis, 259 LICZBA.CAŁK, 349 przycisk, 67
szerokość, 259 licznik, 231 rejestrowanie, 41, 59
tło, 259 Line Input #, 334 testowanie, 30, 45, 49, 62
usunięcie, 278 linefeed character, 154
uruchamianie przyciskiem, 31
wysokość, 259 lista, 246
uruchomienie, 320
kontynuowanie wyszukiwania, filtrowanie, 317
warunki początkowe, 18
rozwijana, 252
319 zapisywanie, 35, 51, 68
ListBox, 246, 255
konwertowanie liczb, 363 maksymalna długość ciągu
ListNames, 319
kopiowanie listy nieukrytych nazw, 319 znaków, 259
danych, 317 literówki, 245 małe litery, 326
komórek, 19, 26, 58, 202, LITERY.MAŁE, 349 MatchByte, 297
281, 284 LITERY.WIELKIE, 349 MatchCase, 288, 297
KOWARIANCJA, 349 LN, 349 MAX, 349
krok, 231 Load, 334 MAX.K, 349
kursor, wygląd, 259 Loc, 326 MaxLenght, 259
KURTOZA, 349 Lock, 334 MEDIANA, 349
KWARTYL, 349 LOF, 326 Members, 273
KWOTA, 349 Log, 326 Merge, 319
kwota LOG, 349 metoda, 190, 321, 373
odsetek, 326 LOG10, 349 Microsoft Office 2000, 9
spłaty pożyczki, 327 logarytm naturalny, 326 Mid, 183, 326, 334
lokalna tablica, 334 miejsce wystąpienia błędu, 126
lokalna zmienna, 334 miesiąc, 327
L Long, 120, 139, 333 MIESIĄC, 349
LongPtr, 120
Label, 254, 279 MIN, 349
LookAt, 296
Layout, 278 MIN.K, 349
LookIn, 296
LBound, 326 Loop, 162 MINUTA, 349
LCase, 326 LOS, 349 Minute, 326
Left, 259, 326 losowy adres, 235 minuty, 326
Len, 184, 326 LSet, 334 MIRR, 327, 349
Let, 334 LTrim, 185, 326 MkDir, 334
LEWY, 349 LUB, 349 mniejszy lub równy, 338
Library, 273 mniejszy niż, 338
LICZ.JEŻELI, 349 Ł mnożenie, 336
LICZ.PUSTE, 349 Mod, 336
liczba, 325, 326 łańcuch znaków, 327 MOD, 349
bajtów, 326 odwrócony, 328 modalność, 167
decymalna, 328 po konwersji, 328 Modules, 94
heksadecymalna, 328 łączenie ciągów znaków, 340 moduł prywatny, 334
384 VBA dla Excela 2016 PL. 222 praktyczne przykłady
MODUŁ.LICZBY, 349
moduły klas, 94
O Offset, 210
OK, 168, 169
modyfikacja obiekt, 372, 374 okno
arkusza, 272 drukowanie, 319 aplikacji, 332
zaznaczenia w arkuszu, 269 usunięcie, 318 dialogowe, 154, 174, 326
Month, 327 wycięcie, 318 komunikatu, 164, 165, 327
MonthName, 327 wyczyszczenie, 318 skoroszytu, 272
MouseDown, 278 zakres, 318, 320 tytuł, 155
MouseMove, 278 obiekt, 189 z kartami, 255
MousePointer, 259 aktywny, 375 z tekstem, 107
MouseUp, 278 OLE, 325 OLE, 324, 325, 326
msdn microsoft.com, 320 Range, 319 On Error, 175, 334
MsgBox, 107, 140, 164, 168, Object, 121, 189, 333 On Error GoTo 0, 175
175, 176, 178, 327 obliczenia iteracyjne, 213 On Error GoTo line, 175
MultiPage, 255 obraz, 255 On Error Resume Next, 175
mysz kopiowanie, 318 On...GoSub, 334
przemieszczenie wskaźnika, 278 obsługa On...GoTos, 334
wciśnięcie przycisku, 278 błędów, 334 OnKey, 273
zwolnienie przycisku, 278 zdarzeń, 325 OnTime, 273
obszar, dzielenie, 320 opcje, 255
obwiednia, 320 Open, 264, 265, 267, 334
N obwódka, 321 Operator, 293
NACHYLENIE, 349 ochrona arkusza, 149 opis
najmniejszy indeks tablicy, 326 Oct, 327 błędu, 180
największy indeks tablicy, 328 OCZYŚĆ, 349 zawijanie, 259
Name, 96, 334 ODCH.KWADRATOWE, 349 oprocentowanie dla okresu
napęd, bieżący, 332 ODCH.STANDARD.POPUL, spłaty pożyczki, 327
napis nad przyciskiem, 172 350 Option Base, 334
nazwa, 96 ODCH.STANDARDOWE, 350 Option Button, 255
komórki, 317 ODCH.ŚREDNIE, 350 Option Compare, 334
miesiąca, 327 ODCIĘTA, 350 Option Explicit, 131, 334
pliku lub katalogu, 325 odczyt Option Private, 334
negacja, 342 danych z otwartego pliku, Or, 342
NewChart, 264 334 ORAZ, 350
NewSheet, 264 danych z sekwencyjnego Order, 290
NewWorkbook, 272 pliku, 334 1, 288
Nie, 168, 170 pojedynczej linii z otwartego 2, 288
NIE, 349 pliku tekstowego, 334 3, 288
niebieski, 204 zawartości komórek, 320 OrderCustom, 288
nierównoważność logiczna, 342 odejmowanie, 336 Orientation, 288
nierówny, 338 odinstalowanie skoroszytu, 272 osobisty skoroszyt makr, 51
nieukryte nazwy, 319 odległość otwarcie
NORMALIZUJ, 349 od górnej krawędzi, 259 pliku tekstowego, 334
Not, 342 od lewej krawędzi, 259 skoroszytu, 272, 261, 264
notatki, wyczyszczenie, 318 odrzucenie zmian w tabeli
przestawnej, 269
Now, 230, 327
odwołanie, 75
P
NPer, 327
NPER, 349 odwrotny paleta, 103
NPV, 327, 349 cosecans hiperboliczny, 325 barw, 100
Null, 326 cotangens hiperboliczny, 325 Palette, 100, 103
numer tygodnia, 360 secans hiperboliczny, 325 Parameters, 321
sinus hiperboliczny, 325 Parse, 319
tangens hiperboliczny, 325 Partition, 327
odwrócony łańcuch znaków, 328 pasek przewijania, 255, 259
Skorowidz 385
znak, 324
liczby, 327
ZNAK.LICZBY, 352
Zoom, 278
Ź
z łańcucha, 326 zwolnienie źródło błędów, 320
z pliku, 326 klawisza, 278
ZNAK, 352 przycisku myszy, 278