VBA mit IF, ElseIf,Else
#1
Hi,

meine bisherigen VBA-Kentnisse beschränken sich auf die Benutzung des Macro-Recorder. Also Kentnisse  = 0.

In meiner Datei möchte ich den mit dem Recorder aufgenommenen einfachen Befehl nun an bestimmte Bedingungen knüpfen. Hierzu habe ich einen Code geschrieben. (bitte nicht lachen).

Sub Gruppieren6_Klicken()
'
' Gruppieren6_Klicken Makro
'Sub IfElseIfElseAnweisung()

11 If Range(D10).Value = "DE" Then
  Range(F11).Select
 
ElseIf Range(D10).Value = "LH" Then
    Range(G11).Select
   
Else: Range(D10).Value = "4U"
    Range(H11).Select
   
End If
End Sub


Sub Gruppieren7_Klicken()
'
' Gruppieren7_Klicken Makro
'
    Range("G4").Select
End Sub

Wie Ihr euch denken könnt funktioniert er nicht.
Ich habe eine Beispieldatei angefügt anhand derer man erkennen kann wie es laufen soll.

Wird die graue Taste mit der Beschriftung B 747 gedrückt, und im Feld D10 steht LH, soll die Zelle G11 das Sprungziel sein. Steht in D10 DE soll es in die Zelle F11 das Ziel sein. Bei 4U entsprechend H11.

Die Taste mit der Auschrift A 319 ist ohne If Anweisung.

Wenn ich den Code auf B 747 ausführen will, bekomme ich einen Laufzeitfehler angezeigt.

Kann mir jemand sagen wie es richtig geht.

Gruß
Harald


Angehängte Dateien
.xlsm   Test-VBA.xlsm (Größe: 17,5 KB / Downloads: 7)
Antworten Top
#2
Hallo Harald,

vergleiche mal die Range-Schreibweise bei Gruppieren7_Klicken(richtig) mit denen von Gruppieren6_Klicken(falsch).

Gruß Uwe
Antworten Top
#3
Hallo,

das würde ich so lösen: (bezogen auf deinen Quelltext in der Datei)

Code:
Sub IfElseIfElseAnweisung()
    Select Case Range("B2")
        Case 1
            Range("C5").Select
        Case 2
            Range("D5").Select
        Case 3
            Range("E5").Select
    End Select
End Sub
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#4
Hi,

mal ganz abgesehen davon, dass die Range falsch genutzt werden: Wenn du das korrigierst und in D10 weder "DE" noch "LH" steht, dann steht danach auf alle Fälle "4U" drin. Also selbst wenn vorher "De" oder auch "Blablubb" drin stand.

Wieso?
Denk mal drüber nach!
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#5
(08.12.2023, 16:58)HKindler schrieb: Hi,

mal ganz abgesehen davon, dass die Range falsch genutzt werden: Wenn du das korrigierst und in D10 weder "DE" noch "LH" steht, dann steht danach auf alle Fälle "4U" drin. Also selbst wenn vorher "De" oder auch "Blablubb" drin stand.

Wieso?
Denk mal drüber nach!

Hab drüber nachgedacht.
Als Anfänger ist aber beim Nachdenken nix rausgekommen.

Wenn ich die Range falsch nutze, kannst Du mir ja etwas weniger nebulös erklären, wie man es besser (richtig) macht.

Oder bezog sich Dein Hinweis auf den Tip von Klaus-Dieter?

@ Uwe,

habe die Schreibweise Deinem Hinweis entsprechend korrigiert. Jetzt klappt es, so wie es soll.

@ Klaus-Dieter

ist case so etwas wie: für den Fall das...?

Wo liegt der Vorteil gegenüber der Range-Anweisung?

( Ist halt Nachhilfe für Anfänger Huh )

Grß
Harald
Antworten Top
#6
Hallo Harald,

Zitat:Wo liegt der Vorteil gegenüber der Range-Anweisung?

das ersetzt das If, IfElse Geraffel. Wenn du die Quelltextschnipsel vergleichst, sollte dir das auffallen. (Ist übersichtlicher, und bei noch mehr Verzweigungen möglicherweise stabiler. Auf jeden Fall leichter anzulegen).
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#7
Hi,

Ich habe mit demfalschen Range das gleiche gemeint wie Uwe.

Wenn es jetzt läuft, dann teste mal mit irgendeinem Wert in D10.
Wieso dann plötzlich "4U" in der Zelle steht? Das liegt am Doppelpunkt nach dem Else. Der sorgt dafür, dass das folgende so interpretiert wird als würde es in einer neuen Zeile stehen. Wird‘s jetzt klarer?
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#8
Hallöchen,

mal noch ein Hinweis zum Select Case.

Dein letzer Teil nur mit "else:" und Range(D10).Value = "4U" ... ist die Alternative, wenn alle anderen Bedingungen nicht passen. Dass kann man dann z.B. in einem "Cese Else" platzieren.
Wobei ja eigentlich "Else If" als weitere Bedingung hin müsste und als Alternative ein "normales" case dann zutreffend wäre.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#9
Hmm,
ich dacht der Code muss immer so aufgebaut sein. Also erst die IF-Bedingung, dann die ElseIf-Bedingung und zum Schluss die Else-Bedingung wenn drei Zustände miteinander verglichen werden sollen. Oder If-Bedingung, danach Else- Bedingung wenn nur zwei gegenübergestellt werden.

Ist das nicht so?

Deinen Tip habe ich nun so verstanden, dass man anstelle der Else-Bedingungen ein Case an das Ende der Betrachtung setzen kann.
Der Fall, dass in der Zelle "D10" einmal nichts steht, und dann der Sprungbefehl von "4U" ausgeführt wird, kann nicht vorkommen, da der Inhalt von "D10" durch eine andere Bedingung definiert ist.
In der eigentlichen Arbeitsmappe gelangt man durch ein Makro von einem Register-Arbeitsblatt, auf dem alle Airlines verzeichnet sind, zu den jeweiligen Arbeitsblättern.

Sub TeamLufthansa()
'
' TeamLufthansa Makro
' goto Team Lufthansa
'

'
    Sheets("Lufthansa-Konzern").Select
    Range("E1").Select
    ActiveCell.FormulaR1C1 = "Team Lufthansa"
    Range("D334").Select
End Sub

Der oben stehende Code erledigt das für die Airline TeamLufthansa. Wobei ("E1") die Zelle ist, die in meiner Beispieldatei ("D10") ist.

Gruß
Harald
Antworten Top
#10
Hallo Harald,

der Vorschlag, den ich in #3 gemacht habe, ersetzt die If-Bedingungen.

Leider stimmt deine Datei mit den späteren Beschreibungen nicht überein, sonst könnte man die Lösungsansätze auf deine Datei beziehen, das würde die Sache für uns erleichtern, für dich wäre es leichter verständlich. Zumindest passt der Quelltext nicht zu den Inhalten des Tabellenblattes.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste