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

Forumthread: Klassenmodul: Enter-Event für Textbox

Klassenmodul: Enter-Event für Textbox
24.10.2020 16:58:39
Johannes
Hallo zusammen,
Frage an die Klassenmodul-Profis :-)
In meiner Klasse clsTextBox würde ich gerne ein Enter-Event für Textboxen in einer Userform definieren. Mein Code sieht bis dato folgendermaßen aus:

Klassemodul
Public WithEvents p_TextBox As MSForms.Control
Private Sub p_TextBox_Enter()
' Mein Code
End Sub
Initialize-Event der Userfom:

Public col                  As Collection
Private Sub UserForm_Initialize()
Dim ctrl As MSForms.Control
Dim instTextBox As clsTextBox
Set col = New Collection
For Each ctrl In UserForm1.Controls
If TypeName(ctrl) = "TextBox" Then
Set instTextBox = New clsTextBox
Set instTextBox.p_TextBox = ctrl
col.Add instTextBox
End If
Next ctrl
End Sub
Beim Aufruf der Userform bekomme ich allerdings einen Laufzeitfehler 459: Objekt oder Klasse unterstützt diese Ereignismenge nicht.
Vielleicht hat jemand eine Lösung :-) Vielen Dank im Voraus.
Johannes
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Klassenmodul: Enter-Event für Textbox
24.10.2020 17:22:53
Nepumuk
Hallo Johannes,
in Klassenmodulen ist es grundsätzlich nicht möglich ein Enter- oder Exit-Events abzufangen, denn in der Klasse ist das verlassene Control bzw. das Control welches neu den Fokus erhält nicht bekannt.
Gruß
Nepumuk
AW: Klassenmodul: Enter-Event für Textbox
24.10.2020 17:43:31
Johannes
Hi Nepumuk,
danke für deine schnelle Antwort.
Das ist komisch. Ich hatte das bereits einmal genau in dieser Form mit einem Label gemacht, dort allerdings logischerweise nicht mit dem Enter sondern mit dem Click-Event und das funktionierte tadellos. Und durch die Public Collection in der ich die Steuerelement speichere ist ja gewährleistet, dass diese die ganze Zeit bekannt sind, solange die Userform geöffnet ist. BTW wird mir für die Variable p_TextBox im VBE sogar das Enter-Event in dem Dropdown oben rechts angeboten.
...so ganz glaube ich das noch nicht :-)
Anzeige
AW: Klassenmodul: Enter-Event für Textbox
24.10.2020 17:51:26
Nepumuk
Hallo Johannes,
eine TextBox in einem Klassenmodul ist wie eine einzige TextBox auf einem UserForm. Da gibt es auch kein Enter- oder Exit-Event.
Ich hab mal eine DLL geschrieben mit der das geht. Funktioniert aber nur in einem 32Bit Excel und muss auf jedem Rechner registriert werden auf dem sie laufen soll. Interesse?
Gruß
Nepumuk
Anzeige
AW: Klassenmodul: Enter-Event für Textbox
24.10.2020 18:07:34
Johannes
Hi,
nochmals danke :-)
Danke für das Angebot, aber ich brauch das jetzt nicht akut. Das war gerade mehr so aus Neugier und Interesse. Aber gerade weil ich mich auch seit geraumer Zeit anderen Sprachen wie z.B. C# widme, fällt mir bei VBA immer mehr auf wie beschränkt man teilweise hier ist. Ist natürlich auch schon bisschen in die Jahre gekommen und wird ja auch nicht mehr weiterentwickelt, aber deshalb war ich umso erstaunter, dass viele Sachen in "größeren" Sprachen wesentlich leichter von der Hand gehen, als in VBA. Hatte eher immer das Gegenteil angenommen...
Anzeige
AW: Klassenmodul: Enter-Event für Textbox
24.10.2020 20:02:07
onur
"fällt mir bei VBA immer mehr auf wie beschränkt man teilweise hier ist. Ist natürlich auch schon bisschen in die Jahre gekommen" - VBA ist nun mal die MAGERVERSION von VB, und VB hat diese Funktionalität mit ControlArrays IMMER schon gehabt.
;
Anzeige
Anzeige

Infobox / Tutorial

Enter-Event für Textboxen in Excel VBA


Schritt-für-Schritt-Anleitung

