I have a Word userform with 60+ controls of varying types. I would like to evaluate the form every time a control_change event is triggered and change the enabled state of the form's submit button. However, I really don't want to write and maintain 60 on change event handlers.
Add the TextOnce you have the label, look to the Properties window and change the Caption property. This controls what text appears in the label. If you don't see the properties window, make sure you clicked the Label and hit F4. This is the simplest way to add text to a UserForm.
When the . Show method is called, VBA will direct the program flow to the UserForm_Initialize event. Here, you can make numerous customizations. You can edit the userform controls, like the caption on the command button.
How to Close UserForm in Excel VBA? Once the purpose of the user form is done, there is a point in keep showing the userform in front of the user, so we need to close the userform. We can close the userform by using the “Unload Me” statement and “UserForm. Hide” statements.
You can create an event-sink class that will contain the event-handling code for all of your controls of a particular type.
For example, create the a class called TextBoxEventHandler
as follows:
Private WithEvents m_oTextBox as TextBox Public Property Set TextBox(ByVal oTextBox as TextBox) Set m_oTextBox = oTextBox End Property Private Sub m_oTextBox_Change() ' Do something End Sub
Now you need to create & hook up an instance of that class for each control of the appropriate type on your form:
Private m_oCollectionOfEventHandlers As Collection Private Sub UserForm_Initialise() Set m_oCollectionOfEventHandlers = New Collection Dim oControl As Control For Each oControl In Me.Controls If TypeName(oControl) = "TextBox" Then Dim oEventHandler As TextBoxEventHandler Set oEventHandler = New TextBoxEventHandler Set oEventHandler.TextBox = oControl m_oCollectionOfEventHandlers.Add oEventHandler End If Next oControl End Sub
Note that the reason you need to add the event handler instances to a collection is simply to ensure that they remain referenced and thus don't get discarded by the garbage collector before you're finished with them.
Clearly this technique can be extended to deal with other types of control. You could either have separate event handler classes for each type, or you could use a single class that has a member variable (and associated property & event handler) for each of the control types you need to handle.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With