VBA - Frames uns das Exit-Ereignis für Textboxen

Hallo,

seit einiger Zeit beschäftige ich mich privat mit VBA in Verbindung mit Excel und bin nun auf ein Problem gestoßen, dass ich auch nach langem Suchen im Internet nicht lösen konnte.

Es ist recht simpel: Angenommen, ich platziere in meiner Userform mehrere Frames. In jeden dieser Frames platziere ich wiederum eine Textbox. Nun hätte ich gern, dass sich bei Betreten und Verlassen der Textboxen die Hintergrundfarbe ändert. Realisiert habe ich dies bisher mit den Enter und Exit-Ereignissen. Dies funktioniert wunderbar, aber nur, wenn die Textboxen frei auf der Userform platziert und nicht innerhalb eines Frames sind.

Befinden sich die Textboxen aber in Frames, reagiert Excel scheinbar - wenn denn überhauot - erst auf das Exit-Ereignis der Textbox, wenn der Cursor ALLE Frames durchlaufen hat und sich außerderhalb der solchen befindet.

Ist es denn überhaupt nicht möglich, ein Exit-Ereignis für Textboxen vernünftig zu programmieren, wenn sich diese in Frames befinden?

Ich hoffe, dass ich mich nicht allzu unverständlich ausgedrückt habe und bedanke mich schonmal bei allen, die helfen können und wollen!

Gruß

Andreas

Befinden sich die Textboxen aber in Frames, reagiert Excel
scheinbar - wenn denn überhauot - erst auf das Exit-Ereignis
der Textbox, wenn der Cursor ALLE Frames durchlaufen hat und
sich außerderhalb der solchen befindet.

Ist es denn überhaupt nicht möglich, ein Exit-Ereignis für
Textboxen vernünftig zu programmieren, wenn sich diese in
Frames befinden?

Hi Andreas,

scheinbar wird Enter nur in der ersten TB ausgelöst wenn die Userform gestartet wird und Das Exit der TBs erst wenn die UF verlassen wird.
Habe nicht probiert was passiert bei mehreren TBs in einem Frame.

Bei nur einer TB pro Frame probiere das mal so:

TB 1 ist in Frame 1, TB 2 ist frei, TB 3 ist in Frame 3

Option Explicit

Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
’ Frame2_Enter ginge auch
TextBox1.BackColor = RGB(0, 255, 255)
MsgBox „md1“
End Sub

Private Sub Frame1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
TextBox1.BackColor = RGB(0, 255, 0)
MsgBox „ex1“
End Sub

Private Sub Frame2_Enter()
TextBox3.BackColor = RGB(0, 100, 255)
MsgBox „en3“
End Sub

Private Sub Frame2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
TextBox3.BackColor = RGB(0, 255, 200)
MsgBox „ex3“
End Sub

Private Sub TextBox2_Enter()
TextBox2.BackColor = RGB(255, 0, 0)
MsgBox „en2“
End Sub

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
TextBox2.BackColor = RGB(0, 255, 0)
MsgBox „ex2“
End Sub

Gruß
Reinhard

Hallo Reinhard,

das war für mich DER entscheidende Hinweis! Ich habe nicht bedacht, dass man ja auch für die Frames eine Exit- oder Enter-Funktion definieren kann! Auf deinem Vorschlag aufbauend habe ich die Lösung nun gefunden. Beim Verlassen eines Frames setze ich einfach alle Hintergrundfarben der dort enthaltenen TBs auf den Standardwert - und es funktioniert!

Nochmal vielen Dank!

Gruß

Andreas

das war für mich DER entscheidende Hinweis! Ich habe nicht
bedacht, dass man ja auch für die Frames eine Exit- oder
Enter-Funktion definieren kann! Auf deinem Vorschlag aufbauend
habe ich die Lösung nun gefunden. Beim Verlassen eines Frames
setze ich einfach alle Hintergrundfarben der dort enthaltenen
TBs auf den Standardwert - und es funktioniert!

Hallo Andreas,

freut mich das es funktioniert.
Alternativ wäre mir nur eingefallen, ohne Enter und Exit Funktion, die Farbe der TB zu ändern wenn der Mauszeiger darüber ist.
Das geht, ist aber sehr kompliziert.

Gruß
Reinhard