You are on page 1of 74

Kurs VBA dla EXCELA

Kurs ten rozpocznę od opisu niektórych elementów środowiska w którym przyjdzie nam pracować. Jednym
z takich elementów jest pasek narzędzi Przybornik formantów dostarczający formanty ActiveX. Jest to jedno
z podstawowych narzędzi z których będziemy korzystać. W Przyborniku formantów zawarte są następujące
elementy:

• Tryb projektowania - za pomocą tego przycisku włączamy lub wyłączamy tryb projektowania.
Przycisk Tryb projektowania powinien być włączony jeżeli chcemy edytować, zmieniać właściwości
lub przypisać kod do formantów.
• Właściwości - po kliknięciu na ten przycisk wyświetlane jest okno z wartościami właściwości
zaznaczonego (aktywnego) w danym momencie formantu czy obiektu.
• Wyświetl kod - uruchamiany jest Edytor VisualBasic i wyświetlane jest okienko Kod programu
aktywnego elementu.
• Pole wyboru - tworzy pole, poprzez które użytkownik może wskazać, czy jakieś stwierdzenie jest
prawdziwe czy fałszywe. Jednocześnie w arkuszu można zaznaczyć więcej niż jedno pole wyboru.
• Pole tekstowe - przechowuje tekst, który użytkownik może wprowadzić lub zmienić.
• Przycisk polecenia - element z którego będziemy najczęściej korzystać, tworzy przycisk, który po
kliknięciu inicjuje akcję.
• Przycisk opcji - przycisk używany do wybierania jednej opcji z grupy opcji.
• Pole listy - pole zawierające listę elementów.
• Pole kombi - pole tekstowe zawierające pole listy rozwijanej. Można wybrać element z listy albo
wpisać własną pozycję.
• Przycisk przełącznika - tworzy przycisk, który można włączać i wyłączać.
• Przycisk pokrętła - przycisk, który może być połączony z komórką lub polem tekstowym. Aby
zwiększyć wartość, należy kliknąć strzałkę w górę, aby zmniejszyć wartość klikamy strzałkę w dół.
• Pasek przewijania - formant służący do przewijania zakresu wartości.
• Etykieta - często stosowany formant, pozwala umieścić tekst, którego użytkownik nie będzie mógł
zmienić, na przykład podpis pod ilustracją.
• Obraz - specjalny formant do wstawiania grafiki.
• Więcej formantów - jak sama nazwa wskazuje za pomocą tego przycisku uruchamiamy listę
dodatkowych formantów ActiveX.

Aby Przybornik formantów był widoczny w arkuszu Excela: z menu Widok arkusza wybierz polecenie Paski
narzędzi a następnie opcję Przybornik formantów. Innym sposobem jest kliknięcie na ikonę Przybornik
formantów w pasku narzędzi Visual Basic. Aby uaktywnić pasek narzędzi Visual Basic z menu Widok
1
wybieramy Paski narzędzi a następnie Visual Basic. Jeżeli chcemy dodać (wstawić) jakiś formant do arkusza
Excela: w Przyborniku formantów klikamy na przycisk odpowiadający formantowi, który chcemy dodać a
następnie miejsce w arkuszu gdzie ma się znajdować.

Słownictwo:

• Formant ActiveX - formant, taki jak pole wyboru lub przycisk, który oferuje opcje użytkownikom
albo uruchamia makra lub skrypty automatyzujące zadania.

Następnym elementem z którego będziemy często korzystać jest pasek narzędzi Visual Basic. Aby pasek
narzędzi Visual Basic był widoczny w arkuszu Excela: z menu Widok arkusza wybierz polecenie Paski
narzędzi a następnie opcję Visual Basic. W Pasku tym zawarte są następujące elementy:

• Uruchom makro - za pomocą tego przycisku możemy uruchomić, edytować lub usunąć istniejące
makro.
• Zarejestruj makro - przycisk pozwala na zarejestrowanie (nagranie, utworzenie) nowego makra. Po
zakończeniu rejestrowania makra klikamy na przycisk Zatrzymaj rejestrowanie.
• Zabezpieczenia - możemy ustawić poziom zabezpieczeń przed wirusami makr.
• Edytor Visual Basic - przycisk uruchamia Edytor Microsoft Visual Basic: Środowisko, w którym
można edytować zarejestrowane makra oraz pisać nowe makra i programy w języku Visual Basic for
Application. Jest to praktycznie właściwe środowisko naszej pracy w którym będziemy pisać kody
naszych programów.
• Przybornik formantów - pozwala wyświetlić i zamknąć pasek narzędzi Przybornik formantów
dostarczający formanty ActiveX. Pasek ten opisałem na poprzedniej stronie kursu.
• Tryb projektowania - za pomocą tego przycisku włączamy lub wyłączamy Tryb projektowania.
Przycisk Tryb projektowania powinien być włączony jeżeli chcemy edytować lub zmieniać
właściwości formantów.
• Microsoft Script Editor - po kliknięciu na przycisk uruchamiany jest Microsoft Script Editor program
używany do edytowania tekstu, tagów HTML i dowolnego kodu Microsoft Visual Basic Scripting
Edition (VBScript) na stronie dostępu do danych. W programie Script Editor można również
wyświetlić stronę w takiej postaci, w jakiej będzie się pojawiać w przeglądarce sieci Web. My na
razie nie będziemy korzystać z tego przycisku.

Słownictwo:

• makro - akcja lub zestaw akcji, którego można użyć do automatyzacji zadań. Makra są rejestrowane
w języku programowania Visual Basic for Applications.

Zanim jeszcze samodzielnie zaczniemy pisać programy, naszą przygodę z programowaniem w VBA
rozpoczniemy od zautomatyzowania często powtarzanych czynności. Jeżeli jakieś czynności są często
2
powtarzane w programie Microsoft Excel, można je zautomatyzować przy użyciu makra. Makro jest serią
poleceń i funkcji, które są przechowywane w module Visual Basic i mogą być uruchomione zawsze, gdy
zachodzi potrzeba wykonania danych czynności. Oczywiście odpowiednie makro należy wcześniej
utworzyć. Bez względu na to jaka jest Twoja wiedza na temat VBA (praktycznie żadnej wiedzy nie musisz
posiadać w tym temacie), możesz skorzystać z pewnego narzędzia do tworzenia makr tj. Rejestratora makr.

• makro - napisany lub zarejestrowany program przechowujący szereg poleceń Microsoft Excel,
którego można później użyć jako pojedynczego polecenia. Makra są przeznaczone do automatyzacji
złożonych zadań i zmniejszania liczby kroków wymaganych do wykonania często powtarzających
się zadań. Makra są rejestrowane w języku programowania Visual Basic for Applications. Makra
można także pisać bezpośrednio korzystając z edytora Visual Basic

Rejestrowanie makra:

Jak już wspomniałem makra rejestrujemy za pomocą Rejestratora makr. Rejestrator ma pewne wady, o
których przekonasz się w miarę nabywania doświadczenia. Ma jednak niepodważalną zaletę nie popełnia
błędów składni często spotykanych u początkujących programistów. Rejestrowanie makra a następnie
przeglądanie kodu jest też dobrym sposobem nauki języka VBA. Ja osobiście często korzystam z
Rejestratora makr do napisania jakiegoś fragmentu kodu który sprawia mi trudność lub w celach
poznawczych. Rejestrowanie makra możemy porównać do nagrywania muzyki przy użyciu magnetofonu.
Tak jak nagraną muzykę możemy później odtworzyć tak samo, aby powtórzyć zarejestrowane wcześniej
polecenia można uruchomić makro. Przed przystąpieniem do zarejestrowania makra, dobrze jest zaplanować
kolejne kroki i polecenia, które makro ma wykonywać. Jeśli podczas rejestracji zostanie popełniony błąd,
wykonane poprawki będą także zarejestrowane.

Sposób rejestrowania makr najlepiej przedstawić na przykładzie. Poniżej zarejestrujemy makro którego
zadaniem będzie wyczyszczenie zawartości kilku oddzielnych komórek (lub zakresów komórek) w arkuszu
Excela. Aby zarejestrować nasze makro wykonaj następujące czynności:

Sposób klasyczny:

1. Z menu Narzędzia wybierz Makro następnie kliknij na polecenie Zarejestruj nowe makro....
2. Powinno się otworzyć okno Rejestruj makro (patrz rysunek poniżej). W oknie tym możesz ustawić
następujące opcje rejestrowanego makra:

o W polu Nazwa makra: wpisz nazwa dla nowego makra (na przykład: Czyszczenie).

3
o W polu Klawisz skrótu: możesz określić skrót klawiaturowy po naciśnięciu którego makro
zostanie uruchomione. Ponieważ nasze makro będzie uruchamiane w inny sposób pole te
pozostawiamy bez zmian.
o Przechowuj makro w: w polu tym po wybraniu z listy możesz określić miejsce
przechowywania a tym samym dostępność makra. W naszym przypadku pole te też
pozostawiamy bez zmian.
o W polu Opis: możesz zmienić opis makra. Domyślnie Excel umieszcza tam datę
zarejestrowania makra oraz dane autora.
3. Kliknij na przycisk OK aby rozpocząć rejestrację.
UWAGA: od tego momentu wszystkie czynności jakie wykonasz w arkuszu będą zarejestrowane.
W obrębie arkusza powinien się pojawić specjalny pasek poleceń z dwoma przyciskami: Zatrzymaj
rejestrowanie i Odwołanie względne.
o Przycisk Zatrzymaj rejestrowanie umożliwia zakończenie rejestrowania makra w
odpowiednim dla Ciebie momencie.
o Wciśniecie przycisku Odwołanie względne spowoduje że adresy komórek będą
zapisywane względnie. Jeśli więc przemieścimy się z komórki A1 do B3, Excel zapamięta to
jako przejście z komórki znajdującej się o jedną kolumnę w prawo i dwa wiersze w dół.
Dzięki temu możemy tworzyć makro, które będzie na przykład wpisywało dowolny tekst w
komórce obok tej która jest aktywna w momencie uruchomienia makrodefinicji.
4. Pora na wykonanie odpowiednich czynności które będzie wykonywało nasze makro.
o Umieść kursor myszy na przykład w komórce B2 arkusza a następnie naciśnij przycisk Delete
na klawiaturze.
o Powtórz te czynność jeszcze dla kilku komórek arkusza lub zakresów komórek.
5. Po wykonaniu odpowiednich kroków kliknij na przycisk Zatrzymaj rejestrowanie.

Za pomocą paska narzędzi Visual Basic:

Innym sposobem którego ja używam jest uruchomienie rejestracji makra z poziomu paska narzędzi Visual
Basic. Pasek ten przedstawiłem na stronie pasek narzędzi Visual Basic. W pasku tym znajduje się na między
innymi przycisk Zarejestruj makro pozwala on na zarejestrowanie (nagranie, utworzenie) nowego makra.

1. Z menu Widok wybierz Paski narzędzi a następnie opcje Visual Basic, (jeżeli pasek nie jest
widoczny).
2. Z paska narzędzi Visual Basic wybierz przycisk Zarejestruj makro.
3. Powinno się otworzyć okno Rejestruj makro w oknie tym ustaw odpowiednie opcje.
4. Wykonaj pozostałe czynności jak w sposobie opisanym powyżej.
5. Aby zakończyć rejestrowanie makra kliknij na przycisk Zatrzymaj rejestrowanie, który znajduje się
w miejscu przycisku Zarejestruj makro w pasku narzędzi Visual Basic.

Uwaga: Aby zatrzymać rejestrowanie makra możemy użyć przycisku Zatrzymaj rejestrowanie zarówno z
paska narzędzi Visual Basic lub jak w pierwszym sposobie z paska Zatrzymaj rejestrowanie.

Uruchamianie makra:

Utworzyliśmy makro które czyści zawartość określonych komórek arkusza, aby zarejestrowane czynności
mogły być automatycznie wykonane nasze makro należy uruchomić. Zarejestrowane makra można
uruchomić na wiele sposobów. Do uruchomienia makra możemy wykorzystać odpowiednie paski narzędzi
różnego rodzaju obiekty czy zdarzenia lub też inne makro. Sposób uruchamiania zależy od wiedzy i
inwencji autora makra oraz konkretnych potrzeb. Poniżej przedstawiam niektóre sposoby uruchamiania
makra.

4
Tradycyjny start:

1. Z menu Narzędzia wybierz Makro a następnie kliknij na polecenie Makra... (lub wciśnij Alt+F8).
2. W nowo otwartym oknie dialogowym Makro (patrz rysunek poniżej) zaznacz odpowiednią nazwę
makra (w naszym przypadku: Czyszczenie) i kliknij na przycisk Uruchom. Zostanie uruchomione
makro które wykona wszystkie czynności jakie wykonywaliśmy podczas jego rejestracji.

Za pomocą okna dialogowego Makro po kliknięciu na odpowiedni przycisk możemy wykonywać różne
czynności związane z makrem. Jeżeli chcemy na przykład przeglądać lub modyfikować kod makra, klikamy
na przycisk Edycja.

Za pomocą paska narzędzi Visual Basic:

1. Z menu Widok wybierz Paski narzędzi a następnie opcje Visual Basic, (jeżeli pasek nie jest
widoczny).
2. Z paska narzędzi Visual Basic wybierz przycisk Uruchom makro.
3. W nowo otwartym oknie dialogowym Makro zaznacz odpowiednią nazwę makra (czyli:
Czyszczenie) i kliknij na przycisk Uruchom.

Za pomocą obiektu graficznego:

Jak już wspomniałem makra możemy uruchamiać na wiele sposobów, możemy w tym celu wykorzystać też
różnego rodzaju obiekty graficzne. Poniżej przedstawiam sposób uruchomienia makra za pomocą obiektu
WordArt.

1. Z menu Wstaw wybierz Obraz (Rysunek) a następnie opcje WordArt....


2. W oknie Galeria WordArt wybierz odpowiedni styl i naciśnij OK.
3. W następnym oknie Edytuj WordArt w polu Tekst: wpisz na przykład: WYCZYŚĆ i naciśnij
przycisk OK.
4. Dopasuj jeszcze rozmiar i położenie obiektu WordArt.
5. Umieść kursor myszy na naszym tekście (obiekcie WordArt) następnie kliknij prawym przyciskiem
myszy i menu podręcznego wybierz Przypisz makro....

5
6. W nowo otwartym oknie dialogowym Przypisz makro zaznacz odpowiednią nazwę makra (w naszym
przypadku: Czyszczenie) i kliknij na przycisk OK.

7. Kliknij lewym przyciskiem myszy na obiekt WordArt celem uruchomienia makra.

Jeżeli w oknie dialogowym Przypisz makro klikniemy na przycisk Edycja możemy również przeglądać i
modyfikować kod makra.

Aby przetestować nasz przykład zarejestruj makro, wprowadź jakieś wartości do komórek arkusza które
makro będzie czyściło a następnie wykorzystując odpowiedni sposób uruchom makro. Spróbuj też samodzielnie
zarejestrować i uruchomić kilka innych makr.

Pora na samodzielne napisanie pierwszego programu w VBA. W przykładzie po naciśnięciu na Przycisk


polecenia wyświetlany będzie napis w komórce arkusza Excela. Za pomocą tego przykładu zapoznam Was
wstępnie ze środowiskiem VBA, w następnych stronach przedstawię opis tego środowiska i jak z niego
korzystać. Przykład jest prosty i postępując zgodnie punktami powinno się go z powodzeniem wykonać. Jak
to jest w zwyczaju w pierwszym stworzonym przez nas programie powitamy świat.

Kod pierwszego programu:


Private Sub CommandButton1_Click()
Range("A1").Value = "WITAJ ŚWIECIE, WŁAŚNIE NARODZIŁ SIĘ NOWY PROGRAMISTA"
End Sub

Kroki:

• Uruchom Microsoft Excel.


• Z menu Widok wybieramy Paski narzędzi a następnie Przybornik formantów (jeżeli nie jest
widoczny).
• W Przyborniku formantów wyszukaj i kliknij na ikonę Przycisk polecenia a następnie miejsce w
arkuszu gdzie chcesz go umieścić. Ikona Tryb projektowania w przyborniku powinna się uaktywnić.
• Kliknij dwa razy lewym przyciskiem myszy na wstawiony przycisk (ikona Tryb projektowania w
przyborniku powinna być aktywna). Powinien uruchomić się Edytor Visual Basic z widocznym
6
oknem Kod programu (Code), w oknie tym zawarta powinna być deklaracja procedury Click naszego
Przycisku polecenia.
• W procedurze zdarzenia Click Przycisku polecenia wpisz kod:

Range("A1").Value = "WITAJ ŚWIECIE, WŁAŚNIE NARODZIŁ SIĘ NOWY PROGRAMISTA"

• Cały kod przykładu powinien mniej więcej wyglądać jak na rysunku poniżej (jeżeli posiadasz np.
wersje Excela 97 menu Edytor Visual Basic może być w języku polskim):

• Pozamykaj wszystkie okienka, zapisz i zamknij dokument.


• Po ponownym otwarciu (z opcjo Włącz makra) kliknij na nasz Przycisk polecenia i przetestuj
działanie przykładu.
• Celem ponownego przetestowania, usuń zawartość komórki A1 arkusza i ponownie kliknij na
przycisk.

Objaśnienia linii kodu:

• Private Sub CommandButton1_Click() - deklarowana jest procedura w której słowo Private oznacza
że dana zmienna widoczna jest tylko w danym module. Zaś Sub to słowo kluczowe Visual Basic
określające, że dany blok to procedura. Procedura ta będzie wykonywana przy zaistnieniu zdarzenia
Click (kliknięcie) naszego Przycisku polecenia CommandButton1. Inaczej mówiąc jeżeli użytkownik
kliknie na Przycisk polecenia CommandButton1, zostaną wykonane instrukcje zawarte poniżej aż do
słów End Sub, które wskazują koniec bloku kodu.
• Range("A1").Value = "WITAJ ŚWIECIE, WŁAŚNIE NARODZIŁ SIĘ NOWY PROGRAMISTA" -
w tej linii kodu określamy zawartość (wartość) komórki A1 arkusza czyli wstawiamy do niej nasz
tekst powitania.
• End Sub - to słowo kluczowe Visual Basic wskazujące koniec bloku kodu.

Słownictwo:

• moduł - jest to zbiór deklaracji, instrukcji, procedur przechowywanych razem jako całość i
opatrzonych jedną nazwą. Są dwa rodzaje modułów, najczęściej stosowanym jest moduł
standardowy, w którym umieszcza się kod zwykłych procedur. Drugi rodzaj to moduł klasy, który
służy do definiowania obiektów.
• procedura - jest to najmniejsza część kodu którą można uruchomić niezależnie od innych części
kodu, procedura jest to sekwencja deklaracji i instrukcji w module wykonywana jako jedna całość.
Procedury w języku Visual Basic obejmują procedury Sub i procedury Function.
• zdarzenie - akcja rozpoznawana przez obiekt (taka jak kliknięcie myszą czy naciśnięcie klawisza),
dla której można zdefiniować odpowiedź. Zdarzenie może być spowodowane działaniem
7
użytkownika, poleceniem języka Visual Basic lub działaniami systemu. Korzystając z właściwości
skojarzonych ze zdarzeniami można ustalić, aby odpowiedzią na zdarzenie było uruchomienie
makra, wywołanie funkcji języka Visual Basic lub uruchomienie procedury zdarzenia.
• zmienna - miejsce o określonej nazwie służące do przechowywania danych. Zmienna zawiera dane,
które można modyfikować podczas wykonywania programu. Każda zmienna ma nazwę
jednoznacznie ją identyfikującą w obrębie danego poziomu zakresu.

Na tej stronie przedstawiam Edytor Visual Basic - środowisko, w którym można edytować zarejestrowane
makra oraz pisać nowe makra i programy w języku Visual Basic for Application. Jest to praktycznie
właściwy warsztat naszej pracy w którym będziemy pisać kody programów (jeżeli posiadasz np. wersję
Excela 97 menu Edytor Visual Basic powinno być w języku polskim). Aby uruchomić Edytor Visual Basic
możemy użyć kilku sposobów:

• Z menu Narzędzia dokumentu Excela wybieramy opcję Makro a następnie Edytor Visual Basic.
• Będąc w arkuszu Excela możemy użyć kombinacji klawiszy skrótu Alt+F11.
• Jeżeli mamy widoczny pasek narzędzi Visual Basic (opisałem go wcześniej) wybieramy z niego
przycisk Edytor Visual Basic.

Na rysunku poniżej przedstawiam nasz edytor z rozmieszczonymi kilkoma oknami - opiszę je w dalszej
części strony.

Aby zamknąć Edytor Visual Basic możemy też użyć kilku sposobów:

• Z menu File edytora wybieramy polecenie Close and Return to Microsoft Excel.
8
• Możemy użyć kombinacji klawiszy skrótu Alt+Q.
• Możemy zamknąć Edytor tak jak zamykamy każde okno.

Okno Project:

Okno Project (Eksplorator projektów) wyglądem i działaniem przypomina Explorator Windows. Wyświetla
hierarchiczny spis wszystkich elementów projektu, okno to służy do poruszania się pomiędzy elementami
projektu. Aby w Edytorze Visual Basic otworzyć zamknięte okno Project:

• Z menu View wybieramy opcję Project Explorer.


• Możemy użyć kombinacji klawiszy skrótu Ctr+R.
• Kliknij ikonę Project Explorer na pasku narzędzi (pasek standard).

Górna część okna zawiera trzy jakby przyciski:

• View Code - otwiera moduł kodu zaznaczonego w oknie obiektu.


• View Obiect - możemy użyć tego przycisku aby otworzyć zaznaczony w oknie obiekt na przykład:
formularz lub powrócić do arkusza Excela jeżeli jest on zaznaczony (jak na rysunku powyżej).
• Toggle Folders - ukrywa lub pokazuje foldery obiektów przy czym stale widoczne są zawarte w nich
poszczególne elementy. Jeżeli usuniemy foldery, obiekty wyświetlane będą w porządku
alfabetycznym.

Okno Properties:

Okno Properties (Właściwości) - wyświetla właściwości opisujące zaznaczony (aktywny) obiekt, oczywiście
wartości tych właściwości można zmieniać modyfikując w ten sposób zaznaczony obiekt. Aby w edytorze
wyświetlić okno Properties:

• Naciśnij klawisz F4.


• Z menu View wybieramy opcję Properties Window.
• Kliknij przycisk Properties Window na pasku narzędzi (standard).

9
W górnej części okna znajduje się lista rozwijana. Lista ta daje nam możliwość wyboru obiektu (po
kliknięciu na strzałkę), którego właściwości chcemy wyświetlić. Poniżej znajdują się dwie karty właściwości
za pomocą których możemy wyświetlić właściwości obiektu alfabetycznie lub według kategorii. Lewa
kolumna każdej z kart (patrząc od strony użytkownika) jest zbiorem nazw parametrów określającym nasz
element, zaś prawa strona to wielkości i właściwości tych parametrów.

Okno Code:

Okno Code (Kod programu) - służy do wpisywania kodu programu w języku Visual Basic, jak również do
przeglądania i edycji programu. Okno to będzie chyba najczęściej przez nas używane. Możemy otworzyć
tyle okien kodu programu ile program ma modułów. Aby w edytorze otworzyć okno kodu programu, w
oknie Project kliknij dwukrotnie lewym przyciskiem myszy odpowiedni obiekt. Innym sposobem jest
zaznaczenie odpowiedniego obiektu w oknie Project a następnie:

• Z menu View wybierz pozycję Code.


• Naciśnij klawisz F7.
• kliknij ikonę View Code w oknie Project.
• Kliknij obiekt prawym przyciskiem myszy i z menu kontekstowego wybierz pozycję View Code.

10
W górnej części okna możemy wyróżnić dwa elementy:

• Pole (lista rozwijana) Obiect - znajduje się z lewej (patrząc od strony użytkownika) części okna i
pokazuje listę (po kliknięciu na strzałkę) związanych obiektów. Jeżeli z listy rozwijanej Obiect
wybierzesz nazwę obiektu , VBA utworzy szablon domyślnej procedury tego obiektu.
• Pole (lista rozwijana) Procedure - prawa część okna, pokazuje listę możliwych zdarzeń związanych z
zaznaczonym obiektem w polu Obiect.

Należy wspomnieć jeszcze o dwóch przyciskach umieszczonych w lewej dolnej części okna. Przycisk
Procedure View, który wyświetla tylko wybraną procedurę. Drugi przycisk Full Module View wyświetla
całość kodu modułu.

Miedzy opisanymi wyżej oknami możemy przedstawić kilka zależności:

• Jeżeli zmienimy zaznaczenie w oknie Project, w oknie Properties nastąpi analogiczna zmiana.
• Gdy w oknie Project klikniemy dwukrotnie lewym przyciskiem myszy na określony obiekt, otworzy
się okno Code (moduł kodu) danego obiektu.
• Gdy mamy otwartych kilka okien Code, przy przechodzeniu z jednego okna Code w inne
analogiczna zmiana nastąpi w Oknie Project jak i w oknie Properties.

Po zapoznaniu się z Edytorem Visual Basic możemy zająć się tworzeniem programu. Na tej stronie
przedstawię z jakich podstawowych części składa się program VBA.

Program VBA złożony jest z instrukcji (rozkazów), które w procesie kompilacji przetwarzane są na kod
wykonywalny zrozumiały dla procesora. Instrukcje te wykonywane są w określonym porządku
zdefiniowanym przez programistę. Pojedynczą instrukcje możemy nazwać zdaniem języka VBA.
Oczywiście zdanie takie musi być odpowiednio zbudowane, ale o tym w dalszej części kursu. Informacyjnie
tylko podam że instrukcja może zawierać słowa kluczowe, wyrażenia, stałe, operatory oraz zmienne.
Pojedyncza instrukcja może np. zadeklarować zmienną, ustawić wartość lub wykonać określoną operację.

Instrukcje programu zorganizowane są w procedury, moduły i projekty.

