die Liste sieht ja sehr kompliziert aus. Da werde ich mich mal hineinvertiefen. Danke Gast 123.
RPP63: Damit Deine Glaskugel nicht weiter beschlägt habe ich mal einen Screenshot gemacht. So sieht es nach meinem ersten Versuch aus.
Ich habe versuchsweise den Namen des ehemaligen Moduls 47 im VBA-Eigenschaftenfenster verändert auf jetzt AC_Type_Selector. Ein anderes Modul, das Modul 45, habe ich kopiert und in das ehem. Modul 47 eingefügt. Ging ohne Fehlermeldung. Alle Funktionen getestet und zu meiner Überraschung funktioniert alles noch.
13.12.2023, 01:14 (Dieser Beitrag wurde zuletzt bearbeitet: 13.12.2023, 01:19 von Ralf A.)
..mit parametrisieren meint RPP63, das die vielen Sub's oder Funktionen, die annähernd gleiche Aufgaben ausführen, sich aber nur in Kleinigkeiten voneinnader unterscheiden, zu einer Sub/Function zusammengefasst werden sollten und die Unterschiede als Parameter (sind ja nix anderes als Variablen) im Prozedurkopf angegeben werden können.
Bsp., Du möchtest 100 verschiedene Bereiche in kopieren. Da schreibt man keine 100 Subs, sondern übergibt die Bereiche als Parameter an eine dafür zuständige Sub/Funktion
Code:
Sub MehrfachaufrufMitUnterschiedlichenParametern() 'Aufruf der Sub Kopiere mit 2 Parametern Kopiere Range("A1:A3"), Cells(1, 2) 'Beim Aufruf müssen die Parameter in Reihenfolge, Anzahl und Typ den Parametern der aufgerufenen Prozedur entsprechen Kopiere Range("A1:A5"), Range("C1") End Sub
Sub Kopiere(vonBereich As Range, nachBereich As Range) 'die Parameter stehen kommasepariert in den Klammern des Prozedurkopfes vonBereich.Copy Destination:=nachBereich End Sub
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben. Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.
13.12.2023, 10:36 (Dieser Beitrag wurde zuletzt bearbeitet: 13.12.2023, 10:39 von HKindler.)
Hi,
wie im anderen Thread schon erwähnt, machen deine Makros nicht unbedingt das, was du denkst. Denn en Doppelpunkt in einer Zeile heißt, dass die Zeile ab dieser Stelle eine neue Anweisung erhält. Im Grunde kannst du den Doppelpunkt löschen und statt dessen einen Zeilenvorschub einfügen. So ist dieser Code
Code:
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
im Grunde identisch zu diesem
Code:
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
Einen kleinen Unterschied gibt es: man sieht besser was passiert. Gehen wir der Reihenfolge nach durch. Nehmen wir einmal an in D10 steht nichts, die Zelle habe also den Wert "". Dann passiert folgendes:
Es wird geprüft, ob D10 den Wert "DE" hat.
Dies ist nicht der Fall.
Daher wird mit ElseIf geprüft, ob D10 = "LH" ist.
Auch dies trifft nicht zu.
Daher wird nun Else ausgeführt.
Die erste Anweisung im Else-Zweig ist Range("D10").Value = "4U"
Es steht also ab sofort "4U" in der Zelle.
Das ist mit Sicherheit nicht das gewünschte Ergebnis. Denn "4U" steht auch dann in der Zelle, wenn vorher weder exakt (also genau so, inklusive Groß-/Kleinschreibung) "DE" noch "LH" sondern irgendwas anderes wie "x", " " oder auch "De" drin stand.
Also solltest du deine Makros so oder so dringend überarbeiten.
14.12.2023, 14:53 (Dieser Beitrag wurde zuletzt bearbeitet: 14.12.2023, 14:55 von HyFly.)
Hi,
nun habe ich alles geordnet. Es sind 18 Module übrig geblieben. Diese habe ich mit aussagekräftigen Namen versehen und die darin enthaltenen Makro geortnet. Ging ohne Probleme!
Die Else-Verzweigung habe ich entsprechend angepasst. Das die Zelle D10 wie in meiner Beispieldatei möglich, in der fertigen Datei leer ist, ist ausgeschlossen. Dort wird diese Zelle, automatisch ausgefüllt. Sie erhält Ihren Wert über ein Makro mit einer ActivCell-Anweisung. Die korrekte Schreibweise ist ebenfalls garantiert. geordnet natürlich
Ich habe zwar die Menge der Makros nicht gezählt, aber alleine um die 218 unterscvhiedlichen Airlines anzusteuern sind es schon 218. danzu noch ca. 40 A/C-Makros je Airline und ein paar Auswertemakros,...kannst Du ja selber ausrechnen.
Schlecht schätzen ist nicht wirklich elegant, um es mit Deinen Worten auszudrücken.
(14.12.2023, 17:14)HyFly schrieb: Ich habe zwar die Menge der Makros nicht gezählt, aber alleine um die 218 unterscvhiedlichen Airlines anzusteuern sind es schon 218. ...
Genau das ist es, was mit Parametrisierung gemeint war. Statt 218 Makros ein einziges daraus machen und die Airlines als Parameter übergeben...
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben. Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.
mir scheint das Gesamtsystem unsinnig. Erst Datenmodell, dann Auswertung. Dabei gilt: Das beste Programm ist das, das nicht geschrieben wird, weil Excel-Standardfunktionen genutzt werden. Und als Faustregel in VBA: Im Code wird so gut wie nichts fest "verdrahtet" und selektiert nur im absoluten Ausnahmefall.
Weiterer Grundsatz: Nur Application.OnTime oder UDFs benötigen überhaupt ein allgemeines Modul, der Rest wird zur Klasse oder in den vorhandenen Objektmodulen abgehandelt.