EXCEL 2003 Kurs VBA

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

W

Przyborniku formantów

wyszukaj i kliknij na ikonę

Przycisk polecenia

a następnie miejsce w

arkuszu gdzie chcesz go umieścić. Ikona Tryb projektowania w przyborniku powinna się uaktywnić.

Kliknij dwa razy lewym przyciskiem myszy na wstawiony przycisk (ikona Tryb projektowania w
przyborniku powinna być aktywna). Powinien uruchomić się Edytor Visual Basic z widocznym

6

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 procedury, moduł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 stronie

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

W

Przyborniku formantów

wyszukaj i kliknij na ikonę

Przycisk polecenia

a następnie miejsce w

arkuszu gdzie chcesz go umieścić. Ikona Tryb projektowania w przyborniku powinna się uaktywnić.

Kliknij dwa razy lewym przyciskiem myszy na wstawiony przycisk (ikona Tryb projektowania w
przyborniku powinna być aktywna). Powinien uruchomić się Edytor Visual Basic z widocznym
oknem Kod programu (Code), w oknie tym zawarta powinna być deklaracja procedury Click naszego
Przycisku polecenia.

W procedurze zdarzenia Click Przycisku polecenia wpisz kod:

If

Range("A1").Value = 0

Then

Range("A2").Value = "wartość wynosi zero"

Else

Range("A2").Value = "wartość jest różna od zera"

End If

Zamknij Edytor Visual Basic

Alt+Q

i powróć do arkusza Excela.

Następnie wyłącz tryb projektowania (jeżeli jest aktywny) klikając na ikonę

Zakończ tryb

projektowania

w Przyborniku formantów.

Wpisz wartość

0 (zero)

do komórki A1 arkusza następnie kliknij na Przycisk polecenia.

Celem ponownego przetestowania, wpisz inną

wartość numeryczną

do komórki A1 arkusza i

ponownie kliknij na przycisk.

Dla dociekliwych:

18

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

W

Przyborniku formantów

wyszukaj i kliknij na ikonę

Przycisk polecenia

a następnie miejsce w

arkuszu gdzie chcesz go umieścić. Ikona Tryb projektowania w przyborniku powinna się uaktywnić.

Kliknij dwa razy lewym przyciskiem myszy na wstawiony przycisk (ikona Tryb projektowania w
przyborniku powinna być aktywna). Powinien uruchomić się Edytor Visual Basic z widocznym
oknem Kod programu (Code), w oknie tym zawarta powinna być deklaracja procedury Click naszego
Przycisku polecenia.

W procedurze zdarzenia Click Przycisku polecenia wpisz odpowiednie linie kodu.

Zamknij Edytor Visual Basic

Alt+Q

i powróć do arkusza Excela.

Następnie wyłącz tryb projektowania (jeżeli jest aktywny) klikając na ikonę

Zakończ tryb

projektowania

w Przyborniku formantów.

Wpisz wartość np. 2 do komórki A1 arkusza następnie kliknij na Przycisk polecenia.

Celem ponownego przetestowania, wpisz inną wartość do komórki A1 arkusza i ponownie kliknij na
przycisk.

Dla dociekliwych:

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

Workbook_Open()

obiektu

ThisWorkbook

. Aby umieścić kod wykonaj czynności.

Będąc w Edytorze Visual Basic w oknie Project kliknij dwa razy na obiekt ThisWorkbook.

W otwartym oknie Code wpisz kod z przykładu.

Zamknij a następnie uruchom dokument celem przetestowani przykładu.

Private Sub Workbook_Open()
Select Case DatePart("w", Date)

Case 1
Range("A2").Value = "Niedziela, jutro ch... poniedziałek"

Case 2
Range("A2").Value = "Dzisiaj jest poniedziałek, początek wspaniałego

tygodnia"
Case 3

Range("A2").Value = "Wtorek, na szczęście to nie poniedziałek"
Case 4

Range("A2").Value = "Środa, za chwilę z górki"
Case 5

Range("A2").Value = "Czwartek, wczoraj chyba przesadziłeś, boli głowa co ?"
Case 6

Range("A2").Value = "Cudownie już piątek"
Case 7

Range("A2").Value = "Sobota, co Ci będę mówił"
End Select

End Sub

21

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

W

Przyborniku formantów

wyszukaj i kliknij na ikonę

Przycisk polecenia

a następnie miejsce w

arkuszu gdzie chcesz go umieścić. Ikona Tryb projektowania w przyborniku powinna się uaktywnić.

Kliknij dwa razy lewym przyciskiem myszy na wstawiony przycisk (ikona Tryb projektowania w
przyborniku powinna być aktywna). Powinien uruchomić się Edytor Visual Basic z widocznym
oknem Kod programu (Code), w oknie tym zawarta powinna być deklaracja procedury Click naszego
Przycisku polecenia.

