VBA EnableEvents启动textbox_change

时间:2015-05-15 12:28:04

标签: vba events activex

我有一个包含更改代码的文本框,如果我按下带有以下代码的按钮

wsimport

但这仍然会触发文本框的on change事件。

1 个答案:

答案 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