我需要你的帮助,
Excel VBA 是否可以为所有文本框和组合框的指定用户窗体应用某种全局更改事件处理程序。我知道可以一对一地完成它们,但是如果您有大约 20 个文本框,那么为每个用户窗体控件编写代码 _change 就太过分了,不是吗?
我本质上想在用户输入任何文本框或从组合框中选择任何新值后启用应用按钮,并将按钮启用属性从 false 更改为 true。
我在网上搜索但找不到符合我要求的解决方案。
任何帮助是极大的赞赏。很抱歉,我在这里超出了我的 VBA 知识水平。
Excel VBA 是否可以为所有文本框和组合框的指定用户窗体应用某种全局更改事件处理程序。
由于事件处理程序在 VBA 中如何连接到事件源,答案是“否”。
然而...
添加一个新的类模块到你的项目中,调用它DynamicTextBox
(你可以再买一个DynamicComboBox
).
Option Explicit
Private WithEvents encapsulated As MSForms.TextBox
Public Sub Initialize(ByVal ctrl As MSForms.TextBox)
Set encapsulated = ctrl
End Sub
Private Sub encapsulated_Change()
'handle textbox changed here
End Sub
现在在您的表格中,有一个Collection
of DynamicTextBox
类实例 - 你会想要一个New
每个实例TextBox
你想要处理Change
事件为.
Option Explicit
Private handlers As VBA.Collection
Private Sub UserForm_Initialize()
Set handlers = New VBA.Collection
Dim ctrl As MSForms.Control
For Each ctrl In Me.Controls
If TypeOf ctrl Is MSForms.TextBox Then
Dim textBoxHandler As DynamicTextBox
Set textBoxHandler = New DynamicTextBox
textBoxHandler.Initialize ctrl
handlers.Add textBoxHandler
'ElseIf TypeOf ctrl Is MSForms.ComboBox Then
' Dim comboBoxHandler As DynamicComboBox
' Set comboBoxHandler = New DynamicComboBox
' comboBoxHandler.Initialize ctrl
' handlers.Add comboBoxHandler
End If
Next
End Sub
注意,这种封装技术WithEvents
类实例中的 MSForms 控件还可以用于处理在运行时动态添加的控件的事件。
关键是将 MSForms 控件保持在范围内 - 这就是模块级的内容Collection
does.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)