我研究过net,但我还没有找到解决方案,我仍然在努力解决以下问题:
在vba UserForm中,我有两个命令按钮:
当我按下“运行操作”按钮时,我既不能按“取消”也不能按“x”来停止正在运行的操作,我必须等到操作完成,因此用户表格会冻结约30分钟。
代码看起来或多或少是这样的:
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。
我很感激任何想法。
提前致谢!
答案 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