Zasadniczo odróżniamy dwa rodzaje procedur.
- sub – są to podprogramy, najczęściej jednak mówi się na nie po prostu „procedury”. Podprogramy przyjmują argumenty ale nie zwracają wartości.
- function – jest to funkcja, czyli odmiana procedury, która zwraca wartość
Zarówno funkcje, jak i procedury mogą przyjmować argumenty wejściowe, różnią się tylko tym, czy zwracają jakąś wartość, czy nie. Wbrew pozorom nie jest to błaha sprawa.Wywołaniem nazywamy przejście przez Excela do wykonania danej procedury lub funkcji. Wywołanie jednej procedury musi być umieszczone w innej. Wyjątkiem są procedury zdarzeń (uruchamia je sam Excel w odpowiednich momentach) lub makra uruchamiane przez okno Makro. Definicja funkcji lub procedury pisana jest tylko raz, czyli tylko raz opisujemy jak działa. Wywoływać ją można dowolną ilość razy. Programista ma dostęp do wielu procedur i funkcji wbudowanych. Są to procedury, których definicje są już schowane w Excelu i można je używać w dowolnej chwili.
Poniżej opisałem jak definiować własne procedury. Definicje własnych procedur najczęściej umieszczamy w standardowych modułach kodu, możemy jednak umieścić je też w modułach arkuszy lub skoroszytu. Niezależnie gdzie umieścimy definicję, możemy wywoływać naszą procedurę w dowolnym module.
Poniżej często będzie pojawiać się termin zmienna, zostanie on dokładniej wytłumaczony w kolejnych częściach. Na ten moment należy tylko wiedzieć, że jest to swego rodzaju pojemnik przechowujący jakąś wartość.
Sub
Są to najczęściej wykorzystywane procedury i mogą być tworzone przy pomocy nagrywarki, oczywiście można je też napisać bezpośrednio w edytorze. Wykonują zawarte w sobie instrukcje jedna po drugiej. Schemat definicji procedury wygląda następująco:
1 2 3 4 5 6 |
Sub NazwaProcedury([Argumenty]) Pierwsza instrukcja ‘komentarze Druga instrukcja ‘komentarze .......... End Sub |
Możemy definiować argumenty lub nie. Dzięki nim możemy przekazywać do procedury pewne wartości i używać je w środku. Procedury stworzone przy pomocy nagrywarki nie mają argumentów, więc nawiasy są puste. Jeżeli chcemy udostępnić użytkownikowi uruchamianie procedury przez okno Makro, procedura nie może mieć argumentów.
Procedury mogą wywoływać inne. Napiszę więc prostą procedurę, która używa wbudowaną funkcję MsgBox to pokazania małego okienka pop-up.
1 |
PokazOkienko "Czy chcesz kontynuować?" |
1 |
PokazOkienko "Czy chcesz kontynuować?", vbOKCancel, "Proszę odpowiedzieć" |
Jeżeli jakaś procedura nie ma argumentów lub ich nie wymaga (wszystkie są opcjonalne) wystarczy napisać jej nazwę aby ją wywołać. Naturalnie nie można podać więcej argumentów niż w definicji.
1 |
NaszaProcedura |
1 |
Call MsgBox("Czy chcesz kontynuować?", vbYesNo, "Mój program") |
Więcej o wbudowanych procedurach Excela i gdzie znaleźć informacje na ich temat w kolejnych częściach kursu.
Function
Jak napisałem wyżej funkcje różnią się od procedur tym, że mogą zwracać wartości. Można więc je używać w równaniach. Schemat definicji funkcji:
1 2 3 4 5 |
Function NazwaFunkcji([argumenty]) [As typ] instrukcje NazwaFunkcji = Jakaś wartość instrukcje End Function |
1 2 3 |
Function podaj_szesc() As Integer podaj_szesc = 6 End Function |
lub z argumentami:
1 2 3 |
Function zsumuj(a As Integer, b As Integer) As Integer zsumuj = a + b End Function |
1 |
zsumuj 1, 2 |
Częściej jednak będziemy chcieli gdzieś wstawić wynik działania, musimy wtedy użyć nawiasów.
1 2 |
Dim moja_zmienna As Integer moja_zmienna = zsumuj(1, 2) |
Funkcja może być nawet argumentem innej funkcji, lub procedury. Poniżej wyświetlam w okienku pop-up wynik działania funkcji.
1 |
MsgBox zsumuj(1, 2), vbOKOnly |
Sens tworzenia procedur i funkcji
Idea procedur pozwala nam zamykać logikę kodu w funkcjonalnych częściach. Umiejętność dzielenia kodu na procedury jest jedną z podstawowych dla programisty i nie da się jej przecenić. Jeżeli piszemy program, który obsługuje samochód możemy stworzyć osobne procedury na:
- Przyspieszanie, procedura przyjmująca jako argument prędkość do jakiej przyspieszyć,
- Hamowanie, procedura z argumentem określającym jak mocno naciskać pedał gazu,
- Włączenie świateł mijania, procedura bez argumentów, po prostu włącza światła,
- Sprawdzenie poziomu oleju, funkcja bez argumentów, która zwraca poziom oleju,
- itp.
1 2 |
answer = MsgBox("Czy chcesz kontynuować?", vbYesNo Or vbQuestion Or _ vbDefaultButton1, Application.Name) |
1 2 3 4 |
Function continue_question() As Integer continue_question = MsgBox("Czy chcesz kontynuować?", vbYesNo _ Or vbQuestion Or vbDefaultButton1, Application.Name) End Function |
Trudno jednoznacznie zdecydować ile linii kodu maksymalnie powinna mieć jedna procedura. Zależy to od indywidualnych upodobań programisty. Z reguły jednak, jeżeli procedura osiąga około 200 linii kodu, dobrze jest pomyśleć nad podzieleniem jej na kilka mniejszych.
Subskrybuj RSS, lub polub blog na Facebooku aby otrzymywać najnowsze informacje o rozwoju kursu.