W procedurze zdarzenia Click Przycisku polecenia wpisz odpowiedni kod:

Zamknij Edytor Visual Basic

Alt+Q

i powróć do arkusza Excela.

Następnie wyłącz tryb projektowania (jeżeli jest aktywny) klikając na ikonę

Zakończ tryb

projektowania

w Przyborniku formantów.

Wprowadź jakieś wartości do komórek A1, B1, i C1 Arkusza1 i kliknij przycisk.

Przejdź do Arkusza2 i sprawdź czy dane zostały zapisane.

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

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

Pętle warunkowe są niewątpliwie bardzo silnym i wygodnym narzędziem programistycznym. Jednak
musimy bardzo uważać by nie stworzyć pętli nieskończonej, czyli takiej która była by wykonywana w
nieskończoność. Aby się przed tym zabezpieczyć możemy użyć instrukcji Exit Do celem określenia
dodatkowego warunku wyjścia z pętli.

Pętla

For... Next

powtarza blok instrukcji określoną liczbę razy, stosujemy ją jeżeli z góry wiadomo ile razy

pętla ma być wykonana. Podstawowa składnia pętli For... Next jest następująca.

Składnia:

For Licznik = Początek To Koniec Step Krok

[blok instrukcji]
Next Licznik

Objaśnienie:

For

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

Licznik

- zmienna numeryczna, która pełni rolę licznika pętli.

Początek

- jest to wartość początkowa licznika pętli.

To

- słowo kluczowe separujące wartość początkową licznika od wartości końcowej licznika pętli.

Koniec

- wartość końcowa licznika, liczba na której pętla się zatrzymuje.

24

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

W

Przyborniku formantów

wyszukaj i kliknij na ikonę

Przycisk polecenia

a następnie miejsce w

arkuszu gdzie chcesz go umieścić. Ikona Tryb projektowania w przyborniku powinna się uaktywnić.

Kliknij dwa razy lewym przyciskiem myszy na wstawiony przycisk (ikona Tryb projektowania w
przyborniku powinna być aktywna). Powinien uruchomić się Edytor Visual Basic z widocznym
oknem Kod programu (Code), w oknie tym zawarta powinna być deklaracja procedury Click naszego
Przycisku polecenia.

W procedurze zdarzenia Click Przycisku polecenia wpisz kod z określonego przykładu.

Przykładowy kod może wyglądać:

Private Sub

CommandButton1_Click()

Dim

Wynik

Wynik = 10 Mod 3

' Wynikiem jest 1

MsgBox Wynik

End Sub

Pozamykaj wszystkie okienka, zapisz i zamknij dokument.

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

41

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 Przerwij, Ponów i Ignoruj.

VbYesNoCancel

3

Wyświetl przyciski Tak, Nie i Anuluj.

VbYesNo

4

Wyświetl przycisk Tak i Nie.

VbRetryCancel

5

Wyświetl przyciski Ponów i Anuluj.

VbCritical

16

Wyświetl ikonę Komunikat krytyczny.

VbQuestion

32

Wyświetl ikonę Pytanie ostrzegawcze.

VbExclamation

48

Wyświetl ikonę Komunikat ostrzegawczy.

VbInformation

64

Wyświetl ikonę Komunikat informacyjny.

VbDefaultButton1

0

Domyślnym przyciskiem jest przycisk pierwszy.

VbDefaultButton2

256

Domyślnym przyciskiem jest przycisk drugi.

VbDefaultButton3

512

Domyślnym przyciskiem jest przycisk trzeci.

VbDefaultButton4

768

Domyślnym przyciskiem jest przycisk czwarty.

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 5
opisuje liczbę i typ przycisków. Druga grupa 16, 32, 48, 64 opisuje rodzaje ikon. Trzecia grupa 0, 256, 512
określa domyślny przycisk okna. Czwarta grupa 0, 4096 definiuje modalność okna komunikatu.
Uwaga - tworząc wartość argumentu buttons, z każdej grupy należy wybrać tylko jedną wartość i te wartość
zsumować.

49

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

W

Przyborniku formantów

wyszukaj i kliknij na ikonę

Przycisk polecenia

a następnie miejsce w

arkuszu gdzie chcesz go umieścić. Ikona Tryb projektowania w przyborniku powinna się uaktywnić.

Kliknij dwa razy lewym przyciskiem myszy na wstawiony przycisk (ikona Tryb projektowania w
przyborniku powinna być aktywna). Powinien uruchomić się Edytor Visual Basic z widocznym
oknem Kod programu (Code), w oknie tym zawarta powinna być deklaracja procedury Click naszego
Przycisku polecenia.

W procedurze zdarzenia Click Przycisku polecenia wpisz kod z określonego przykładu.

