大家好,我们今日继续讲解VBA代码解决方案的第90讲内容:代码一旦启动将无法退出,防止用户中断代码运行。在之前的几篇文章中,我讲了代码优化的几点建议,其实代码优化是很值得商榷的问题,这里的优化主要是速度的优化,其实代码的运行是一个系统的工程,不仅仅是速度,还有视觉的效果,人机的交流是否通畅等等,我的几篇文章就是抛砖引玉吧。 今日我要讲的是代码的技巧了,在使用VBA开发的程序交予用户使用后,如果在运行需要长时间执行的宏代码时,用户在代码运行期间按下了<Esc>键或者<Ctrl+Break>组合键,代码会中断运行;如下图: 此时单击'继续'按钮将继续执行代码,单击'结束'按钮结束过程,单击'调试'按钮进入中断模式,这显然有时候不是用户所希望出现的,能否可以对上述的键值进行屏蔽呢?答案当然是肯定的。此时需要使用Application对象的EnableCancelKey属性来进行控制,应用于Application对象的EnableCancelKey属性控制将用户中断用于运行程序的处理,语法如下: expression.EnableCancelKey 参数是expression必须的,是Application对象。 EnableCancelKey属性值为下面常量之一。 ① xlDisabled 0 完全禁用'取消'键捕获功能 ② xlErrorHandler 2 将中断作为错误信号传递给运行程序,由 On Error GoTo 语句设置的错误处理程序捕获。可捕获的错误代码为 18 ③ xlInterrupt 1 中断当前运行程序,用户可进行调试或结束程序的运行 如果我们将上述的EnableCancelKey属性值设置为xlDisabled或者0,那么就不能退出代码的运行了。看下面的代码实测: Sub MyNzEnablEsc() Dim i As Integer Application.EnableCancelKey = xlDisabled For i = 1 To 3000 Sheets('Sheet11').Cells(i, 1).Select Sheets('Sheet11').Cells(i, 1) = i Next Application.EnableCancelKey = xlInterrupt Sheets('Sheet11').Cells(1, 1).Select End Sub 代码解析: MyNzEnablEsc过程在代码运行期间禁用'取消'键的捕获功能。 只要Microsoft Excel返回空闲状态并且没有程序处于运行状态,EnableCancelKey属性都会重置为xlInterrupt。若要在程序运行中捕获或者禁用取消过程,则每次在程序被调用时必须明确更改EnableCancelKey属性。 代码截图: 运行之中是不允许退出的。如下图,呵呵这个截图没有什么意义了。 今日内容回向: 1 如何能使代码不能中断运行? 2 Application.EnableCancelKey 的意义是什么? |
|
来自: 恒信通讯43a2p6 > 《待分类》