background image

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

background image

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

background image

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

background image

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

background image

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

background image

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). 

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

background image

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

background image

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

background image

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

background image

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

background image

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 procedurymoduły i projekty

11

background image

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

background image

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

background image

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 stroni

Instrukcja For... Next

14

background image

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

background image

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

background image

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

background image

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). 

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

background image

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

background image

  [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

background image

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). 

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

background image

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

background image

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

background image

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). 

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

background image

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

background image

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

background image

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

background image

  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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

^

  Potęgowanie - podnosi wartość do 
potęgi określonej w wykładniku.

Dim

 Wynik

 Wynik = 10 ^ 3

 ' Wynikiem jest 1000

 MsgBox Wynik 

*

  Mnożenie - wykonuje mnożenie .

Dim

 Wynik

 Wynik = 10 * 3

 ' Wynikiem jest 30

40

background image

 MsgBox Wynik 

/

  Dzielenie - wykonuje dzielenie i 
zwraca wynik w postaci 
zmiennoprzecinkowej.

Dim

 Wynik

 Wynik = 10 / 3

 ' Wynikiem jest 3.333333

 MsgBox Wynik 

\

  Dzielenie - wykonuje dzielenie i 
zwraca wynik w postaci liczby 
całkowitej.

Dim

 Wynik

 Wynik = 10 \ 3

 ' Wynikiem jest 3

 MsgBox Wynik 

Mod

  Modulo - wykonuje dzielenie i zwraca 
tylko resztę z przeprowadzonego 
dzielenia.

Dim

 Wynik

 Wynik = 10 Mod 3

 ' Wynikiem jest 1

 MsgBox Wynik 

+

  Dodawanie - sumuje dwie wartości 
(operatora tego możemy też użyć do 
łączenia ciągów).

Dim

 Wynik

 Wynik = 10 + 3

 ' Wynikiem jest 13

 MsgBox Wynik 

-

  Operator ten stosuje się do 
znajdowania różnicy - Odejmowanie 
lub do zaznaczania ujemnej wartości 
wyrażenia numerycznego - Negacja.

Dim

 Wynik

 Wynik = 10 - 3

 ' Wynikiem jest 7

 MsgBox Wynik
 Wynik = -Wynik

 ' Wynikiem jest -7

 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). 

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

background image

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

background image

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

background image

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

background image

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

background image

 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

And

Zwracana jest wartość 
True tylko jeżeli oba 
podwyrażenia mają 
wartość True

 10 > 5 And 10 + 5 = 15

 ' Wynikiem jest True

 10 > 5 And 10 + 5 = 16

 ' Wynikiem jest False

 10 < 5 And 10 + 5 = 15

 ' Wynikiem jest False

 10 < 5 And 10 + 5 = 16

 ' Wynikiem jest False

Or

Zwracana jest wartość 
True, wystarczy aby 

 10 > 5 Or 10 + 5 = 15

 ' Wynikiem jest True

 10 > 5 Or 10 + 5 = 16

 ' Wynikiem jest True

46

background image

jedną z podwyrażeń ma 
wartość True

 10 < 5 Or 10 + 5 = 15

 ' Wynikiem jest 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

background image

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

background image

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 PrzerwijPonów i Ignoruj.

VbYesNoCancel

3

Wyświetl przyciski TakNie 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.

VbApplicationModal

0

Okno modalne w aplikacji; działanie bieżącej aplikacji zostanie 
wstrzymane, dopóki użytkownik nie odpowie na wyświetlony 
komunikat.

VbSystemModal

4096

Okno modalne w systemie; działanie wszystkich aplikacji zostanie 
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 
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

background image

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

background image

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

background image

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). 

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

background image

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

background image

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

background image

  

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

  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). 

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

background image

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

background image

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

background image

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

background image

ż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

background image

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 

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

background image

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

background image

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

background image

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

background image

Target As Excel.Range, Cancel As 

Boolean)

obszar arkusza. Argumentami tej procedury są Target i 
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 
As Excel.Range, Cancel As Boolean)

Procedura uruchamiana jest gdy użytkownik kliknie 
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 
Excel.Range)

Procedura wywołana po zmianie zawartości dowolnej 
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 

As Hyperlink)

Procedura wywoływana gdy użytkownik kliknie na link 
(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 

As PivotTable)

Procedura wykonywana jest po aktualizacji tabeli 
przestawnej. Zmienna obiektowa Target reprezentuje 
aktualizowany raport tabeli. W starszych wersjach Excela 
procedura ta nie jest dostępna.

Worksheet_SelectionChange(ByVal Target 

As Excel.Range)

Uruchamiana gdy zmieniamy obszar zaznaczenia na 
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

background image

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

background image

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


Document Outline