Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Ereignisprozeduren zusammenfassen

Forumthread: Ereignisprozeduren zusammenfassen

Ereignisprozeduren zusammenfassen
28.07.2004 14:07:06
Holger
Hallo Leute!
Nach langer Zeit mal wieder was von mir: ich habe eine Userform mit vielen Textboxen drin, die ich zur Zahleneingabe verwende. Und damit ich wirklich nur Zahlen (mit Kommastelle) eintragen kann, gibt es zu jeder Textbox eine Ereignisprozedur:

Private Sub txt_box1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 48 To 57, 44
Case Else: KeyAscii = 0
End Select
End Sub

Nun ist das ziemlich viel Text im Modul. Kann man nicht ein Makro für alle Textboxen schreiben? Brauch ich dafür ein Klassenmodul? Hinter diese Problematik bin ich noch nicht gestiegen, bitte helft mir auf die Sprünge!
Gruß, Holger
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ereignisprozeduren zusammenfassen
Ulf
Lagere die Prüfung in eine Function aus, dann wirds etwas kürzer. Ansonsten gehts wirklich nur mit Klassenmodul.
Ulf
AW: Ereignisprozeduren zusammenfassen
28.07.2004 19:31:17
Philipp
Hallo Holger
Wie Ulf schon erwähnt hat, ist die einfachste (und m.E. auch die beste) Lösung, den Code in eine Funktion auszulagern. Hier mein Vorschlag:
Public

Function CheckKey(ByVal intKey As Integer) As Integer
Select Case intKey
Case 48 To 57, 44
CheckKey = intKey
Case Else
CheckKey = 0
End Select
End Function

In der KeyPress-Ereignisprozedur einer Textbox steht dann nur noch eine Codezeile:
KeyAscii = CheckKey(KeyAscii)
Die Variante mit einer einzigen Ereignisprozedur für alle Textboxen ist viel zu aufwändig, da man vereinfacht ausgedrückt die Textboxen als Objekte bzw. Instanzen der MSForms.TextBox-Klasse benötigt. Dann müsste man eine Klasse erstellen (ein neues Klassenmodul), welches die Ereignisprozedur KeyPress enthält. Erst dann kann man mit WithEvents die Ereignisse an diese Klasse "umleiten". Da man wie gesagt die Textboxen als MSForms.TextBox-Objekte benötigt und nicht als TextBox-Controls, müssen alle Textboxen beim Öffnen der UserForm (Ereignis Initialize) generiert und auf der UserForm mittels Top, Left, Width, Height etc. angeordnet und angepasst werden. Das ist durchaus machbar - ich habe das schon mehrmals gemacht - aber kompliziert. Erschwerend kommt hinzu, dass zur Design-Zeit die UserForm keine Textboxen enthält, weil diese eben zur Laufzeit dynamisch hinzugefügt werden. Wenn man also eine Eigenschaft einer Textbox ändern will, z.B. ControlTipText, MaxLength, TextAlign oder was auch immer, dann man das im Code entsprechend programmieren. Ebenfalls ein Problem ist, dass wirklich alle generierten Textboxen ein und dieselbe Ereignisprozedur verwenden. Möchte man bei einer Textbox abgesehen von Ziffern z.B. auch Buchstaben zulassen, so muss man das in dieser Ereignisprozedur als Ausnahmefall programmieren, da man die Ereignisse einer bestimmten Textbox nicht irgendwo anders hin umleiten kann.
Die Variante mit Klassenmodul/Ereignisprozedur ist nur dann sinnvoll bzw. unumgänglich, wenn auf einer UserForm während der Programmausführung neue Controls hinzukommen können. Da diese während der Entwicklungszeit nicht existieren und folglich keine Ereignisprozeduren vorhanden sind, die man mit Code füllen kann, muss man eine Klasse nehmen.
Gruss
Philipp
¦¦¦ xlam - Excel and more!
¦¦¦ http://195.186.84.74/index.htm
Anzeige
AW: Ereignisprozeduren zusammenfassen
29.07.2004 08:19:30
Holger
Das funktioniert super! Danke euch beiden, vor allem Dir Philipp für die ausführlicheren Erläuterungen - das hat mich wieder ein Stückchen weitergebracht! Das Ganze sieht jetzt schon viel eleganter aus!
Gruß, Holger
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige