当按下命令button时,不能中断vba中的运行操作

我研究了networking,但是我还没有find一个解决scheme,我仍然在努力解决以下问题:

在vba UserForm我有两个命令button:

  • 第一个(“运行操作”)运行可能需要大约30分钟的操作。
  • 第二个('取消')被创build来中断由“运行操作”触发的操作

当我按下“运行操作”button时,我既不能按'取消'也不按'x'来停止运行操作,我必须等到操作完成后,用户窗体才会冻结大约30分钟。

在这里输入图像说明

代码看起来或多或less像这样:

private Sub Cancel_Click() Cancel = True End Sub private Sub RunOperation_Click() RunOperation.Enabled = False Call Macro() End Sub private Sub Macro() For i = 1 to 100 'do stuff here If Cancel = True Then RunOperation.Enabled = True Exit Sub Exit If Next i End Sub 

TakeFocusOnClick设置为False的更多两个button。

我会很感激任何想法。

提前致谢 !

DoEvents方法在这里是你的朋友。

发生什么事情是因为VBA是单线程的(即一次只能运行一个macros),事件(在你的情况下是Cancel_Click() )是Cancel_Click()被触发的。 DoEvents方法基本上暂停了代码,看看是否有其他事件被触发,并在代码执行恢复之前parsing它们。

试试这个,它应该工作:

 Private Sub Macro() For i = 1 To 100 'do stuff here DoEvents '<~~ Insert this line here If Cancel = True Then RunOperation.Enabled = True Exit Sub End If Next i End Sub