|
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 składa się z instrukcji deklarującej procedurę, linii kodu wykonywanych wewnątrz procedury oraz instrukcji zamykającej.
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.
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
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.
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
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.
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.
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
Aby wykonać przykład wstaw w module standartowym kody z wszystkich przykładów na tej stronie. Dla zasady przedstawiam kroki do wykonania.
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.
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 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.
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.
|