我有一个包含更改代码的文本框,如果我按下带有以下代码的按钮
wsimport
但这仍然会触发文本框的on change事件。
答案 0 :(得分:0)
这是因为Application.EnableEvents
允许启用/禁用从Application
(即Excel)触发的事件。
在您的情况下,触发TextBox1
更改的父级不是Application
,而是UserForm
。这是cpearson关于如何在您的Userform 上创建自己的EnableEvents
属性的示例。我在这里报告链接的内容(以避免“仅链接答案”):
要抑制表单中的事件,可以在表单中创建变量 模块级别称为“EnableEvents”,并在之前将其设置为False 更改将导致事件被引发的属性。
Public EnableEvents As Boolean
Private Sub UserForm_Initialize()
Me.EnableEvents = True
End Sub
Sub Something()
Me.EnableEvents = False
' some code that would cause an event to run
Me.EnableEvents = True
End Sub
然后,表单上的所有控件都应该测试该变量 作为他们在任何事件代码中的业务顺序。例如,
Private Sub ListBox1_Change()
If Me.EnableEvents = False Then
Exit Sub
End If
MsgBox "List Box Change"
End Sub
如果仅使用过程,则可以将EnableEvents声明为Private 那种形式需要压制事件。但是,如果您有表格 以编程方式链接在一起,例如UserForm2将项添加到a UserForm1上的ListBox,您应该将变量声明为Public和 使用以下代码将其设置为另一个表单:
UserForm1.EnableEvents = False
'
' change something on UserForm1
'
UserForm1.EnableEvents = True