Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Frame
BildScreenshot zu Frame Frame-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Label
BildScreenshot zu Label Label-Seite mit Beispielarbeitsmappe aufrufen

Klassenmodul - Frage an die VBA-Guru's...

Betrifft: Klassenmodul - Frage an die VBA-Guru's... von: Christoph M
Geschrieben am: 16.08.2004 22:19:54


Hallo bestes Forum,
ich hab mit Klassenmodulen noch nicht allzuviel Erfahrung und suche nach einer Lösung, alle Controls einer Userform in EINER Klasse zusammenzufassen. Also Textbox, Frame, Listbox, Commandbutton, etc.
Einschränkung: Der Namen des Controls entspricht nicht "*Field*"
"*Field*" kann im konkreten Fall nur bei Labels und Listboxes auftreten.

Wie ich einzelne Control-Types in einem eigenen Klassenmodul zusammenfasse, ist mir bekannt. Aber wie funktioniert das, wenn ich allen Controls einer Userform das gleiche Ereignis (im Beispiel das MouseDown-Ereignis) zuordnen will?

Der Code in meiner Beispiel-Datei läuft, aber Sinn und Zweck meiner Frage ist, zum einen die Code-Länge zu reduzieren, um beim Initialisieren der Userform nicht alle Controls X-mal (For Each Feld In Me.Controls) zu durchlaufen, und zum anderen die Anzahl der Public-Variablen zu minimieren.

Im konkreten Fall suche ich nach einer Lösung, dass egal wo auch immer auf die UserForm geklickt wird, das Mouse-Down-Ereignis aufgerufen wird, es sei denn, es handelt sich um Steuerelemente, die "*Field"* im Namen haben (dies sind in meiner Beispiel-Datei die beiden oberen Labels und Listboxes)

Alle bisherigen Versuche schlugen fehl und ich hoffe, sollte es hierzu eine Lösung geben, auf Hilfe

meine Bsp-Datei:
https://www.herber.de/bbs/user/9725.xls

schon mal vielen Dank vorab
Gruß
Christoph

  


Betrifft: AW: Klassenmodul - Frage an die VBA-Guru's... von: Piet
Geschrieben am: 16.08.2004 22:57:53

Abgesehen davon, dass es definitiv nicht geht, wäre die Ersparnis eher dürftig.

Piet


  


Betrifft: AW: Klassenmodul - Frage an die VBA-Guru's... von: Christoph M
Geschrieben am: 16.08.2004 23:19:09

Hi Piet,
danke für deine Antwort, aber ...
soll ich das wirklich so verstehen, dass ich mit meinem Code schon am "Maximum des Machbaren" bin?
Was meinst du mit:
"wäre die Ersparnis eher dürftig"?
gibt es eine Möglichkeit, oder muss man wirklich alle Control-Types nach meiner umständlichen Art durchlaufen?

Gruß
Christoph


  


Betrifft: AW: Klassenmodul - Frage an die VBA-Guru's... von: Piet
Geschrieben am: 16.08.2004 23:24:05

Stell dir die Frage, wieviele Codezeilen du effektiv sparen könntest.

Piet


  


Betrifft: AW: Klassenmodul - Frage an die VBA-Guru's... von: Christoph M
Geschrieben am: 16.08.2004 23:40:37

Nun...
... ich hab auch bei einer meiner schon länger zuückliegenden Fragen hier Forum - wie man den Code für alle Controls eines Typs (zB. CommandButtons) zusammenfassen kann - , schon viel gelernt und setze das in meinem Bsp jetzt ein. Damals hieß es auch, dass man nicht viel Code-Zeilen sparen würde, aber ich weiß den Vorteil jetzt zu schätzen, da ich versuche, Aktionen dieser Art zu verallgemeinern.


Wenn du einen Weg kennst, wie man Controls verschiedenen Typs zusammenfassen kann, wäre ich dir um einen Tipp dankbar

Gruß
Christoph


  


Betrifft: AW: Klassenmodul - Frage an die VBA-Guru's... von: Piet
Geschrieben am: 16.08.2004 23:52:35

"Wenn du einen Weg kennst, wie man Controls verschiedenen Typs zusammenfassen kann, wäre ich dir um einen Tipp dankbar"

Ich hatee bereits geantwortet, dass das nicht möglich ist. Auch die anderen Antworten mal überfliegen.

Piet


  


Betrifft: vielen Dank von: Christoph M
Geschrieben am: 17.08.2004 00:08:57

Hi Piet,
vielen Dank für deine Hilfe...ich hab deine vorhergehenden Antworten mehr als nur überflogen. Dein Tipp, die Arrays nicht über "Redim Preserve" zu dimensionieren, hilft mir auf jeden Fall weiter und natürlich auch die Aussage, dass meine ursprüngliche Idee nicht umzusezten ist.

