VBA Modulname ändern
#11
Aloha,

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.

Ergo:  Es geht!

Danke für die Tips!


Angehängte Dateien Thumbnail(s)
   
Antworten Top
#12
..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.

Ciao, Ralf

Antworten Top
#13
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.
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#14
Wenn die Daten gut strukturiert sind möchte reichen:

in E11:E120 die Namen der Firmen
Code:
Sub M_snb()
   range("E11:E120").find(range("D10")).offset(1).select
end Sub
oder
ohne Namen In Zeile 10
Code:
Sub M_snb()
  application.goto cells(11,5+instr("_DE_LH_4U_","_" & cells(10,4) & "_")\3)
End Sub

Dann könnte die Anzahl Makros drastisch reduziert werden und verschwindet die Unübersichtlichkeit deiner Modulen und Makros.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#15
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 22
Antworten Top
#16
18 Modulen für 18 Makros: nicht elegant (to put it mildly)

Wenn du etwas lernen willst: lade mal diese Datei hoch.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#17
Die Anzahl der Module hatte ich garnicht genannt!

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.
Antworten Top
#18
Zitat:Es sind 18 Module übrig geblieben

Zitat:Die Anzahl der Module hatte ich garnicht genannt!

Zitat:Diese habe ich mit aussagekräftigen Namen versehen und die darin enthaltenen Makro geortnet
Makro statt Makros; Ergo....

Zitat:aber alleine um die 218 unterscvhiedlichen Airlines anzusteuern sind es schon 218
Nie von Variablen gehört ? Blödsinn !
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#19
(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.

Ciao, Ralf

Antworten Top
#20
Moinsen,

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.

Viele Grüße
derHöpp
Antworten Top


Gehe zu:


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