Ich arbeite in Excel 2013 und entwerfe ein Benutzerformular mit Steuerelementen, die zur Laufzeit erstellt werden. Ich habe Probleme, eine Funktion zu erstellen, die auf das Änderungsereignis der dynamisch erstellten Steuerelemente ausgelöst wird.VBA Excel Benutzerformular EventHandler für dynamisch generierte Steuerelemente, die nicht wie erwartet funktionieren
Die Steuerelemente sind in einem separaten Klassenmodul enthalten, das sie erstellt und verwaltet. Ich möchte eine Funktion hinzuzufügen, die auf die Veränderung bei einem Combo-Box feuert, so habe ich es Withevents deklariert:
Private WithEvents myComboBox As MSForms.ComboBox
... other controls and variable declarations...
Ich habe eine Funktion, die den Rahmen geführt wird, dass ich die Kontrollen in so sein wollen dass ich alle Komponenten innerhalb der Klasse erstellen kann.
Sub initialize(myID As String, myFrame As MSForms.Frame, Left As Double, Top As Double)
...
Set myComboBox = myFrame.Controls.Add("Forms.ComboBox.1", myID & "_comboBox")
...
End Sub
Dies alles funktioniert, und die ComboBox erstellt und Eigenschaften verändert, obwohl myComboBox
erfolgreich ändern, wie die ComboBox angezeigt wird.
Da myComboBox
WithEvents
deklariert ist, kann ich myComboBox_Change
als Option in den Dropdown-Menüs finden und es in dem Modul setzen:
Private Sub myComboBox_Change()
MsgBox ("Change Event Fired")
End Sub
Aber diese Funktion wird nicht ausgeführt, und ich kann nicht verstehen Warum? Eine Nachricht wird nicht angezeigt, wenn eine Änderung vorgenommen wird, und der in diese Funktion eingefügte Haltepunkt verhindert die Ausführung von Code nicht. Was mache ich falsch?
Ich kann es nicht selbst überprüfen, aber sicher daran erinnern, aber ... versuchen Sie "Public WithEvents myComboBox als MSForms .ComboBox "statt" Private ... " – user3598756
Vielen Dank für den Vorschlag, aber es hat keinen Unterschied gemacht. – SudoNim
Haben Sie mehr * als einen *? Was ist der Zweck, den Namen dynamisch als 'myID & '_comboBox''? – Comintern