VBA:检测用户窗体的任何文本框中的更改

问题描述 投票:0回答:2

有一个用户表单有很多文本框,我需要检测每个文本框的更改。因此,我为表单中的每个文本框编写了一个子例程,结果是一大段代码。 由于每个文本框的代码都是相同的,我想优化它。那么是否可以只编写一个子例程来检测表单的任何文本框中的更改?

vba events userform
2个回答
3
投票

实现这一目标的唯一方法是使用类和

WithEvents

这是一个最小的例子:

名为

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

以及用户窗体内的代码,假设您要处理每个文本框的事件

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

0
投票

为什么当我点击“Set txtbox.TextBox = c”时会出现堆栈溢出错误 28?

© www.soinside.com 2019 - 2024. All rights reserved.