VBA:检测userform的任何文本框中的更改

VBA:检测userform的任何文本框中的更改,vba,events,userform,Vba,Events,Userform,有一个userform有许多文本框,我需要检测每个文本框中的变化。所以我为表单中的每个文本框编写了一个子程序,结果生成了一大块代码。 由于每个文本框的代码都是相同的,我想对其进行优化。那么,是否可以只编写一个子例程来检测表单的任何文本框中的更改呢?实现这一点的唯一方法是将类与带有事件的一起使用 下面是一个简单的例子: 名为mytextbox的类模块的代码: Private WithEvents txtbox As MSForms.TextBox Public Property Set Tex

有一个userform有许多文本框,我需要检测每个文本框中的变化。所以我为表单中的每个文本框编写了一个子程序,结果生成了一大块代码。
由于每个文本框的代码都是相同的,我想对其进行优化。那么,是否可以只编写一个子例程来检测表单的任何文本框中的更改呢?

实现这一点的唯一方法是将类与带有事件的
一起使用

下面是一个简单的例子:

名为mytextbox的类模块的代码:

Private WithEvents txtbox As MSForms.TextBox


Public Property Set TextBox(ByVal t As MSForms.TextBox)
    Set txtbox = t
End Property


Private Sub txtbox_Change()
    ' code for handling the event
End Sub
以及Userform中的代码,假设您希望处理每个文本框的事件

Private myEventHandlers As Collection

Private Sub UserForm_Initialize()
    Dim txtbox As mytextbox

    Set myEventHandlers = New Collection

    Dim c As Control
    For Each c In Me.Controls
        If TypeName(c) = "TextBox" Then
            Set txtbox = New mytextbox

            Set txtbox.TextBox = c

            myEventHandlers.Add txtbox
        End If
    Next c
End Sub

是的,有一个班级和一个活动。请参见控制阵列。来自帮助。控件数组是一组共享相同名称和类型的控件。它们还共享相同的事件过程。一个控制阵列至少有一个元素,可以扩展到系统资源和内存允许的任意多个元素;它的大小还取决于每个控件需要多少内存和Windows资源。可以在控件数组中使用的最大索引是32767。同一控件数组的元素有其自己的属性设置。控件数组的常见用途包括菜单控件和选项按钮分组。谢谢。它工作得很好!