11
• Procedura jest bardzo ważną częścią programu, ponieważ aby kod mógł być wykonany należy
umieścić go w procedurze. Jest to najmniejsza część kodu którą można uruchomić niezależnie od
innych części kodu. Procedura składa się z przynajmniej jednej instrukcji umieszczonej między
dwiema specjalnymi instrukcjami: z których pierwsza z nich deklaruje procedurę a ostatnia ją
zamyka. Więcej informacji na temat procedur znajdziesz na stronie Procedury.
• Moduł zawiera z jedną lub więcej procedur oraz sekcje deklaracji w której umieszczamy instrukcje
wspólne dla w wszystkich procedur tego modułu. Możemy wyróżnić dwa rodzaje modułów: moduł
standardowy i moduł klasy.
• Projekt obejmuje wszystkie moduły, formularze, obiekty aplikacji macierzystej dokumentu oraz sam
dokument.

Programy VBA mogą być bardzo skomplikowane, mogą zawierać wiele instrukcji i procedur
rozmieszczonych w rożnych modułach a nawet projektach. My na razie nie będziemy tworzyć tak
skomplikowanych programów.Najprostszy program składa się z jednej procedury w której jest jedna
instrukcja, procedura ta umieszczona jest w module co daje nam już cały projekt. Poniżej
przedstawiam kod takiego programu, składa się on z jednej procedury o nazwie Powitanie, w której
umieszczona jest jedna instrukcja. Instrukcja ta wyświetla okienko komunikatu i z napisem: Witam i
życzę miłej zabawy.

Sub Powitanie()
MsgBox "Witam i życzę miłej zabawy"
End Sub

Jak już wspomniałem procedury zorganizowane są w modułach. Aby umieścić kod przykładu w module
wykonaj następujące czynności:

• Uruchamiamy Microsoft Excel.


• Z menu Widok wybieramy Paski narzędzi a następnie opcje Visual Basic (jeżeli pasek nie jest
widoczny).
• Z paska narzędzi Visual Basic wybieramy przycisk Edytor Visual Basic.
• W nowo otwartym oknie Microsoft Visual Basic-Zeszyt1 z menu View (Widok) wybieramy opcję
ProjectExplorer (Eksploator projektu). Powinno się otworzyć okno Project-VBAProject (Projekt-
VBAProject) oczywiście punktu tego nie wykonujemy, jeżeli okienko było wcześniej otwarte.
• Następnie z menu Insert (Wstaw) wybieramy opcję Module (Moduł). Wstawiony obiekt Module1
(Moduł1) powinien się pojawić oknie Project-VBAProject. Powinno się też pojawić okno Zeszyt1-
Module1(Code) (Zeszyt1-Moduł1(Kod programu)). Jeżeli okno się nie pojawi aby je uaktywnić w
oknie Project-VBAProject klikamy dwa razy lewym przyciskiem myszy na obiekt Module1
(Moduł1).
• W nowo otwartym oknie Zeszyt1-Module1(Code) (Zeszyt1-Moduł1(Kod programu)) piszemy
(wstawiamy) kod z przykładu. Całość powinna wyglądać podobnie jak na rysunku poniżej.

12
Jest wiele sposobów uruchomienia kodu programu zależy to od pewnych warunków na przykład w jakiego
typu procedurze czy module umieszczone są nasze instrukcje. Ponieważ nasza procedura jest podprogramem
bez parametrów możemy potraktować ją jak makro i wykorzystać przycisk z paska narzędzi Formularze.
Aby tego dokonać wykonaj następujące czynności.

• Zamykamy Edytor VisualBasic (Alt+Q) i powracamy do Microsoft Excel.


• Z menu Widok dokumentu Excela wybieramy Paski narzędzi a następnie opcję Formularze.
• Z paska narzędzi Formularze wybieramy ikonę Przycisk a następnie miejsce w arkuszu gdzie chcemy
go umieścić.
• Powinno się otworzyć okno Przypisz makro, (jeżeli okno się nie otworzy klikamy prawym
przyciskiem myszy na nasz wstawiony przycisk i wybieramy opcję Przypisz makro...). W oknie tym
zaznaczamy nazwę Powitanie i klikamy przycisk OK.
• Kliknij na jakieś miejsce w arkuszu (celem zlikwidowania zaznaczenia przycisku) a następnie na
przycisk (Przycisk 1) i przetestuj działanie przykładu.

• Uwaga: - w dalszych częściach kursu często będę stosował procedury zdarzenia. Procedury tego
typu są automatycznie wykonywane przy zaistnieniu pewnego zdarzenia związanego z określonym
obiektem np. formantem z Przybornika formantów.

Dla dociekliwych:

A oto bardziej rozbudowany kod tej samej procedury Powitanie. W przykładzie oprócz wyświetlenia
napisu powitania, wyświetlana jest bieżąca data pobierana z systemu Twojego komputera.

Sub Powitanie()
Dim MojaData
MojaData = Format(Date, "Long Date")
MsgBox "Witam dziś mamy " & MojaData & ". Pozdrawiam i życzę miłej zabawy."
End Sub

Przechodzimy do następnej części kursu w której zapoznamy się procedurami. Być może nie jest to zbyt
ciekawy temat ale znając zasady pisania procedur łatwiej nam będzie zrozumieć i pisać programy VBA.

• Procedura - jest to najmniejsza część kodu która posiada własną nazwę, jest to też najmniejsza część
kodu którą można uruchomić niezależnie od innych części kodu. Procedura jest bardzo ważną
częścią programu aby kod mógł działać należy umieścić go w procedurze. Przypomnij sobie
poprzednie strony w których kody przykładów umieszczane były właśnie w procedurach. Procedura
13
składa się z instrukcji deklarującej procedurę, linii kodu wykonywanych wewnątrz procedury oraz
instrukcji zamykającej.

Typy procedur:

Najogólniej procedury możemy podzielić na dwa typy tj. podprogramy i funkcje.

• Podprogram - jest to podstawowy typ procedur języka VBA. Procedurę deklarujemy za pomocą
słowa kluczowego Sub, instrukcja End Sub zamyka procedurę. Instrukcja deklarująca procedurę
kończy się parą nawiasów - można w niej umieszczać parametry podprogramu. Jest to typ procedury,
który można uruchomić niezależnie od innych procedur. Procedury tego typu wykonują akcje, lecz
nie zwracają wartości. Podprogram może wywołać inną procedurę.
• Funkcja - procedura deklarowana za pomocą słowa kluczowego Function, instrukcja End Function
kończy procedurę. Funkcja może pobierać argumenty które są do niej przekazywane np. przez
procedurę wywołującą. Procedura Function jest podobna do procedury Sub, jednak w
przeciwieństwie do podprogramu zwraca wartość np. do procedury która ją wywołała.

Strona ta ogólnie omawia procedury, ale aby obraz był pełniejszy jeszcze kilka informacji chciałbym
przekazać.

• Innym typem procedury którym na razie nie będziemy się zajmować jest Procedura właściwości,
deklarujemy ją za pomocą słowa kluczowego Property i służy do modyfikowania lub odczytania
wartości właściwości.
• Pracując w Excelu mamy możliwość nagrywania makr, powinniśmy wiedzieć że Makro jest
podprogramem z tym że bez parametrów.
• W naszych przykładach często będziemy stosować też Procedurę zdarzenia. Składnia procedury
zdarzenia jest podobna do podprogramu czyli procedury zadeklarowanej za pomocą słowa
kluczowego Sub.

Przykład podprogramu:

Poniżej przedstawiam przykład prostego podprogramu. Procedura ta wykonuje tylko jedną czynność,
wyświetla okienko komunikatu z informacją aby użytkownik wprowadził wartość numeryczną większą od
zera.

Sub BłędnaWartość()
MsgBox "Wprowadź wartość numeryczną większą od zera"
End Sub

Wywołanie podprogramu:

Jest wiele sposobów uruchomienia podprogramu, poniżej przedstawiam kilka z nich.

• Podprogram można wywołać (uruchomić) z innego podprogramu. Aby wywołać podprogram z


innego podprogramu należy w procedurze wywołującej wpisać instrukcję zawierającą jego nazwę.
Sposób ten wykorzystałem w dalszej części strony w przykładzie z punku strony "Dla dociekliwych".
• Jeżeli podprogram przez nas napisany nie posiada parametrów możemy wywołać go tak jak
uruchamia się makro. Będąc w arkuszu Excela naciskamy kombinacje klawiszy Alt + F8, w nowo
otwartym oknie wybieramy nazwę odpowiedniej procedury a następnie przycisk Uruchom.
• Możemy odpowiednią procedurę (bez parametrów) przypisać do Przycisku z paska narzędzi
Formularze. Sposób ten opisany jest na stronie Instrukcja For... Next.

14
Przykład funkcji:

Przykład funkcji jest również bardzo prosty. Nasza funkcja oblicza pole kwadratu w którym długość boku
kwadratu określona jest przez parametr bok. Jak już wspomniałem funkcja zwraca pewną wartość. Aby
funkcja mogła zwrócić wartość, wewnątrz funkcji wartość ta musi zostać przypisana do nazwy tej funkcji.
W przykładzie poniżej do nazwy funkcji PoleKwadratu przypisujemy wartość jako daje nam wynik
mnożenia parametru bok. Oczywiście wartość zwróconą przez funkcje możemy wykorzystać w instrukcjach
np. w procedurze wywołującej.

Function PoleKwadratu(bok)
PoleKwadratu = bok * bok
End Function

Wywołanie funkcji:

Funkcje można wywołać (uruchomić) z podprogramu. Aby wywołać funkcje z podprogramu w procedurze
wywołującej do zmiennej przypisujemy nazwę funkcji, oczywiście w nawiasach podajemy też potrzebne
argumenty. Jak wiemy funkcja zwraca wartość dlatego poprzez przypisanie w procedurze wywołującej
nazwy funkcji do zmiennej to do tej zmiennej przypisujemy wartość zwracaną przez podaną funkcje. Za
pomocą tego sposobu wywołałem funkcje w punkcie strony "Dla dociekliwych".

Innym sposobem wywołania funkcji jest uruchomienie jej z poziomu arkusza Excela, poprzez wstawienie
funkcji do komórki arkusza. Funkcje przez nas napisaną (umieszczoną w module standardowym)
wstawiamy do arkusza tak samo jak każdą funkcje wbudowaną. Załóżmy ze chcemy wstawić przedstawioną
wcześniej funkcję PoleKwadratu.

• Zaznaczamy dowolną komórkę Arkusza Excela np. H12.


• Z Menu Wstaw wybieramy opcje Funkcja.
• W nowo otwartym oknie z pola Kategoria funkcji: wybieramy kategorie Użytkownika, następnie z
pola Nazwa funkcji: nazwę naszej funkcji PoleKwadratu i naciskamy OK (nazwy pól w tym oknie
mogą być trochę inne od podanych, zależy to jaką wersję Excela posiadasz).
• W następnym oknie wpisujemy argumenty funkcji, możesz tam wpisać odpowiednie wartości lub
nazwę komórki z której wartości mają być pobierane np. jako argument wpisujemy B12, naciskamy
przycisk OK.
• Jeżeli jako argument podałeś adres komórki, wpisz przykładowe wartości do komórki B12 i
przetestuj działanie funkcji.

• Uwaga - Na tej stronie często używam pojęć parametr i argument. Parametr pełni role zmiennej i
jest rozpoznawany wewnątrz procedury. Parametry procedury podajemy deklarując procedurę.
Umieszczamy je w nawiasach po nazwie procedury. Jeżeli procedura posiada kilka parametrów
oddzielamy je przecinkiem. Argument zaś jest to wartość jaka przekazujemy do parametru danej
procedury. Argumenty podajemy np. w instrukcji wywołującej procedurę. W instrukcji wywołującej
procedurę po nazwie procedury podajemy odpowiednie argumenty umieszczamy je w nawiasach i
oddzielając przecinkiem

Dla dociekliwych:

Dla dociekliwych przedstawiam procedurę (podprogram) ObliczPole. Procedura ta jest przykładem


wywołania podprogramu i funkcji.

15
Opis przykładu:

W przykładzie obliczamy pole kwadratu. Po uruchomieniu procedury wyświetlane jest okienko dialogowe w
które możemy wpisać jakieś wartości. W pierwszej kolejności sprawdzamy czy wartość wprowadzona jest
wartością numeryczną. Jeżeli nie jest to wartość numeryczna np. litera uruchomiana jest procedura
BłędnaWartość, która wyświetla okienko komunikatu z informacją aby użytkownik wprowadził wartość
numeryczną większą od zera. Jeżeli jest to wartość numeryczna np. liczba sprawdzamy czy wartość ta jest
większa od zera. Jeżeli wartość wprowadzona jest wartością numeryczna większa od zera uruchomiana jest
funkcja PoleKwadratu. Jeżeli wartość wpisana jest np. liczbą ujemną również uruchomiana jest procedura
BłędnaWartość. Przy okazji przykładu mamy pierwszy kontakt z komentarzem umieszczonym w kodzie
programu (kolor zielony). Temat komentarzy przedstawię w dalszych częściach kursu.

Kod przykładu:

