Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Ein Mousedown-Ereignis bei mehreren TB

Betrifft: Ein Mousedown-Ereignis bei mehreren TB von: Christian
Geschrieben am: 18.09.2020 11:22:55

Hallo Zusammen,

ich habe in einer UserForm 15 Textboxen, von Textbox1 bis Textbox15, und möchte bei jeder dieser Textboxen stets das identische Mousedown-Ereignis auslösen. Muss ich dafür 15 Codes unterbringen oder ist das irgendwie zusammenfasssbar.

Herzlichen Dank vorab für jede Hilfe.

Viele Grüße

Christian

Betrifft: AW: Ein Mousedown-Ereignis bei mehreren TB
von: Nepumuk
Geschrieben am: 18.09.2020 11:49:51

Hallo Christian,

ein Beispiel:

https://www.herber.de/bbs/user/140310.xlsm

Gruß
Nepumuk

Betrifft: AW: Ein Mousedown-Ereignis bei mehreren TB
von: Daniel
Geschrieben am: 18.09.2020 13:16:37

Hi
für Checker gibt's wie von Neupumuk gezeigt die sog. Klassenprogrammierung.
Wer die nicht checkt (so wie ich), kann sich mit folgendem Workaround behelfen:

1. man schreibt den Ablauf, der im MouseDown passieren soll in ein eigenes Makro im Modul der Userform und verwendet dabei für die TextBox einen Übergabeparameter vom Typ "Control" und ggf noch X und Y als Single, bei Bedarf auch den Button

2. dann erstellt man für jede TextBox das MouseDown-Event, in diesem reicht jetzt aber eine Zeile aus, in welcher man nur das entsprechende Makro aufruft und die Übergabeparamter angibt:

Beispiel
Private Sub TextboxMouseDown(tb as Control, x as single, y as single)
Msgbox tb.Name & " X: " & x & " - Y: " & y
end Sub

Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As  _
Single, ByVal Y As Single)
Call TextboxMouseDown(Textbox1, X, Y)
End Sub

Private Sub TextBox2_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As  _
Single, ByVal Y As Single)
Call TextboxMouseDown(Textbox2, X, Y)
End Sub

usw
sind zwar immer noch viele Makros, aber die meisten bestehen ja nur aus einer Zeile und können leicht mit CopyPaste vervielfacht werden.


Gruß Daniel

Betrifft: AW: Ein Mousedown-Ereignis bei mehreren TB
von: Christian
Geschrieben am: 18.09.2020 13:59:44

Hallo Daniel,
ich verstehe das mit dem Klassemodul auch leider nicht und würde daher die sicher sehr gute Lösung nicht im Blindflug übernehmen wollen. Ich habe Deinen Vorschlag umgesetzt, klappt ganz wunderbar.

Vielen Dank, auch an Neupumuk, und viele Grüße
Christian

Betrifft: AW: Ein Mousedown-Ereignis bei mehreren TB
von: Nepumuk
Geschrieben am: 18.09.2020 14:41:01

Hallo Christian,

was gibt es da nicht zu verstehen?

Das Klassenmodul "clsTextBox" ist "nur" eine Vorlage.

Mit "Set objTextBoxClass = New clsTextBox" erzeugst du ein virtuelles Objekt des Klassenmoduls im Arbeitsspeicher.

Mit "Set objTextBoxClass.TextBox = Controls("TextBox" & CStr(lngIndex))" übergibst du das TextBox-Objekt an die Klasse bzw. an die Eventvariable "mobjTextBox".

In dem virtuellen Objekt werden dann die Events des Objektes "mobjTextBox" abgefangen.

Keine Zauberei, nur VBA-Standard.

Gruß
Nepumuk

Beiträge aus dem Excel-Forum zum Thema "Ein Mousedown-Ereignis bei mehreren TB"