VBA Excel If Schleife mit 3 Bedingungen

VBA Greenhorn mit folgender Frage:

Geht das auch mit einer If-Schleife mit 3 Bedingungen?
Habe mal den Code (der natürlich bei einem Änfänger nie funzt) zusammengestellt.

Sub Vorgang_Abfragen()
Dim Abfrag As Integer

Abfrag = MsgBox(„Wollen Sie den Vorgang abbrechen?“, vbYesNoCancel, „Rückfrage“)

Debug.Print Abfrag

If Abfrag = 1 Then

MsgBox „Sie haben ja geklickt“

If Abfrag = 7 Then

MsgBox „Sie haben nein geklickt“

Else
MsgBox „Sie haben abbrechen geklickt“

End If

End Sub

Was mache ich noch falsch?
Christian

Hallo Christian,

was Du wolltest, sieht so aus:

 Dim Abfrage As String
 Abfrage = InputBox("Bitte eine Zahl eingeben")
 If Abfrage = "1" Then
 MsgBox "Sie haben eine Eins getippt"
 ElseIf Abfrage = "2" Then
 MsgBox "Sie haben eine Zwei getippt"
 Else
 MsgBox "Sie haben etwas anderes getippt"
 End If

Ich finde Select Case übersichtlicher. :smile:

Gruß Rainer

 Dim Abfrage As Integer
 Abfrage = InputBox("Bitte eine Zahl eingeben")
 Select Case Abfrage
 Case 1
 MsgBox "Sie haben eine Eind getippt"
 Case 2
 MsgBox "Sie haben eine Zwei getippt"
 Case 4 To 6
 MsgBox "Sie haben eine Zahl von Vier bis Sechs getippt"
 Case Else
 MsgBox "Sie haben etwas anderes getippt"
 End Select

Moin, Christian,

Abfrag = MsgBox(„Wollen Sie den Vorgang abbrechen?“,
vbYesNoCancel, „Rückfrage“)

die Rückgabewerte heißen vbYes, vbNo und vbCancel - damit musst Du Dich um Zahlenwerte nicht mehr kümmern.

> If Abfrag = 1 Then  
> MsgBox "Sie haben ja geklickt"  
> If Abfrag = 7 Then  
> MsgBox "Sie haben nein geklickt"  
> Else  
> MsgBox "Sie haben abbrechen geklickt"  
> End If

Was mache ich noch falsch?

Der Code läuft bei Abfrag = 1 auf MsgBox „Sie haben abbrechen geklickt“, weil Abfrag 7.

Gruß Ralf

Hallo Ralf
Diese Sub habe ich aus dem Buch VBA mit Excel von Bernd Held
Dort wird es so beschrieben, dass man sich eben um die Zahlen kümmern muss.

Genau das ist das Problem für Greenhorns. Frage 3 Programmierer und du erhälst 4 Antworten wobei sich diese untereinander auch noch wieder sprechen. Man hat´s nicht leicht.

Christian

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Christian,

Dim Abfrag As Integer

potentiell eine Fehlerquelle, alle „bekannten“ Konstanten in Vba haben den Typ Long, also sicherheitshalber immer so:
Dim Abfrag As long

Geht das auch mit einer If-Schleife mit 3 Bedingungen?

Gehen ja, aber ab zwei Bedingungen nimmt man wie gesagt Select Case.
Allein schon wegen viel besserer Lesbarkeit des Codes bei Fehlersuche, Änderungen usw.

If Abfrag = 1 Then

Du nimmst die falschen Zahlenwerte
Probier dieses mal:

Sub nn()
MsgBox vbYes
MsgBox vbNo
MsgBox vbCancel
End Sub

Auch da ist es besser wegen Lesbarkeit nicht 6 zu nehmen sondern vbyes.
Bei sehr sehr lange laufenden zeitkritischen Codes nimmt man aus Schnelligkeitsgründen die Zahlenwerte.
Gibt auch andere Gründe dafür.

Gruß
Reinhard

Hi Christian,

Diese Sub habe ich aus dem Buch VBA mit Excel von Bernd Held
Dort wird es so beschrieben, dass man sich eben um die Zahlen
kümmern muss.

nimm die Sub, tue sie wieder in das Buch, da gehört sie hin. Dann schmeiß es so weg daß kein anderer das Buch noch lesen könnte.

Mehr sage ich zu diesem Autor nicht, hab keinen Bock auf Anwälte…

Genau das ist das Problem für Greenhorns. Frage 3
Programmierer und du erhälst 4 Antworten wobei sich diese
untereinander auch noch wieder sprechen. Man hat´s nicht
leicht.

Fast identische, aber nur fast, Aufgabenstellungen erfordern ggf. unterschiedlichen Code, das verwirrt natürlich wenn man nicht die Feinen Unterschiede erkennen kann warum mal so und mal so gecodet wurde.
Dazu kommen noch persönliche Sichtweisen der Nichtmehrgreenhorner:smile:

Gruß
Reinhard

Hi Christian,

Diese Sub habe ich aus dem Buch VBA mit Excel von Bernd Held

muss ich den kennen?

Dort wird es so beschrieben, dass man sich eben um die Zahlen
kümmern muss.

Muss man nicht. Zahlen anstelle von Namen sind eine beliebte Fehlerquelle.

Genau das ist das Problem für Greenhorns. Frage 3
Programmierer und du erhälst 4 Antworten

Du hast - unabhängig von Codierungen - einen Fehler in der Logik, dafür kannst Du weder den Held noch uns verantwortlich machen. Dass jeder Poster den Aspekt betont, der ihm wichtig erscheint, ist im richtigen Lehm nicht anders.

wobei sich diese
untereinander auch noch wieder sprechen.

Das belegst Du bitte.

Gruß Ralf