VBA防止触发更改事件,如果另一个更改事件触发

这个可能不可能在VBA中解决,但我想看看你的专家有什么要说的。

我有一个用户窗体上的TextBox1_Change()types的子内触发macros的文本框。

如果用户在文本框中键入“ABC”,macros被触发3次:一次为“A”,一次为“AB”,一次为“ABC”。 这个macros实际上很重,所以我希望它只在用户实际input时运行,而不是在单个按键之间。

我知道我可以让用户“按回车”或其他什么,只有然后运行macros,但这不是我所期待的。 我希望他能够自由input,并且能够dynamic显示他的input结果,而不需要其他types的交互。

所以,我想出了让更改事件等待的想法,看看是否有其他更改事件在第一个秒钟内触发。 如果发生这种情况,第一个更改事件将中止。

现在,这将工作,我想我会知道如何编码,除了我不知道如何让用户的力量,即使第一次改变事件正在运行,继续打字。

我的意思是,当第一个macros运行时,它“冻结”了一切。 等待看看是否有其他更改事件触发器将不起作用,因为在第一个macros完成运行之前不会触发任何触发器。

你们在这里看到我的问题吗? 你会怎么做呢? 任何机会,我可以达到我想要的结果?

任何帮助非常感谢,谢谢你们!

我testing了以下内容,并且工作正常(假设我正确理解你正在尝试做什么)。

在一个代码模块中,写下这个:

 Public aRunIsScheduled As Boolean Public nextRunTime As Variant Sub MyMacro() 'Flag macro as having been run, no longer scheduled. aRunIsScheduled = False 'Place your macro code here. 'I'll just use some dummy code: MsgBox "MyMacro is running!" End Sub 

在您的表单模块中:

 Private Sub CommandButton1_Click() If aRunIsScheduled Then ' Cancel the previously scheduled run. Application.OnTime EarliestTime:=nextRunTime, _ Procedure:="MyMacro", Schedule:=False aRunIsScheduled = False End If ' Schedule a new run 3 seconds from now: nextRunTime = Now + TimeValue("00:00:03") Application.OnTime EarliestTime:=nextRunTime, _ Procedure:="MyMacro", Schedule:=True aRunIsScheduled = True End Sub 

我在工作表中放置了一个Commandbutton,在这里我使用了它的更改事件,但是您可以将这些代码放入TextBox1_Change()事件中,方法完全相同。