vielen Dank
Gruß
Christoph


  


Betrifft: AW: Klassenmodul - Frage an die VBA-Guru's... von: Piet
Geschrieben am: 16.08.2004 23:30:41

Da du keine controls zur Laufzeit erzeugst, müssen die die Arrays nicht dynamisch sein.
Redim Preserve kostet...

Piet


  


Betrifft: AW: Klassenmodul - Frage an die VBA-Guru's... von: Philipp von Wartburg
Geschrieben am: 16.08.2004 23:45:06

Hallo Christoph

Kürzlich gab es eine ähnliche Anfrage in diesem Forum. Siehe hier:
https://www.herber.de/forum/archiv/460to464/t461628.htm

Die Vor- und Nachteile einer Lösung mittels Klassenmodul sind dort beschrieben.

Gruss
Philipp


  


Betrifft: Danke für den Link von: Christoph M
Geschrieben am: 17.08.2004 00:42:25

Hallo Philipp
danke für den link,
die Idee, das ganze Prozedere über eine Funktion zu erschlagen, hatte ich auch schon...nur an der Umsetzung scheiterte ich, da ich keinen Ansatz gefunden hatte, ein bestimmtes Ereignis (MouseDown) in eine Funktion zu integrieren... das geht bestimmt aber... wie ich eben schon auf die Antwort von K.Rola geschrieben habe...ich bin kein Progarmmierer...und in bestimmten Fällen fehlt mir einfach diese Programmier-Logik

vielen Dank
Gruß
Christoph


  


Betrifft: AW: Klassenmodul - Frage an die VBA-Guru's... von: K.Rola
Geschrieben am: 17.08.2004 00:01:31

Hallo,

Antworten hast du ja nun schon einige. Nur noch eine Anmerkung, Potenzial, den Code zu straffen gibts eigentlich immer, nur wie das in deinem konkreten Fall ist, weiß natürlich
niemand. Die Seligkeit hängt mit Sicherheit nicht davon ab, 5 verschiedene controls
in eine Klasse zu pressen.

Gruß K.Rola


  


Betrifft: AW: Klassenmodul - Frage an die VBA-Guru's... von: Christoph M
Geschrieben am: 17.08.2004 00:22:07

Hi K.Rola,
ich weiß deine Beiträge immer sehr zu schätzen.
Ist es denn eher sinnvoll, für jeden Control-Type eine eigene Klasse zu erzeugen???
Ursprünglich hab ich das auch gemacht, und dann hab ich gemerkt, dass das auch innerhalb eines einzelnen Klassenmoduls zu erschlagen ist.

Mein Wissen bezüglich VBA und Programmierung im Allgemeinen kommt da an die Grenzen. (ich bin alles andere als ein gelernter Programmierer)

wie würdest du das machen?

viele Grüße
Christoph


  


Betrifft: AW: Klassenmodul - Frage an die VBA-Guru's... von: K.Rola
Geschrieben am: 17.08.2004 00:52:38

Hallo,

kann sein, ich hab dich falsch verstanden. Du kannst schon alle controls in einem Klassenmodul abhandeln. Nur alle Ereignisse in eine Prozedur zu zwängen bringt effektiv nichts, zumal es ohnehin nicht geht.
Ich spare auch gern Code ein, wenn es geht, nur wie sooft im Leben, nicht alles was machbar ist, ist auch sinnvoll.
Mal zwei Beispiele aus der Praxis: Du kannst eine Prozedur mit ihrem Namen aufrufen
oder mit Call + Name. Ohne Call sparst du 5 Zeichen (incl. Leerzeichen), verbaust dir aber die Möglichkeit, später mit der Suchfunktion nach Call und somit allen Aufrufen zu suchen.
Gern werden benannte Argumente, wie xlAscending, xlCellTypeConstants usw. verwendet.
Bei größeren Projekten sind das Bremsen ^ 2, besser den Zahlenwert verwenden, wenn das auch bei der Entwicklung zunächst mal nach Mehrarbeit aussieht.
Nun, genug geschwafelt.

Gruß K.Rola


  


Betrifft: Vielen Dank von: Christoph M
Geschrieben am: 17.08.2004 01:42:27

Hi K.Rola,
Merci für deine Antwort...zeigt es mir doch, dass ich mit meinen ursprünglichen Ansatz gar nicht so falsch liege...
Deine Argumentation bezüglich "Call " oder nicht "Call " hilft ebenso weiter, denn die von dir angesprochene Suchfunktion nutze ich zwar ständig, gleichzeitig habe ich dieses beim Erzeugen des Codes nicht bedacht.

vielen Dank
Gruß
Christoph


 

Beiträge aus den Excel-Beispielen zum Thema "Klassenmodul - Frage an die VBA-Guru's... "