To, co widzisz, to błąd kompilacji, który wskazuje, że słowo kluczowe Else (lub ElseIf) nie zostało poprzedzone poprawną instrukcją If.

To znaczy, że kompilator znalazł instrukcję Else (którą podświetli dla użytkownika), nie widząc instrukcji If w liniach powyżej. Jest to błąd, ponieważ narusza poprawną składnię instrukcji If-Then-Else. Poprawna składnia jest następująca:

Za użycie skróconej składni instrukcji if, która określa warunek i akcję (gdy warunek jest spełniony):

If Then

Do użycia standardowej składni instrukcji If, która określa warunek i akcję (dla sytuacji, gdy warunek jest spełniony) oraz alternatywną akcję dla sytuacji, gdy warunek nie jest spełniony:

If Then

Else

.

End if

Do określania więcej niż jednego warunku (i ich akcji):

If Then

ElseIf Then

Else

.

End if

Błąd kompilacji „Else Without If” występuje, gdy „If Then ” brakuje lub jest napisane niepoprawnie. Omówmy wspólne przyczyny błędu dalej w szczegółach poniżej z przykładami.

Missing If Statement

Gdy kompilator VBA widzi, że słowo kluczowe Else nie jest poprzedzone rozpoznawalną (poprawną) instrukcją If, generuje błąd „Else bez If”. Dla każdego Else musi istnieć instrukcja If. Jednakże, dla każdego If, niekoniecznie potrzebujemy instrukcji else.

Przykład 1: Brakująca instrukcja If

W tym przykładzie, wyświetlamy pole wejściowe, które pobiera dane wejściowe użytkownika i przechowuje je w x. Następnie napotykamy słowo kluczowe Else, ale przed nim nie było instrukcji If. To rzeczywiście spowoduje błąd kompilatora: Else Without If.

Aby rozwiązać ten problem, musimy po prostu dodać instrukcję If. Instrukcja If składa się z If Then.

Postępowanie zgodnie z dobrymi praktykami wcięć jest kluczowe dla rozpoznania, czy każda logika if-else-then składa się z niezbędnych słów kluczowych (instrukcja If, słowo kluczowe Else, słowo kluczowe End If).

If Then

Else

If Then

. Else

End If

End If

Przykład 2: Else statement is inside a loop and If statement is outside

Możesz być zaskoczony, że dostajesz ten błąd, kiedy masz już instrukcję If obecną w kodzie i umieszczoną przed słowem kluczowym Else i napisaną poprawnie. Problem może nie być widoczny na pierwszy rzut oka. Ale jeśli przyjrzymy się bliżej, zobaczymy, że zakres instrukcji If jest inny niż zakres instrukcji else.

Wszystko pomiędzy instrukcją If a słowem kluczowym End If należy do zakresu tej instrukcji If. Inne zakresy mogą również istnieć w kodzie ze względu na istnienie pętli, takich jak pętla For Next, pętla Do Until lub pętla For Each Next.

Zakres istnieje, gdy instrukcja logiczna wymaga wielu słów kluczowych do wskazania punktów początkowych i końcowych instrukcji. Problem pojawia się, gdy zakresy nakładają się na siebie w sposób, który powoduje, że jeden z nich jest częściowo umieszczony wewnątrz drugiego. Prawidłowym sposobem współpracy wielu zakresów jest całkowite umieszczenie jednego wewnątrz drugiego.

W poniższym przykładzie, If Then po którym następuje początek For pętli, po którym następuje Else słowo kluczowe. To oddziela instrukcję If od słowa kluczowego Else i powoduje wyświetlenie błędu.

Sub Else_Without_If()x = InputBox("Set x value")'rozpoczęcie instrukcji if scopeIf x = 1 Then MsgBox "wartość x jest równa 1" 'rozpoczęcie nowego zakresu (pętla For Next) For R = 1 To 5'Słowo kluczowe Else jest oddzielone od instrukcji If, ponieważ jest w innym zakresie.Else Next R MsgBox "x value is not equal to 1 "End IfEnd Sub

Aby naprawić problem, upewniamy się, że instrukcja logiczna If jako całość jest w pełni objęta wewnątrz pętli For. Lub pętla For jest w całości objęta instrukcją logiczną If; pomiędzy If i Else lub pomiędzy Else i End If.

Jako ogólna zasada, jeśli sekcja twojego kodu ma pewien status ze względu na posiadanie punktu początkowego i końcowego (If – Else, Else – End If, For – Next, Do – Until) to nie możesz rozpocząć innej sekcji (zakresu) w jej obrębie bez zakończenia jej w obrębie pierwszej sekcji.

Punkt początkowy (If, Else, For, Do)

Kolejny punkt początkowy

Do Something

Kolejny punkt końcowy

Punkt końcowy (Else, End If, Next, Until)

Aby zastosować to do naszego przykładu, zmieniamy go na następujący kod;

Sub Else_Without_If()x = InputBox("Ustaw wartość x")'rozpoczęcie instrukcji if scopeIf x = 1 Then MsgBox "wartość x jest równa 1" 'rozpoczęcie nowego zakresu (pętla For Next) For R = 1 To 5 MsgBox "x value is equal to 1" 'kończąc nowy zakres w tym samym zakresie, w którym został rozpoczęty Next RElse MsgBox "x value is not equal to 1 "End IfEnd Sub

Incorrect If Statement

Przykład 3: Umieszczanie akcji w tej samej linii z instrukcją If

Kolejnym bardzo często popełnianym błędem jest pisanie instrukcji If w sposób, który nie jest zgodny z wykorzystaniem słowa kluczowego Else.

Jeśli chcemy użyć słowa kluczowego Else, musimy umieścić część akcji logiki If-Then-Else w następnej linii po instrukcji if. Jeśli nie używamy słowa kluczowego Else, wtedy możemy umieścić akcję w tym samym wierszu co instrukcja If i nie piszemy słowa kluczowego Else ani słowa kluczowego End If.

Gdy akcja (która powinna być wykonana, jeśli warunek jest prawdziwy) jest umieszczona w tym samym wierszu co instrukcja If, wtedy instrukcja If jest uważana za kompletną. Jest to uważane za skrótowy sposób pisania logiki If – then.

Dlatego, gdy kompilator napotyka słowo kluczowe Else po tym, nie znajduje instrukcji If, która należy do słowa kluczowego Else, ponieważ ta instrukcja If została zakończona umieszczeniem akcji w tej samej linii co instrukcja If. Poniższy kod NIE jest poprawny i spowoduje błąd kompilatora: Else bez If.

Akcja (MsgBox "wartość x jest równa 1") musi być umieszczona w następnym wierszu po instrukcji If, aby móc mieć instrukcję Else używaną w logice If-Then-Else. W poniższym kodzie, przenieśliśmy instrukcję action do następnego wiersza, co rozwiązuje problem.

Objęliśmy teraz wszystkie możliwe przyczyny błędu kompilacji: Else bez if. Podsumowując, jeśli otrzymasz ten błąd, sprawdź, czy

1) Istnieje instrukcja If, która poprzedza słowo kluczowe Else.

2) Linia instrukcji If nie zawiera niczego innego niż If Then.

3) Sprawdź, czy instrukcja If i słowo kluczowe Else nie są oddzielone innym zakresem lub sekcją, taką jak pętle.

Zobacz także: Jak naprawić błąd „End If bez bloku If”

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.