Sub ObliczPole()
Dim wartość, pole
wartość = InputBox("Podaj długość boku kwadratu do obliczenia pola
powierzchni")
If IsNumeric(wartość) = True Then
If wartość > 0 Then
pole = PoleKwadratu(wartość) ' wywołujemy funkcje PoleKwadratu.
MsgBox "Pole kwadratu wynosi " & pole
Else
BłędnaWartość ' wywołujemy podprogram BłędnaWartość.
End If
Else
BłędnaWartość ' wywołujemy podprogram BłędnaWartość.
End If
End Sub

kroki:

Aby wykonać przykład wstaw w module standartowym kody z wszystkich przykładów na tej stronie. Dla
zasady przedstawiam kroki do wykonania.

• Uruchom Microsoft Excel.


• Z menu Widok wybieramy Paski narzędzi a następnie opcje Visual Basic, (jeżeli pasek nie jest
widoczny).
• Z paska narzędzi Visual Basic wybieramy przycisk Edytor Visual Basic.
• W nowo otwartym oknie Microsoft Visual Basic-Zeszyt1 z menu Insert (Wstaw) wybieramy opcję
Module (Moduł). Powinno się pojawić okno Zeszyt1-Module1(Code) (Zeszyt1-Moduł1(Kod
programu)).
• W nowo otwartym oknie Zeszyt1-Module1(Code) (Zeszyt1-Moduł1(Kod programu)) piszemy
(wstawiamy) kolejną kody z wszystkich przykładów na stronie.
• Zamykamy Edytor VisualBasic (Alt+Q) i powracamy do Microsoft Excel.
• Będąc w arkuszu Excela naciskamy kombinacje klawiszy Alt + F8, w nowo otwartym oknie
wybieramy nazwę ObliczPole a następnie przycisk Uruchom.
• Powinna się pojawić okienko dialogowe. Wpisz w nim przykładowo wartość i przetestuj działanie
przykładu.

Informacje dodatkowe:

Procedury zdarzenia:

16
Jak już wspomniałem w czasie tego kursu do przetestowania przykładów często będziemy stosować
Procedurę zdarzenia. Procedura taka wykonywana jest automatycznie przy zaistnieniu określonego
zdarzenia związanego z konkretnym obiektem. Więcej informacji na temat Procedury zdarzenia znajdziesz
w dalszej części kursu na stronie Zdarzenia. Informacyjnie tylko podam że w składni procedury zdarzenia
słowo Private oznacza, że procedura ta może być dostępna tylko dla procedur umieszczonych w tym samym
module.

Zakres procedury:

Zakres określa w których częściach programu procedura jest widoczna i z jakich części programu można ją
wywołać. Temat zakresu omówię w dalszej części kursu po omówieniu tematu Modułu. Nadmienię tylko że
standardową procedura VBA posiada zakres publiczny (z wyjątkiem procedury zdarzenia). Zakres publiczny
określa to że procedurę można wywołać (uruchomić) z dowolnej części programu.

Słownictwo:

• argument - stała, zmienna lub wyrażenie przekazywane do procedury.


• komentarz - dodany do kodu programu tekst, wyjaśniający sposób działania kodu programu.
• parametr - nazwa zmiennej, pod którą argument przekazywany do pewnej procedury jest w tej
procedurze rozpoznawany. Zmienna otrzymuje przekazywany do procedury argument, a jej zakres
działania kończy się wraz z końcem procedury.
• właściwość - opatrzony nazwą atrybut obiektu. Właściwości definiują takie cechy obiektu, jak np.
rozmiar, kolor i położenie na ekranie, a także stan obiektu, na przykład to, czy jest on aktywny czy
nieaktywny. Właściwości możemy określać (zmieniać) w oknie właściwości lub za pomącą języka
Visual Basic.
• zmienna - opatrzone nazwą miejsce w pamięci do przechowywania danych, które mogą ulegać
modyfikacjom w trakcie wykonywania programu. Każda zmienna zaopatrzona jest w unikatową
nazwę, która identyfikuje ją w obrębie danego zakresu.

Naukę języka VBA rozpocznę od przedstawienia instrukcji If... Then... Else. Jest to instrukcja bardzo
pospolita (prawdopodobnie najczęściej stosowana instrukcja warunkowa), dlatego też często nie zdajemy
sobie sprawy z jej ważności. Instrukcja If... Then... Else warunkowo wykonuje blok instrukcji: jeśli pewien
warunek jest spełniony (ma wartość True), należy wykonać pewien zestaw poleceń, w przeciwnym zaś
przypadku gdy warunek jest fałszywy (ma wartość False) program powinien wykonać inny blok poleceń.
Instrukcja ta ma wiele postaci, poniżej przedstawiam podstawową jej formę.

Składnia:
If warunek Then
[blok kodu wykonywany w przypadku gdy warunek jest spełniony]
Else
[blok kodu wykonywany w przypadku gdy warunek nie jest spełniony]
End If

Objaśnienie:

• If oraz Then - to słowa kluczowe języka VBA będące swego rodzaju nawiasami warunku.
• warunek - jest wyrażeniem logicznym lub zmienną dającą wartość True (prawda) lub False
(fałsz).

17
• Else - słowo kluczowe wstawiane pomiędzy ostatnią instrukcją, która ma być wykonana jeżeli
warunek jest prawdziwy oraz pierwszą instrukcją, która ma być wykonana jeżeli warunek jest
fałszywy.
• End If - to słowa kluczowe zaznaczające koniec bloku instrukcji If... Then... Else.

W najprostszy sposób naszą instrukcje możemy przetłumaczyć: Jeżeli coś jest prawdą to wykonaj pewne
czynności jeżeli nie to wykonaj inne czynności.

Przykład kod przykładu:

Private Sub CommandButton1_Click()


If Range("A1").Value = 0 Then
Range("A2").Value = "wartość wynosi zero"
Else
Range("A2").Value = "wartość jest różna od zera"
End If
End Sub

Przykład opis przykładu:

W powyższym przykładzie jeżeli wartość komórki A1 arkusza wynosi 0 (zero), w komórce A2 wyświetlany
jest napis: wartość wynosi zero. W przeciwnym przypadku w komórce A2 wyświetlany jest napis:
wartość jest różna od zera. Zaznaczam, że przykład powstał dla zobrazowania działania instrukcji
If... Then... Else i nie posiada np. obsługi błędów. Dlatego dla zagwarantowania prawidłowego działania
przykładu w komórce A1 powinny znajdować się wartości numeryczne. Celem przetestowania przykładu
wykonaj następujące czynności:

• Uruchom Microsoft Excel.


• Z menu Widok wybieramy Paski narzędzi a następnie Przybornik formantów (jeżeli nie jest
widoczny).
• W Przyborniku formantów wyszukaj i kliknij na ikonę Przycisk polecenia a następnie miejsce w
arkuszu gdzie chcesz go umieścić. Ikona Tryb projektowania w przyborniku powinna się uaktywnić.
• Kliknij dwa razy lewym przyciskiem myszy na wstawiony przycisk (ikona Tryb projektowania w
przyborniku powinna być aktywna). Powinien uruchomić się Edytor Visual Basic z widocznym
oknem Kod programu (Code), w oknie tym zawarta powinna być deklaracja procedury Click naszego
Przycisku polecenia.
• W procedurze zdarzenia Click Przycisku polecenia wpisz kod:

If Range("A1").Value = 0 Then
Range("A2").Value = "wartość wynosi zero"
Else
Range("A2").Value = "wartość jest różna od zera"
End If

• Zamknij Edytor Visual Basic Alt+Q i powróć do arkusza Excela.


• Następnie wyłącz tryb projektowania (jeżeli jest aktywny) klikając na ikonę Zakończ tryb
projektowania w Przyborniku formantów.
• Wpisz wartość 0 (zero) do komórki A1 arkusza następnie kliknij na Przycisk polecenia.
• Celem ponownego przetestowania, wpisz inną wartość numeryczną do komórki A1 arkusza i
ponownie kliknij na przycisk.

Dla dociekliwych:
18
Dla dociekliwych przedstawiam bardziej rozbudowany kod przykładu w którym umieściliśmy jedną
instrukcję warunkową If... Then... Else w drugiej celem dokładniejszego określenia warunków. Przy okazji
chciałem pokazać że możemy osiągać ciekawe (bardziej złożone) efekty wykorzystując kilka prostych
instrukcji.

Private Sub CommandButton1_Click()


If Range("A1").Value = 0 Then
Range("A2").Value = "wartość wynosi zero"
Else
If Range("A1").Value > 0 Then
Range("A2").Value = "wartość dodatnia"
Else
Range("A2").Value = "wartość ujemna"
End If
End If
End Sub

• UWAGA: do komórki A1 w obydwu przykładach powinniśmy wpisywać wartości numeryczne. Jeżeli


wpiszemy inną wartość jak numeryczną program wykaże błąd: Niezgodność typów lub może działać
nieprawidłowo (w zależności jaką wersję Excela posiadasz). Jak omijać podobne błędy opisze w
dalszej części kursu.

Słownictwo:

• instrukcja - jest to najmniejsza część kodu, poprawna ze względu na składnię całość wyrażająca
jeden określony rodzaj operacji, deklaracji lub definicji.
• słowo kluczowe - słowo, które jest elementem języka programowania Visual Basic for Applications.
Do słów kluczowych zaliczają się nazwy instrukcji, typy danych, metody, operatory, obiekty i
predefiniowane funkcje. Słów kluczowych nie należy używać jako nazw zmiennych i obiektów.
• zmienna - miejsce o określonej nazwie służące do przechowywania danych. Zmienna zawiera dane,
które można modyfikować podczas wykonywania programu. Każda zmienna ma nazwę
jednoznacznie ją identyfikującą w obrębie danego poziomu zakresu.

Inna drogą realizacji procesu podjęcia decyzji w programie jest użycie instrukcji (struktury) Select
Case.Instrukcja Select Case ocenia wyrażenie tylko raz i w zależności od jego wartości, wykonuje zadany
blok instrukcji. Każda instrukcja Case struktury Select Case określa jedną z potencjalnych wartości, którą
może zwrócić wyrażenie. Gdy wartość wyrażenia pasuje do wartości określonej przez instrukcje Case
wykonywany jest kod związany z tą instrukcją Case. Jeżeli wartość wyrażenia nie pasuje do żadnej wartości
określonej przez instrukcje Case wtedy wykonywany jest blok kodu związany z instrukcją Case Else.
Struktura Select Case może zawierać wiele instrukcji Case ale może zawierać tylko jedną instrukcje Case
Else. Instrukcja Case Else nie jest obowiązkowa w bloku instrukcji Select Case ale jeżeli jest to powinna się
znajdować za wszystkimi instrukcjami Case. Struktura Select Case może przybierać różne formy i być
bardzo rozbudowana, poniżej przedstawiam jej podstawową formę.

Składnia:
Select Case Wyrażenie
Case Wartość1
[blok kodu wykonywany, jeżeli Wyrażenie równa się Wartość1]
Case Wartość2
[blok kodu wykonywany, jeżeli Wyrażenie równa się Wartość2]
...
Case Else
19
[blok kodu wykonywany, jeżeli Wyrażenie nie równa się żadnej z wartości
określonej przez instrukcje Case]
End Select

Objaśnienie:

• Select Case - instrukcja ta występuje jako pierwsza określa ona wartość która będzie testowana na
równość możliwym wartościom.
• Wyrażenie - to jest to co testujemy może to być dowolne wyrażenie numeryczne lub wyrażenie
tekstowe.
• Case - określa wartość do której próbujemy dopasować wartość testowaną.
• Case Else - poniżej tej linii kodu wykonywane są instrukcje jeżeli wartość testowana nie pasuje do
żadnej z wartości określonej przez instrukcje Case.
• End Select - kończy blok instrukcji Select Case.

Przykład kod przykładu:

Private Sub CommandButton1_Click()


Dim NumerDnia
NumerDnia = Range("A1").Value
If IsNumeric(NumerDnia) = True Then
Select Case NumerDnia
Case 1
Range("A2").Value = "Niedziela"
Case 2
Range("A2").Value = "Poniedziałek"
Case 3
Range("A2").Value = "Wtorek"
Case 4
Range("A2").Value = "Środa"
Case 5
Range("A2").Value = "Czwartek"
Case 6
Range("A2").Value = "Piątek"
Case 7
Range("A2").Value = "Sobota"
Case Else
Range("A2").Value = "Poza zakresem wpisz wartość od 1 do 7"
End Select
Else
Range("A2").Value = "Wpisz wartość liczbową"
End If
End Sub

Przykład opis przykładu:

Przykład na pierwszy rzut oka wygląda być może skomplikowanie ale już wszystko wyjaśniam. Na początku
za pomocą instrukcji Dim deklarujemy zmienną o nazwie NumerDnia, która będzie przechowywała
wartości. Temat deklarowania zmiennych opiszę w dalszej części kursu. W następnej linii kodu określamy
wartość zmiennej czyli nasza zmienna NumerDnia = Range("A1").Value. W przykładzie
wykorzystaliśmy też poznaną wcześniej instrukcje If... Then... Else oraz funkcje IsNumeic do sprawdzenia
czy wartości wprowadzane do komórki A1 arkusza są numeryczne. Funkcja IsNumeric sprawdza czy dane
wyrażenie może być przekształcone w liczbę. Główna część kodu to blok naszej instrukcji Select Case, w
której sprawdzamy wartość zmiennej NumerDnia czyli wartość jaka jest w komórce A1 arkusza. Jeżeli
wartość zmiennej NumerDnia wynosi 1 w komórce A2 arkusza wyświetlany jest napis: Niedziela jeżeli 2:
20
poniedziałek itd. Gdy wartość wprowadzona do komórki A1 arkusza jest różna od wartości od 1 do 7,
wyświetlany jest napis: Poza zakresem wpisz wartość od 1 do 7. Jeżeli zaś wartość nie jest
wartością numeryczną wyświetlany jest napis: Wpisz wartość liczbową. Na podstawie tego przykładu
chciałbym też pokazać jak zagwarantować aby potrzebne wartości były prawidłowo wprowadzane. Celem
przetestowania przykładu wykonaj następujące czynności:

• Uruchom Microsoft Excel.


• Z menu Widok wybieramy Paski narzędzi a następnie Przybornik formantów (jeżeli nie jest
widoczny).
• W Przyborniku formantów wyszukaj i kliknij na ikonę Przycisk polecenia a następnie miejsce w
arkuszu gdzie chcesz go umieścić. Ikona Tryb projektowania w przyborniku powinna się uaktywnić.
• Kliknij dwa razy lewym przyciskiem myszy na wstawiony przycisk (ikona Tryb projektowania w
przyborniku powinna być aktywna). Powinien uruchomić się Edytor Visual Basic z widocznym
oknem Kod programu (Code), w oknie tym zawarta powinna być deklaracja procedury Click naszego
Przycisku polecenia.
• W procedurze zdarzenia Click Przycisku polecenia wpisz odpowiednie linie kodu.
• Zamknij Edytor Visual Basic Alt+Q i powróć do arkusza Excela.
• Następnie wyłącz tryb projektowania (jeżeli jest aktywny) klikając na ikonę Zakończ tryb
projektowania w Przyborniku formantów.
• Wpisz wartość np. 2 do komórki A1 arkusza następnie kliknij na Przycisk polecenia.
• Celem ponownego przetestowania, wpisz inną wartość do komórki A1 arkusza i ponownie kliknij na
przycisk.

Dla dociekliwych:

Dla dociekliwych przedstawiam przykład w którym przy każdym uruchomieniu dokumentu Excela
wyświetlany jest napis, odpowiedni w zależności od dnia tygodnia. Napis wyświetlany jest w komórce A2
arkusza, który jest aktywny przy otwarciu dokumentu. W przykładzie do określenia dnia tygodnia
wykorzystaliśmy funkcje DatePart. Kod przykładu umieszczamy w procedurze zdarzenia
Workbook_Open() obiektu ThisWorkbook. Aby umieścić kod wykonaj czynności.

• Będąc w Edytorze Visual Basic w oknie Project kliknij dwa razy na obiekt ThisWorkbook.
• W otwartym oknie Code wpisz kod z przykładu.
• Zamknij a następnie uruchom dokument celem przetestowani przykładu.

Private Sub Workbook_Open()


Select Case DatePart("w", Date)
Case 1
Range("A2").Value = "Niedziela, jutro ch... poniedziałek"
Case 2
Range("A2").Value = "Dzisiaj jest poniedziałek, początek wspaniałego
tygodnia"
Case 3
Range("A2").Value = "Wtorek, na szczęście to nie poniedziałek"
Case 4
Range("A2").Value = "Środa, za chwilę z górki"
Case 5
Range("A2").Value = "Czwartek, wczoraj chyba przesadziłeś, boli głowa co ?"
Case 6
Range("A2").Value = "Cudownie już piątek"
Case 7
Range("A2").Value = "Sobota, co Ci będę mówił"
End Select
End Sub
21
Słownictwo:

• wyrażenie - kombinacja słów kluczowych, operatorów, zmiennych i stałych, która daje w wyniku
ciąg znaków, liczbę lub obiekt. Wyrażenia mogą być używane do przeprowadzania obliczeń,
wykonywania operacji na znakach lub testowania danych.

Następnym bardzo wygodnym narzędziem są pętle, służą one do wielokrotnego wykonywania danego bloku
kodu. Pętle możemy użyć do obliczeń matematycznych, wyodrębniania fragmentów danych lub do
wykonywania tych samych operacji na wielu obiektach. VBA pozwala tworzyć kilka typów pętli, jedną z
nich jest pętla Do...Loop. Instrukcji Do...Loop użyjemy jeżeli nie wiemy ile razy pętla ma być wykonana.
Jest to pętla warunkowa, w której kluczową cechą jest warunek. Instrukcje umieszczone wewnątrz pętli są
powtarzane tak długą jak długą pewien warunek jest spełniony (ma wartość True) lub do momentu gdy ten
warunek zostanie spełniony (uzyska wartość True). Mamy do dyspozycji jakby pięć odmian pętli
Do...Loop, wszystkie z nich działają w podobny sposób różnice przedstawiam w tabeli poniżej.

Tabela. Odmiany pętli Do...Loop

Typ pętli Opis


Do...Loop Wielokrotnie wykonuje blok kodu tak długą aż instrukcja warunkowa umieszczona
wewnątrz tej pętli wykona instrukcje Exit Do. W tym przypadku użycie instrukcji Exit
Do jest praktycznie obowiązkowe gdybyśmy jej nie zastosowali pętla byłaby
wykonywana w nieskończoność.
Do While...Loop Rozpoczyna i powtarza blok kodu umieszczony wewnątrz pętli jeżeli jest spełniony
warunek umieszczony na początku tej pętli. Jest to prawdopodobnie najczęściej
stosowana odmiana pętli warunkowej, szczegółowo opisałem ją w dalszej części strony.
Do...Loop While Wykonuje blok kodu umieszczony wewnątrz pętli jeden raz i powtarza go tak długą jak
długo jest spełniony warunek umieszczony na końcu pętli.
Do Until...Loop Rozpoczyna i powtarza blok kodu umieszczony wewnątrz pętli dopóki nie zostanie
spełniony warunek umieszczony na początku tej pętli.
Do...Loop Until Wykonuje blok kodu umieszczony wewnątrz pętli jeden raz i powtarza go do czasu gdy
zostanie spełniony warunek umieszczony na końcu pętli .

Instrukcja Exit Do

Wewnątrz pętli warunkowej można posłużyć się instrukcją Exit Do. Instrukcja ta kończy działanie pętli i
następuje wykonanie pierwszej instrukcji poza pętlą. Konstrukcje taką stosujemy w pierwszej odmianie pętli
Do...Loop (patrz tabela powyżej) lub w pozostałych odmianach gdy wykonanie pętli chcemy uzależnić od
dodatkowego warunku. Instrukcja Exit Do najczęściej występuje wewnątrz instrukcji If...Then lub Select
Case. Wewnątrz pętli można umieścić dowolną liczbę instrukcji Exit Do. Instrukcje Exit Do może być
stosowana tylko wewnątrz przedstawionych powyżej odmian pętli Do...Loop. Sposób użycia instrukcji Exit
Do przedstawiłem w zaprezentowanym przykładzie na tej stronie.

Pętla Do While...Loop

Jak już wspomniałem wszystkie odmiany pętli Do...Loop działają w podobny sposób. Podstawową
(prawdopodobnie najczęściej stosowano) odmianą pętli warunkowej Do..Loop jest postać Do While...Loop.
W przypadku tej pętli wykonanie kodu VBA rozpoczyna od sprawdzenia warunku który jest umieszczony na
początku pętli. Jeżeli warunek nie jest spełniony instrukcje umieszczone wewnątrz pętli są pomijane (pętla
nie jest wykonywana) i wykonywany jest kod umieszczony poniżej instrukcji Loop. Jeżeli zaś warunek jest
spełniony, VBA wykonuje blok kodu umieszczony w pętli (pętla jest wykonywana).
22
Wewnątrz pętli znajdują się instrukcje z których przynajmniej jedna zmienia wartość warunku. Po dojściu do
instrukcji Loop, VBA wraca do instrukcji Do While, aby ponownie sprawdzić warunek. Jeżeli okaże się że
warunek nie jest spełniony wykonanie pętli będzie przerwane. Jeżeli jednak warunek nadal jest spełniony
blok kodu pętli zostanie wykonany ponownie. Proces ten powtarza się do momentu w którym warunek nie
jest już spełniony. Dlatego z góry nie możemy przewidzieć ile razy pętla będzie wykonana. Gdyby warunek
byłby zawsze spełniony pętla wykonywała by się bez końca.

Składnia:
Do While warunek
[instrukcje]
Loop

Objaśnienie:

• Do - słowo kluczowe świadczące o rozpoczęciu pętli.


• While - słowo kluczowe mówiące programowi że pętla ma być powtarzana tak długo, dopóki jest
spełniony (prawdziwy, daje wartość True) podany warunek.
• warunek - wyrażenie numeryczne lub wyrażenie znakowe, które powinno być spełnione.
• instrukcje - jedna lub więcej instrukcji które mają być wykonane w pętli a z których przynajmniej
jedna ma wpływ na wartość warunku.
• Loop - słowo kluczowe oznaczające koniec pętli.

Przykład kod przykładu:

Private Sub CommandButton1_Click()


Dim NumerWiersza As Integer
Dim NumerKolumny As Integer
NumerWiersza = 1
NumerKolumny = 1
Do While Arkusz2.Cells(NumerWiersza, NumerKolumny).Value <> ""
If NumerWiersza >= 1000 Then
Exit Do
End If
NumerWiersza = NumerWiersza + 1
Loop
If NumerWiersza >= 1000 Then
MsgBox "Baza przepełniona, dane nie mogą być zapisane. Dokonaj archiwizacji"
Else
Arkusz2.Cells(NumerWiersza, NumerKolumny).Value = Arkusz1.Range("A1").Value
Arkusz2.Cells(NumerWiersza, NumerKolumny + 1).Value =
Arkusz1.Range("B1").Value
Arkusz2.Cells(NumerWiersza, NumerKolumny + 2).Value =
Arkusz1.Range("C1").Value
Arkusz1.Range("A1").Value = ""
Arkusz1.Range("B1").Value = ""
Arkusz1.Range("C1").Value = ""
MsgBox "Dane zostały zapisane do Arkusza2"
End If
End Sub

Przykład opis przykładu:

23
W przykładzie po naciśnięciu (kliknięciu) przycisku polecenia (CommandButton1) zapisywane są dane z
komórek A1, B1, i C1 Arkusza1 do odpowiednich komórek w Arkuszu2. Aby przetestować ten przykład
wykonaj następujące czynności:

• Uruchom Microsoft Excel.


• Z menu Widok wybierz Paski narzędzi a następnie Przybornik formantów (jeżeli nie jest widoczny).
• W Przyborniku formantów wyszukaj i kliknij na ikonę Przycisk polecenia a następnie miejsce w
arkuszu gdzie chcesz go umieścić. Ikona Tryb projektowania w przyborniku powinna się uaktywnić.
• Kliknij dwa razy lewym przyciskiem myszy na wstawiony przycisk (ikona Tryb projektowania w
przyborniku powinna być aktywna). Powinien uruchomić się Edytor Visual Basic z widocznym
oknem Kod programu (Code), w oknie tym zawarta powinna być deklaracja procedury Click naszego
Przycisku polecenia.
• W procedurze zdarzenia Click Przycisku polecenia wpisz odpowiedni kod:
• Zamknij Edytor Visual Basic Alt+Q i powróć do arkusza Excela.
• Następnie wyłącz tryb projektowania (jeżeli jest aktywny) klikając na ikonę Zakończ tryb
projektowania w Przyborniku formantów.
• Wprowadź jakieś wartości do komórek A1, B1, i C1 Arkusza1 i kliknij przycisk.
• Przejdź do Arkusza2 i sprawdź czy dane zostały zapisane.

W kodzie przykładu zastosowaliśmy instrukcje Exit Do. Instrukcja ta w naszym przypadku spełnia dwa
zadania. Pierwsze ogranicza ilość zapisanych wierszy aby nasza baza danych nie była zbyt rozbudowana.
Drugie powoduje wyjście z pętli Do While...Loop gdyby z jakiegoś powodu nasza pętla miała być
wykonywana w nieskończoność.

Jeszcze uwaga do przykładu. Kod ten w Arkuszu2 przeszukuje po kolei wiersze w określonej przez nas
jednej kolumnie. Po natrafieniu na pustą komórkę w tej kolumnie zapisywane są dane do wiersza w którym
jest ta komórka. Aby kod działał poprawnie komórka umieszczona w kolumnie którą przeszukuje kod
powinna być za każdym razem zapisywana. Możemy tam umieszczać na przykład numer porządkowy czy
datę zapisania.

Pętle warunkowe są niewątpliwie bardzo silnym i wygodnym narzędziem programistycznym. Jednak


musimy bardzo uważać by nie stworzyć pętli nieskończonej, czyli takiej która była by wykonywana w
nieskończoność. Aby się przed tym zabezpieczyć możemy użyć instrukcji Exit Do celem określenia
dodatkowego warunku wyjścia z pętli.

Pętla For... Next powtarza blok instrukcji określoną liczbę razy, stosujemy ją jeżeli z góry wiadomo ile razy
pętla ma być wykonana. Podstawowa składnia pętli For... Next jest następująca.

Składnia:
For Licznik = Początek To Koniec Step Krok
[blok instrukcji]
Next Licznik

Objaśnienie:

• For - słowo kluczowe reprezentujące początek pętli.


• Licznik - zmienna numeryczna, która pełni rolę licznika pętli.
• Początek - jest to wartość początkowa licznika pętli.
• To - słowo kluczowe separujące wartość początkową licznika od wartości końcowej licznika pętli.
• Koniec - wartość końcowa licznika, liczba na której pętla się zatrzymuje.

24
• Step - opcjonalne słowo kluczowe sygnalizujące istnienie Kroku.
• Krok - element nieobowiązkowy, jest to wielkość o jaką zwiększany jest licznik przy każdym
wykonaniu pętli. Jeśli wielkość ta nie jest podana przyjmuje się Krok równy 1.
• Next - słowo kluczowe będące swego rodzaju nawiasem zamykającym pętle.

Informacje dodatkowe:

• Krok (czyli wielkość o jaką zwiększany jest licznik przy każdym wykonaniu pętli) może być
wartością dodatnią lub ujemną. Gdy Krok jest wartością ujemną to wartość początkowa licznika
(Początek), powinna być większa od wartości końcowej licznika (Koniec).
• Inną możliwością zakończenia wykonywania pętli jest umieszczenie w niej instrukcji Exit For.
Instrukcja Exit For występuje przeważnie po sprawdzeniu pewnego warunku, np. w instrukcji If
Then Else.
• Pętle For... Next mogą być zagnieżdżane przez umieszczenie jednej pętli wewnątrz drugiej.

Przykład kod przykładu:

Sub PrzykładPętli()
Dim kolumna As Integer
For kolumna = 1 To 10
Cells(1, kolumna) = kolumna
Next kolumna
End Sub

Przykład opis przykładu:

W przykładzie wstawiane są wartości liczbowe od 1 do 10 do komórek arkusza, odpowiednio od A1 do A10.


Kod przykładu jest krótki jest to jedna z zalet pętli, które pozwalają wykonywać te same operacje
wielokrotnie. W naszym przypadku zamiast oddzielnie określać wartość dla poszczególnych komórek
tworzymy pętlę, która wstawia po kolei wartości do tych komórek. Poniżej przedstawiam opis
poszczególnych linii kodu z przykładu.

• Sub PrzykładPętli() - w tej linii kodu deklarujemy procedurę, w której Sub to słowo kluczowe
Visual Basic określające, że dany blok to procedura. PrzykładPętli jest to nazwa naszej
procedury. Procedura ta będzie wykonywana i instrukcje zawarte poniżej aż do słów End Sub, które
wskazują koniec bloku kodu.
• Dim kolumna As Integer - za pomocą instrukcji Dim deklarujemy zmienną o nazwie kolumna
typu Integer. Zmienna ta w naszym przypadku będzie przechowywała wartości licznika pętli. Temat
deklarowania zmiennych oraz typy danych opiszę w dalszej części kursu.
• For kolumna = 1 To 10 - dalej występuje nasza właściwa pętla, w której wyraz kolumna jest to
zmienna numeryczna pełniąca rolę licznika pętli. Przy pierwszym wykonaniu pętli wartość zmiennej
kolumna równa się 1. Ponieważ nie określiliśmy wartości kroku pętli, przyjmowana jest wartość
domyślna 1, czyli zmienna kolumna zwiększana jest o wartość 1 przy każdym wykonaniu pętli.
Pętla jest wykonywana ostatni raz gdy wartość tej zmiennej osiągnie 10.
• Cells(1, kolumna) = kolumna - jak już wspomniałem zmienna kolumna przybiera wartości
numeryczne od 1 do 10 i pełni role licznika pętli, jak można zauważyć zmienną tą (jej wartości)
wykorzystaliśmy jeszcze w tej linii kodu. W opisywanej linii właściwość Cells określa adres komórki
i posiada dwa argumenty pierwszy określa numer wiersza, w którym znajduje się komórka a drugi
numer kolumny. W naszym przypadku jest to pierwszy wiersz arkusza (pozostaje on niezmienny),
numer kolumny zaś określany jest przez zmienną kolumna i jak wiemy przy każdym wykonaniu
pętli jest inny. W tej linii kodu określamy adres komórki, jednocześnie też określamy wartość
25
komórki o podanym adresie. Wartość określonej komórki jest to wartość reprezentowana przez
aktualną wartość zmiennej kolumna. A tak po prostu przy pierwszym wykonaniu pętli do komórki
A1 wstawiana jest liczba 1 przy drugim do komórki A2 stawiana jest wartość 2 i analogicznie dalej
aż do komórki A10 arkusza.
• Next kolumna - zamykamy i wychodzimy z pętli. W instrukcji tej nazwa licznika (kolumna) nie
jest wymagana, jednak dzięki podaniu nazwy licznika w instrukcji kończącej pętle staje się ona
bardziej czytelna.

Przykład informacje dodatkowe:

Zmienna kolumna w naszym przykładzie przybiera wartości liczbowe od 1 do 10 i jednocześnie spełnia trzy
zadania.

• pełni rolę licznika pętli.


• określa numer kolumny, w którym znajduje się komórka.
• określa wartość tej komórki.

Aby przetestować przykład wykonaj następujące czynności:

• Uruchom Microsoft Excel.


• Z menu Widok wybieramy Paski narzędzi a następnie opcje Visual Basic, (jeżeli pasek nie jest
widoczny).
• Z paska narzędzi Visual Basic wybieramy przycisk Edytor Visual Basic.
• W nowo otwartym oknie Microsoft Visual Basic-Zeszyt1 z menu View (Widok) wybieramy opcję
ProjectExplorer (Eksploator projektu). Powinno się otworzyć okno Project-VBAProject (Projekt-
VBAProject) oczywiście punktu tego nie wykonujemy, jeżeli okienko było wcześniej otwarte.
• Następnie z menu Insert (Wstaw) wybieramy opcję Module (Moduł). Wstawiony obiekt Module1
(Moduł1) powinien się pojawić oknie Project-VBAProject. Powinno się też pojawić okno Zeszyt1-
Module1(Code) (Zeszyt1-Moduł1(Kod programu)). Jeżeli okno się nie pojawi aby je uaktywnić w
oknie Project-VBAProject klikamy dwa razy lewym przyciskiem myszy na obiekt Module1
(Moduł1).
• W nowo otwartym oknie Zeszyt1-Module1(Code) (Zeszyt1-Moduł1(Kod programu)) piszemy
(wstawiamy) kod z przykładu.
• Zamykamy Edytor VisualBasic (Alt+Q) i powracamy do Microsoft Excel.

Nasz kod możemy uruchomić na różne sposoby, ja wykorzystałem przycisk z paska narzędzi Formularze.
Aby tego dokonać wykonaj następujące czynności.

• Z menu Widok dokumentu Excela wybieramy Paski narzędzi a następnie opcję Formularze.
• Z paska narzędzi Formularze wybieramy ikonę Przycisk a następnie miejsce w arkuszu gdzie chcemy
go umieścić.
• Powinno się otworzyć okno Przypisz makro, (jeżeli okno się nie otworzy klikamy prawym
przyciskiem myszy na nasz wstawiony przycisk i wybieramy opcję Przypisz makro...). W oknie tym
zaznaczamy PrzykładPętli i klikamy przycisk OK.
• Kliknij na jakieś miejsce w arkuszu (celem zlikwidowania zaznaczenia przycisku) a następnie na
przycisk (Przycisk 1) i przetestuj działanie przykładu.
• Celem ponownego przetestowania przykładu wyczyść zawartość komórek od A1 do A10 arkusza i
ponownie kliknij na przycisk.

Dla dociekliwych:
26
Dla dociekliwych przedstawiam kod przykładu, w którym tworzymy "tabliczkę mnożenia". Przy okazji
chciałbym pokazać jak można zagnieżdżać pętle, czyli umieszczać jedną w drugiej. Dla celów wizualnych
zmieniamy kolor zakresu komórek od A1 do J10 i od A2 do A10 na szary. Aby przetestować przykład
wykonaj kroki jak w przykładzie opisanym wyżej.

Sub PrzykładPętli()
Dim wiersz, kolumna As Integer
Range("A1", "J1").Interior.ColorIndex = 15
Range("A2", "A10").Interior.ColorIndex = 15
For wiersz = 1 To 10
For kolumna = 1 To 10
Cells(wiersz, kolumna) = wiersz * kolumna
Next kolumna
Next wiersz
End Sub

Słownictwo:

• argument - dane dostarczające informacji dla akcji, zdarzenia, metody, właściwości lub procedury.
Argument może być stałą, zmienną lub jakimś wyrażeniem.

Pewną odmianą pętli For... Next jest instrukcja For Each... Next, służy ona do wykonywania operacji na
obiektach kolekcji (powtarza grupę instrukcji dla każdego elementu tablicy lub obiektu kolekcji).
Praktycznym zastosowaniem może być np. przeszukiwanie komórek arkusza Excela w celu znalezienia
określonej wartości. Podstawowa składnia pętli For Each... Next jest następująca:

Składnia:
For Each element In kolekcja
[blok kodu wykonywany dla każdego elementu kolekcji]
Next element

Objaśnienie:

• element - jest to zmienna która przebiega wszystkie elementy zbioru lub tablicy.
• kolekcja - jest to nazwa przeszukiwanego zbioru obiektów lub tablicy

Informacje dodatkowe:

• Inną możliwością zakończenia wykonywania pętli jest umieszczenie w niej instrukcji Exit For.
Instrukcja Exit For występuje przeważnie po sprawdzeniu pewnego warunku, np. w instrukcji If
Then Else.
• Pętla For Each... Next, w przeciwieństwie do do instrukcji For... Next, nie wymaga licznika
kontrolującą liczbę wykonań pętli. Jeżeli nie zastosujemy instrukcji Exit For to pętla zostanie
wykonana tyle razy, ile elementów posiada kolekcja.

Przykład kod przykładu:

Sub Wyszukaj()
For Each element In Range("A1:M25")
27
If IsNumeric(element.Value) = True Then
If element.Value < 0 Then
element.Interior.ColorIndex = 3
Exit For
End If
End If
Next
End Sub

Przykład opis przykładu:

W przykładzie przeszukiwany jest zakres komórek A1:M25 arkusza Excela w celu znalezienia wartości
numerycznej mniejszej od zera. Jeżeli w aktualnie przeszukiwanej komórce jest wartość numeryczna
mniejsza od zera, kolor wypełnienia tej komórki zmieniany jest na czerwony i pętla kończy działanie. Na
podstawie tego przykładu chciałem pokazać jak zastosować instrukcję Exit For do wcześniejszego wyjścia z
pętli. Gdybyśmy nie zastosowali tej instrukcji pętla byłaby wykonana tyle razy ile jest komórek w zakresie
A1:M25. Oczywiście pętla będzie wykonana do końca jeżeli w żadnej komórce w przeszukiwanym zakresie
nie ma wartości numerycznej mniejszej od zera. Kolekcją czyli zbiorem do przeszukania w naszym
przypadku jest zakres komórek A1:M25 aktywnego arkusza, zaś zmienna element określa aktualnie
przeszukiwaną komórkę.
Aby przetestować przykład wykonaj analogiczne czynności jak w przykładzie ze strony opisującej pętle For
Next. Oczywiście w punkcie przypisującym makro do przycisku formularza wybieramy nazwę Wyszukaj.
Po wykonaniu tych punktów wpisz różne wartości (dodatnie i ujemne) do komórek arkusza z podanego
zakresu. Kliknij na przycisk i przetestuj przykład.

Słownictwo:

• kolekcja - obiekt zawierający zestaw powiązanych ze sobą obiektów. Pozycje obiektów w kolekcji
mogą zmieniać się pod wpływem zmian w kolekcji; pozycja każdego konkretnego obiektu kolekcji
może zatem ulegać zmianie.
• obiekt - kombinacja kodu programu i danych, które mogą być traktowane jako całość, na przykład
jako formant, formularz lub część aplikacji.
• tablica - zbiór kolejno indeksowanych elementów mających ten sam wewnętrzny typ danych. Każdy
element tablicy posiada unikatowy numer indeksu. Przeprowadzenie zmian dla jednego elementu
tablicy nie wpływa na inne jej elementy.

Zmienne

Pisząc kod programu rzadko posługujemy się konkretnymi wartościami liczbowymi lub tekstowymi.
Częściej posługujemy się pewnymi symbolami (nazwami), którym podczas działania programu możemy
przypisywać odpowiednie wartości. Symbole te nazywamy zmiennymi. Dzięki zmiennym możemy pisać
programy, których sposób działania zależy od aktualnych informacji. Kiedy zmienia się wartość zmiennej,
zmienia się sposób działania programu. A więc aby w pełni wykorzystać możliwości języka VBA należy
stosować zmienne.

• zmienna - opatrzone nazwą miejsce w pamięci do przechowywania danych, które mogą ulegać
modyfikacjom w trakcie wykonywania programu. Każda zmienna zaopatrzona jest w unikatową
nazwę, która identyfikuje ją w obrębie danego zakresu. Typ danych może być określony lub nie.
Nazwy zmiennych muszą zaczynać się literą, muszą być unikatowe w obrębie swego zakresu, nie
mogą być dłuższe niż 255 znaków i nie mogą zawierać kropki ani znaku deklarującego typ.

Deklarowanie zmiennych:
28
Deklarowanie zmiennej jest to operacja polegająca na nadaniu jej nazwy oraz określeniu typu i dostępności.
Jeżeli zadeklarujemy zmienną to jednocześnie przydzielamy jej pamięć. Zmienną możemy zadeklarować
wewnątrz konkretnej procedury lub w sekcji deklaracji modułu kodu. Miejsce deklaracji ma wpływ na
dostępność danej zmiennej.

Do deklarowania zmiennej zazwyczaj stosowane jest słowo kluczowe Dim. Instrukcja deklaracji w której
użyliśmy słowa kluczowego Dim może być umieszczona wewnątrz procedury, wówczas zostanie utworzona
zmienna na poziomie procedury. Jeżeli natomiast deklaracja zostanie umieszczona na początku modułu w
sekcji deklaracji, utworzona będzie zmienna na poziomie modułu. Poniżej przedstawiam przykład deklaracji
w którym deklarujemy zmienną o nazwie MojaLiczba.

Dim MojaLiczba

Oprócz deklarowania zmiennych za pomocą słowa kluczowego Dim, w deklarowaniu zmiennych możemy
użyć słów kluczowych Private, Public, oraz Static. Słowa te służą nie tylko do deklarowania
zmiennych ale i do określania ich zakresu. Temat ten rozwinę w dalszej części strony.

Typy danych:

Deklarując zmienne możemy określić jakiego typu dane zmienna będzie przechowywać. Jak już
wspomniałem deklaracja zmiennej to jednocześnie rezerwacja w pamięci komputera miejsca potrzebnego do
przechowania wartości, która zostanie przypisana do zmiennej. Jeżeli podczas deklarowania zmiennej
podasz jej typ określasz tym samym bardziej precyzyjnie ile miejsca VBA ma zarezerwować dla tej
zmiennej. W poniższym przykładzie deklarujemy zmienną typu Integer która zajmuje 2 bajty pamięci. Dla
porównania podam, że ta sama zmienna zadeklarowana bez podania typu danych, będzie zajmować najmniej
16 bajtów.

Dim MojaLiczba As Integer

Zagadnienia określania typów danych podczas ich deklaracji nie warto jednak wyolbrzymiać. Przy obecnym
stanie technicznym sprzętu i przy wielkości programów jakie będziemy tworzyć w tym kursie, temat
określania typu danych nie ma aż tak dużego znaczenia. Przypuszczam też, że dla osób początkujących
wygodniej będzie podczas deklaracji nie podawać typu danych. Oczywiście to czy deklarując zmienną
podawać jej typ należy rozpatrywać pisząc konkretny program. Więcej informacji na temat typów danych
znajdziesz na stronie Typy danych - gdzie umieszczona jest tabela przedstawiająca dopuszczalne typy
danych stosowane w VBA, włączając w to ich rozmiar oraz zakres.

Jawne deklarowanie:

Deklarowanie zmiennych za pomocą słów kluczowych Dim, Private, Public, oraz Static nazywamy
jawnym deklarowaniem. Zmienna w języku Visual Basic może być też niejawnie zadeklarowana po prostu
przez użycie jej w instrukcji przypisania. Wszystkie zmienne zadeklarowane niejawnie są typu Variant.
Zmienne typu Variant wymagają więcej zasobów pamięci niż większość innych zmiennych. Jawne
deklarowanie wszystkich zmiennych redukuje niebezpieczeństwo wystąpienia błędów wynikających z
konfliktów nazw i pomyłek w pisowni. Aby uniknąć przykrych niespodzianek dobrze byłoby wyrobić
sobie nawyk jawnego deklarowania wszystkich zmiennych. Bardzo pomocna w tym może okazać się
instrukcja Option Explicit. Jeżeli w sekcji deklaracji modułu kodu wpiszesz:

Option Explicit

29
VBA wyświetli komunikat o błędzie, ilekroć wykryje niezadeklarowaną zmienną. W takim przypadku
możemy dodać brakującą deklarację. Instrukcja Option Explicit wykorzystywana jest na poziomie
modułu w celu wymuszenia jawnego deklarowania wszystkich zmiennych w danym module.

Zakres zmiennej:

Zakres zmiennej czyli to, w jakich częściach programu jest ona dostępna, określamy podczas jej
deklarowania. Zakres ten zależy od:

• miejsca, w którym zmienna jest zadeklarowana, w sekcji deklaracji modułu czy wewnątrz konkretnej
procedury.
• za pomocą jakiego słowa kluczowego tj. Dim, Public, Private, lub Static, zmienna została
zadeklarowana.

Poniżej przedstawiam kilka przykładów deklaracji. Tekst w kolorze zielonym zaczynający się od znaku '
jest komentarzem i nie ma wpływu na działanie przykładów.

Dim MojaLiczba 'Instrukcja ta może być umieszczona wewnątrz procedury,


wówczas zostanie utworzona zmienna na poziomie procedury. Jeżeli natomiast
deklaracja zostanie umieszczona na początku modułu, w sekcji deklaracji,
utworzona będzie zmienna na poziomie modułu.

Private MojaZmienna 'Stosowana na poziomie modułu do deklaracji zmiennych


prywatnych oraz do przydziału pamięci. Zmienne te są dostępne tylko w tym
module, w którym zostały zadeklarowane. Słowa kluczowego Private nie można
użyć wewnątrz procedury.

Public WynikRazem 'Stosowana do deklarowania zmiennych publicznych na


poziomie modułu. Zmienne zadeklarowane za pomocą instrukcji Public są
dostępne dla wszystkich procedur we wszystkich modułach wszystkich
projektów. Słowo kluczowe Public należy stosować wyłącznie w sekcji
deklaracji modułu.

Static Licznik 'Wykorzystywana na poziomie procedury do deklaracji


zmiennych i przydziału pamięci. Zadeklarowana w ten sposób zmienna
zachowuje swoją wartość między wywołaniami procedury. Zmienne statyczne
można deklarować tylko wewnątrz procedur.

Więcej informacji na temat zakresu zmiennych znajdziesz na stronie:


http://dzono4.webpark.pl/basic/opisvb/zmizakr.htm

Przypisanie wartości do zmiennej:

Jak już wspomniałem zmienne służą do przechowywania wartości, które mogą się zmieniać podczas
działania programu. Aby zmienna mogła przechowywać pewne określone wartości musimy to wartość
przypisać do zmiennej. Operacje przypisania wartości do zmiennej nazywamy instrukcją przypisania.
Instrukcja przypisania składa się z nazwy zmiennej, znaku równości oraz wartości (lub wyrażenia
określającego wartość), która ma być przypisana do zmiennej. Poniżej przedstawiam kilka przykładów
przypisania wartości do zmiennej.

MojaWartosc = 3 'Zmiennej o nazwie MojaWartosc przypisujemy wartość 3.

30
Przywitanie = "Pozdrawiam wszystkich" 'W tym przypadku instrukcja
przypisania przypisuje tekst umieszczony z prawej strony znaku równości do
zmiennej Powitanie. Łańcuchy znakowe przypisywane do zmiennych należy
ujmować w cudzysłów.

Nazwisko = InputBox("Jak się nazywasz?") 'W instrukcji przypisania możemy


użyć funkcji. W przykładzie przypisujemy wartość zwróconą przez funkcje
InputBox, zmiennej Nazwisko.

MojaLiczba = Int((6 * Rnd) + 1) 'A oto inny przykład przypisania. Zmiennej


MojaLiczba przypisujemy wartość wyrażenia z prawej strony znaku równości.

Wartości domyślne:

Być może zastanawiacie się co się kryje w zmiennych po ich zadeklarowaniu ale jeszcze przed przypisaniem
im wartości. W tym czasie VBA nadaje zmiennym następujące wartości domyślne:

Tabela. Wartości domyślne zmiennych

Typ danych Wartość domyślna


Wszystkie numeryczne typy danych 0 (zero)
String (o zmiennej długości) Łańcuch znaków o zerowej długości ("").
String (o stałej długości) Łańcuch znaków o zadanej długości wypełniony znakami o kodzie
ASCII równym 0 (jest to znak niedrukowany).
Variant Empty (specjalna wartość wskazująca zmienną bez wartości).
Obiect Wartość umowna Nothing (nic).

Zmienne statyczne:

Z tematem zmiennych statycznych zetknęliśmy się już na tej stronie przy omawianiu zakresu zmiennej.
Jeżeli chcemy aby zmienna zachowała swoją wartość nawet po wykonaniu procedury, w której jest
zadeklarowania skorzystamy ze słowa kluczowego Static. Instrukcja Static wykorzystywana jest na
poziomie procedury do deklaracji zmiennych i przydziału pamięci. Zadeklarowana w ten sposób zmienna
zachowuje swoją wartość między wywołaniami procedury.

Static Licznik

Zmienne statyczne zachowują swoją wartość nadaną im w efekcie wykonania procedury. W przypadku
ponownego wykonania procedury zmienna statyczna ma początkowo tę samą wartość, jaką uzyskała w
poprzednim wykonaniu tej procedury. Zmienne statyczne można deklarować tylko wewnątrz procedur.

Mała uwaga: zmiennych statycznych nie należy mylić ze stałymi, temat stałych przedstawię w dalszej części
kursu.

Przykład:

Przykład kod przykładu:

31
Private Sub CommandButton1_Click()
Dim MojaLiczba As Integer
Static Licznik
MojaLiczba = Int((6 * Rnd) + 1)
Licznik = Licznik + 1
MsgBox "To jest Twoje " & Licznik & " losowanie " & "wylosowałeś " &
MojaLiczba
End Sub

Przykład opis:

Przykład być może nie jest zbyt ciekawy chciałem w nim po prostu praktycznie zademonstrować wiedzę
zawarto na tej stronie. W przykładzie deklarujemy dwie zmienne. Za pomocą instrukcji Dim deklarujemy
zmienną o nazwie MojaLiczba, ponieważ wiemy jakie wartości zmienna będzie przechowywać określamy
też jej typ czyli Integer. Następnie deklarujemy zmienną statyczną o nazwie Licznik. Wykorzystując funkcje
Int i Rnd zmiennej MojaLiczba przypisujemy losowo wybrano wartość z przedziału od 1 do 6. Następnie
zwiększamy wartość zmiennej Licznik o 1 przy każdym wykonaniu procedury. Na koniec za pomocą funkcji
MsgBox wyświetlamy komunikat o wartości wylosowanej i liczbie losowań. Opisany kod umieściliśmy w
procedurze zdarzenia Click Przycisku polecenia CommandButton1.

Przykład kroki:

Aby przetestować przykład stosując analogie wykonaj kroki jak na przykład na stronie pierwszy program.

Słownictwo:

• Empty - wartość specjalna wskazuje, że do zmiennej typu Variant nie przypisano żadnej
początkowej wartości. Zmienna Empty dla wartości numerycznych jest równa 0, a dla ciągów
znaków jest ciągiem znaków o długości zerowej ("").
• Nothing - wartość specjalna oznacza, że zmienna nie odwołuje się do żadnego określonego
wystąpienia obiektu.

Stałe

Nieraz w kodzie programu stosujemy wartości, które nie zmieniają się podczas jego wykonywania lub też
stosujemy wartości trudne do zapamiętania i nie mające oczywistego znaczenia. Możemy jednak kod
programu uczynić łatwiejszym do czytania i modyfikowania wykorzystując stałe. Stała jest nazwą o
określonym znaczeniu, która zastępuje niezmienną w kodzie programu wartość liczbową lub ciąg znaków.
Nie można zmodyfikować stałej lub przypisać do niej nowej wartości, tak jak jest to możliwe w przypadku
zmiennej. Stałą możemy zastosować w kodzie programu celem na przykład zagwarantowania niezmienności
pewnej wartości.

• stała - element o nadanej nazwie, który zachowuje stałą wartość przez cały czas działania programu.
Stała może być ciągiem znaków lub literałem numerycznym, inną stałą lub dowolną kombinacją
zawierającą operatory arytmetyczne i logiczne, z wyjątkiem operatora Is oraz operatora potęgowania.
Każda aplikacja główna może definiować własny zestaw stałych. Dodatkowe stałe mogą być
definiowane przez użytkownika za pomocą instrukcji Const. Stałych można użyć w dowolnym
miejscu kodu programu zamiast ich rzeczywistych wartości.

Deklarowanie stałych:

32
Jeżeli chcemy utworzyć stałą to musimy ją zadeklarować. Jest to operacja polegająca na nadaniu jej nazwy i
przypisaniu odpowiedniej wartości oraz na ewentualnym określeniu typu i dostępności. Jeżeli zadeklarujemy
stałą to jednocześnie przydzielamy jej pamięć. Stałą możemy zadeklarować wewnątrz konkretnej procedury
lub w sekcji deklaracji modułu kodu. Miejsce deklaracji ma wpływ na dostępność danej stałej.

Do deklaracji stałej i nadania jej wartości służy słowo kluczowe Const.

Const WartośćGraniczna = 459

Możemy też podczas deklaracji określić typ danych jakie dana stała będzie przechowywała.

Const WartośćGraniczna As Integer = 459

Zwróćmy uwagę że w bardzo podobny sposób deklarujemy zmienne. Różnica polega na tym że w instrukcji
deklaracji stałej stosując operacje przypisania podajemy jej (niezmienną) wartość. W instrukcji deklaracji
stałej celem określenia jej zasięgu możemy też użyć słów kluczowych: Public i Private, szczegóły
przedstawiam poniżej.

Zakres stałej:

Zakres stałej czyli to, w jakich częściach programu jest ona dostępna, określamy podczas jej deklarowania.
Zakres ten zależy od:

• miejsca, w którym stała jest zadeklarowana, w sekcji deklaracji modułu czy wewnątrz konkretnej
procedury.
• za pomocą jakiego słowa kluczowego tj. Public, Private stała została zadeklarowana.

Poniżej przedstawiam kilka przykładów deklaracji. Tekst w kolorze zielonym zaczynający się od znaku '
jest komentarzem i nie ma wpływu na działanie przykładów.

Const LiczbaPi = 3.14159265359 'za pomocą słowa kluczowego Const


deklarujemy stałą o nazwie LiczbaPi, która w naszym przypadku przechowuje
właśnie wartość liczby Pi. Jeżeli instrukcje deklarującą stałą umieścimy
wewnątrz procedury to stała ta dostępna jest tylko wewnątrz tej procedury.
Jeżeli zaś instrukcję tą umieścimy poza procedurą w sekcji deklaracji
modułu to stała ta będzie dostępna dla wszystkich procedur danego modułu.

Public Const LiczbaPi = 3.14159265359 'stałe zadeklarowane na poziomie


modułu są domyślnie prywatne czyli widoczne i dostępne tylko wewnątrz tego
modułu. Aby zadeklarować stałą publiczną czyli dostępną we wszystkich
procedurach wszystkich modułów, należy poprzedzić instrukcję Const słowem
kluczowym Public. Stałe publiczne możemy deklarować tylko w sekcji
deklaracji modułu standardowego. Nie można deklarować stałych publicznych
w procedurach czy modułach klas.

Private Const LiczbaPi = 3.14159265359 'możliwe jest także jawne


zadeklarowanie stałej prywatnej, przez poprzedzenie instrukcji Const
słowem kluczowym Private. Słowo kluczowe Private wykorzystujemy do jawnego
zadeklarowania stałej prywatnej, celem poprawienia czytelności kodu.
Stosowanie go w procedurach jest niedozwolone.

Stałe wbudowane:

33
Stałe są bardzo bogato reprezentowane jako elementy wbudowane języka VBA oraz aplikacji Office.
Informacje na temat tych stałych znajdziesz między innymi w Przeglądarce obiektów. Ponieważ stałe te są
zawsze dostępne, nie można definiować stałych użytkownika o takich samych nazwach. Z tego typu stałymi
spotkasz się w dalszej części kursu na przykład na stronie Okno komunikatu funkcji MsgBox.

Przykład:

Przykład kod przykładu:

Private Sub CommandButton1_Click()


On Error GoTo problem
Const LiczbaPi = 3.14159265359
Dim Promień, Pole, Obwód
Promień = InputBox("Podaj promień koła")
If Promień = "" Then
MsgBox "Brak poprawnych wartości lub operacja została anulowana"
Exit Sub
Else
Pole = LiczbaPi * Promień * Promień
Obwód = 2 * LiczbaPi * Promień
MsgBox "Pole koła wynośi " & Pole & ", obwód " & Obwód
End If
Exit Sub
problem:
MsgBox "Wystąpił błąd w programie. " & Err.Description & ", wprowadź poprawne
wartości"
End Sub

Przykład opis:

Jest to praktycznie w pełni funkcjonalny przykład w którym na podstawie podanego promienia obliczamy
pole i obwód koła. W przykładzie wykorzystaliśmy instrukcje Const do zadeklarowania stałej
przechowującej wartość liczby Pi.

Przykład kroki:

Celem sprawdzenia nabytej wiedzy chciałbym abyś samodzielnie wykonał przykład. Jeżeli masz jakieś
trudności to zapoznaj się z innymi przykładamy kursu lub po prostu napisz. Podam tylko że przykład w
przedstawionej formie działa po kliknięciu na Przycisk polecenia o nazwie CommandButton1.

Słownictwo:

• Przeglądarka obiektów - okno dialogowe, które służy do przeglądania zawartości biblioteki


obiektów w celu znalezienia informacji na temat dostępnych obiektów.

Tablice

Mimo że nie jest to niezbędne dla początkujących programistów, ale żeby tematyka tego działu była
kompletna opisze jeszcze zmienne tablicowe. Zmienne tego typu możemy wykorzystać na przykład do pracy
ze zbiorem powiązanych ze sobą informacji. Zmienna tablicowa inaczej tablica jest zmienną zawierającą
wiele komórek przeznaczonych do przechowywania wartości, podczas gdy typowa zmienna ma jedynie
jedną komórkę, w której można przechowywać tylko jedną wartość. Obrazowo można to przedstawić w ten
sposób: Zwykłą zmienną możemy porównać do kontenera, który zawiera jeden pojemnik do
34
przechowywania zmieniających się zawartości, tablice zaś możemy porównać do zestawu pojemników
umieszczonych w takim właśnie kontenerze z których każdy może przechowywać inną zawartość.
Pojemniki te ułożone są w odpowiednim porządku inaczej strukturze. Każdy taki pojedynczy pojemnik
(element) zmiennej tablicowej jest oznaczony indeksem liczbowym określającym jego miejsce w danej
strukturze tablicy.

• tablica - zbiór kolejno indeksowanych elementów mających ten sam wewnętrzny typ danych. Każdy
element tablicy posiada unikatowy numer indeksu. Przeprowadzenie zmian dla jednego elementu
tablicy nie wpływa na inne jej elementy.

Zmienne tablicowe mogą być jedną lub wielowymiarowe (dla naszych skromnych potrzeb z powodzeniem
wystarczą tablice jedno a co najwyżej o dwóch wymiarach). Tablica jednowymiarowa jest zbiorem kolejno
po sobie następujących elementów. Przykładem zaś tablicy dwuwymiarowej może być tabela czy arkusz
kalkulacyjny z wieloma wierszami i kolumnami. Tablica trójwymiarowa to już prostopadłościan. Większa
liczba wymiarów jest trudna do wyobrażenia (przynajmniej dla mnie) ale jako ciekawostkę podam, że za
pomocą VB możemy deklarować tablice zawierające do 60 wymiarów.

Deklarowanie tablicy:

Tablice są w zasadzie deklarowane w ten sam sposób co inne zmienne, to jest z użyciem instrukcji Dim,
Static, Private lub Public. Słowa te tak jak w przypadku zmiennych służą nie tylko do deklarowania
ale i do określania zakresu tablic. Za jednym z tych słów należy podać nazwę tablicy (zmiennej tablicowej)
zakończonej parą nawiasów wewnątrz których określamy rozmiar tablicy (lub pozostawiamy puste). Tablica,
dla której rozmiar jest określony, jest tablicą o stałym rozmiarze. Tablica, dla której rozmiar nie jest
określony (nawiasy puste) i może zmieniać się podczas działania programu, jest tablicą dynamiczną.

Poniżej przedstawiam przykład prostej deklaracji tablicy. W przykładzie za pomocą słowa kluczowego Dim
deklarujemy jednowymiarowo tablice o nazwie DniTygodna. Nazwa tablicy kończy się parą nawiasów w
której określamy rozmiar tablicy, czyli liczbę elementów które tablica ma przechowywać. Nasza tablica
zawiera siedem elementów, dlaczego siedem a nie sześć jak to podaliśmy. Ponieważ domyślnie elementy
tablicy są numerowane od zera.

Dim DniTygodnia(6)

Jak wspomniałem elementy tablicy są domyślnie numerowane od zera. Przeważnie nie ma to większego
znaczenia ale nieraz ustawienie takie może być niewygodne. Numer początkowy indeksu tablic możemy
zmienić z 0 na 1 stosując instrukcje Option Base 1. Instrukcje tę należy zastosować na początku modułu
kodu w sekcji deklaracji tego modułu, czyli przed pierwszą występującą w nim procedurą.

Ustalenie indeksu początkowego tablicy za pomocą instrukcji Option Base 1 odnosi się do wszystkich tablic
deklarowanych w danym module. Jeżeli takie generalne rozwiązanie jest dla nas mało wygodne możemy
użyć innego sposobu ustalenia indeksu początkowego tablicy odnoszącego się do pojedynczych tablic. W
sposobie tym w instrukcji deklaracji konkretnej tablicy określamy numer (index) pierwszego elementu i
liczbę elementów tablicy. Poniżej deklarujemy tablice o składającą się z siedmiu elementów, index
pierwszego elementu ustawiony jest na jeden.

Dim DniTygodnia(1 To 7)

35
Tablice stosuje się zazwyczaj do przechowywania danych tego samego typu. Dlatego też w instrukcji
deklaracji tablicy możemy a nawet powinniśmy podać typ danych jaki dana tablica ma przechowywać.
Wyjątkiem od zasady jednolitości typu danych jest tablica zadeklarowana jako Variant, pozwala to
przypisywać poszczególnym elementom tablicy dane dowolnych typów. Rozwiązanie takie jest nieraz
wygodne ale jak wiemy bardzo pamięciożerne. A oto przykład deklaracji tablicy typu String

Dim DniTygodnia(1 To 7) As String

UWAGA: podobnie jak w przypadku deklaracji pojedynczych zmiennych, jeżeli dla tablicy nie zostanie
określony typ danych, jako typ danych elementów deklarowanej tablicy przyjmowany jest Variant.

Do tej pory deklarowaliśmy tablice o jednym wymiarze, w tym punkcie przedstawię sposób deklaracji
tablicy dwuwymiarowej. Tablice dwuwymiarową możemy porównać na przykład do tabeli lub arkusza
kalkulacyjnego. Odpowiednie liczby określają liczbę kolumn i wierszy w tablicy. Jeżeli tablicę wyobrazimy
sobie jako macierz, to pierwszy z argumentów reprezentuje wiersze, a drugi argument reprezentuje kolumny.
Poniżej deklarujemy tablice typu Byte składającą się ze 100 elementów (zawierającą 10 wierszy i 10
kolumn).

Dim Oceny(9, 9) As Byte

Lub też

Dim Oceny(1 To 10, 1 To 10) As Byte

Zapisywanie danych do tablic:

Aby zapisać dane do tablicy należy wybranemu elementowi tablicy przypisać odpowiednią wartość. W
pierwszym przykładzie tworzymy tablice do przechowywania nazw dni tygodnia, następnie poszczególnym
elementom tablicy przypisujemy odpowiednie wartości.

Dim DniTygodnia(1 To 7) As String


DniTygodnia(1) = "Poniedziałek"
DniTygodnia(2) = "Wtorek" 'idt.

A oto inny przykład zapisywania danych do tablicy tym razem dwuwymiarowej.

Dim Oceny(1 To 10, 1 To 10) As Byte


Oceny(1, 1) = 5
Oceny(1, 2) = 4 'idt.

Do zapisania danych do tablicy możemy też użyć funkcji InputBox, funkcję to poznamy w dalszej części
kursu.

Dim DniTygodnia(1 To 7) As String


DniTygodnia(1) = InputBox("Podaj nazwę dnia") 'idt.

Dane umieszczane w tablicy mogą być pobierane też bezpośrednio z komórek arkusza Excela.

36
Dim DniTygodnia(1 To 7) As String
DniTygodnia(1) = Range("A1").Value 'idt.

Odczytywanie danych z tablicy:

Wartość pojedynczego elementu tablicy (tak jak w przypadku zmiennych) możemy odczytać i wykorzystać
na wiele sposobów. Możemy jej użyć na przykład w wyrażeniu, przypisać do innej zmiennej czy też
wyświetlić w oknie funkcji MsgBox lub komórce arkusza Excela.

W przedstawionym przykładzie za pomocą funkcji MsgBox (funkcja ta dokładnie omówiona jest w dalszej
części kursu) wyświetlamy wartość elementu tablicy o indexie 2.

Dim DniTygodnia(1 To 7) As String


DniTygodnia(1) = "Poniedziałek"
DniTygodnia(2) = "Wtorek" 'idt.
MsgBox DniTygodnia(2)

A oto sposób pobrania wartości z elementu (index 1, 2) tablicy dwuwymiarowej.

Dim Oceny(1 To 10, 1 To 10) As Byte


Oceny(1, 1) = 5
Oceny(1, 2) = 4
MsgBox Oceny(1, 2)

Poniżej przedstawiam sposób przypisania wartości pojedynczego elementu tablicy do innej zmiennej, którą
możemy w jakiś sposób wykorzystać w dalszej części naszego programu.

Dim NumerDnia
Dim DniTygodnia(1 To 7) As String
DniTygodnia(1) = "Poniedziałek"
DniTygodnia(2) = "Wtorek" 'idt.
NumerDnia = DniTygodnia(2)

UWAGA: do zapisu jak i odczytu danych z tablicy często też używane są pętle.

Tablice dynamiczne:

W przykładach przedstawionych do tej pory deklarowaliśmy tablice o określonym rozmiarze. Jeżeli nie
znamy rozmiaru tablicy lub wiemy ze rozmiar tablicy zmieni się podczas działania programu możemy
zadeklarować tablice dynamiczną.

Aby zadeklarować tablice dynamiczną w instrukcji która ją deklaruje nie podajemy jej rozmiaru.

Dim WybraneDni() As String

Jednak ponieważ zadeklarowana w ten sposób tablica nie może przechowywać żadnych danych to przed jej
użyciem musimy określić jej aktualny rozmiar. Robimy to za pomocą instrukcji ReDim.

ReDim WybraneDni(4) As String

37
Array:

Informacyjnie tylko podam że inną (nietypową) tablice możemy utworzyć wykorzystując funkcje Array.
Funkcja ta zwraca wartość typu Variant zawierającą tablicę.

Przykład 1:

A oto przykład w którym wykorzystujemy informacje przedstawione do tej pory. Deklarujemy tablice o
nazwie DniTygodna składającą się z siedmiu elementów. Tablica ta służy do przechowywania nazw dni
tygodnia. Poszczególnym elementom tablicy przypisujemy odpowiednie wartości. Następnie za pomocy
funkcji Weekday określamy numer bieżącego dnia aktualnego tygodnia i przypisujemy do zmiennej
NumerDnia. Numer ten w naszym przypadku (jak widać z przypisania) jest indeksem określającym wartość
jaką pobieramy z tablicy DniTygodna. Wartość to (nazwę dnia) pokazujemy w komórce A1 arkusza, który
jest wyświetlany w momencie otwarcia dokumentu Excela.

Przykład 1 kod przykładu:

Private Sub Workbook_Open()


Dim NumerDnia
Dim DniTygodnia(1 To 7) As String
DniTygodnia(1) = "Niedziela"
DniTygodnia(2) = "Poniedziałek"
DniTygodnia(3) = "Wtorek"
DniTygodnia(4) = "Środa"
DniTygodnia(5) = "Czwartek"
DniTygodnia(6) = "Piątek"
DniTygodnia(7) = "Sobota"
NumerDnia = Weekday(Date)
Range("A1").Value = DniTygodnia(NumerDnia)
End Sub

Przykład 1 kroki:

• Uruchom Microsoft Excel.


• Z menu Widok wybieramy Paski narzędzi a następnie opcje Visual Basic, (jeżeli pasek nie jest
widoczny).
• Z paska narzędzi Visual Basic wybieramy przycisk Edytor Visual Basic.
• Będąc w Edytorze Visual Basic, z menu View (Widok) wybieramy opcję Project Explorer (Eksploator
projektu). Powinno się otworzyć okno Project-VBAProject (Projekt-VBAProject) oczywiście punktu
tego nie wykonujemy, jeżeli okienko było wcześniej otwarte.
• W oknie tym kliknij dwa razy na obiekt ThisWorkbook.
• W nowo otwartym oknie Zeszyt1 - ThisWorkbook(Code) (Zeszyt1 - ThisWorkbook(Kod programu))
piszemy (wstawiamy) kod z przykładu.
• Zamknij a następnie uruchom dokument celem przetestowani przykładu.

Dla dociekliwych:

Przykład 2:

Poniżej przedstawiam funkcje o nazwie: słownie, za pomocą której zamieniamy wartości liczbowe na
wartości słowne. Jest to jakby wstęp do prawdziwej funkcji tego typu, ale za pomocą tego przykładu
38
chciałbym pokazać w jaki można wykorzystać tablice. Nasza funkcja zmienia wartości liczbowe od 0 d 19
na wartości słowne. Tekst w kolorze zielonym zaczynający się od znaku ' jest komentarzem i nie ma
wpływu na działanie przykładu.

Przykład 2 kod przykładu:

Function słownie(liczba)
Dim Wynik
Static jednosci(19) As String
jednosci(0) = "zero"
jednosci(1) = "jeden"
jednosci(2) = "dwa"
jednosci(3) = "trzy"
jednosci(4) = "cztery"
jednosci(5) = "pięć"
jednosci(6) = "sześć"
jednosci(7) = "siedem"
jednosci(8) = "osiem"
jednosci(9) = "dziewięć"
jednosci(10) = "dziesięć"
jednosci(11) = "jedenaście"
jednosci(12) = "dwanaście"
jednosci(13) = "trzynaście"
jednosci(14) = "czternaście"
jednosci(15) = "piętnaście"
jednosci(16) = "szesnaście"
jednosci(17) = "siedemnaście"
jednosci(18) = "osiemnaście"
jednosci(19) = "dziewiętnaście"
If IsNumeric(liczba) = False Then
Wynik = "zły typ danych - funkcja konwertuje poprawnie liczby całkowite z
przedziału od 0 do 19"
słownie = Wynik
Exit Function
End If 'Za pomocą instrukcji If...Then...Else sprawdzamy czy wartość argumentu
liczba naszej funkcji jest liczbą. Czyli jeżeli argument liczba nie jest liczbą
wyświetlany jest komunikat o złym typie danych i kończymy działanie naszej
funkcji.
If liczba > 19 Or liczba < 0 Then
Wynik = "Zły zakres - funkcja konwertuje poprawnie liczby całkowite z
przedziału od 0 do 19"
słownie = Wynik
Exit Function
End If 'Opis analogicznie jak wyżej, sprawdzamy czy argument liczba jest
liczbą która mieści się w przedziale od 0 do 19.
liczba = Int(liczba)
Wynik = jednosci(liczba)
słownie = Wynik
End Function

Przykład 2 kroki:

1. Uruchom Microsoft Excel.


2. Z menu Widok wybieramy Paski narzędzi a następnie opcje Visual Basic, (jeżeli pasek nie jest
widoczny).
3. Z paska narzędzi Visual Basic wybieramy przycisk Edytor Visual Basic.
4. Będąc w Edytorze Visual Basic, z menu Insert (Wstaw) wybieramy opcję Module (Moduł). Powinno
się pojawić okno Zeszyt1 - Module1(Code) (Zeszyt1 - Moduł1(Kod programu)).
39
5. W nowo otwartym w oknie Zeszyt1 - Module1(Code) (Zeszyt1 - Moduł1(Kod programu)) piszemy
(wstawiamy) kod z naszego przykładu.
6. Zamykamy Edytor VisualBasic (Alt+Q) i powracamy do Microsoft Excel.
7. W arkuszu Excela kliknij np. komórkę B2, następnie z menu Wstaw wybierz opcje Funkcja.
8. W oknie Wstawianie funkcji (Wklej funkcję) wybieramy:
o Z pola Lub wybierz kategorię: (Kategoria funkcji:), opcje Użytkownika.
o Następnie z pola Wybierz funkcję: (Nazwa funkcji:), naszą funkcję słownie. Wybór
zatwierdzamy przyciskiem OK
9. W następnym oknie wpisujemy adres komórki z której funkcja ma pobierać argumenty np. A2 i
naciskamy przycisk OK.
10. Przetestuj przykład wpisując odpowiednie liczby do komórki A2.

Przykład zasada działania:

Po wpisaniu do komórki A2 liczby z przedziału od 0 do 19, w komórce B2 pojawi się interpretacja słowna
tej liczby. Oczywiście wpis musimy zatwierdzić klawiszem Enter lub kliknięciem przyciskiem myszy w inną
komórkę arkusza.

Operatory arytmetyczne

W tej części kursu zajmiemy się operatorami. Operator - jest to symbol lub słowo, które oznacza operację
wykonywaną na jednym lub większej liczbie elementów. Operatory które posiada VBA możemy podzielić
na operatory arytmetyczne, porównania, logiczne oraz łączące. Na tej stronie przedstawiam krótki opis
chyba najbardziej znanych operatorów tj. operatory arytmetyczne.

Składnia:

wynik = liczba1 odpowiedni operator arytmetyczny liczba2

• wynik - element obowiązkowy, jest to dowolna zmienna numeryczna.


• liczba1 - element obowiązkowy, jest to dowolne wyrażenie numeryczne (dla operatora + jest to
dowolne wyrażenie).
• liczba2 - element obowiązkowy, jest to dowolne wyrażenie numeryczne (dla operatora + jest to
dowolne wyrażenie).

Składnia dla operatora negacji:

-liczba

• liczba - element obowiązkowy, jest to dowolne wyrażenie numeryczne.

Tabela operatory arytmetyczne:

Operator Operacja i opis Przykład


Dim Wynik
Potęgowanie - podnosi wartość do
^ potęgi określonej w wykładniku.
Wynik = 10 ^ 3 ' Wynikiem jest 1000
MsgBox Wynik

* Mnożenie - wykonuje mnożenie . Dim Wynik


Wynik = 10 * 3 ' Wynikiem jest 30

40
MsgBox Wynik

Dzielenie - wykonuje dzielenie i Dim Wynik


/ zwraca wynik w postaci Wynik = 10 / 3 ' Wynikiem jest 3.333333
zmiennoprzecinkowej. MsgBox Wynik

Dzielenie - wykonuje dzielenie i Dim Wynik


\ zwraca wynik w postaci liczby Wynik = 10 \ 3 ' Wynikiem jest 3
całkowitej. MsgBox Wynik

Modulo - wykonuje dzielenie i zwraca Dim Wynik


Mod tylko resztę z przeprowadzonego Wynik = 10 Mod 3 ' Wynikiem jest 1
dzielenia. MsgBox Wynik

Dodawanie - sumuje dwie wartości Dim Wynik


+ (operatora tego możemy też użyć do Wynik = 10 + 3 ' Wynikiem jest 13
łączenia ciągów). MsgBox Wynik

Dim Wynik
Operator ten stosuje się do
Wynik = 10 - 3 ' Wynikiem jest 7
znajdowania różnicy - Odejmowanie
- lub do zaznaczania ujemnej wartości
MsgBox Wynik
Wynik = -Wynik ' Wynikiem jest -7
wyrażenia numerycznego - Negacja. MsgBox Wynik

W przykładach zawartych w tabeli w pierwszej linii kodu za pomocą instrukcji Dim deklarujemy zmienną
Wynik. W następnej linii stosując odpowiedni operator wykonujemy działanie na wartościach 10 i 3.
Rezultat tej operacji przypisujemy zmiennej Wynik. W ostatniej linii kodu za pomącą instrukcji MsgBox
wyświetlamy wartość jaką posiada zmienna Wynik. Pamiętając o tym że kod musi być zawarty w
procedurze spróbuj przetestować przykłady samodzielnie lub skorzystaj ze sposobu przedstawionego
poniżej.

Opisane wyżej przykłady możemy przetestować w następujący sposób:

• Uruchom Microsoft Excel.


• Z menu Widok wybieramy Paski narzędzi a następnie Przybornik formantów (jeżeli nie jest
widoczny).
• W Przyborniku formantów wyszukaj i kliknij na ikonę Przycisk polecenia a następnie miejsce w
arkuszu gdzie chcesz go umieścić. Ikona Tryb projektowania w przyborniku powinna się uaktywnić.
• Kliknij dwa razy lewym przyciskiem myszy na wstawiony przycisk (ikona Tryb projektowania w
przyborniku powinna być aktywna). Powinien uruchomić się Edytor Visual Basic z widocznym
oknem Kod programu (Code), w oknie tym zawarta powinna być deklaracja procedury Click naszego
Przycisku polecenia.
• W procedurze zdarzenia Click Przycisku polecenia wpisz kod z określonego przykładu.
• Przykładowy kod może wyglądać:

Private Sub CommandButton1_Click()


Dim Wynik
Wynik = 10 Mod 3 ' Wynikiem jest 1
MsgBox Wynik
End Sub

• Pozamykaj wszystkie okienka, zapisz i zamknij dokument.


• Po ponownym otwarciu (z opcją Włącz makra), kliknij na Przycisk polecenia i przetestuj działanie
przykładu.

41
Słownictwo:

• wyrażenie - kombinacja słów kluczowych, operatorów, zmiennych i stałych, która daje w wyniku
ciąg znaków, liczbę lub obiekt. Wyrażenia mogą być używane do przeprowadzania obliczeń,
wykonywania operacji na znakach lub testowania danych.
• wyrażenie numeryczne - każde wyrażenie, którego wartością może być liczba. Elementy wyrażenia
mogą zawierać dowolną kombinację słów kluczowych, zmiennych, stałych i operatorów, które dają
w wyniku liczbę.

Operatory łączące

Na tej stronie przedstawię Operatory łączące. Nie wdając się w szczegóły najogólniej możemy powiedzieć
że operatora łączącego użyjemy jeżeli chcemy złączyć różne wartości tekstowe w jedną całość. Kiedy
sklejamy np. dwa teksty używając operatora łączącego, drugi tekst jest dodawany od razu na końcu
pierwszego. Podstawowym a praktycznie jedynym operatorem łączącym (czyli konkatenacji) jest &.
Operator ten wymusza przeprowadzenie operacji łączenia ciągów w odniesieniu do dwóch wyrażeń.

Składnia:

wynik = wyrażenie1 & wyrażenie2

• wynik - element obowiązkowy, jest to dowolna zmienna typu String lub Variant.
• wyrażenie1 - element obowiązkowy, jest to dowolne wyrażenie.
• wyrażenie2 - element obowiązkowy, jest to dowolne wyrażenie.

Operator konkatenacji (&) łączy dwa łańcuchy znaków w jeden. Współdziała on nie tylko z łańcuchami
znaków, ale i ze zmiennymi przechowującymi łańcuchy znaków oraz funkcjami zwracającymi łańcuchy
znaków. Wiersz kodu może zawierać wiele operatorów konkatenacji.

Przykład 1:

Dim tekst
tekst = "Witam" & " wszystkich" ' wynikiem jest "Witam wszystkich"
MsgBox tekst

Przykład 2:

Dim tekst
tekst = "Stop " & 200 & " Stop" ' wynikiem jest "Stop 200 Stop"
MsgBox tekst

Przykład 3:

' W przykładzie poniższym wyświetlane jest okno dialogowe, w którym użytkownik


powinien wpisać swoje imię. Następnie wyświetlone jest okno komunikatu z
tekstem powitania.
Dim imię, powitanie
imię = InputBox("Podaj swoje imię")
powitanie = "Witaj " & imię & " miłej zabawy"
MsgBox powitanie

Celem przetestowania przykładów, umieść kod określonego przykładu np. w procedurze zdarzenia Click
Przycisku polecenia. Odpowiednie kroki znajdziesz między innymi na stronie Operatory arytmetyczne.

42
Dla dociekliwych:

Dla dociekliwych przedstawiam kod przykładu, który umieściliśmy w procedurze zdarzenia


Workbook_Open. Procedura ta uruchamiana jest w momencie otwarcia pliku (dokumentu Excela).

Private Sub Workbook_Open()


Dim imię
imię = InputBox("Podaj swoje imię")
MsgBox "Witaj " & imię & " miłej zabawy"
End Sub

Poniżej podaję skróconą wersję kroków do wykonania.

• Będąc w Edytorze Visual Basic w oknie Project (Eksplorator projektów) klikamy dwa razy na obiekt
ThisWorkbook.
• W nowo otwartym oknie kodu obiektu ThisWorkbook wstawiamy kod z przykładu.
• Zapisujemy i zamykamy dokument.
• Celem przetestowania przykładu otwieramy ponownie dokument.

Inne operatory łączące:

Operator + (plus) jaką operator łączący:

Jak już wspomniałem przedstawiając operatory arytmetyczne, operatora + używamy do sumowania ale
możemy też użyć go jako operatora konkatenacji do łączenia łańcuchów znaków (patrz przykład poniżej).
Sposób ten podaje jako ciekawostkę. Zaznaczam że dużo lepszym sposobem jest łączenie ciągów
operatorem &.

Przykład:

Dim Wynik
Wynik = "10" + "3" ' Wynikiem jest 103
MsgBox Wynik

Słownictwo:

• typ danych String - typ danych stanowiący sekwencję następujących po sobie znaków, które
interpretowane są jako znaki tekstowe, a nie jako określone wartości numeryczne. Dane typu String
mogą zawierać litery, cyfry, spacje i znaki przestankowe.
• wyrażenie - kombinacja słów kluczowych, operatorów, zmiennych i stałych, która daje w wyniku
ciąg znaków, liczbę lub obiekt. Wyrażenia mogą być używane do przeprowadzania obliczeń,
wykonywania operacji na znakach lub testowania danych.
• typ danych Variant - specjalny typ danych, które mogą oprócz danych liczbowych, ciągów znaków
lub dat zawierać także wartości specjalne Empty i Null.

Uwagi:

• Operatory łączące służą do pracy z łańcuchami a konkretnie do ich łączenia. Szerzej o łańcuchach
napiszę w dalszej części kursu. Dla informacji podam że każdy łańcuch symboli umieszczony
(ograniczamy z obydwu stron) znakiem cudzysłowu (" ") jest traktowany jako wartość tekstowa.

43
• Tekst w kolorze zielonym zaczynający się od znaku ' jest komentarzem i nie ma wpływu na
działanie przykładów.

Operatory porównania

Na tej stronie przedstawiam krótki opis chyba najczęściej używanych operatorów tj. operatory
porównania. Zasady działania i zastosowania operatorów porównania to bardzo szeroki temat. Ponieważ
jest to strona dla początkujących skupię się na podstawowych informacjach.
VBA posiada operatory do porównywania wartości numerycznych i łańcuchów znaków. Zakładając, że
porównywane wyrażenia zawierają poprawne wartości (nie zawierają wartości Null), wynikiem porównania
będzie wartość True (Prawda) lub False (Fałsz). Za pomocą operatorów porównania możemy porównywać
łańcuchy znaków i wartości numeryczne, ja na tej stronie przedstawię zastosowanie operatorów porównania
do porównywania wartości numerycznych.

Operatory porównania stosowane w VBA:

Operator Znaczenie Przykład wyniku porównania


< Mniejsze niż 10 < 5 ' Wynikiem jest False

<= Mniejsze lub równe 10 <= 5 ' Wynikiem jest False

> Większe niż 10 >= 5 ' Wynikiem jest True

>= Większe lub równe 10 >= 5 ' Wynikiem jest True

= Równe 10 = 5 ' Wynikiem jest False

<> Nierówne 10 <> 5 ' Wynikiem jest True

Informacyjnie tylko podam, że oprócz wymienionych wyżej operatorów VBA posiada jeszcze dwa specjalne
operatory porównania.

• Like - operator służący do porównywania łańcucha znaków ze wzorcem.


• Is - operator służący do sprawdzania czy dwa elementy (zmienne obiektowe) odwołują się do tego
samego obiektu.

Operatorów porównania możemy użyć w standardowej instrukcji przypisania. Wynik porównania który jest
przypisany do zmiennej możemy wykorzystać w wielu instrukcjach. Składnia w tym momencie dla
większości operatorów (z wyjątkiem operatorów Like i Is) wygląda następującą.

Składnia:

warunek = wyrażenie1 odpowiedni operator porównania wyrażenie2

• warunek - element obowiązkowy, jest to dowolna zmienna numeryczna.


• wyrażenie1 - element obowiązkowy, jest to dowolne wyrażenie.
• wyrażenie2 - element obowiązkowy, jest to dowolne wyrażenie.

Poniżej przedstawiam przykład użycia operatora porównania w standardowej instrukcji przypisania

44
• Uwaga: - dla potrzeb kursu, kod przykładu umieściłem w procedurze zdarzenia Click Przycisku
polecenia. Oczywiście odpowiedni kod z przykładu możemy wykorzystać w dowolnej procedurze.

Przykład - kod przykładu:

Private Sub CommandButton1_Click()


On Error GoTo problem
Dim Warunek As Boolean
Dim Dzielna, Dzielnik, Iloraz
Dzielna = Range("B2").Value
Dzielnik = Range("D2").Value
Warunek = Dzielnik <> 0 'Nasza instrukcja przypisania.
If Warunek = True Then
Iloraz = Dzielna / Dzielnik
Range("F2").Value = Iloraz
Else
MsgBox "Dzielenie przez zero, wprowadź poprawną wartość"
End If
Exit Sub
problem:
MsgBox "Wystąpił błąd w programie. " & Err.Description & ", wprowadź poprawne
wartości"
End Sub

Przykład - opis:

Jest to praktycznie w pełni funkcjonalny przykład w którym użyliśmy operatora <> (nierówność) w
standardowej instrukcji przypisania. W przykładzie deklarujemy zmienne Dzielna, Dzielnik i Iloraz,
oraz zmienną Warunek typu Boolean. Wartość zmiennej Dzielna to zawartość komórki B2 arkusza
Excela, natomiast wartość zmiennej Dzielnik jest zawartością komórki D2 arkusza. W przykładzie
sprawdzamy czy wartość zmiennej Dzielnik jest różna od zera, jeżeli tak jest wykonywane jest dzielenie.
Wynik dzielenia wyświetlany jest w komórce F2. Dodałem też obsługę błędów gdyby użytkownik
wprowadził do określonych komórek wartości inne niż numeryczne. Temat obsługi błędów jak i
deklarowania zmiennych omówię w dalszej części kursu. W przykładzie wykorzystujemy również niektóre
operatory przedstawione na poprzednich stronach kursu.

Możemy też użyć operatorów porównania bezpośrednio w instrukcjach warunkowych. Wynik operacji
porównania decyduje o tym, czy dany fragment kodu zostanie wykonany.

Poniżej przedstawiam przykład użycia operatora porównania bezpośrednio w instrukcjach warunkowych.

Przykład - kod przykładu:

Private Sub CommandButton1_Click()


On Error GoTo problem
Dim Dzielna, Dzielnik, Iloraz
Dzielna = Range("B2").Value
Dzielnik = Range("D2").Value
If Dzielnik <> 0 Then 'Operator użyty bezpośrednio w instrukcji.
Iloraz = Dzielna / Dzielnik
Range("F2").Value = Iloraz
Else
MsgBox "Dzielenie przez zero, wprowadź poprawną wartość"
End If
Exit Sub
problem:
45
MsgBox "Wystąpił błąd w programie. " & Err.Description & ", wprowadź poprawne
wartości"
End Sub

Przykład - opis:

Jest to przykład praktycznie identyczny jak wyżej, różnica polega na sposobie wykorzystania operatora <>
(nierówność), operator ten umieszczony jest bezpośrednio w instrukcji warunkowej.

Aby wykonać przykłady, umieść odpowiedni kod w procedurze zdarzenia Click Przycisku polecenia.
Przykładowe kroki znajdziesz między innymi na stronie Operatory arytmetyczne. Następnie wprowadź
wartości do komórek arkusza B2 i D2 arkusza i kliknij na przycisk.

Słownictwo:

• Boolean - typ danych przyjmujący tylko dwie wartości: True (-1) lub False (0). Zmienne typu
Boolean są przechowywane jako liczby 16-bitowe (2-bajtowe).
• False - słowo kluczowe False (Fałsz) jest to stała wbudowana i ma wartość 0.
• Null - wartość wskazująca, że dana zmienna nie zawiera żadnych poprawnych danych. Wartość ta
jest wynikiem jawnego przypisania wartości Null do danej zmiennej lub wynikiem dowolnej operacji
przeprowadzonej pomiędzy wyrażeniami zawierającymi wartość Null.
• True - słowo kluczowe True (Prawda) jest to stała wbudowana i ma wartość -1.

Operatory logiczne

Operatory logiczne - operatory stosowane do wykonywania operacji logicznych. Operator logiczny


sprawdza wartość (True lub False) każdego z dwóch podwyrażeń wyrażenia warunkowego, a następnie
określa (w zależności od operacji logicznej) końcowy wynik wyrażenia. VBA posiada kilka operatorów
logicznych (z tego co wiem sześć), na tej stronie przedstawię dwa z nich tj. operator And i Or.

• And - operator ten służy do wyznaczania iloczynu logicznego dwóch wyrażeń (Koniunkcja). Przy
zastosowaniu tego operatora zwracana jest wartość True (Prawda) jeżeli oba podwyrażenia mają
wartość True. W innym wypadku zwracana jest wartość False (Fałsz). Inaczej mówiąc jeżeli
wyrażenie z lewej strony operatora jest prawdą i wyrażenie z prawej strony jest prawdą to całe
wyrażenie jest prawdą.
• Or - Operator ten służy do wyznaczania sumy logicznej dwóch wyrażeń (Alternatywa). Przy
zastosowaniu tego operatora zwracana jest wartość True wystarczy że jedno z podwyrażeń ma
wartość True. Czyli jeżeli wyrażenie z lewej strony operatora jest prawdą lub wyrażenie z prawej
strony jest prawdą to całe wyrażenie jest prawdą. Oczywiście jeżeli oba podwyrażenia są zgodne z
prawdą to całe wyrażenie zwróci wartość True.

Tabela operatory logiczne And i Or:

Operator Opis Przykład zwracania wyniku


Zwracana jest wartość 10 > 5 And 10 + 5 = 15 ' Wynikiem jest True
True tylko jeżeli oba 10 > 5 And 10 + 5 = 16 ' Wynikiem jest False
And podwyrażenia mają 10 < 5 And 10 + 5 = 15 ' Wynikiem jest False
wartość True 10 < 5 And 10 + 5 = 16 ' Wynikiem jest False

Or Zwracana jest wartość 10 > 5 Or 10 + 5 = 15 ' Wynikiem jest True


True, wystarczy aby 10 > 5 Or 10 + 5 = 16 ' Wynikiem jest True
46
jedną z podwyrażeń ma 10 < 5 Or 10 + 5 = 15 ' Wynikiem jest True
wartość True 10 < 5 Or 10 + 5 = 16 ' Wynikiem jest False

Użycie:

Operatorów logicznych możemy użyć w standardowej instrukcji przypisania. Wynik operacji logicznej który
jest przypisany do zmiennej możemy wykorzystać w wielu instrukcjach. Składnia w tym momencie wygląda
podobnie jak przy operatorach porównania.

Składnia:

warunek = wyrażenie1 odpowiedni operator logiczny wyrażenie2

• warunek - element obowiązkowy, jest to dowolna zmienna numeryczna.


• wyrażenie1 - element obowiązkowy, jest to dowolne wyrażenie.
• wyrażenie2 - element obowiązkowy, jest to dowolne wyrażenie.

Możemy też użyć operatorów logicznych bezpośrednio w instrukcjach warunkowych. Wynik operacji
logicznej decyduje o tym, czy dany fragment kodu zostanie wykonany.

Przykład:

W przykładzie przedstawiam sposób zastosowania operatorów And i Or. Operatora And zastosowaliśmy w
standardowej instrukcji przypisania, zaś operatora Or użyliśmy bezpośrednią w instrukcji warunkowej.

• Uwaga: - dla potrzeb kursu, kod przykładu umieściłem w procedurze zdarzenia Click Przycisku
polecenia. Oczywiście odpowiedni kod z przykładu możemy wykorzystać w dowolnej procedurze.

Przykład - kod przykładu:

Private Sub CommandButton1_Click()


On Error GoTo problem
Dim Warunek As Boolean
Dim Długość, Szerokość, Pole
Długość = Range("B2").Value
Szerokość = Range("D2").Value
Warunek = Długość > 0 And Szerokość > 0 'Operator And użyty w instrukcji
przypisania.
If Warunek = True Then
If Długość > 100 Or Szerokość > 100 Then 'Operatora Or użyty bezpośrednią w
instrukcji warunkowej.
MsgBox "Wprowadź poprawne wartości"
Else
Pole = Długość * Szerokość
Range("F2").Value = Pole
End If
Else
MsgBox "Wprowadź wartości większe od zera"
End If
Exit Sub
problem:
MsgBox "Wystąpił błąd w programie. " & Err.Description & "Wprowadź poprawne
wartości"
47
End Sub

Przykład - opis:

W przykładzie obliczamy pole powierzchni. Na początku deklarujemy zmienne Długość, Szerokość i


Pole, oraz zmienną Warunek typu Boolean. Wartość zmiennej Długość to zawartość komórki B2 arkusza
Excela, natomiast wartość zmiennej Szerokość jest zawartością komórki D2 arkusza. W przykładzie za
pomocą operatora And sprawdzamy czy wartości zmiennej Długość i Szerokość są większe od zera.
Dodatkowo za pomocą operatora Or określamy górne granice zmiennych Długość i Szerokość czyli
górne granice długości boków. Jeżeli określone warunki są spełnione wykonywane jest mnożenie i obliczane
pole powierzchni. Wynik mnożenia wyświetlany jest w komórce F2. Dodałem też obsługę błędów gdyby
użytkownik wprowadził do określonych komórek wartości inne niż numeryczne. Temat obsługi błędów jak i
deklarowania zmiennych omówię w dalszej części kursu. W przykładzie wykorzystujemy również niektóre
operatory przedstawione na poprzednich stronach kursu.

Aby wykonać przykład, umieść odpowiedni kod w procedurze zdarzenia Click Przycisku polecenia.
Przykładowe kroki znajdziesz między innymi na stronie Operatory arytmetyczne. Następnie wprowadź
wartości do komórek arkusza B2 i D2 arkusza i kliknij na przycisk.

Okno komunikatu funkcji MsgBox

VBA posiada narzędzia do tworzenia złożonych okien dialogowych, ale jeżeli chcesz szybko utworzyć
proste okno komunikatu, możesz użyć funkcji MsgBox.

Funkcja MsgBox - wyświetla okno dialogowe z jednym lub więcej przyciskami i czeka na reakcję, po czym
zwraca wartość typu Integer określającą który przycisk został naciśniety.

Składnia:

MsgBox(prompt[, buttons] [, title] [,helpfile, context])

W składni funkcji MsgBox argumenty zawarte w nawiasach prostokątnych są nieobowiązkowe. Samych


nawiasów prostokątnych nie należy umieszczać w kodzie programu pisanego w języku Visual Basic. Dla
funkcji MsgBox jedynym argumentem, który trzeba podać jest tekst wyświetlany w oknie (argument
prompt). Nawiasów okrągłych używamy jeżeli funkcja jest przypisana do zmiennej.

Funkcja MsgBox ma następujące argumenty:

• prompt - argument obowiązkowy, wyrażenie znakowe wyświetlane jako komunikat w oknie


dialogowym. Maksymalna długość prompt wynosi około 1024 znaki, zależnie od szerokości znaków
w zastosowanej czcionce. Jeśli prompt składa się z kilku wierszy, należy je rozdzielić wstawiając
znak powrotu karetki Chr(13) lub znak nowego wiersza Chr(10) albo kombinację znaków powrót
karetki i nowy wiersz Chr(13) & Chr(10). Jeżeli chcemy wyświetlić zwykły tekst musimy go
umieścić w cudzysłowie " ". Możemy też wyświetlić inne wartości, które wcześniej przypisaliśmy
do zmiennej, wtedy wpisujemy nazwę zmiennej (bez cudzysłowu). Jeżeli treść komunikatu ma się
składać z kilku ciągów musimy je połączyć operatorem &.
• buttons - argument nieobowiązkowy, wyrażenie numeryczne określające liczbę i typ wyświetlanych
przycisków, rodzaj i styl używanych ikon, identyfikator domyślnego przycisku oraz modalność okna
komunikatu. Brak parametru buttons spowoduje przyjęcie wartości domyślnej równej 0 (zero). W
dalszej części podaje ustawienia argumentu buttons.

48
• title - argument nieobowiązkowy, wyrażenie znakowe wyświetlane na pasku tytułu okna
dialogowego. Brak argumentu title spowoduje, że na pasku tytułu zostanie umieszczona nazwa
aplikacji.
• helpfile - argument nieobowiązkowy, wyrażenie znakowe określające plik Pomocy zawierający
pomoc kontekstową. Argument helpfile musi być zawsze podany z argumentem context.
• context - argument nieobowiązkowy, wyrażenie numeryczne określające identyfikator tematu w
pliku Pomocy. Jeśli podany jest argument context, to musi być również podany argument helpfile.

Okno komunikatu utworzone za pomocą funkcji MsgBox oprócz tekstu może zawierać jedną z kilku ikon
oraz jeden z kilku zestawów przycisków. To, jaką ikonę i jaki zestaw przycisków zawiera okno komunikatu,
zależy od wartości przekazanej do parametru buttons. Przy określaniu parametru buttons możemy korzystać
z wartości numerycznych jak i ze stałych.

Argument buttons ma następujące ustawienia:

Stała Wartość Opis


vbOKOnly 0 Wyświetl tylko przycisk OK.
VbOKCancel 1 Wyświetl przycisk OK i Anuluj.
VbAbortRetrylgnore 2 Wyświetl przycisk Przerwij, Ponów i Ignoruj.
VbYesNoCancel 3 Wyświetl przyciski Tak, Nie i Anuluj.
VbYesNo 4 Wyświetl przycisk Tak i Nie.
VbRetryCancel 5 Wyświetl przyciski Ponów i Anuluj.
VbCritical 16 Wyświetl ikonę Komunikat krytyczny.
VbQuestion 32 Wyświetl ikonę Pytanie ostrzegawcze.
VbExclamation 48 Wyświetl ikonę Komunikat ostrzegawczy.
VbInformation 64 Wyświetl ikonę Komunikat informacyjny.
VbDefaultButton1 0 Domyślnym przyciskiem jest przycisk pierwszy.
VbDefaultButton2 256 Domyślnym przyciskiem jest przycisk drugi.
VbDefaultButton3 512 Domyślnym przyciskiem jest przycisk trzeci.
VbDefaultButton4 768 Domyślnym przyciskiem jest przycisk czwarty.
Okno modalne w aplikacji; działanie bieżącej aplikacji zostanie
VbApplicationModal 0 wstrzymane, dopóki użytkownik nie odpowie na wyświetlony
komunikat.
Okno modalne w systemie; działanie wszystkich aplikacji zostanie
VbSystemModal 4096 wstrzymane, dopóki użytkownik nie odpowie na wyświetlony
komunikat.

Ustawienia wartości argumentu buttons możemy podzielić na kilka grup. Pierwsza grupa wartości od 0 do 5
opisuje liczbę i typ przycisków. Druga grupa 16, 32, 48, 64 opisuje rodzaje ikon. Trzecia grupa 0, 256, 512
określa domyślny przycisk okna. Czwarta grupa 0, 4096 definiuje modalność okna komunikatu.
Uwaga - tworząc wartość argumentu buttons, z każdej grupy należy wybrać tylko jedną wartość i te wartość
zsumować.

49
Wartości zwracane przez funkcje MsgBox:

Funkcja MsgBox po kliknięciu na odpowiedni przycisk w wyświetlanym oknie komunikatu zwraca


określoną wartość, która odpowiada naciśnietemu przyciskowi.
Jeśli zwracana wartość ma zostać zignorowana, zamiast funkcji MsgBox możemy użyć instrukcji MsgBox.
Należy pominąć nawiasy, podać listę argumentów i nie przypisywać wyniku do zmiennej. Na przykład:

MsgBox "Zakończono zadanie", 0, "Okno zadania"

Aby wykorzystać wartość zwracaną przez funkcję, należy umieścić argumenty w nawiasach i przypisać
zwracaną wartość do zmiennej.

Odp = MsgBox("Czy jesteś zadowolony ze swoich zarobków?", 4, "Pytanie 3")

Wartość zwracana określa który przycisk został naciśnięty, wartość ta jest liczbą całkowitą ale możemy
również korzystać ze stałych przedstawionych poniżej. Jeżeli zatem użytkownik kliknie przycisk Anuluj
funkcja MsgBox zwróci wartość 2 i stałą vbCancel. Poniżej przedstawiam wartości zwracane przez funkcję
MsgBox.

Stała Wartość Opis


vbOK 1 Naciśnięto przycisk OK.
vbCancel 2 Naciśnięto przycisk Anuluj.
vbAbort 3 Naciśnięto przycisk Przerwij.
vbRetry 4 Naciśnięto przycisk Ponów.
vbIgnore 5 Naciśnięto przycisk Ignoruj.
vbYes 6 Naciśnięto przycisk Tak.
vbNo 7 Naciśnięto przycisk Nie.

Zastosowanie:

Funkcje MsgBox możemy wykorzystać na wiele sposobów np: podając informację, ostrzegając o czymś czy
dając użytkownikowi możliwość wyboru sposobu dalszego działania programu. Poniżej przedstawiam kilka
kodów przykładów, oczywiście kody z przykładów umieszczamy w odpowiedniej procedurze.

Przykład 1:

MsgBox "Witaj" ' Wyświetlane jest okno komunikatu z komunikatem Witaj.

Przykład 2:

MsgBox "Witaj" & " Przyjacielu" ' Wyświetlane jest okno komunikatu z
komunikatem Witaj Przyjacielu. Do połączenia wyrazów użyliśmy operatora &.

Przykład 3:

MsgBox "Witaj" & Chr(10) & "Przyjacielu" ' Wyświetlane jest okno komunikatu z
komunikatem umieszczonym w dwóch wierszach: górny to słowo Witaj dolny słowo
Przyjacielu. Dla osiągnięcia tego efektu zastosowaliśmy znak nowego wiersza
Chr(10), do połączenia wyrazów wykorzystaliśmy też operator łączący &.

50
Przykład 4:

MsgBox "Witaj", , "dzono4" ' Wyświetlane jest okno komunikatu z komunikatem


Witaj a na pasku tytułu napis dzono4. Pominęliśmy wartość argumentu buttons
stawiając sam przecinek, brak tego parametru spowoduje przyjęcie wartości
domyślnej 0.

Przykład 5:

MsgBox "Witaj", VbOKCancel, "dzono4" ' Wyświetlane jest okno komunikatu z


komunikatem Witaj i dwoma przyciskamy Ok i Anuluj. Na pasku tytułu napis
dzono4. Parametr buttons określa stała VbOKCancel.

Przykład 6:

MsgBox "Witaj", 321, "dzono4" ' W przykładzie argumeny buttons jest określony
za pomącą wartości liczbowych. Dla przypomnienia dodam, że z każdej grupy
ustawień argumentu buttons należy wybrać tylko jedną wartość i te wartość
zsumować. Proponuję zastanowić się dlaczego niektóre ustawienia wartości
argumentu buttons mają wartość 0.

Przykład 7:

MsgBox "Czy jesteś zadowolony ze swoich zarobków?", VbYesNo + VbInformation +


VbDefaultButton1, "Kierownik" ' Wyświetlane jest okno komunikatu z pytaniem,
dwoma przyciskami Tak i Nie oraz ikona Komunikat informacyjny. Na pasku tytułu
napis Kierownik, domyślnym przyciskiem jest przycisk pierwszy (Tak).

Przykład 8:

Dim Kom, Styl, Tytul


Kom = "Czy jesteś zadowolony ze swoich zarobków?"
Styl = VbYesNo + VbInformation + VbDefaultButton1
Tytul = "Kierownik"
MsgBox Kom, Styl, Tytul ' Przykład ten wyświetla okno komunikatu identyczne
jak wyżej, różnica polega na formie zapisu. Deklarujemy zmienne i określamy
wartości, wartości przypisujemy zmiennym. Jako argumenty funkcji MsgBox
wpisujemy nazwy zmiennych.

Przykład 9:

Dim Odp, Kom, Styl, Tytul


Kom = "Czy jesteś zadowolony ze swoich zarobków?"
Styl = VbYesNo + VbInformation + VbDefaultButton1
Tytul = "Kierownik"
Odp = MsgBox (Kom, Styl, Tytul) 'Przykład ten wyświetla okno komunikatu
identyczne jak wyżej. Jak wiemy funkcja MsgBox zwraca argumenty, które możemy w
jakiś sposób wykorzystać. Aby wykorzystać wartość zwracaną przez funkcję należy
przypisać tę funkcję do zmiennej i ująć argumenty w nawiasy, jak pokazaną w tym
przykładzie. Jeżeli nie przypiszemy funkcji do zmiennej a argumenty zostaną
ujęte w nawiasy, instrukcja spowoduje błąd składniowy.

Przykład 10:

Dim Odp
Odp = MsgBox ("Czy jesteś zadowolony ze swoich zarobków?", VbYesNo +
VbInformation + VbDefaultButton1, "Kierownik") 'Przykład taki sam jak wyżej
tylko lecz w innym wydaniu.
51
Przykład 11:

Dim Odp
Odp = MsgBox ("Czy jesteś zadowolony ze swoich zarobków?", VbYesNo +
VbInformation + VbDefaultButton1, "Kierownik")
If Odp = 6 Then
MsgBox "To dobrze", , "Kierownik"
Else
MsgBox "Fatalnie", , "Kierownik"
End If 'W tym przykładzie wykorzystaliśmy wartości zwracane przez funkcję
MsgBox. Jeżeli użytkownik kliknie na przycisk Tak wyświetlany jest komunikat To
dobrze, po kliknięciu na przycisk Nie wyświetlany jest komunikat Fatalnie .
Oczywiście wartości zwracane przez funkcję MsgBox możemy wykorzystać na wiele
sposobów, zależy to przede wszystkim od wiedzy i pomysłowości użytkownika.

Opisane wyżej przykłady możemy przetestować w następujący sposób:

Uwaga: - dla potrzeb kursu, określony kod przykładu umieściłem w procedurze zdarzenia Click Przycisku
polecenia. Oczywiście odpowiedni kod z przykładu możemy wykorzystać w dowolnej innej procedurze.

• Uruchom Microsoft Excel.


• Z menu Widok wybieramy Paski narzędzi a następnie Przybornik formantów (jeżeli nie jest
widoczny).
• W Przyborniku formantów wyszukaj i kliknij na ikonę Przycisk polecenia a następnie miejsce w
arkuszu gdzie chcesz go umieścić. Ikona Tryb projektowania w przyborniku powinna się uaktywnić.
• Kliknij dwa razy lewym przyciskiem myszy na wstawiony przycisk (ikona Tryb projektowania w
przyborniku powinna być aktywna). Powinien uruchomić się Edytor Visual Basic z widocznym
oknem Kod programu (Code), w oknie tym zawarta powinna być deklaracja procedury Click naszego
Przycisku polecenia.
• W procedurze zdarzenia Click Przycisku polecenia wpisz kod z określonego przykładu.
• Przykładowy kod może wyglądać:

Private Sub CommandButton1_Click()


MsgBox "Witaj", VbOKCancel, "dzono4"
End Sub

• Pozamykaj wszystkie okienka, zapisz i zamknij dokument.


• Po ponownym otwarciu (z opcją Włącz makra), kliknij na Przycisk polecenia i przetestuj działanie
przykładu.

Słownictwo:

• stała - element o nadanej nazwie, który zachowuje stałą wartość przez cały czas działania programu.
Każda aplikacja główna może definiować własny zestaw stałych. Dodatkowe stałe mogą być
definiowane przez użytkownika za pomocą instrukcji Const. Stałych można użyć w dowolnym
miejscu kodu programu zamiast ich rzeczywistych wartości.

Okno dialogowe funkcji InputBox

Jeżeli chcemy szybko utworzyć proste okno do pobierania danych od użytkownika możemy użyć funkcji
InputBox. Za pomocą funkcji InputBox użytkownik może przekazać programowi dowolną wartość
wprowadzoną z klawiatury.

52
Funkcja InputBox wyświetla okno dialogowe z polem tekstowym i dwoma przyciskamy, po czym zwraca
typ danych String będący zawartością pola tekstowego. Typ danych String stanowi sekwencję
następujących po sobie znaków, które interpretowane są jako znaki tekstowe, a nie jako określone wartości
numeryczne. Należy o tym pamiętać, gdy oczekujemy wprowadzenia cyfr używanych do obliczeń i w razie
czego dokonać konwersji za pomocą funkcji Val.
Kliknięcie przycisku OK lub naciśnięcie klawisza ENTER powoduje, że funkcja InputBox zwraca
zawartość pola tekstowego. Funkcja zwróci ciąg o zerowej długości (""), jeśli klikniemy przycisk Anuluj.

Składnia:

InputBox(prompt[, title] [, default] [, xpos] [, ypos] [,helpfile, context])

W składni funkcji InputBox argumenty zawarte w nawiasach prostokątnych są nieobowiązkowe. Samych


nawiasów prostokątnych nie należy umieszczać w kodzie programu pisanego w języku Visual Basic. Dla
funkcji InputBox jedynym argumentem, który trzeba podać jest tekst wyświetlany w oknie (argument
prompt).

Funkcja InputBox ma następujące argumenty:

• prompt - argument obowiązkowy, wyrażenie znakowe wyświetlane jako komunikat w oknie


dialogowym. Maksymalna długość prompt wynosi około 1024 znaki, zależnie od szerokości znaków
w zastosowanej czcionce. Jeśli prompt składa się z kilku wierszy, należy je rozdzielić wstawiając
znak powrotu karetki Chr(13) lub znak nowego wiersza Chr(10) albo kombinację znaków powrót
karetki i nowy wiersz Chr(13) & Chr(10).
• title - argument nieobowiązkowy, wyrażenie znakowe wyświetlane na pasku tytułu okna
dialogowego. Brak argumentu title spowoduje, że na pasku tytułu zostanie umieszczona nazwa
aplikacji.
• default - argument nieobowiązkowy, wyrażenie znakowe wyświetlane w polu tekstowym (jeśli nie
zostanie podany inny tekst). Brak parametru default spowoduje, że pole tekstowe będzie puste.
• xpos - argument nieobowiązkowy, wyrażenie numeryczne określające w jednostkach zwanych
"twips", odległość lewej krawędzi okna dialogowego od lewej krawędzi ekranu. Brak argumentu
xpos spowoduje, że okno dialogowe zostanie umieszczone w równej odległości od lewej i prawej
krawędzi ekranu.
• ypos - argument nieobowiązkowy, wyrażenie numeryczne określające w jednostkach zwanych
"twips", odległość górnej krawędzi okna dialogowego od górnej krawędzi ekranu. Brak argumentu
ypos spowoduje, że okno dialogowe zostanie umieszczone na poziomie dwóch trzecich wysokości
ekranu.
• helpfile - argument nieobowiązkowy, wyrażenie znakowe określające plik Pomocy zawierający
pomoc kontekstową. Argument helpfile musi być zawsze podany z argumentem context.
• context - argument nieobowiązkowy, wyrażenie numeryczne określające identyfikator tematu w
pliku Pomocy. Jeśli podany jest argument context, to musi być również podany argument helpfile.

Zastosowanie:

Za pomocą funkcji InputBox możemy uzyskać informacje od użytkownika które w jakiś sposób możemy
wykorzystać.
Aby wykorzystać informacje podane przez użytkownika, wartość zwróconą przez funkcję InputBox, czyli
tekst wpisany w polu tekstowym okna dialogowego przypisujemy do zmiennej. Poniżej przedstawiam kilka
przykładów zastosowani funkcji InputBox. Oczywiście kody z przedstawionych poniżej przykładów
umieszczamy w odpowiedniej procedurze.

53
Przykład 1:

Dim wartosc
wartosc = InputBox("Podaj swoje imię") 'Wyświetlane jest okno dialogowe z
zapytaniem o imię użytkownika.

Przykład 2:

Dim wartosc
wartosc = InputBox("Podaj swoje imię", "dzono4") 'Wyświetlane jest okno
dialogowe z zapytaniem o imię użytkownika. Na pasku tytułu okna dialogowego
wyświetlony jest napis dzono4.

Przykład 3:

Dim wartosc
wartosc = InputBox("Podaj swoje imię", "dzono4", "janek") 'Wyświetlane jest
okno dialogowe z zapytaniem o imię użytkownika. Na pasku tytułu okna
dialogowego wyświetlony jest napis dzono4. W polu tekstowym wyświetlana jest
wartość domyślna tj. janek.

Przykład 4:

Dim wartosc
wartosc = InputBox("Podaj imię", "dzono4", "janek", 500, 500) 'Wyświetlane
jest okno dialogowe z zapytaniem o imię użytkownika, Na pasku tytułu okna
dialogowego wyświetlony jest napis dzono4. W polu tekstowym wyświetlana jest
wartość domyślna tj. janek. Określamy też położenie okna na ekranie.

Przykład 5:

Dim wartosc
wartosc = InputBox("Podaj imię", "dzono4", "janek", 500, 500)
Range("B2").Value = wartosc 'Przykład identyczny jak wyżej, wartość zwrócona
przez okno dialogowe wpisywana jest do komórki B2 arkusza Excela.

Przykład 6:

Dim wartosc
wartosc = InputBox("Podaj imię", "dzono4", "janek", 500, 500)
If wartosc = "" Then wartosc = "bezimienny"
MsgBox "Witaj " & wartosc & " życzę przyjemnej zabawy", vbInformation,
"dzono4" 'przykład podobny jak wyżej, wartość zwrócona przez okno dialogowe
wykorzystaliśmy do wyświetlenia okna komunikatu z powitaniem.Jeżeli chcemy aby
okno dialogowe ukazywało się w momencie otwarcia dokumentu Excela, kod
przykładu należy umieścić w zdarzeniu Workbook_Open() naszego dokumentu.

Przykład 7:

Dim haslo, ciag


haslo = "lufa"
ciag = InputBox("Wpisz hasło")
If ciag = haslo Then
MsgBox "Podałeś prawidłowe hasło"
' następne instrukcje programu.
Else
MsgBox "hasło nieprawidłowe"
End
54
End If 'W przykładzie tym pytamy użytkownika o hasło. Jeżeli użytkownik poda
prawidłowe hasło (w naszym przypadku lufa), wyświetlane jest okno komunikatu z
tekstem: Podałeś prawidłowe hasło. Jeżeli wpiszemy nieprawidłowe hasło,
wyświetlany jest komunikat że hasło jest nieprawidłowe i następuje przerwanie
działania programu.

Przykład 8:

On Error GoTo anuluj


Dim DataPodana As Date
Dim kom
DataPodana = InputBox("Wprowadź datę w formacie " & Date, , Date)
kom = "Liczba dni od dzisiaj: " & DateDiff("d", Date, DataPodana)
MsgBox kom
Exit Sub
anuluj:
MsgBox "Nie podałeś odpowiedniej daty, operacja anulowana" 'Kod przykładu
oblicza ilość dni pomiędzy aktualną datą a datą wprowadzoną za pomocą okna
dialogowego wyświetlanego przez funkcje InputBox. Dodałem też obsługę błędów
jeżeli np. użytkownik naciśnie przycisk Anuluj czy pozostawi pole bez wartości.

Celem przetestowania przykładów, umieść kod określonego przykładu np. w procedurze zdarzenia Click
Przycisku polecenia. Odpowiednie kroki znajdziesz między innymi na stronie Okna komunikatów.

Formularze

Na poprzednich stronach poznaliśmy okna komunikatów utworzone za pomocą funkcji MsgBox i okna
dialogowe utworzone za pomocą funkcji InputBox. Jeżeli jednak okna te nie spełniają potrzeb programu
możemy utworzyć formularz z formantami i dodać do niego kod VBA.

• Formularz - okno lub okno dialogowe. Możemy powiedzieć że formularze są kontenerami dla
formantów. Formularz jest obiektem, oznacza to że posiada on właściwości, metody i reaguje na
zdarzenia. W edytorze VBA formularz nosi nazwę UserForm.
• Formant - obiekt, który można umieścić na formularzu, posiadający własny zestaw rozpoznawalnych
właściwości, metod i zdarzeń. Formantów można używać do pobierania i wyświetlania danych oraz
wyzwalania procedur obsługi zdarzeń. Większością formantów można operować używając metod.
Niektóre formanty są interaktywne (reagują na akcje użytkownika), podczas gdy inne są statyczne
(dostępne tylko poprzez kod programu).

Tworzenie formularza:

Aby utworzyć nowy formularz należy uruchomić edytor VBA i z jego poziomu:

• Z menu Insert (Wstaw) wybieramy opcję UserForm (UserForm).


• Inny sposób to w oknie Project (Projekt) klikamy prawym przyciskiem myszy nazwę projektu. Z
menu kontekstowego wybieramy pozycję Insert (Wstaw) a następnie opcję UserForm (UserForm).

W oknie edytora pojawi się nowy (czysty, czyli bez formantów) formularz oraz przybornik (pasek narzędzi)
o nazwie ToolBox. Przybornik ten zawiera właśnie formanty które możemy dodać do formularza. Dla
własnej wygody, formularz jak i przybornik możemy odpowiednią rozmieścić w edytorze VBA. Technicznie
okna te można przesunąć tak jak każde okno systemu Windows. Zakładając że mamy widoczne okna Project
i Properties, całość powinna wyglądać mniej więcej tak.
55
Dodawanie formantów do formularza:

Do formularza można dodać formanty czyli obiekty znajdujące się w przyborniku Toolbox. Pasek narzędzi
Toolbox pojawia się na ekranie wraz z nowo utworzonym formularzem. Jeżeli klikniemy okno Properties
(Właściwości) lub Project (Projekt), przybornik zostanie ukryty. Aby ponownie wyświetlić przybornik
klikamy na formularz czy formant umieszczony na formularzu.

Aby dodać nowy formant do formularza wykonaj czynności:

• Na przyborniku Toolbox klikamy przycisk oznaczający formant który chcemy umieścić na przykład
duże A czyli Label (Etykieta).
• Przesuwamy kursor nad formularz w miejsce gdzie chcemy aby znajdował się nasz obiekt. Gdy
przesuniemy kursor na formularz przybierze on kształt plus. Kursorowi towarzyszy symbol
wybranego formantu.
• Wciskamy i przytrzymujemy lewy przycisk myszy, ciągniemy kursorem obserwując kreślony na
formularzu zarys formatu.
• W chwili gdy formant osiągnie planowane wymiary zwalniamy przycisk myszy.

Właściwości formularzy i formantów:

Formularze i formanty (podobnie jak inne obiekty), posiadają właściwości określające ich wygląd i sposób
działania. Właściwości opiszę w dalszej części kursu na razie przedstawię kilka podstawowych informacji.

Wartości właściwości możemy odczytywać i modyfikować za pomocą kodu VBA lub w oknie Properties
(Właściwości). Okno to wyświetla właściwości opisujące zaznaczony (aktywny) obiekt. Czyli jeżeli
zaznaczymy (klikniemy) na formularz okno Properties wyświetli właściwości formularza. Gdy zmienimy

56
zaznaczenie klikając na jakiś formant na formularzu lub na inny obiekt na przykład w oknie Project, to okno
Properties wyświetli właściwości tego obiektu. Więcej informacji na temat okna Properties znajdziesz na
stronie: Edytor Visual Basic. Poniżej przedstawiam przykładowy sposób odczytywania i zmiany właściwości
za pomocą okna Properties.

• Jeżeli nie jest widoczne, wyświetl okno Properties ( naciskając na przykład F4).
• Zaznacz (kliknij) obiekt którego właściwości chcesz wyświetlić, może to być nasz formularz.
• W kolumnie z lewej strony okna Properties znajdź na liście określono właściwość na przykład Name.
W polu obok umieszczona jest wartość tej właściwości, wpisz tam nową wartość na przykład
frmWitaj.

Sposób zmiany właściwości zależy od jej rodzaju. Możemy wpisać nową wartość czy wybrać ją z listy lub z
okna dialogowego.

metody:

Metoda jest akcją, którą może wykonać obiekt lub którą wykonujemy na obiekcie. Najogólniej możemy
powiedzieć że metoda to procedura związana z konkretnym obiektem. Ponieważ kod metody jest częścią
obiektu, obiekt że tak powiem wie co ma robić kiedy wywołamy określoną metodę. Oczywiście różne
obiekty mogą posiadać i wykonywać różne metody.

Wyświetlanie formularza za pomocą metody Show:

Jeżeli chcemy wyświetlić formularz podczas działania programu w momencie w jakim wymaga tego
program (ustalonym przez programistę) możemy użyć metody Show. Aby na przykład wyświetlić formularz
o nazwie (właściwość Name) frmWitaj piszemy kod: frmWitaj.Show. W dalszej części strony
przedstawiam przykład zastosowania tej metody.

Ukrywanie formularza z pomocą metody Hide:

Aby podczas działania programu ukryć formularz na przykład po to, by użytkownik miał dostęp do narzędzi
aplikacji macierzystej, użyjemy jego metody Hide. Jeżeli chcemy ukryć formularz o nazwie (właściwość
Name) frmWitaj piszemy kod: frmWitaj.Hide. W dalszej części strony przedstawiam przykład
zastosowania tej metody.

Zdarzenia:

Formularze a także ich formanty mogą reagować na różne zdarzenia na przykład naciśnięcie przycisku
myszy (gdy kursor znajduje się na obiekcie). Jeżeli do wywołanego zdarzenia dodamy kod VBA to jest on
wykonywany. Kod przypisany zdarzeniu związanemu z danym obiektem nazywamy procedurą zdarzenia.
Formularz i formanty mogą reagować na wiele różnych zdarzeń. Na przykład formularz posiada zdarzenie
Activate które zachodzi ilekroć formularz jest aktywowany. Zdarzenie to wykorzystałem w przykładzie
poniżej.

Przykład:

Poniżej przedstawiam przykład w którym przy uruchomieniu dokumentu Excela pokazuje się okienko,
ładowany jest formularz o nazwie frmWitaj. Po upływie określonego czasu okienko znika i możemy
korzystać z uruchamianego dokumentu. Forma naszego przywitania wizualnie jest bardzo skromna, możesz

57
a nawet powinieneś pod tym względem przykład ten udoskonalić. Wykorzystaj wiedzę przedstawiono na tej
stronie i wykonaj kroki przedstawione poniżej.

Kroki:

1. Uruchom Microsoft Excel.


2. Z menu Widok wybieramy Paski narzędzi a następnie opcje Visual Basic, (jeżeli pasek nie jest
widoczny).
3. Z paska narzędzi Visual Basic wybieramy przycisk Edytor Visual Basic.
4. W nowo otwartym oknie Microsoft Visual Basic-Zeszyt1 z menu View (Widok) wybieramy kolejno
opcję:
o Project Explorer (Eksploator projektu)
o Properties Window (Okno właściwości)

Powinny się otworzyć okienka: Project-VBAProject i Properties, dla własnej wygody dopasowujemy
rozmiar i położenie okienek (oczywiście punktu tego nie wykonujemy jeżeli okienka były wcześniej
otwarte).

5. Wstaw nowy formularz.


6. W oknie właściwości zmieniamy właściwości naszego obiektu User Form:
o Name na frmWitaj
o Caption na Okienko powitalne
7. Wstaw do formularza etykietę.
8. W oknie właściwości ustawiamy właściwości etykiety:
o Name na lblWitaj
o Caption na WITAJ
o Font na Ariar, wielkość czcionki na 18 (klikamy na wielokropek i zmieniamy właściwości)
o TextAlign na fmTextAlignCenter

Dopasuj ewentualnie rozmiar etykiety.

9. W oknie Project klikamy prawym przyciskiem myszy na obiekt ThisWorkbook i wybieramy opcję
View Code (Pokaż kod programu). W nowo otwartym oknie klikamy na strzałkę u góry z lewej strony
i wybieramy obiekt Workbook.
Pomiędzy linie kodu: Private Sub Workbook_Open() i End Sub, wstawiamy (piszemy) kod:
frmWitaj.Show
10. W oknie Project klikamy prawym przyciskiem myszy na obiekt frmWitaj i wybieramy opcję View
Code (Pokaż kod programu). W nowo otwartym oknie klikamy na strzałkę (górna lewa) i wybieramy
obiekt UserForm następnie klikamy na strzałkę (u góry) z prawej strony i wybieramy zdarzenie
Activate. Pomiędzy linie kodu:Private Sub UserForm_Activate() i End Sub, wstawiamy
(przepisujemy) kod:
Dim Przerwa, Start
Przerwa = 6
Start = Timer
Do While Timer < Start + Przerwa
DoEvents
Loop
frmWitaj.Hide
11. Pozamykaj wszystkie okienka, zapisz i zamknij arkusz. Po ponownym otwarciu (z opcją Włącz
makra) przetestuj działanie programu.

• Uwaga - więcej informacji na temat działania kodu przykładu znajdziesz na stronie


http://dzono4.webpark.pl/basic/witaj.htm na której opisałem podobny przykład.

58
Właściwości

Wcześniej zapoznaliśmy się już wstępnie z właściwościami obiektów, na tej stronie temat rozszerzę i opiszę
niektóre z nich. Przedstawię kilka podstawowych właściwości przede wszystkim określające wygląd
obiektów.

• właściwość - opatrzony nazwą atrybut obiektu. Właściwości definiują takie cechy obiektu jak
rozmiar, kolor i położenie na ekranie a także stan obiektu na przykład to czy jest on aktywny czy
nieaktywny.

Wartości właściwości możemy odczytywać i modyfikować za pomocą kodu VBA lub w oknie Właściwości
czyli Properties. Więcej informacji na temat okna Properties znajdziesz na stronie: Edytor Visual Basic. Aby
zmienić wartość własciwości w oknie Properties, w zależności od rodzaju własciwości wykonujemy jedną z
nastepujących czynności:

• W polu obok nazwy właściwości wpisujemy jej nową wartość. W ten sposób możemy zmieniać takie
właściwości jak: Name, Caption, Width, Height, Top czy Left.
• Klikamy na pole obok nazwy właściwości a następnie na przycisk z grotem strzałki. Kliknięcie na
przycisk powoduje wyświetlenie listy dostępnych wartości dla danej właściwości. Z listy tej
wybieramy odpowiednią wartość. Za pomocą tej metody możemy ustawić na przykład: BackColor,
ForeColor, Visible, TextAlign.
• Klikamy na pole obok nazwy właściwości (na przykład obok nazwy Font) a następnie na przycisk
oznaczony wielokropkiem. Kliknięcie na przycisk powoduje wyświetlenie okna dialogowego, w
oknie tym możemy ustawić odpowiednie wartości.

UWAGA: W niektórych przypadkach podwójne kliknięcie na pole obok nazwy wybranej właściwości spowoduje
zmianę jej wartości (np. właściwość Visible).

Aby określić wartość właściwości za pomocą kodu VBA, stosujemy instrukcje przypisania. Z lewej strony
znaku równości określamy obiekt i właściwość a z prawej podajemy wartość tej wlaściwości. W dalszej
częsci strony przedstawiam kilka przykładów zastosowania tego sposobu.

Oczywiście różne obiekty posiadają różne zestawy właściwości, odpowiednie dla danego typu obiektu.
Właściwości obiektu często związane są z jego metodami i zdarzeniami. Na tej stronie przedstawię niektóre
właściwości obiektów przede wszystkim formantów.

Name:

Właściwość Name (nazwa) - jest to jeden z najważniejszych atrybutów, przechowuje wyrażenie typu ciąg
znaków identyfikujące nazwę obiektu. Jeśli chodzi o nazewnictwo jest to bardzo szeroki temat powiem
tylko, że prawidłowa nazwa musi być zgodna z zasadami nazywania obiektów.

Nazwy są tak istotnym elementem, że w momencie gdy wstawiamy obiekt nazwa jest automatycznie
generowana. Domyślną nazwą np. formantu niezwiązanego jest nazwa typu obiektu i unikatowy numer.
Jeżeli np. do arkusza Excela czy do obiektu UserForm wstawimy formant Etykieta (Label), jego
ustawieniem właściwości Name będzie Label1. Jeżeli wstawimy następną Etykietę będzie to Label2 itd.
Trzeba jednak zauważyć że nazywanie obiektów według wyżej opisanej konwencji szczególnie budując
duże projekty może być bardzo mylące. Na przykład jeśli dodamy dziesięć etykiet to jak zapamiętać akcję,
która jest "podczepiona" pod etykietę Label9 ?. Sztuczka polega na tym że można zastąpić nazwy
automatycznie nadawane własnymi. Ale jak nadać najlepszą nazwę ?. Istnieje pewna konwencja stosowana
w Visual Basic 6, którą ja też stosuję w VBA. Otóż nazwa powinna zawierać skrót identyfikujący typ
formantu i nazwę zaczynającą się z dużej litery opisującą do czego formant nam służy. Wstawiając np.

59
Przycisk polecenia (CommandButton), który ma wykonywać akcję obliczania czegoś nadajemy mu nazwę
cmdOblicz.

Poniżej przedstawiam najczęściej dodawane przedrostki do nazw obiektów:

Obiekt Przedrostek Przykład


Etykieta (Label) lbl lblPowitanie
Przycisk poleceń (CommandButton) cmd cmdUruchom
Pole tekstowe (TextBox) txt txtWiek
Obraz (Image) img imgTata
Formularz (UserForm) frm frmHaslo

Właściwość Name czyli nazwę obiektu możemy ustawić w oknie Properties (Właściwości). Nazwa obiektu
jest używana w kodzie VBA w czasie działania programu np. do zmiany innej właściwości danego obiektu
lub uruchomienia jego metody.

Caption:

Właściwość Caption (tytuł) - określa jaki tekst jest wyświetlany przez obiekt. Właściwość tą posiadają takie
formanty jak np. etykieta, przycisk poleceń, pole wyboru, przycisk przełącznika czy obiekt UserForm. Dla
formularza właściwość Caption (czyli tytuł) wyświetlana jest w jego pasku tytułu. Właściwość tą można
ustawić za pomocą okna Properties (Właściwości) lub kodu VBA. Sposób zmiany właściwości za pomocą
okna Properties poznaliśmy już wcześniej. Aby określić (zmienić) właściwość Caption za pomocą kodu
VBA, podczas działania programu możemy napisać:

lblKomunikat.Caption = "Limit przekroczony"

Powyższa linia kodu spowoduje, że etykieta o nazwie (właściwość Name) lblKomunikat będzie
wyświetlała test: Limit przekroczony. Oczywiście kod umieszczamy w odpowiedniej procedurze.

BackColor:

Właściwość BackColor (kolor tła) - określa nam kolor wnętrza obiektu. Właściwość tą możemy zmienić w
oknie Properties (Właściwości) lub za pomocą kodu VBA wykorzystując funkcję QBColor lub RGB.

lblKomunikat.BackColor = QBColor(14)

Za pomocą tej linii wykorzystując funkcję QBColor określamy kolor tła naszej etykiety lblKomunikat na
żółty.

ForeColor:

Właściwość ForeColor (kolor tekstu) - określa kolor tekstu wyświetlanego przez formant. Właściwość te
możemy zmienić w oknie Properties (Właściwości) lub za pomocą kodu VBA wykorzystując funkcję
QBColor lub RGB.

lblKomunikat.ForeColor = RGB(255, 0, 0)

60
Za pomocą funkcji RGB określamy kolor wyświetlanego tekstu przez nasz formant na czerwony.

Width:

Właściwość Width (szerokość) - określa szerokość obiektu (formantu). Właściwość tą możemy określić w
oknie Properties (Właściwości) lub za pomocą kodu VBA. Poniżej przedstawiam przykład ustawienia tej
właściwości za pomocą kodu VBA.

lblKomunikat.Width = 240

Height:

Właściwość Height (wysokość) - określa wysokość obiektu (formantu). Właściwość tą możemy określić w
oknie Properties (Właściwości) lub za pomocą języka VBA. Poniżej przedstawiam przykład ustawienia tej
właściwości za pomocą kodu VBA.

lblKomunikat.Height = 32

Top:

Właściwość Top (górny) - określa położenie górnej krawędzi formatu od górnej krawędzi obiektu (arkusz
Excela, obiekt UserForm) zawierającego ten formant. Właściwość tą możemy określić w oknie Properties
(Właściwości) lub za pomącą języka VBA.

• Uwaga: gdy przesuwa się format, nowe ustawienie jego właściwości Top jest automatycznie
wprowadzana.

Left:

Właściwość Left (lewy) - określa położenie lewej krawędzi formantu od lewej krawędzi obiektu (arkusz
Excela, obiekt UserForm) zawierającego ten formant. Właściwości te możemy określić w oknie Properties
(Właściwości) lub za pomącą kodu VBA.

• Uwaga: gdy przesuwa się format, nowe ustawienie jego właściwości Left jest automatycznie
wprowadzana.

Font:

Właściwość Font (czcionka) - pozwala wybrać czcionkę z czcionek zainstalowanych w systemie. Oraz na
określenie innych parametrów wybranej czcionki takich jak na przykład: styl czcionki czy wielkość.
Właściwość tą możemy określić w oknie Properties (Właściwości) lub za pomącą języka VBA. Aby ustawić
parametry czcionki w oknie Properties, klikamy na właściwość Font a następnie na przycisk z
wielokropkiem. Powinno się otworzyć okno dialogowe w którym możemy wybrać czcionkę i określić jej
właściwości. Poniżej przedstawiam jak możemy określić właściwości czcionki za pomocą języka VBA.

lblKomunikat.Font.Size = 24 'Określamy wielkość czcionki na 24.


lblKomunikat.Font.Bold = True 'Pogrubiamy naszą czcionkę.

61
Visible:

Właściwość Visible (widoczny) - określa czy podczas działania programu formant jest widoczny. Dla tej
właściwości używane są następujące ustawienia:

• True - (domyślnie) formant jest widoczny.


• False - formant jest niewidoczny.

Właściwość tą możemy określić w oknie Properties (Właściwości) lub za pomącą kodu VBA. W oknie
Properties klikamy na pole obok nazwy właściwości Visible a następnie na przycisk z grotem strzałki i
wybieramy ustawienie. Gdy zaś chcemy zmienić właściwość Visible za pomocą kodu VBA możemy
napisać:

lblKomunikat.Visible = True 'Po wykonaniu tej linii kodu etykieta będzie


widoczna.

lblKomunikat.Visible = False 'Etykieta staje się niewidoczna.

UWAGA: W trybie projektowania wszystkie formanty będą widoczne, niezależnie od ustawienia właściwości Visible.

Przykład:

Pora na wykorzystanie wiedzy przedstawionej na tej stronie. Poniżej przedstawiam kod przykładu w którym
zmieniamy właściwości naszej etykiety w czasie działania programu. Przykład powstał na potrzeby kursu
ale możemy go też praktycznie wykorzystać. Możemy na przykład założyć że wartość w komórce D4 jest
finalnym wynikiem pewnych obliczeń, może to być bilans budżetu domowego. Nasza etykieta będzie
sygnalizowała różne stany tego budżetu.

Kod przykładu:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)


