vba循环通过键盘某个按键按下退出循环_VBA实战技巧07: 阻止用户按Ctrl+Break键中断代码运行...

学习Excel技术,关注微信公众号:

excelperfect

当运行中的代码长时间没有响应,或者代码陷入死循环时,可以按Ctrl+Break键中断代码的执行(注:有些笔记本电脑的键盘上没有Break键,可以按Esc键)。此时,VBA会弹出如下图1所示的消息。

4e63f3650a7f503ef4fe4bd3138a7d48.png

图1

然而,有时候我们不希望用户按Ctrl+Break键中断正在运行中的代码,因为此时程序可能正在创建一些需要占用电脑资源才能生成的“东西”,所以才会看起来没有响应。如果我们中断代码的执行,那么可能已经生成的很多中间工作表、行和列仍然存在,并没有像程序预先设计的那样在退出前将其删除,这样会留下一个与我们之前完全不同的工作表,会让用户感到莫名其妙。

要阻止按Ctrl+Break键中断代码的执行,可以在程序中添加下面的语句:

Application.EnableCancelKey= xlErrorHandler

这个语句指示VBA不要显示“代码执行被中断”消息。实际上,这也为我们提供了一种利用用户按Ctrl+Break键操作的方法。

可以为Application.EnableCancelKey属性设置3个值:xlDisabled、xlErrorHandler和xlInterrupt。如果将其设置为xlDisabled,则告诉VBA停止响应用户按下Ctrl+Break键的操作。如果将其设置为xlInterrupt,则正常响应用户按下Ctrl+Break键的操作。而xlErrorHandler则指示程序生成代码为18的错误,这样就可以使用错误处理来利用该错误。

下面是一个代码示例。循环执行5秒钟,如果在循环执行过程中,用户尝试中断代码,则会引发错误,从而执行错误处理语句。

Sub code_test()    Dim t    On Error GoTo MyErrorHandler    t = Timer    Application.EnableCancelKey =xlErrorHandler       Do While Timer - t < 5    Loop   MyErrorHandler:    If Err.Number = 18 Then        MsgBox "按Ctrl+Break键中止!!!"        Resume    Else        '其他代码    End IfEnd Sub

其实,在程序中可以有多个Application.EnableCancelKey语句。对于需要控制的部分,可以将其设置为xlErrorHandler,而对于其他部分,可以将其设置为xlInterrupt,来正常响应用户的操作。

Sub code_test()    Dim t    On Error GoTo MyErrorHandler    t = Timer    Application.EnableCancelKey =xlErrorHandler       Do While Timer - t < 5    Loop       Application.EnableCancelKey = xlInterrupt       Do While Timer - t < 8    Loop   MyErrorHandler:    If Err.Number = 18 Then        MsgBox "按Ctrl+Break键中止!!!"        Resume    Else        '其他代码    End IfEnd Sub

2bb6fb600cb831b8a443133027528740.png

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值