按下命令按钮时,无法中断vba中的运行操作

时间:2014-11-26 09:14:53

标签: excel vba excel-vba

我研究过net,但我还没有找到解决方案,我仍然在努力解决以下问题:

在vba UserForm中,我有两个命令按钮:

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

当我按下“运行操作”按钮时,我既不能按“取消”也不能按“x”来停止正在运行的操作,我必须等到操作完成,因此用户表格会冻结约30分钟。

enter image description here

代码看起来或多或少是这样的:

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。

我很感激任何想法。

提前致谢!

1 个答案:

答案 0 :(得分:2)

DoEvents方法是你的朋友。

发生的事情是,由于VBA是单线程的(即一次只能运行一个宏),因此事件(在您的情况下为Cancel_Click())不可能触发。 DoEvents方法实际上会暂停代码,只要它看起来是否已触发任何其他事件,并在恢复代码执行之前解析它们。

试试这个,它应该有效:

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