Dim Limit
Limit = Range("D4").Value
If IsNumeric(Limit) = True Then
If Limit > 100 Then
lblKomunikat.TextAlign = fmTextAlignCenter
lblKomunikat.Caption = "Limit przekroczony"
lblKomunikat.BackColor = QBColor(14)
lblKomunikat.ForeColor = RGB(255, 0, 0)
lblKomunikat.Height = 32
lblKomunikat.Width = 240
lblKomunikat.Font.Name = "Arial"
lblKomunikat.Font.Size = 24
lblKomunikat.Font.Bold = True
lblKomunikat.Visible = True
ElseIf Limit > 90 Then
lblKomunikat.TextAlign = fmTextAlignCenter
lblKomunikat.Caption = "Granica limitu"
lblKomunikat.BackColor = QBColor(14)
lblKomunikat.ForeColor = RGB(0, 0, 0)
lblKomunikat.Height = 16
lblKomunikat.Width = 120
lblKomunikat.Font.Name = "Arial"
lblKomunikat.Font.Size = 12
lblKomunikat.Font.Bold = False
lblKomunikat.Visible = True

62
Else
lblKomunikat.Visible = False
End If
Else
MsgBox "Nieprawidłowy typ danych w komórce D4"
lblKomunikat.Visible = False
End If
End Sub

