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.
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.
08.12.2023, 18:13 (Dieser Beitrag wurde zuletzt bearbeitet: 08.12.2023, 18:19 von HyFly.)
(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?
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
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?
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)
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.
09.12.2023, 13:39 (Dieser Beitrag wurde zuletzt bearbeitet: 09.12.2023, 13:44 von Klaus-Dieter.)
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