Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
460to464
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
460to464
460to464
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

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

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

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige