Also versuche ich das _click-Ereignis zu einem dynamisch hinzugefügten Textbox-Steuerelement auf einem Benutzerformular arbeiten.Dynamisch hinzugefügt Benutzerformular Textbox Steuerelement _click Ereignis nicht feuern? (aber _change funktioniert) (VBA)
Hier ist mein Code, es bekommt die _change Ereignisse gut, aber die _click -Ereignis nicht feuern.
' Userform code
Dim myControlsEventH As Collection
Private Sub UserForm_Initialize()
Set myControlsEventH = New Collection
End Sub
Public Sub AddTextbox(myName As String)
'Dim MyTextBox As Object
Dim myTextbox As MSForms.TextBox
Set myTextbox = frmStamps.Controls.Add("Forms.TextBox.1", myName, True)
myTextbox.TextAlign = 2
myTextbox.Font.Size = 18
myTextbox.WordWrap = False
'MyTextBox.AutoSize = True
AdjustSize
Dim txtbxEvent As ctxtbxEventH
Set txtbxEvent = New ctxtbxEventH
Set txtbxEvent.frm = frmStamps
Set txtbxEvent.txtbox = myTextbox
myControlsEventH.Add txtbxEvent
End Sub
' ctxtbxEventH Class code
Public WithEvents txtbox As MSForms.TextBox
Public frm As UserForm
Private Sub txtbox_Click()
Debug.Print "clicked"
End Sub
Private Sub txtbox_Change()
Debug.Print "changed"
End Sub
(BONUS Frage (wo kann ich die Liste aller möglichen Ereignisse für jede der MSForms Kontrollen finden?))
als Seiten Beachten Sie, dass Sie "mit" verwenden sollten. Und ich bevorzuge scripting.dictionary für Klassenereignisse, weil ich überprüfen kann, ob sie existieren und sie leicht entfernen, weil Wörterbücher diese Funktionalitäten haben. (und sind schneller) –
Danke, ich habe nie mit verwendet, ich habe es in vielen Beispielen gesehen, aber ich habe nie untersucht. Was die Verwendung von scripting.dictionary betrifft, habe ich nie davon gehört. Es scheint eine Alternative zu einer Sammlung zu sein? In diesem Fall setze ich das Eventhandler-Objekt dort hinein, damit es am Ende der Ausführung von AddTextbox() nicht verschwindet, aber ich verweise nicht mehr auf sie im Code. – Shodan
für das Wörterbuch, siehe http://excelmacromastery.com/Blog/index.php/vba-dictionary/. zum dynamischen Löschen von Steuerelementen oder zum Überprüfen ihrer Existenz ohne Notwendigkeit eines "Fehler beim nächsten fortsetzen" ist es sehr nützlich. Beachten Sie auch, dass Sie einen Verweis auf MICROSOFT SCRIPTING RUNTIME hinzufügen oder jedes Mal hinzufügen müssen, wenn Sie ObjectVar = CreateObject ("Scripting.Dictionary") festlegen. –