2017-04-05 13 views
-1

Ich versuche, eine einfache if-Anweisung auszuführen, kann sie aber nicht ausführen, ohne einen Fehler zu erhalten. Im Grunde versuche ich, mehrere if-Anweisungen innerhalb einer Schleife zu haben, ich denke, ich habe einen kleinen Fehler, aber kann es nicht erkennen, vielleicht mit den else-Anweisungen. Jede Hilfe istMehrere if-Anweisungen in einer Schleife vba

geschätzt
Sub ex13() 

Dim rgtimetable As Range, rgR As Range, counter As Integer 
Dim counter1 As Integer, counter2 As Integer, counter3 As Integer 

Set rgtimetable = Range("timetable") 
For Each rgR In rgtimetable 
    rgR.Activate 
    If classyear(ActiveCell.Value) = 0 Then counter = counter + 1 ' classyear is a function i am calling from above 

    Else 
    If classyear(ActiveCell.Value) = 1 Then counter = counter1 + 1 

    Else 
    If classyear(ActiveCell.Value) = 2 Then counter = counter2 + 1 

    Else 
    If classyear(ActiveCell.Value) = 3 Then counter = counter3 + 1 

Next rgR 

MsgBox counter 
MsgBox counter1 
MsgBox counter2 
MsgBox counter3 

End Sub 
+3

'counter = counter1 + 1 'sollte ** vielleicht ** sein' counter1 = counter1 + 1' (usw.) –

+0

@RC. nein der Zähler funktioniert für mich, wenn ich einen versuche, wenn, wenn ich den anderen eingebe, wenn mein Zähler falsch geht –

+0

Re deinen Kommentar (zu einer Antwort) "Ich habe immer noch ein Problem mit dem Zähler, aber nicht sicher was es ist. Ich sehe, ob ich es lösen kann "- siehe den Kommentar von @RC. – YowE3K

Antwort

4

In VBA gibt es mehrere Möglichkeiten, um eine If Erklärung zu schreiben:

If [some condition] Then [Do something] 

Oder

If [some condition] Then [Do something] Else [Do something else] 

Oder

If [some condition] Then 
    [Do something] 
End If 

Oder

If [some condition] Then 
    [Do something] 
Else 
    [Do something else] 
End If 

Oder endlich

If [some condition] Then 
    [Do something] 
ElseIf [some other condition] Then 
    [Do something different] 
Else 
    [Do something else] 
End If 

In Ihrem Code Ihre If Aussagen sind alle auf einer Linie und damit ein entsprechendes End If nicht benötigen, sondern auch eine entsprechende Else Aussage auf einem folgendes nicht nehmen Linie. Wenn Sie einen Else oder einen ElseIf verwenden möchten, müssen Sie das abschließende If Anweisungsblockmuster verwenden und den If Block mit einem entsprechenden EndIf schließen.

In Ihrem Fall, wie Sie immer das gleiche Ding (classyear(ActiveCell.Value)) testen, würde ich empfehlen, die Select Case Konstruktion zu nutzen, die Ihren Code verkürzen wird.

Select Case classyear(ActiveCell.Value) 
Case 0 
    counter = counter + 1 ' classyear is a function i am calling from above 

Case 1 
    counter = counter1 + 1 

Case 2 
    counter = counter2 + 1 

Case 3 
    counter = counter3 + 1 

Case Else 
    'Oops, this shouldn't happen, but handle the error anyway 

End Select 
+0

Hey vielen Dank für deine ausführliche Antwort, ich habe es jetzt viel besser verstanden, wenn ich es einmal gelesen habe. Ich habe immer noch ein Problem mit dem Zähler, aber ich bin mir nicht sicher, was es ist. Ich sehe, ob ich es lösen kann –

+0

@leonHill Ich denke, Ihr Problem könnte sein, dass Counter1, Counter2 und Counter3 nie auf etwas gesetzt sind. Erhalten Sie weitere Fehler? – SteveES

+0

@steveES Ja dein rechter Mann, ich habe vergessen, den Zähler für 1,2 und 3 zu setzen. Ich habe eine Hälfte eingestellt, aber vergessen, die andere Hälfte zu machen. Eine letzte Frage sagen, wenn ich will, dass die Werte des Zählers in einer Zelle statt in einer Message Box angezeigt werden, eine Idee, wie ich das tun würde ?? –

Verwandte Themen