使用Class和WithEvents来检测文本框中的更改

时间:2016-09-04 08:05:47

标签: vba excel-vba userform excel

我在VBE中有一个带有12个文本框的用户窗体(一年中每个月有1个)。还有一个额外的文本框,可以显示前12个框中每个框中的值的总和,随着其他文本框中的值的变化,更新和重新计算自己。

非常感谢帮助实施此问题的解决方案。

我试图实现的代码取自以下帖子:

VBA: Detect changes in any textbox of the userform

但是我不确定在课堂下面的活动部分放什么。

注意:这是我第一次尝试使用课程,所以我只是在学习。

1 个答案:

答案 0 :(得分:1)

如果Class1是您的类模块的名称,Userform1您的用户表单的名称,如果您希望所有文本框值的总和在TextBox13,那么,

Class1模块中插入

Private WithEvents txtbox As MSForms.TextBox
Dim ctlr As Control
Public sum As Integer

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

Private Sub txtbox_Change()
    sum = 0
    For Each ctlr In UserForm1.Controls
        sum = sum + Val(ctlr)
    Next ctlr
    UserForm1.TextBox13 = sum - Val(UserForm1.TextBox13)
End Sub

并在UserForm1模块中插入

Private myEventHandlers As Collection

Private Sub UserForm_Initialize()
    Dim txtbox As Class1

    Set myEventHandlers = New Collection

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

            Set txtbox.TextBox = c

            myEventHandlers.Add txtbox
        End If
    Next c
End Sub