Opis przykładu:

W przykładzie w zależności od zawartości komórki D4 arkusza Excela wyświetlany jest lub nie odpowiedni
komunikat. Kod przykładu umieściliśmy w zdarzeniu Change arkusza Excela. Zdarzenie to zachodzi przy
każdej zmianie dokonanej w arkuszu. Jeżeli wartość w komórce D4 jest mniejsza od 90, komunikat czyli
nasza etykieta nie jest widoczna. Jeżeli wartość w komórce D4 zawiera się w przedziale od 91 do 100
wyświetlana jest etykieta z napisem: Granica limitu. Gdy przekroczymy wartość 100 napis się zmienia na:
Limit przekroczony a etykieta staje się większa i bardziej wyrazista. Do kodu przykładu dodałem też
obsługę błędów gdyby w komórce D4 była wprowadzona wartość inna niż numeryczna.

Kroki:

• Uruchom Microsoft Excel.


• Z menu Widok wybierz Paski narzędzi a następnie Przybornik formantów (jeżeli nie jest widoczny).
• W Przyborniku formantów wyszukaj i kliknij na ikonę Etykieta (duże A) a następnie miejsce w
arkuszu gdzie chcesz ją umieścić (może to być prawa górna część ekranu, ważne jest aby nasza
etykieta nie zasłaniała komórki D4 arkusza). Ikona Tryb projektowania w przyborniku powinna się
uaktywnić.
• Kliknij prawym przyciskiem myszy na etykiecie (etykieta powinna być zaznaczona jeżeli nie jest
wcześniej zaznaczamy ją klikając na niej lewym przyciskiem myszy). Z otwartego menu wybieramy
Właściwości, powinno się otworzyć okno Właściwości, w oknie tym zmieniamy następujące
właściwości etykiety:
o Name na lblKomunikat
o Visible na False
• Zamknij okno Właściwości.
• Z paska narzędzi Visual Basic wybieramy ikonę Edytor Visual Basic, powinno się otworzyć okno
Microsofot Visual Basic....
• W oknie tym z menu View (Widok) wybieramy Project Explorer (Eksploator projektu), oczywiście
jeżeli okno nie jest widoczne.
• W Oknie Eksplorator projektu klikamy dwa razy na obiekt Arkusz1 (Arkusz1), powinno nam się
otworzyć okno kodu programu naszego Arkusza1.
• W nowo otwartym oknie Zeszyt1-Arkusz1(Code) klikamy na strzałkę w górnej części okna z lewej
strony i wybieramy obiekt Worksheet następnie klikamy na strzałkę (u góry) z prawej strony i
wybieramy zdarzenie Change. Pomiędzy linie kodu: Private Sub Worksheet_Change(ByVal
Target As Excel.Range) i End Sub, wstawiamy (przepisujemy) pozostały kod z przykładu.
• Pozamykaj wszystkie okienka, zapisz i zamknij dokument. Po ponownym otwarciu z opcją Włącz
makra, przetestuj działanie programu. Oczywiście wprowadź przykładowe wartości do komórki D4
arkusza Excela.
• Celem ponownego przetestowania, wpisz inne wartości do komórki D4 arkusza.