Um ein Enter-Event für Textboxen in einer Userform in Excel VBA zu implementieren, gehe folgendermaßen vor:

  1. Erstelle ein Klassenmodul:

    • Öffne den VBA-Editor (Alt + F11).
    • Füge ein neues Klassenmodul hinzu und nenne es clsTextBox.
    • Füge den folgenden Code in das Klassenmodul ein:
    ' Klasse clsTextBox
    Public WithEvents p_TextBox As MSForms.Control
    
    Private Sub p_TextBox_Enter()
       ' Hier Deinen Code einfügen
    End Sub
  2. Initialisiere die Userform:

    • Öffne die Userform, in der die Textboxen enthalten sind.
    • Füge im Code der Userform den folgenden Initialisierungs-Code hinzu:
    Public col As Collection
    
    Private Sub UserForm_Initialize()
       Dim ctrl As MSForms.Control
       Dim instTextBox As clsTextBox
       Set col = New Collection
       For Each ctrl In Me.Controls
           If TypeName(ctrl) = "TextBox" Then
               Set instTextBox = New clsTextBox
               Set instTextBox.p_TextBox = ctrl
               col.Add instTextBox
           End If
       Next ctrl
    End Sub
  3. Testen der Userform:

    • Starte die Userform und überprüfe, ob das Enter-Event korrekt ausgelöst wird.

Häufige Fehler und Lösungen

  • Fehler 459: Objekt oder Klasse unterstützt diese Ereignismenge nicht.

    • Lösung: Stelle sicher, dass die Textboxen korrekt in einer Collection gespeichert werden. Überprüfe, ob die Textboxen tatsächlich als MSForms.Control erkannt werden.
  • Enter-Event wird nicht ausgelöst:

    • Lösung: In Klassenmodulen ist es nicht möglich, das Enter- oder Exit-Event abzufangen, da das verlassene Control nicht bekannt ist. Überlege, ob eine andere Lösung erforderlich ist (siehe alternative Methoden).

Alternative Methoden

Falls das Enter-Event in einer Textbox nicht funktioniert, kannst du folgende Alternativen in Betracht ziehen:

  • Verwendung von DLLs: Manchmal kann eine DLL, die speziell für solche Zwecke erstellt wurde, hilfreich sein. Beachte jedoch, dass diese DLLs nur in bestimmten Versionen von Excel (z.B. 32-Bit) funktionieren und registriert werden müssen.

  • C# Integration: In der Programmiersprache C# sind solche Events einfacher zu handhaben. Wenn du bereits Erfahrungen mit C# hast, könntest du überlegen, eine WinForms-Anwendung zu erstellen, die diese Funktionalität unterstützt.


Praktische Beispiele

Hier ist ein einfaches Beispiel für die Verwendung des Enter-Events in einer Textbox:

Private Sub p_TextBox_Enter()
    MsgBox "Textbox wurde betreten!"
End Sub

Diese einfache Nachricht wird angezeigt, wenn die Textbox den Fokus erhält. Du kannst diesen Code anpassen, um spezifische Aktionen durchzuführen, wie z.B. Eingabewerte zu validieren oder Formatierungen anzuwenden.


Tipps für Profis

  • Verwende die Excel VBA Textbox Events: Achte darauf, die verschiedenen Events wie Click oder Exit zu nutzen, um eine umfassende Benutzerinteraktion zu gewährleisten.
  • Fehlerbehandlung: Implementiere eine robuste Fehlerbehandlung, um Laufzeitfehler zu vermeiden, besonders wenn du mit externen Bibliotheken oder DLLs arbeitest.
  • Effiziente Nutzung von Collections: Wenn du viele Steuerelemente verwaltest, kann eine Collection helfen, die Übersicht zu bewahren und die Wartbarkeit des Codes zu verbessern.

FAQ: Häufige Fragen

1. Warum funktioniert das Enter-Event in meinem Klassenmodul nicht? Das Enter-Event kann in Klassenmodulen nicht verwendet werden, da das verlassene Control nicht bekannt ist. Überlege, ob du stattdessen einen anderen Ansatz wählen möchtest.

2. Gibt es eine Möglichkeit, das Exit-Event zu verwenden? Ähnlich wie beim Enter-Event ist das Exit-Event in Klassenmodulen nicht direkt verfügbar. Du kannst jedoch versuchen, die Logik in der Userform selbst zu implementieren.

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