Pisanie programu komputerowego jest rozkoszą, uruchamianie - zmorą.
Visual Basic 6 - Instrukcje sterujące
If...Then...Else  |   Select Case  |   Do ... Loop  |   While...Wend  |   For...Next  |   For Each...Next  |   Exit  |   On Error  |   Resume  |   Stop  |   With  |   End

If...Then...Else

Powoduje warunkowe wykonanie grupy instrukcji, zależnie od wartości wyrażenia.

Składnia jednowierszowa:

   If warunek Then [instrukcje] [Else instrukcje_else]

Składnia wielowierszowa:

   If warunek_1 Then
      [ instrukcje ]
   [ ElseIf warunek_n Then
       [instrukcje_elseif_n ]
      ...
   [ Else
      [ instrukcje_else ] ]
   End If
Gdzie:
warunek Element obowiązkowy. Wyrażenie jednego z dwóch podanych niżej typów:
Wyrażenie numeryczne lub wyrażenie znakowe o wartości True lub False. Jeśli wartością warunku jest Null, traktowane jest ono tak, jakby miało wartość False.
Wyrażenie postaci TypeOf nazwa_obiektu Is typ_obiektu. Element nazwa_obiektu jest dowolnym odesłaniem obiektowym, a typ_obiektu jest dowolnym poprawnym typem obiektu. Wyrażenie ma wartość True, jeśli wskazany obiekt ma typ obiektu określony przez typ_obiektu; w przeciwnym przypadku wartością wyrażenia jest False.
instrukcje W składni blokowej jest to element nieobowiązkowy; w składni jednowierszowej bez klauzuli Else jest on obowiązkowy. Jest to jedna lub więcej instrukcji oddzielonych dwukropkami (:). Instrukcje te są wykonywane, jeśli warunek ma wartość True.
warunek_n Element nieobowiązkowy o postaci takiej samej jak warunek.
instrukcje_elseif Element nieobowiązkowy. Jest to jedna lub więcej instrukcji wykonywanych wówczas, gdy odpowiadający im warunek_n ma wartość True.
instrukcje_else Element nieobowiązkowy. Jedna lub więcej instrukcji wykonywanych wówczas, gdy wartość żadnego z poprzednich warunków (warunek i wszystkie warunki_n) nie przyjmuje True.

Użycie:

Postać jednowierszową stosuje się w krótkich, prostych testach. Postać wielowierszowa jest bardziej uniwersalna, zgodna z regułami zasad programowania strukturalnego, a także bardziej czytelna i umożliwiająca łatwiejsze wykrywanie błędów.

W postaci jednowierszowej można, jako rezultat decyzji If...Then, wykonać kilka instrukcji, ale wszystkie instrukcje muszą zmieścić się w jednym wierszu i muszą być oddzielone dwukropkami, jak w poniższym przykładzie:

   If A > 10 Then A = A + 1 : B = B + A : C = C + B

Instrukcja If w postaci blokowej musi być pierwszą instrukcją w wierszu. Elementy Else, ElseIf i End If instrukcji If równiez muszą rozpoczynac nowy wiersz. Blok If musi kończyć się instrukcją End If.

Klauzule Else i ElseIf są nieobowiązkowe. W blokowej składni instrukcji If może wystąpić dowolna ilość klauzul ElseIf, ale żadna z nich jednak nie może się pojawić po klauzuli Else. Blokowa instrukcja If może być zagnieżdżona czyli umieszczona wewnątrz innej instrukcji.

W czasie wykonywania blokowej instrukcji If sprawdzany jest warunek. Jeśli jego wartością jest True, wykonywane są instrukcje występujące po słowie Then. Jeśli wartością warunku jest False, obliczane są po kolei warunki ElseIf (jeśli istnieją). Po znalezieniu pierwszego warunku o wartości True wykonywane są instrukcje umieszczone po odpowiadającym temu warunkowi słowie Then. Jeśli żaden z warunków ElseIf nie jest równy True lub jeśli nie ma klauzul ElseIf, wykonywane są instrukcje umieszczone po słowie Else. Po wykonaniu odpowiednich instrukcji występujących po słowie Then lub Else sterowanie przechodzi do instrukcji bezpośrednio następującej po End If.

Wskazówka: Jeśli wykonanie pewnych czynności zależy od wartości pojedynczego wyrażenia, wygodniejsza może być instrukcja Select Case. Jednak klauzula TypeOf nazwa_obiektu Is typ_obiektu nie może wystąpić w instrukcji Select Case.

Przykład:

Poniższy przykłada pokazuje instrukcję If...Then...Else w formie bloku i jednowierszowej.
   Dim Num As Integer
   Dim Cyfry As Integer

   Num = 53
   If Num < 10 Then
      Cyfry = 1
   ElseIf Num < 100 Then
      ' Warunek jest spełniony, więc instrukcja zostanie wykonana.
      Cyfry = 2
   Else
      Cyfry = 3
   End If

   ' Ustaw wartość ciągu, korzystając ze składni jednowierszowej.
   If Cyfry = 1 Then Ciąg = "Jeden" Else Ciąg = "Więcej niż jeden" 

Poniżej wykorzystano konstrukcję If TypeOf...Then...Else do określenia, czy formant przekazany do procedury jest polem tekstowym.

   Sub TypFormantu(MójFormant As Control)

      If TypeOf MójFormant Is CommandButton Then
         Debug.Print "Przekazano " & TypeName(MójFormant)
      ElseIf TypeOf MójFormant Is CheckBox Then
         Debug.Print " Przekazano " & TypeName(MójFormant)
      ElseIf TypeOf MójFormant Is TextBox Then
         Debug.Print " Przekazano " & TypeName(MójFormant)
      End If

   End Sub

Select Case

Powoduje wykonanie jednej z kilku grup instrukcji, zależnie od wartości wyrażenia.

Składnia :

   Select Case wyrażenie_testowe
   [ Case lista_wyrażeń_n
      [ instrukcje_n ] ]
      ...
   [ Case Else
      [ instrukcje_else ] ]
   End Select
Gdzie:
yrażenie_testowe Element obowiązkowy. Dowolne wyrażenie numeryczne lub znakowe.
lista_wyrażeń_n Element obowiązkowy po klauzuli Case. Lista zawierająca jedną lub więcej pozycji o jednej z następującej postaci:
- wyrażenie,
- wyrażenie To wyrażenie,
- Is operator_porównania wyrażenie.
Słowo kluczowe To określa zakres wartości. Jeśli wystąpiło słowo kluczowe To, mniejsza wartość musi wystąpić przed To. Do określenia przedziału może też służyć słowo kluczowe Is z operatorem porównania (z wyjątkiem Is i Like). Jeśli brak słowa Is, to jest ono wstawiane automatycznie.
nstrukcje_n Element nieobowiązkowy. Jedna lub więcej instrukcji wykonywanych w przypadku, gdy wyrażenie_testowe pasuje do jednej z pozycji listy_wyrażeń_n.
instrukcje_else Element nieobowiązkowy. Jedna lub więcej instrukcji wykonywanych wówczas, gdy wyrażenie_testowe nie pasuje do żadnej z klauzul Case.

Użycie:

Jeśli wartość wyrażenia_testowego pasuje do jednej z pozycji listy_wyrażeń klauzuli Case, wówczas wykonywane są instrukcje występujące po tej klauzuli Case, aż do następnej klauzuli Case albo, w przypadku klauzuli ostatniej, aż do instrukcji End Select. Następnie sterowanie jest przekazywane do instrukcji umieszczonej bezpośrednio za End Select. Jeśli wyrażenie_testowe pasuje do listy_wyrażeń w kilku klauzulach Case, wówczas wykonywane są instrukcje tylko z pierwszej w kolejności klauzuli.

Klauzula Case Else zawiera instrukcje (instrukcje_else), które zostaną wykonane wówczas, gdy wyrażenie_testowe nie pasuje do żadnej z list_wyrażeń klauzul Case. Klauzula Case Else nie jest obowiązkowa, jednak warto ją umieścić w bloku Select Case, by uwzględnić nie przewidziane w klauzulach Case wartości wyrażenia_testowego. Jeśli wyrażenie_testowe nie pasuje do żadnej listy klauzul Case i nie ma klauzuli Case Else, sterowanie programu przechodzi od razu do instrukcji umieszczonej bezpośrednio za instrukcją End Select.

Każda klauzula Case może obejmować wiele wyrażeń i zakresów. Poniższy przykładowy wiersz jest całkowicie poprawny:

   Case 1 To 4, 7 To 9, 11, 13, Is > MaxLiczba

Uwaga W instrukcji Select Case operator porównania Is oznacza coś innego niż słowo kluczowe Is.

Zakresy i wyrażenia mogą się także odnosić do ciągów znaków. W następnym przykładzie lista klauzuli Case odpowiada ciągowi znaków równemu dokładnie cokolwiek, ciągom zawartym w porządku alfabetycznym pomiędzy deser a zupa lub ciągowi równemu bieżącej wartości ElemTest:

   Case "cokolwiek", "deser" To "zupa", ElemTest

Instrukcje Select Case można zagnieżdżać. Dla każdej zagnieżdżonej instrukcji Select Case musi istnieć odpowiadająca jej instrukcja End Select.

Przykład:

   Dim Num As Integer
   Num = 8

   Select Case Num
   Case 1 To 5                  ' Num zawiera się między 1 i 5
      Debug.Print "W przedziale od 1 do 5"
   Case 6, 7, 8                 ' Num z przedziału od 6 do 8
      Debug.Print " W przedziale od 6 do 8"
   Case Is > 8 And Num < 11     ' przedział od 9 do 10
      Debug.Print "Wartość większa niż 8"
   Case Else                    ' pozostałe wartości
      Debug.Print "Poza przedziałem od 1 do 10"
   End Select

Do ... Loop

Powtarza blok instrukcji tak długo, jak długo warunek ma wartość True lub dopóki warunek nie przyjmie wartości True.

Składnia:

   Do [{While | Until} warunek]
      [instrukcje]
      [Exit Do]
      [instrukcje]
   Loop

lub:

   Do
      [instrukcje]
      [Exit Do]
      [instrukcje]
   Loop [{While | Until} warunek

Gdzie:

warunek Element bowiązkowy. Wyrażenie numeryczne lub znakowe, którego wartością jest True lub False (warunek o wartości Null jest traktowany jako False).
instrukcje Jedna lub kilka instrukcji powtarzanych tak długo, jak długo warunek ma wartość True w przypadku użycia klauzuli While albo dopóki nie przyjmie on wartości True w przypadku użycia klauzuli Until.

Użycie:

Wewnątrz instrukcji Do.Loop można umieścić dowolną liczbę instrukcji Exit Do, które powodują natychmiastowe wyjście z pętli. Instrukcja Exit Do jest często stosowana po sprawdzeniu pewnego warunku, np. w instrukcji If.Then. Jeśli warunek zachodzi, instrukcja Exit Do przekazuje sterowanie do instrukcji następującej bezpośrednio po instrukcji Do...Loop.

Zastosowana wewnątrz zagnieżdżonej instrukcji Do.Loop, instrukcja Exit Do przekazuje sterowanie do pętli bezpośrednio obejmującej zagnieżdżoną instrukcję Do.Loop.

Przykład:

   Dim Flaga As Boolean
   Dim Licznik As Integer
   Flaga = True
   Licznik = 0

   Do                             ' Zewnętrzna pętla
      Do While Licznik < 20      ' Wewnętrzna pętla
         Licznik = Licznik + 1
         If Licznik = 10 Then
            Flaga = False
            Exit Do            ' Wyjdź z wewnętrznej pętli
         End If
      Loop
   Loop Until Flaga = False

While...Wend

Wykonuje ciąg instrukcji tak długo, jak długo warunek ma wartość True.

Składnia:

   While warunek
      [ instrukcje ]
   Wend
Gdzie:
warunek Element obowiązkowy. Wyrażenie numeryczne lub znakowe o wartości True lub False. Jeśli warunek ma wartość Null, jest traktowany tak, jakby miał wartość False.
instrukcje Element nieobowiązkowy. Jedna lub wiele instrukcji wykonywanych wtedy, gdy warunek ma wartość True.

Użycie:

Jeśli warunek ma wartość True, to wykonywane są wszystkie instrukcje aż do instrukcji Wend. Następnie sterowanie powraca do instrukcji While i warunek jest sprawdzany ponownie. Jeśli warunek ma nadal wartość True, to proces jest powtarzany. Jeśli warunek ma wartość False, to wykonywanie programu jest przenoszone do instrukcji następującej bezpośrednio po instrukcji Wend.

Pętle While...Wend mogą być zagnieżdżane do dowolnego poziomu. Każda instrukcja Wend odpowiada ostatniej instrukcji While.

Wskazówka Bardziej elastycznym sposobem tworzenia pętli warunkowych jest zastosowanie instrukcji Do...Loop.

Przykład:

   Dim Licznik As Integer
   Licznik = 0

   While Licznik < 20
      Licznik = Licznik + 1
   Wend
   Debug.Print Licznik          ' Wyświetla liczbę 20

For...Next

Powtarza grupę instrukcji określoną liczbę razy.

Składnia:

   For licznik = początek To koniec [ Step krok ]
      [ instrukcje ]
      [ Exit For ]
      [ instrukcje ]
   Next [ licznik ]
Gdzie:
licznik Element obowiązkowy. Zmienna numeryczna, która pełni rolę licznika pętli. Zmienna ta nie może być typu Boolean ani elementem tablicy.
początek Element obowiązkowy. Wartość początkowa licznika.
koniec Element obowiązkowy. Wartość końcowa licznika.
krok Element nieobowiązkowy. Wielkość, o jaką zwiększany jest licznik po każdym wykonaniu pętli. Jeśli nie jest podany, przyjmuje się krok = 1.
instrukcje Element nieobowiązkowy. Jedna lub kilka instrukcji umieszczonych pomiędzy słowami For i Next. Instrukcje wykonywane są określoną liczbę razy.

Użycie:

krok może być dodatni lub ujemny. Wartość tego elementu determinuje sposób realizacji pętli, jak widać poniżej:

Wartość Pętla wykona się, jeśli
Dodatnia lub 0 licznik <= koniec
Ujemna licznik >= koniec

Po wykonaniu wszystkich instrukcji znajdujących się wewnątrz pętli do licznika dodawany jest krok. Następnie albo instrukcje pętli zostaną wykonane ponownie (jeśli nadal spełniony jest warunek, który implikował pierwsze wykonanie pętli), albo następuje wyjście z pętli, a wykonywanie programu zostaje wznowione od instrukcji następującej bezpośrednio po instrukcji Next.

Wskazówka Zmiana wartości licznika przez instrukcje wewnątrz pętli powoduje, iż program traci na czytelności i trudniej wykryć w nim ewentualne błędy.

Inną możliwością zakończenia wykonywania pętli jest umieszczenie w niej instrukcji Exit For. Instrukcja Exit For występuje często po sprawdzeniu pewnego warunku, np. w instrukcji If.Then i w przypadku, gdy taki warunek jest spełniony, przekazuje sterowanie do instrukcji bezpośrednio następującej po instrukcji Next.

Pętle For...Next mogą być zagnieżdżane przez umieszczenie jednej pętli wewnątrz drugiej. Każda pętla musi jednak mieć własny licznik. Poniżej przedstawiony fragment programu jest poprawny:

   For i = 1 To 10
      For j = 1 To 10
         For k = 1 To 10
            ...
         Next k
      Next j
   Next i

Przykład:

   Dim Słowo As Integer
   Dim Znak As Integer
   Dim Ciąg As String

   For Słowo = 10 To 1 Step -1
      For Znak = 0 To 9
         Ciąg = Ciąg & Znak
      Next Znak
      Ciąg = Ciąg & " "
   Next Słowo

For Each...Next

Powtarza grupę instrukcji dla każdego elementu tablicy lub kolekcji.

Składnia:

   For Each element In grupa
      [ instrukcje ]
      [ Exit For ]
      [ instrukcje ]
   Next [ element ]
gdzie:
element Element obowiązkowy. Zmienna, która przejmuje wszystkie elementy zbioru lub tablicy. W przypadku zbiorów, element musi być zmienną typu Variant, zmienną obiektu typowego lub obiektu konkretnego. W przypadku tablic, element może być jedynie zmienną typu Variant.
grupa Element obowiązkowy. Nazwa zbioru obiektów lub tablicy (z wyjątkiem tablicy typów zdefiniowanych przez użytkownika).
instrukcje Element nieobowiązkowy. Jedna lub kilka instrukcji wykonywanych dla każdego elementu grupy.

Użycie:

Sterowanie wchodzi do bloku For Each tylko wtedy, gdy w grupie znajduje się choć jeden element. Wówczas wszystkie instrukcje pętli są wykonywane dla pierwszego elementu grupy. Jeśli w grupie jest więcej elementów, wszystkie instrukcje zawarte w pętli są wykonywane dla każdego elementu. Po wyczerpaniu się elementów grupy pętla kończy się i program przechodzi do instrukcji następującej bezpośrednio po instrukcji Next.

Inną możliwością zakończenia wykonywania pętli jest umieszczenie w niej instrukcji Exit For. Instrukcja Exit For występuje często po sprawdzeniu pewnego warunku, np. w instrukcji If.Then w przypadku, gdy warunek jest spełniony, przekazuje sterowanie do instrukcji bezpośrednio następującej po instrukcji Next.

Pętle For Each...Next mogą być zagnieżdżane przez umieszczenie jednej pętli wewnątrz drugiej. Każda pętla musi jednak mieć swój własny, "prywatny" element.

Uwaga Jeśli w instrukcji Next opuszczono parametr element, pętla jest wykonywana tak, jakby element wystąpił. W przypadku wystąpienia instrukcji Next przed odpowiadającą jej instrukcją For, wystąpi błąd kompilacji.

Instrukcji For Each...Next nie można zastosować do tablicy typu zdefiniowanego przez użytkownika, gdyż zmienna typu Variant nie może zawierać wartości typu zdefiniowanego przez użytkownika.

Przykład:

Poniższy przykład zakłada, że w Formie jest tablica kontrolek TextBox.
W tym celu należy umieścić na Formie co najmniej 2 kontrolki TextBox
i każdej nadać nazwę txtText oraz ustawić atrybut Index.

   Dim oObiekt As TextBox, bJest As Boolean

   For Each oObiekt In Me.txtText 
      If oObiekt.Text = "Szukany tekst" Then
         bJest = True
         Exit For
      End If
   Next

Exit

{rzerywa funkcję, procedurę lub blok instrukcji.

Składnia:

Exit Do Przerywa wykonywanie bieżącej pętli Do...Loop. Sterowanie przekazywane jest do następnej instrukcji programowej za Loop. W przypadku zagłębionych pętli Do...Loop, instrukcja Exit Do przekazuje sterowanie do pętli o 1 poziom wyższej.
Exit For Przerywa wykonywanie bieżącej pętli For. Może być użyte zarówno w pętli For...Next, jak i w For Each...Next. Sterowanie przekazywane jest do następnej instrukcji programowej za Next. W przypadku zagłębionych pętli For, instrukcja Exit For przekazuje sterowanie do pętli o 1 poziom wyższej.
Exit Function Przerywa wykonywanie funkcji Function. Sterowanie przechodzi do następnej instrukcj za tą, która wywołała aktualną funkcję Function.
Exit Property Przerywa wykonywanie procedury Property. Sterowanie przechodzi do następnej instrukcj za tą, która wywołała aktualną procedurę Property.
Exit Sub Przerywa wykonywanie procedury Sub. Sterowanie przechodzi do następnej instrukcj za tą, która wywołała aktualną procedurę Sub.

Przykład:

   Dim i As Integer, x As Integer

   Do                           ' otwarcie nieskończonej pętli Do
      For i = 1 To 1000         ' pętla For wykonywana 1000 razy
         x = Int(Rnd * 1000)    ' generowanie liczby losowej
         Select Case x               
         Case 1:   Exit For    ' jeżeli 1, to przerywamy For
         Case 10:  Exit Do     ' jeżeli 10, to przerywamy Do
         Case 100: Exit Sub    ' jeżeli 100, to przerywamy Sub
         End Select
      Next
   Loop

On Error

Włącza/wyłącza procedurę obsługi błędów i podaje jej lokalizację.

Składnia:

   On Error GoTo etykieta
   On Error Resume Next
   On Error GoTo 0
Gdzie:
On Error GoTo etykieta Włącza procedurę obsługi błedów, która zaczyna się od podanej w parametrze etykiety. W przypadku wystąpienia błedu sterowanie jest przekazywane do pierwszej instrukcji za podaną etykietą. Etykieta musi znajdować się w tej samej procedurze co instrukcja On Error. W przeciwnym wypadku wystapi błąd kompilacji.
On Error Resume Next Informuje program, aby w przypadku błednej instrukcji zignorował ją i przeszrdł do następnej.
On Error GoTo 0 wyłącza obsługę błędów w bieżącej procedurze.

Użycie:

Jeżeli ni użyjemy w programie instrukcji On Error, to każdy błąd podczas jego pracy (run-time error) spowoduje wyświetlenie komunikatu o błędzie i przerwie pracę programu.

Obsługa błędu jest włączona, po napotkaniu pierwszej instrukcji On Error, ale aktywna jest tylko wtedy, gdy jest przez nią obsługiwany błąd. Jeżeli wystąpi błąd w czasie obsługi błędu (pomiędzy wystąpieniem błędu i instrukcją Resume, Exit Sub, Exit Function lub Exit Property), to aktualna obsługa błędu procedury nie może obsłużyć się sama. Sterowanie powraca do procedury wywołującej. Jeżeli wywołująca procedura posiada włączoną obsługę błędu, to jest ona aktywowana do obsłużenia tego błędu. Jeżeli w wywołującej procedurze obsługa błędu jest także aktywna, sterowanie powraca do poprzednio wywołującej procedury aż do znalezienia włączonej, ale nieaktywnej obsługi błędu. Jeżeli nie zostanie znaleziona włączona ale nieaktywna obsługa błędu, wówczas błąd przerywa pracę programu, praktycznie w momencie w którym wystąpi. Za każdym razem gdy obsługa błędu zwraca sterowanie to procedury która ją wywołała, to staje się ona bieżącą procedurą. Gdy błąd jest obsługiwany przez obsługę błędu w jakiejkolwiek procedurze, wykonanie programu jest kontynuowane w bieżącej procedurze w punkcie wyznaczonym przez instrukcję Resume.

Kod obsługi błędu nie jest procedurą Sub ani funkcją Function. Jest to część kodu wyznaczona przez etykietę.

W kodzie obsługi błędu przyczyna wystąpienia błędu sprawdzana jest poprzez wartość właściwości Number obiektu Err.

Wartości właściwości obiektu Err odzwierciedlają tylko ostatnio wystąpienie błędu. Komunikat błędu odpowiedni do Err.Number znajduje się w Err.Description.

Instrukcja On Error Resume Next powoduje przekazanie sterowania do instrukcji, następnej po instrukcji, która spowodowała wystąpienie błędu, i kontynuowanie programu lub do instrukcji następnej po ostatnio wzywanej procedurze zawierającej instrukcję On Error Resume Next. Ta instrukcja pozwala przywrócic wykonywanie programu pomimo wystąpienia błędu w czasie wykonania programu. Można umieścić obsługę błędu tam gdzie błąd może wystąpić, zamiast przenoszenia kontroli w inną lokalizację w procedurze. Instrukcja On Error Resume Next staje się nieaktywana jeżeli inna procedura jest wywołana, więc należy umieszczać tą instrukcję w każdym bloku programu, w którym ma być wykonywana natychmiastowa obsługa błędu.

Instrukcja On Error GoTo 0 wyłącza obsługę błędu w bieżącej procedurze. Nie określa ona linii 0 jako początku kodu obsługi błędu, nawet jeżeli procedura zawiera linię o numerze 0. Bez instrukcji On Error GoTo 0, obsługa błędu jest wyłączana kiedy procedura jest opuszczana.

Aby zapobiec uruchamianiu procedury obsługi błędu, gdy nie wystąpi żaden błąd, należy bezpośrednio przed tym kodem umieszczać instrukcję Exit Sub, Exit Function lub Exit Property, jak w ponizszym przykładzie:

   Sub MojaProcedura()
      On Error GoTo Błąd
      . . .
      Exit Sub
   Błąd:
      . . .
      Resume Next
   End Sub

Kod obsługi błędów zaczyna się tu za rozkazem Exit Sub, a kończy przed End Sub, aby oddzielić go od reszty procedury. Blok obsługi błędów może się znajdować w dowolnym miejscu w procedurze.

Resume

Wznawia działanie programu po wykonaniu procedury obsługi błędu.

Składnia:

   Resume [0]
   Resume Next
   Resume etykieta
Gdzie:
Resume Jeżeli błąd wystąpił w tej samej procedurze, co instrukcja Resume, to wznowienie rozpocznie od instrukcji, która spowodowała błąd (instrukcja, która spowodowała błąd będzie ponownie wykonana). Jeżeli błąd wystąpił w wywołanej procedurze, to wznowienie nastąpi od instrukcji wywołującej procedurę, w której wystąpił błąd (procedura wywołująca błąd będzie ponownie wykonana od początku).
Resume Next Jeżeli błąd wystąpił w tej samej procedurze, co instrukcja Resume, to wznowienie rozpocznie od instrukcji następującej po tej, która spowodowała błąd (instrukcja, która spowodowała błąd zostanie pominięta). Jeżeli błąd wystąpił w wywołanej procedurze, to wznowienie nastąpi od następnej po instrukcji wywołującej procedurę, w której wystąpił błąd (procedura wywołująca błąd nie będzie wykonana).
Resume etykieta Wznowienie rozpocznie się od podanej etykiety, która musi znajdować się w tej samej procedurze, co procedura obsługi błędu.

Użycie:

Użycie instrukcji Resume poza procedurą obsługi błędów zawsze spowoduje błąd.

Przykład:

   Sub ResumeDemo()
      On Error GoTo ErrorHandler

      Open "TESTFILE" For Output As #1
      Kill "TESTFILE"              ' kasowanie otwartego pliku
      Exit Sub                     ' pominięcie obsługi błędu

      ErrorHandler:                ' procedura obsługi błędu

      Select Case Err.Number
      Case 55                      ' plik jest otwarty
         Close #1                  ' zamknij plik
         Resume                    ' powtórz wiersz z błędem
      Case Else
         ' obsługa innych błędów....
         Resume Next               ' pomija wiersz z błędem
      End Select
   End Sub

Stop

Zawiesza wykonywanie programu.

Składnia:

   Stop

Użycie:

Instrukcje Stop mogą w dowolnym miejscu procedur zawiesić wykonywanie programu. Umieszczenie w programie instrukcji Stop daje efekt podobny do ustawienia w kodzie programu punktu przerwania.

Instrukcja Stop zawiesza wykonywanie programu, jednak, w odróżnieniu od instrukcji End, nie zamyka plików i nie czyści zmiennych. Chyba, że znajduje się w skompilowanym pliku wykonywalnym (.EXE).

With

Wykonuje ciąg instrukcji na pojedynczym obiekcie lub na typie zdefiniowanym przez użytkownika.

Składnia:

   With obiekt
      [ instrukcje ]
   End With
Gdzie:
obiekt Element obowiązkowy. Nazwa obiektu lub typu zdefiniowanego przez użytkownika.
instrukcje Element nieobowiązkowy. Jedna lub więcej instrukcji wykonywanych na obiekcie.

Użycie:

Instrukcja With umożliwia wykonanie ciągu instrukcji na określonym obiekcie bez konieczności wielokrotnego kwalifikowania składowych nazwą obiektu. Na przykład, aby zmienić wartości różnych właściwości pojedynczego obiektu, należy umieścić instrukcje przypisania tych wartości właściwościom wewnątrz struktury With, odwołując się do obiektu tylko raz, a nie tyle razy, ile jest instrukcji przypisania. Przykład poniżej pokazuje użycie instrukcji With do przypisania wartości kilku właściwościom jednego obiektu.

   With lblEtykieta
      .AutoSize = True
      .Border = 0
      .Caption = "Tekst etykiety"
   End With

Po wejściu do bloku instrukcji With nie ma możliwości zmiany elementu obiekt. Nie można zatem jedną instrukcją With operować na kilku różnych obiektach.

Instrukcje With można zagnieżdżać, umieszczając jeden blok With wewnątrz drugiego. Ponieważ jednak składowe z zewnętrznych bloków With są przesłaniane w blokach wewnętrznych, to aby odwołać się w bloku wewnętrznym do składowej obiektu z bloku zewnętrznego należy w bloku wewnętrznym użyć pełnego, kwalifikowanego odesłania do obiektu z bloku zewnętrznego.

Ważne Nie należy wykonywać skoków do wnętrza lub z wnętrza bloków With. Jeśli wykonywane są instrukcje w bloku With, ale nie kończą się one wykonaniem instrukcji With lub End With, mogą wystąpić błędy lub program może zachowywać się w sposób nieprzewidziany.

End

Kończy procedurę lub blok.

Składnia:

   End
   End Function 
   End If
   End Property 
   End Select
   End Sub
   End Type
   End With
gdzie:
End Kończy wykonywanie programu. Z reguły nie jest ona potrzebna, jednak może być użyta wewnątrz procedury do zamknięcia plików otwartych instrukcją Open i do wyczyszczenia zmiennych.
End Function Wymagana do zakończenia instrukcji Function
End If Wymagana do zakończenia bloku instrukcji If.Then.Else.
End Property Wymagana do zakończenia procedury Property Let, Property Get i Property Set
End Select Wymagana do zakończenia instrukcji Select Case.
End Sub Wymagana do zakończenia procedury Sub.
End Type Wymagana do zakończenia definicji typu zdefiniowanego przez użytkownika (instrukcji Type).
End With Wymagana do zakończenia instrukcji #11With.

Użycie:

Instrukcja End przywraca stan inicjalny zmiennych na poziomie modułu oraz wszystkich lokalnych zmiennych statycznych we wszystkich modułach. Aby zachować bieżące wartości tych zmiennych, należy zamiast instrukcji End użyć instrukcji Stop. Zostawiamy sobie wówczas możliwość wznowienia programu z zachowaniem wartości tych zmiennych.

Instrukcja End natychmiastowo zatrzymuje wykonywanie kodu programu, nie wywołując przy tym zdarzeń Unload, QueryUnload czy Terminate ani żadnego innego kodu Visual Basic. Kod programu umieszczony w zdarzeniach Unload, QueryUnload i Terminate w formularzach i modułach klas nie jest wykonywany. Obiekty utworzone z modułów klasy ulegają zniszczeniu, pliki otwarte za pomocą instrukcji Open są zamykane, a pamięć wykorzystywana przez program zostaje zwolniona. Odwołania do obiektów wykorzystywane przez inne programy zostają unieważnione.

Instrukcja End jest sposobem na szybkie zatrzymanie programu. Aby zakończyć pracę w środowisku Visual Basic w sposób normalny, należy rozładować wszystkie formularze. Program zamyka się w chwili, gdy nie ma żadnych innych programów korzystających z odwołań do obiektów utworzonych z publicznych modułów klasy ani nie jest wykonywany żaden kod programu.

Przykład:

Zobacz przykładay umieszczone w opisie instrukcji na tej stronie.
« wstecz   dalej »