为了账号安全,请及时绑定邮箱和手机立即绑定

VBA:在UserForms上使用WithEvents

VBA:在UserForms上使用WithEvents

VBA:在UserForms上使用WithEvents我有一个Word用户表单,包含60多种不同类型的控件。我想在每次触发control_change事件时评估表单并更改表单的提交按钮的启用状态。但是,我真的不想在更改事件处理程序上编写和维护60。
查看完整描述

3 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

您可以创建一个事件接收器类,它将包含特定类型的所有控件的事件处理代码。


例如,创建一个名为的类TextBoxEventHandler,如下所示:


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

现在,您需要为表单上的相应类型的每个控件创建并连接该类的实例:


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

请注意,您需要将事件处理程序实例添加到集合的原因只是为了确保它们仍然被引用,因此在您完成它们之前不会被垃圾收集器丢弃。


显然,这种技术可以扩展到处理其他类型的控制。您可以为每种类型分别设置事件处理程序类,也可以为需要处理的每种控件类型使用一个具有成员变量(以及关联的属性和事件处理程序)的类。


查看完整回答
反对 回复 2019-08-28
  • 3 回答
  • 0 关注
  • 947 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信