Funkcja SubDeklaruje nazwę, argumenty i kod, który tworzy procdurę Sub.Składnia rozkazu Sub, Private Sub, Public Sub, Friend Sub: [Static] Sub NazwaProc [(ListaArg)] [rozkazy] [Exit Sub] [rozkazy] End Sub Private [Static] Sub NazwaProc [(ListaArg)] [rozkazy] [Exit Sub] [rozkazy] End Sub Public [Static] Sub NazwaProc [(ListaArg)] [rozkazy] [Exit Sub] [rozkazy] End Sub Friend [Static] Sub NazwaProc [(ListaArg)] [rozkazy] [Exit Sub] [rozkazy] End Sub Składnia instrukcji Sub, Private Sub, Public Sub i Friend Sub składa się z części:
Argument ListaArg składa się z części: [Optional] [ByVal | ByRef] [ParamArray] NazwaArg[()] [As typ] [=DomyślnaWartość]
Procedura Sub jest dostępna dla wszystkich procedur modułu. Procedura Private Sub jest dostępna tylko w module, w którym została zadeklarowana. Procedura Public Sub jest dostępna we wszystkich procedurach i we wszystkich modułach w aplikacji, chyba że zostało użyte Option Private, które powoduje, że procedury są publiczne tylko wewnątrz projektu, w którym rezydują. Procedura Friend Sub (tylko w modułach klas) jest dostępna tylko w projekcie ale nie jest widziana przez kontroler instancji obiektu. Procedury Sub mogą być rekurencyjne. Oznacza to, że mogą wywoływać siebie. Jednak rekurnecja może powodować błędy (stack overflow). Słowo Static zwykle nie jest używane w procedurach rekurencyjnych. Cały wykonywalny kod musi być umieszczony wewnątrze procedur. Nie można stworzyć procedury Sub wewnątrz innej procedury Sub, Function lub Property. Słowo kluczowe Exit Sub jest używane do bezwarunkowego zakończenia wykonywania procedury Sub. Wykonywanie programu jest kontynuowane od rozkazu następnego za wywołaniem procedury Sub. Dowolna liczba rozkazów Exit Sub może znajdować się w dowolnych miejscach wewnątrz procedury. Podobnie jak procedura Function, procedura Sub jest oddzielną częścią programu, która może pobrać argumenty, wykonać wiele rozkazów i zmieniać wartość argumentów. Jednak w przeciwieństwie do procedury Function, która zwraca wartość, procedura Sub nie może być używana w wyrażeniach. Procedurę Sub wywołuje się przez podanie jej nazwy z listą argumentów do przekazania. Procedury Sub można wywoływać również przez użycie rozkazu Call. Zmienne używane wewnątrz procedur Sub dzielą się na dwie kategorie: lokalne - zadeklarowane wewnątrz procedury i zewnętrzne - zadeklarowana poza procedurą. Zmienne, które są zadeklarowane wewnątrz procedury (przy użyciu Dim lub równoważnego) są zawsze lokalne dla procedury. Zmienne, które są używane w procedurze a nie są w niej zadeklarowane są również lokalne, z wyjątkiem tych, które zostały zadeklarowane poza procedurą (na wyższym poziomie). Procedury mogą korzystać ze zmiennych, które nie są zadeklarowane w procedurze, ale może powstać kofilkt nazw, jeżeli jest coś zdefiniowane na poziomie modułu, co ma taką samą nazwę. Jeżeli procedura odnosi się do niezadeklarowanej zmiennej, która ma taką samą nazwę jak inna procedura, zmienna lub stała, to zostanie przyjęte, że procedura odwołuje się do nazwy na poziomie modułu. Aby uniknąć takich konfliktów należy deklarować zmienne. Można użyć rozkazu Option Explicit aby wymusić deklaracje zmiennych. Przykład użycia rozkazu Sub: Sub Przyklad(intI As Integer) 'początek procedury If intI=0 Then 'sprawdzenie czy intI=0 Exit Sub 'jeżeli tak to opuść procedurę Else intI=intI*3 'jeżeli nie to wykonaj obliczenie End If End Sub 'koniec procedury (Zmienne, typy zmiennych i rozkaz If Else zostały opisane w innych częściach kursu.) na górę strony... |