Przykładowy kod może wyglądać:

Private Sub

CommandButton1_Click()

MsgBox "Witaj", VbOKCancel, "dzono4"

End Sub

Pozamykaj wszystkie okienka, zapisz i zamknij dokument.

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

Słownictwo:

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

Okno dialogowe funkcji InputBox

Jeżeli chcemy szybko utworzyć proste okno do pobierania danych od użytkownika możemy użyć funkcji

InputBox

. Za pomocą funkcji InputBox użytkownik może przekazać programowi dowolną wartość

wprowadzoną z klawiatury.

52

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

W

Przyborniku formantów

wyszukaj i kliknij na ikonę

Etykieta

(duże A) a następnie miejsce w

arkuszu gdzie chcesz ją umieścić (może to być prawa górna część ekranu, ważne jest aby nasza
etykieta nie zasłaniała komórki D4 arkusza). Ikona Tryb projektowania w przyborniku powinna się
uaktywnić.

Kliknij prawym przyciskiem myszy na etykiecie (etykieta powinna być zaznaczona jeżeli nie jest
wcześniej zaznaczamy ją klikając na niej lewym przyciskiem myszy). Z otwartego menu wybieramy

Właściwości

, powinno się otworzyć okno Właściwości, w oknie tym zmieniamy następujące

właściwości etykiety:

o

Name na lblKomunikat

o

Visible na False

Zamknij okno Właściwości.

Z paska narzędzi Visual Basic wybieramy ikonę

Edytor Visual Basic

, powinno się otworzyć okno

Microsofot Visual Basic....

W oknie tym z menu

View

(Widok) wybieramy

Project Explorer

(Eksploator projektu), oczywiście

jeżeli okno nie jest widoczne.

W Oknie Eksplorator projektu klikamy dwa razy na obiekt

Arkusz1 (Arkusz1)

, powinno nam się

otworzyć okno kodu programu naszego Arkusza1.

W nowo otwartym oknie Zeszyt1-Arkusz1(Code) klikamy na strzałkę w górnej części okna z lewej
strony i wybieramy obiekt

Worksheet

następnie klikamy na strzałkę (u góry) z prawej strony i

wybieramy zdarzenie

Change

. Pomiędzy linie kodu:

Private Sub

Worksheet_Change(

ByVal

Target

As

Excel.Range)

i

End Sub

, wstawiamy (przepisujemy) pozostały kod z przykładu.

Pozamykaj wszystkie okienka, zapisz i zamknij dokument. Po ponownym otwarciu z opcją Włącz
makra, przetestuj działanie programu. Oczywiście wprowadź przykładowe wartości do komórki D4
arkusza Excela.

Celem ponownego przetestowania, wpisz inne wartości do komórki D4 arkusza.

Metody

Z metodami spotkałeś się już w tym kursie, przypomnij sobie stronę

Formularze

. Przedstawiłem na niej dwie

metody operujące na formularzach, metodę

Show

która wyświetla formularz i metodę

Hide

ukrywającą

formularz. Na tej stronie przedstawię kilka metod których możemy użyć bezpośrednią w arkuszu Excela.

63

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

i

Rnd

oraz zdarzenia

Click

i

MouseMove

do stworzenia dość zabawnej ankiety. Przykład jest raczej z serii

dla dociekłiwych ale jeżeli uważnie zapoanałeś się z poprzednimi stronami powinieneś sobie spokojnie
poradzić.

Przykład kod przykładu:

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

ByVal X As Single, ByVal Y As Single)

'kod powyższy umieszczony jest w jednej

linii.

cmdNie.Left = Int((350 - 10 + 1) * Rnd + 10)
cmdNie.Top = Int((270 - 80 + 1) * Rnd + 80)

End Sub

68

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


Wyszukiwarka

Podobne podstrony:
Excel 2003 PL Kurs
Excel 2003 PL Programowanie w VBA Vademecum profesjonalisty
excel 2003 pl kurs rozdział helion QLZRQABS235RF6JST6R6LU5DEUUVBRVWUZJX3SI
Excel 2003 2007 Tworzenie makr w VBA Ćwiczenia zaawansowane
Excel 2003 PL Programowanie w VBA Vademecum profesjonalisty
Excel 2003 PL cwiczenia zaawansowane czex23
kurs matlaba, Lab6 KURS MATLAB 2003, KURS MATLABa
kurs matlaba, Lab5 KURS MATLAB 2003, KURS MATLABa
kurs matlaba, Lab5 KURS MATLAB 2003, KURS MATLABa
Excel 2003 Programowanie Zapiski programisty
Excel 2003 PL cwiczenia praktyczne Wydanie II cwexc2
Excel 2003 PL cwiczenia praktyczne cwex23

więcej podobnych podstron