Metody

Z metodami spotkałeś się już w tym kursie, przypomnij sobie stronę Formularze. Przedstawiłem na niej dwie
metody operujące na formularzach, metodę Show która wyświetla formularz i metodę Hide ukrywającą
formularz. Na tej stronie przedstawię kilka metod których możemy użyć bezpośrednią w arkuszu Excela.
63
• metoda - procedura podobna do instrukcji lub funkcji, operująca na konkretnych obiektach.

Metoda jest akcją, którą może wykonać obiekt lub którą wykonujemy na obiekcie. Najogólniej możemy
powiedzieć że metoda to procedura związana z konkretnym obiektem. Ponieważ kod metody jest częścią
obiektu, obiekt że tak powiem wie co ma robić kiedy wywołamy określoną metodę. Oczywiście różne
obiekty mogą posiadać i wykonywać różne metody.

Zastosowanie:

Jak już wspomniałem metody to zadania (akcje) które dany obiekt może wykonać lub które mogą być
wykonane na danym obiekcie. Za pomocą metody możemy na przykład zapisać czy wydrukować dokument,
lub wyczyścić zawartość komórek arkusza. W poniższych przykładach przedstawiam kilka praktycznych
zastosowań niektórych metod. Tekst kodu przykładów w kolorze zielonym zaczynający się od znaku ' jest
komentarzem i nie ma wpływu na działanie przykładów.

