Application.Wait 和 kernel32.Sleep 会让EXCEL进程交出控制权,是对电脑系统最友好的方式,但是交出控制权的EXCEL会做出【卡死】的假象,不响应键盘鼠标事件。 使用循环,在循环里面 doevents 的话,EXCEL界面会响应,对用户是友好的,但是CPU或卡死一个核,对系统很不优化。如果循环里面不 doevents 的话(楼主代码),对用户和系统都不友好。 如果在意系统性能的话,会选择方案一,在意用户体验会选择方案二,不过两个方案都是极端,可以折中处理,循环中doevents、Application.Wait两样都来,大概逻辑如下(直接粘贴的2、3楼高手代码,我没有亲自测试): sub delay(byval iTime as single) dim t as single t=timer do doevents Application.Wait Now + TimeValue("0:0:01") loop until timer-t>iTime end sub
直接复制三楼的代码测试是否如6楼所说的cpu占用问题。 代码如下: Sub delay(ByVal iTime As Single) Dim t As Single t = Timer Do DoEvents Loop Until Timer - t > iTime End Sub ====================== Sub dd() delay (10) MsgBox "延时10s" End Sub =============== 打开任务管理器。按F5运行dd。 cpu第三个核心满载,10秒后正常。