Przykład 1:

Sub WyczyscWszystko()
Range("A1").Clear 'Za pomocą metody Clear czyścimy zawartość i przywracamy
domyślne formatowanie komórkę A1 arkusza Excela.
End Sub

Przykład 2:

Sub WyczyscZawartosc()
Range("A1").ClearContents 'Wykorzystując metodę ClearContents czyścimy tylko
zawartość komórki A1 arkusza.
End Sub

Przykład 3:

Sub WyczyscFormat()
Range("A1").ClearFormats 'Korzystając z metody ClearFormats przywracamy
formatowanie domyślne dla komórki A1 .
End Sub

Przykład 4:

Sub WyczyscZakres()
Range("A1:D10").ClearContents 'Czyścimy zawartość komórek z zakresu A1:D10,
analogicznie możemy zastosować metody Clear i ClearFormats.
End Sub

Przykład 5:

Sub Czyszczenie()
For Each obiekt In Worksheets("Arkusz1").Range("A1:M25")
If IsNumeric(obiekt.Value) = True Then
If obiekt.Value < 0 Then
obiekt.ClearContents
End If
End If
Next 'Za pomocą pętli For Each...Next przeszukiwany jest zakres komórek A1:M25
arkusza Excela o nazwie Arkusz1. Korzystając z metody ClearContents czyszczona

64
jest zawartość komórek o wartościach mniejszych od 0.
End Sub

Przykład 6:

Sub Zapisywanie()
ActiveWorkbook.Save 'Metoda Save zapisuje obiekt, nasz kod powoduje zapisanie
zmian w aktywnym dokumencie Excela.
End Sub

Przykład 7:

Sub Podgląd()
Worksheets("Arkusz1").PrintPreview 'Za pomocą metody PrintPreview wyświetlamy
podgląd wydruku arkusza o nazwie Arkusza1.
End Sub

Przykład 8:

Sub Drukuj()
Range("B4:H22").PrintOut 'Metoda PrintOut drukuje wskazany obiekt. Powyższy
kod spowoduje wydrukowanie zawartości zakresu komórek B2:H22, na domyślnej
drukarce z domyślnymi (lub zdefiniowanymi wcześniej) opcjami.
End Sub

Aby przetestować przykłady umieść kody z przykładów w module standardowym, jeżeli nie wiesz jak to
zrobić wykonaj następujące czynności:

• Uruchom Microsoft Excel.


• Z menu Widok wybieramy Paski narzędzi a następnie opcje Visual Basic, (jeżeli pasek nie jest
widoczny).
• Z paska narzędzi Visual Basic wybieramy przycisk Edytor Visual Basic.
• W nowo otwartym oknie Microsoft Visual Basic-Zeszyt1 z menu View (Widok) wybieramy opcję
ProjectExplorer (Eksploator projektu). Powinno się otworzyć okno Project-VBAProject (Projekt-
VBAProject) oczywiście punktu tego nie wykonujemy, jeżeli okienko było wcześniej otwarte.
• Następnie w celu wstawienia nowego modułu, z menu Insert (Wstaw) wybieramy opcję Module
(Moduł). Wstawiony obiekt Module1 (Moduł1) powinien się pojawić oknie Project-VBAProject.
Powinno się też pojawić okno Zeszyt1-Module1(Code) (Zeszyt1-Moduł1(Kod programu)). Jeżeli
okno się nie pojawi aby je uaktywnić w oknie Project-VBAProject klikamy dwa razy lewym
przyciskiem myszy na obiekt Module1 (Moduł1).
• W nowo otwartym oknie Zeszyt1-Module1(Code) (Zeszyt1-Moduł1(Kod programu)) piszemy
(wstawiamy) kody z przykładów.
• Zamykamy Edytor VisualBasic (Alt+Q) i powracamy do arkusza Excela.

Nasze kody możemy uruchomić na różne sposoby, ja wykorzystałem przycisk z paska narzędzi Formularze.
Aby tego dokonać wykonaj następujące czynności.

• Z menu Widok dokumentu Excela wybieramy Paski narzędzi a następnie opcję Formularze.
• Z paska narzędzi Formularze wybieramy ikonę Przycisk a następnie miejsce w arkuszu gdzie chcemy
go umieścić.
• Powinno się otworzyć okno Przypisz makro, (jeżeli okno się nie otworzy klikamy prawym
przyciskiem myszy na nasz wstawiony przycisk i wybieramy opcję Przypisz makro...). W oknie tym
zaznaczamy odpowiednią nazwę procedury na przykład Zapisywanie i klikamy przycisk OK.
65
• Kliknij na jakieś miejsce w arkuszu (celem zlikwidowania zaznaczenia przycisku) a następnie na
wstawiony przycisk i przetestuj działanie przykładu.

Możemy też zmienić tekst wyświetlany na przycisku, odpowiedni do wykonywanej metody.

• Klikamy prawym przyciskiem myszy na przycisku.


• Z otwartego menu wybieramy opcję Edytuj tekst i zmieniamy tekst na przycisku.

Zdarzenia

Podczas tworzenia programów w języku VBA często korzystamy z obiektów. Elementy aplikacji takie jak na
przykład: skoroszyt, komórka, formularz czy formant są właśnie obiektami. Jak już wspomniałem wcześniej,
obiekt posiada właściwości (properties), metody (methods) i zdarzenia (events). My na tej stronie zajmiemy
się zdarzeniami.

• zdarzenie - akcja rozpoznawana przez obiekt (taka jak kliknięcie myszą czy naciśnięcie klawisza),
dla której można zdefiniować odpowiedź. Zdarzenie może być spowodowane działaniem
użytkownika, poleceniem języka Visual Basic lub działaniami systemu. Korzystając z właściwości
skojarzonych ze zdarzeniami można ustalić, aby odpowiedzią na zdarzenie było uruchomienie
makra, wywołanie funkcji języka Visual Basic lub uruchomienie procedury zdarzenia.

Jest wiele zdarzeń jakie mogą występować podczas działania programu i na które mogą reagować
odpowiednie obiekty. Nieraz nawet nie jesteśmy świadomi o zaistnieniu pewnego zdarzenia. Zdarzenia
mogą być różne na przykład otwarcie dokumentu też jest zdarzeniem.

Niektóre zdarzenia formantów:

Poniżej przedstawiam kilka zdarzeń na jakie mogą reagować formanty. Oczywiście różne formanty mogą
reagować na rożne zdarzenia.

Zdarzenie Opis
Click Jest to chyba najczęściej spotykane zdarzenie. Dla formantu zdarzenie to występuje, gdy
na formancie zostanie naciśnięty, a następnie zwolniony (kliknięty) lewy przycisk
myszy.
DblClick Zachodzi kiedy użytkownik dwukrotnie klika formant.
MouseMove Występuje za każdym razem gdy wskaźnik myszy przesuwa się po formancie.
MouseDown Zachodzi gdy użytkownik naciska przycisk myszy. Zdarzenia tego możemy użyć jeżeli
chcemy rozróżnić który przycisk myszy jest używany.
MouseUp Zachodzi gdy użytkownik zwalnia przycisk myszy. Zdarzenia tego możemy użyć jeżeli
chcemy rozróżnić który przycisk myszy jest używany.
Change Występuje kiedy zmienia się właściwość Value formantu
KeyDown Zachodzi gdy użytkownik naciska klawisz w czasie gdy formant ma fokus.
KeyUp Zachodzi gdy użytkownik zwalnia klawisz w czasie gdy formant ma fokus.
KeyPress Występuje gdy użytkownik naciska i zwalnia klawisz lub kombinacje klawiszy w czasie
gdy formant ma fokus.
Najważniejszą różnicą między zdarzeniami KeyUp i KeyDown a KeyPress jest to, że
zdarzenie KeyPress jest związane ze znakiem a KeyUp/KeyDown z klawiszem. Zauważ

66
że klawisz "A" zwraca "A" lub "a" w zależności od tego czy naciśnięty został
równocześnie klawisz Shift. Gdy interesuje nas wprowadzony znak, należy zastosować
KeyPress. Gdy tylko to jaki klawisz został naciśnięty KeyUp lub KeyDown.

Procedury zdarzenia:

Jak już wspomniałem obiekty (formularz i formanty) mogą reagować na rożne zdarzenia odpowiednie dla
danego typu obiektu. Jeżeli do określonego zdarzenia związanego z danym obiektem dodamy kod VBA
tworzona jest procedura zdarzenia. Kod związany ze zdarzeniem czyli nasza procedura zdarzenia, może
wykonać wszystko to co wykonuje zwykła procedura. Przypomnij sobie przykłady z poprzednich stron,
większość z nich to właśnie procedury zdarzenia.

• procedura zdarzenia - procedura wykonywana automatycznie w odpowiedzi na zdarzenie


zainicjowane przez użytkownika, kod programu lub system.

Składnia procedury zdarzenia:

Składnia procedury zdarzenia jest podobna do składni podprogramu czyli procedury typu Sub. Więcej
informacji na temat procedur znajdziesz na stronie Procedury. Chciałbym jednak zwrócić uwagę na nazwę
procedury zdarzenia. Nazwa procedury zdarzenia musi zawierać nazwę obiektu który ma reagować na
zdarzenie oraz nazwę zdarzenia, elementy te łączymy znakiem podkreślenia _. Instrukcja deklarująca
procedurę kończy się parą nawiasów. W nawiasach tych umieszczone są ewentualne parametry
przekazywane do procedury. Jeżeli procedura nie posiada parametrów nawiasy pozostają puste. Składnie
procedury zdarzenia przedstawię na podstawię zdarzenia Click przycisku polecenia CommandButton1.

Private Sub CommandButton1_Click()


'odpowiednie instrukcje
End Sub

W powyższym przykładzie słowo Private oznacza, że procedura może być dostępna tylko dla procedur
umieszczonych w tym samym module. Słowo Sub oznacza że jest to podprogram. Dalej jest nazwa
procedury tj. CommandButton1_Click składająca się z nazwy obiektu i nazwy zdarzenia. Ponieważ ta
procedura nie posiada parametrów, na końcu linii deklarującej procedurę umieszczona jest pusta para
nawiasów. Instrukcja End Sub zamyka procedurę. Jak już wspomniałem procedury zdarzenia mają z góry
określone nazwy składające się z nazwy obiektu i nazwy zdarzenia. Dlatego też jeżeli po utworzeniu
procedury zdarzenia dla jakiegoś obiektu, zmienisz nazwę obiektu to odpowiedniej zmiany musisz dokonać
w nazwie procedury.

Pisanie procedur zdarzenia:

Technika pisania procedury zdarzenia jest dość prosta (na poprzednich stronach spotkałeś się już z
odpowiednimi krokami). Aby napisać procedurę zdarzenia wykonaj następujące czynności:

• Uruchom Edytor Visual Basic.


• Jeżeli nie jest widoczne, wyświetl okno Project (Eksplorator projektów).
• W oknie Project kliknij dwukrotnie na obiekt, w którym znajduje się formant dla którego chcesz
utworzyć procedurę zdarzenia. Może to być arkusz Excela czy obiekt UserForm. Powinno się
otworzyć okno Code (Kod programu).
• W oknie Code (Kod programu) z listy rozwijanej Obiect (Obiekt) - lewa górna część modułu kodu,
wybierz nazwę obiektu do którego chcesz dodać kod (kliknij na grot strzałki i wybierz obiekt). Po
wybraniu obiektu program Microsoft Excel automatycznie tworzy szablon domyślnej procedury
zdarzenia, odpowiedni dla danego typu obiektu. Domyślnym zdarzeniem dla przycisku polecenia jest
67
zdarzenie Click ale na przykład dla pola tekstowego domyślnym zdarzeniem jest zdarzenie
Change.
• Możemy też wybrać inne zdarzenie niż domyślne z listy rozwijanej Procedure (Procedura) - prawa
górna część modułu kodu. Pole (lista rozwijana) Procedure - pokazuje listę możliwych zdarzeń
związanych z zaznaczonym obiektem w polu Obiect (patrz rysunek poniżej). Po wybraniu jakiegoś
zdarzenia zostanie utworzony odpowiedni szablon procedury zdarzenia.

Jeżeli wybierzesz nazwę obiektu i nazwę zdarzenia z odpowiednich list modułu kodu, zostanie utworzony
szablon procedury zdarzenia, a kursor będzie umieszczony między wierszem deklarującym procedurę a
wierszem zamykającym ją. Jeżeli procedura zawiera już kod, zostanie ona po prostu otwarta.

• Uwaga: Jeżeli będąc w trybie projektowania dwukrotnie klikniemy lewym przyciskiem myszy na
formant też otworzymy okno Code z domyślnym szablonem procedury zdarzenia.

Przykład:

Na poprzednich stronach kursu spotkałeś się już wiele razy z przykładamy zastosowań różnych zdarzeń.
Poniżej przedstawiam następny przykład w którym chciałbym pokazać jak można wykorzystać funkcje Int
i Rnd oraz zdarzenia Click i MouseMove do stworzenia dość zabawnej ankiety. Przykład jest raczej z serii
dla dociekłiwych ale jeżeli uważnie zapoanałeś się z poprzednimi stronami powinieneś sobie spokojnie
poradzić.

Przykład kod przykładu:

Private Sub cmdNie_MouseMove(ByVal Button As Integer, ByVal Shift As Integer,


ByVal X As Single, ByVal Y As Single) 'kod powyższy umieszczony jest w jednej
linii.
cmdNie.Left = Int((350 - 10 + 1) * Rnd + 10)
cmdNie.Top = Int((270 - 80 + 1) * Rnd + 80)
End Sub

68
Private Sub cmdTak_Click()
lblPytanie.Caption = "TO PRACUJ TAK DALEJ - TWÓJ SZEF"
End Sub

Opis linii kodu:

• Private Sub cmdNie_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As


Single, ByVal Y As Single) - w linii tej deklarujemy procedurę w której słowo Private oznacza, że
dana procedura widoczna jest tylko w danym module, zaś Sub to słowo kluczowe Visual Basic
określające, że dana procedura to podprogram. Procedura ta będzie wykonywana przy zaistnieniu
zdarzenia MouseMove (ruch myszy) przycisku polecenia cmdNie. Inaczej mówiąc jeżeli
przesuniemy wskaźnik myszy nad przyciskiem polecenia cmdNie zostaną wykonane instrukcje
zawarte poniżej aż do słów End Sub, które wskazują koniec bloku kodu.
• cmdNie.Left = Int((350 - 10 + 1) * Rnd + 10) - określamy losowo położenie przycisku cmdNie
względem lewej krawędzi arkusza lub formularza. W tym celu wykorzystujemy funkcje Int i Rnd
do wylosowania liczby z określonego przedziału, wartość tej liczby przypisujemy właściwości Left
przycisku polecenia cmdNie. Funkcja Int zwraca cześć całkowitą argumentu, zaś funkcja Rnd
zwraca liczbę losową większą od zera lub równą zeru a mniejszą od 1. A oto ogólny wzór, którego
należy użyć aby wylosować liczbę całkowitą z dowolnego przedziału:

Int((GranicaGórna - GranicaDolna + 1) * Rnd + GranicaDolna)

• cmdNie.Top = Int((270 - 80 + 1) * Rnd + 80) - określamy losowo położenie przycisku cmdNie


względem górnej krawędzi arkusza lub formularza.
• End Sub - to słowo kluczowe Visual Basic wskazujące koniec bloku kodu.
• Private Sub cmdTak_Click() - deklarujemy procedurę która będzie wykonywana przy zaistnieniu
zdarzenia Click przycisku polecenia cmdTak. Inaczej mówiąc jeżeli klikniemy na przycisk
polecenia cmdTak zostaną wykonane instrukcje zawarte poniżej aż do słów End Sub, które
wskazują koniec bloku kodu.
• lblPytanie.Caption = "TO PRACUJ TAK DALEJ - TWÓJ SZEF" - po kliknięciu na przycisk
polecenia cmdTak zmienia się wyświetlany przez etykietę lblPytanie napis na: TO PRACUJ TAK
DALEJ - TWÓJ SZEF.

Kroki do wykonania:

Przykład ten w arkuszu Excela możemy wykonać na dwa sposoby. W pierwszym sposobie nasze obiekty
(etykieta i dwa przyciski) wstawiamy bezpośrednio w arkuszu Excela.

1. Uruchom Microsoft Excel.


2. Z menu Widok wybierz Paski narzędzi a następnie Przybornik formantów (jeżeli nie jest widoczny).
3. Z Przybornika formantów wybieramy ikonę Przycisk polecenia a następnie miejsce w arkuszu gdzie
chcemy go umieścić. Ikona Tryb projektowania w przyborniku powinna się uaktywnić.
4. Klikamy prawym przyciskiem myszy na przycisk polecenia. Z otwartego menu wybieramy
Właściwości, powinno się otworzyć okno Właściwości (Properties), w oknie tym zmieniamy
następujące właściwości przycisku.
o Name na cmdNie
o Caption na NIE
o Left na 50
o Top na 249
o Height na 24
o Width na 75

69
5. Pozostając w trybie projektowania Kliknij dwa razy na nasz przycisk polecenia. W nowo otwartym
oknie Code (Kod programu), wybierz zdarzenie MouseMove (kliknij na strzałkę w prawym górnym
rogu okna i wybierz MouseMove) następnie wpisz kod:
cmdNie.Left = Int((350 - 10 + 1) * Rnd + 10)
cmdNie.Top = Int((270 - 80 + 1) * Rnd + 80)
6. Powróć do arkusza Excela i w analogiczny sposób jak przycisk polecenia dodaj do arkusza Etykietę
(duże A), ustaw jej właściwości:
o Name na lblPytanie
o Caption na Czy jesteś zadowolony z pracy i zarobków ?
o Heght na 33
o Left na 58
o Top na 49
o Width na 474
o Wielkość czcionki z właściwości Font na 24 (zaznaczamy właściwość Font klikamy
wielokropek i ustawiamy wielkość).
7. Analogicznie dodaj do arkusza drugi Przycisk polecenia i ustaw jego właściwości:
o Name na cmdTak
o Caption na TAK
o Left na 429
o Top na 249
o Height na 24
o Width na 75
8. Kliknij dwa razy na przycisk cmdTak. W procedurze zdarzenia Click przycisku poleceń cmdTak
wpisz kod:
lblPytanie.Caption = "TO PRACUJ TAK DALEJ - TWÓJ SZEF"
9. Pozamykaj wszystkie okienka, zapisz i zamknij arkusz. Po ponownym otwarciu (z opcją Włącz
makra) przetestuj działanie programu.

W drugim sposobie wkraczamy głębiej w VBA i wstawiamy nasze obiekty do nowo utworzonego
formularza.

1. Uruchom Microsoft Excel


2. Z menu Widok wybierz Visual Basic (jeżeli nie jest widoczny).
3. Z paska narzędzi Visual Basic wybierz ikonę Edytor Visual Basic.
4. W nowo otwartym oknie (Microsoft Visual Basic... ) wybierz:
o Menu View (Widok) a następnie Project Explorer (Eksploator projektu), powinno się
otworzyć okno Project-VBAProject. Punktu tego nie wykonujemy jeżeli okienko jest już
widoczne.
o Menu View (Widok) a następnie Properties Window (Okno właściwości), powinno się
otworzyć okno Properties (Właściwości). Punktu tego nie wykonujemy jeżeli okienko jest już
widoczne.
o Z menu Insert (Wstaw) wybierz opcję UserForm (UserForm). Następnie w oknie Properties
(Właściwości) ustaw właściwości formularza:
 Name na frmAnkieta
 Caption na ANKIETA SZEFA
 Height na 320
 Width na 570
5. Kliknij w dowolnym miejscu na nasz formularz, celem uaktywnienia przybornika Toolbox
(Przybornik).
6. Z przybornika Toolbox wstaw do formularza dwa przyciski poleceń i etykietę. W oknie Properties
(Właściwości) stosując analogię do kroków opisanych już wcześniej ustaw właściwości formantów.

70
7. Po określeniu właściwości wstawionych formantów możemy już praktycznie przetestować przykład
ale zanim to zrobimy jeszcze kilka informacji chciałbym przekazać.

Nasz formularz wyświetlany jest w trybie modalnym. Kiedy formularz modalny jest wyświetlany na
ekranie, nie można pracować z żadną inną częścią aplikacji (na przykład z arkuszem Excela). Aby
móc pracować z innymi częściami aplikacji najpierw trzeba zamknąć formularz modalny. Formularz
powinien posiadać przycisk zamknij (prawy górny róg formularza) za pomocą którego możemy
zamknąc formularz. Jeżeli z jakiś powodów przycisk zamknij nie jest widoczny możemy utworzyć
włsny przycisk zamykający formularz, w tym celu wykonaj następujące czynności:

o Wstaw do formularza dodatkowy przycisk polecenia, ustaw jego własciwości: Caption na


Zamknij, Left na 0, Top na 0.
o W procedurze zdarzenia Click przycisku poleceń wpisz kod:
frmAnkieta.Hide
8. Kliknij w dowolnym miejscu na nasz formularz. Uruchom i przetestuj program naciskając klawisz
F5. Powinien wyświetlić się formularz z tekstem pytania i dwoma przyciskami.

Możemy też przetestować program uruchamiając go z poziomu arkusza Excela aby to zrobić wykonaj
następujące czynności:

• Powróć do arkusza Excela.


• W arkuszu wstaw przycisk polecenia, ustaw jego właściwość Caption na np. Ankieta.
• W procedurze zdarzenia Click przycisku polecenia wpisz kod:
frmAnkieta.Show
• Pozamykaj wszystkie okienka, zapisz i zamknij dokument. Po ponownym otwarciu (z opcją włącz
makra) kliknij na wstawiony przycisk w arkuszu i przetestuj działanie programu.

Zasada działania:

Po uruchomieniu programu widzimy pytanie: Czy jesteś zadowolony z pracy i zarobków ?, na które musimy
odpowiedzieć. Jeżeli naciśniemy na TAK to zmienia się wyświetlany napis na: TO PRACUJ TAK DALEJ -
TWÓJ SZEF. Problem pojawia się gdy chcemy nacisnąć przycisk NIE, przycisk ten po prostu "ucieka" i nie
możemy go kliknąć.

• Oczywiście wielkości właściwości Top, Heght, Left, Width obiektów projektu są przykładowe,
ważne jest tylko aby podczas działania programu formanty nie nachodziły na siebie.
• Możemy też zmienić inne właściwości arkusza czy wstawionych obiektów aby np. poprawić
wizualnie przykład.

Procedury zdarzeniowe arkusza

W czasie tego kursu spotkaliśmy się już z procedurami zdarzenia miedzy innymi na stronie Procedury
opisującej typy procedur oraz stronie Zdarzenia na której przedstawiłem kilka zdarzeń i procedury
zdarzenia. Na tej stronie przedstawiam procedury zdarzeniowe dla obiektu Worksheet czyli arkusza Excela.
Procedury te pozwalają zaprogramować akcje wykonywane w przypadku zdarzeń zachodzących w arkuszu.

Tabela. Procedury zdarzeniowe arkusza

Nazwa procedury zdarzeniowej Opis


Worksheet_Activate() Wywoływana w momencie uaktywnienia arkusza.
Worksheet_BeforeDoubleClick(ByVal Uruchamiana jest gdy użytkownik kliknie dwa razy na

71
Target As Excel.Range, Cancel As obszar arkusza. Argumentami tej procedury są Target i
Boolean) Cancel. Zmienna obiektowa Target reprezentuje
klikniętą komórkę. Argument Cancel przekazuje
informacje o anulowaniu zdarzenia. Jeżeli w procedurze
nadasz parametrowi Cancel wartość True dalsze akcje
związane z dwukrotnym kliknięciem nie będą
wykonywane.
Worksheet_BeforeRightClick(ByVal Target Procedura uruchamiana jest gdy użytkownik kliknie
As Excel.Range, Cancel As Boolean) prawym przyciskiem myszy na obszar arkusza.
Argumentami tej procedury są Target i Cancel.
Zmienna obiektowa Target reprezentuje klikniętą
komórkę. Jeżeli w procedurze nadasz parametrowi
Cancel wartość True dalsze akcje związane z
kliknięciem prawym przyciskiem myszy są anulowane.
Worksheet_Calculate() Procedura wywoływana po przeliczeniu arkusza.
Worksheet_Change(ByVal Target As Procedura wywołana po zmianie zawartości dowolnej
Excel.Range) komórki arkusza. Procedura nie działa po zmianie
spowodowanej przeliczeniem arkusza. Zmienna
obiektowa Target reprezentuje komórkę w której
dokonano zmiany.
Worksheet_Deactivate() Uruchamiana gdy bieżący arkusz przestaje być aktywny,
na przykład wtedy gdy użytkownik uaktywni inny arkusz.
Worksheet_FollowHyperlink(ByVal Target Procedura wywoływana gdy użytkownik kliknie na link
As Hyperlink) (hiperłącze) umieszczony na arkuszu. Argument Target
to adres wskazany przez link. W starszych wersjach
Excela procedura ta nie jest dostępna.
Worksheet_PivotTableUpdate(ByVal Target Procedura wykonywana jest po aktualizacji tabeli
As PivotTable) przestawnej. Zmienna obiektowa Target reprezentuje
aktualizowany raport tabeli. W starszych wersjach Excela
procedura ta nie jest dostępna.
Worksheet_SelectionChange(ByVal Target Uruchamiana gdy zmieniamy obszar zaznaczenia na
As Excel.Range) arkuszu (na przykład gdy przechodzimy do innej
komórki). Zmienna obiektowa Target reprezentuj
zaznaczoną komórkę lub zakres komórek. Jest to
domyślna procedura dla arkusza.

Pisanie procedur zdarzenia:

Technika pisania procedury zdarzenia jest dość prosta (na poprzednich stronach spotkałeś się już z
odpowiednimi krokami). Aby napisać procedurę zdarzenia dla arkusza wykonaj następujące czynności:

• Uruchom Edytor Visual Basic.


• Jeżeli nie jest widoczne, wyświetl okno Project (Eksplorator projektów), czyli z menu View (Widok)
wybierz opcję ProjectExplorer (Eksploator projektu).
• W oknie Project kliknij dwukrotnie na nazwę odpowiedniego arkusza, dla którego chcesz utworzyć
procedurę zdarzenia. Powinno się otworzyć okno Code (Kod programu) tego arkusza.
• W oknie Code (Kod programu) z listy rozwijanej Obiect (Obiekt) - lewa górna część okna, wybierz
obiekt Worksheet (kliknij na grot strzałki a następnie nazwę Worksheet). Po wybraniu obiektu
program Microsoft Excel automatycznie tworzy szablon domyślnej procedury zdarzenia, odpowiedni
dla danego typu obiektu. Domyślnym zdarzeniem dla arkusza jest zdarzenie SelectionChange.

72
• Możemy też wybrać inne zdarzenie niż domyślne z listy rozwijanej Procedure (Procedura) - prawa
górna część okna Code (kliknij na grot strzałki a następnie nazwę odpowiedniej procedury
zdarzenia). Pole (lista rozwijana) Procedure - pokazuje listę możliwych zdarzeń związanych z
zaznaczonym obiektem w polu Obiect (patrz rysunek poniżej), w naszym przypadku jest to
odpowiedni arkusz Excela. Po wybraniu jakiegoś zdarzenia zostanie utworzony odpowiedni szablon
procedury zdarzenia.

• W szablonie procedury zdarzenia wstaw kod który ma być wykonany.

Uwaga: jeżeli wybierzesz nazwę obiektu i nazwę zdarzenia z odpowiednich list okna Code, zostanie
utworzony szablon procedury zdarzenia, a kursor będzie umieszczony między wierszem deklarującym
procedurę a wierszem zamykającym ją. Jeżeli procedura zawiera już kod, zostanie ona po prostu otwarta.

Kilka prostych przykładów zastosowania:

Aby przetestować przykłady wykonaj kroki opisane powyżej a następnie wpisz odpowiedni fragment kodu z
wybranego przykładu.

Przykład 1:

W przykładzie w momencie uaktywnienia arkusza wyświetlamy jest komunikat z informacją że w arkuszu


przechowywane są ważne dane i nie należy ich modyfikować.

Kod przykładu:

Private Sub Worksheet_Activate()


MsgBox "W arkuszu tym przechowywane są ważne dane, nie należy ich

73
modyfikować", vbExclamation, "Autor"
End Sub

Przykład 2:

Poniższa procedura uniemożliwia użytkownikowi wywołanie menu podręcznego pod prawym przyciskiem
myszy.

Kod przykładu:

Private Sub Worksheet_BeforeRightClick(ByVal Target As Excel.Range, Cancel As


Boolean)
MsgBox "W tym akuszu menu pod prawym przyciskiem jest wyłączone"
Cancel = True
End Sub

Przykład 3:

Jeżeli klikniemy dwa razy lewy przycisk myszy w kliknietej komórce pojawi się napis: Wykonano.

Kod przykładu:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As


Boolean)
Target.Value = "Wykonano"
End Sub

Przykład 4:

Jeżeli zmienimy wartość w komórce A1, będzie wyświetlona informacja o tym.

Kod przykładu:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)


If Target.Address = "$A$1" Then
MsgBox "Nastąpiła zmiana wartości w komórce A1", , "Autor Dzono4"
End If
End Sub

Przykład 5:

Za pomocą tego przykładu na pasku stanu wyświetlana jest informacja o numerze wiersza i numerze
kolumny aktywnej komórki.

Kod przykładu:

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)


Application.StatusBar = "Wiersz " & Target.Row & " kolumna " & Target.Column
End Sub

74

You might also like