[英]VBA UDF function causes excel to "not respond"
我有一些非常简单的代码导致 Excel 崩溃。
我已经调试了代码中的变量,它们看起来很好,只是在几秒钟之后 Now() 没有改变并且 waitTime 没有改变 - 尽管时间彼此不同,即时间没有向前移动(例如,Now 可能卡在 3:00:05,waitTime 卡在 3:00:09)。
而且 application.wait 不会等待我要求的 5 秒。
并且单元格字体颜色也不会改变。
我不知道如何进一步调试。
在工作表“sheet1”中,我有以下单元格条目 - 在 C8 中,我有一个我手动更改的数字。 在 D8 我有
=if(C8>25,"yup",startFlash(C8))
这工作正常。 它调用函数没有问题。 这是宏代码:
Dim waitTime As Date, stopTime As Date
Function startFlash(x As String)
Beep
stopTime = TimeSerial(Hour(Now()), Minute(Now()) + 2, Second(Now()))
Call sflash
MsgBox "done"
End Function
Sub sflash()
Do While waitTime <= stopTime
With Sheet1.Range("c8").Font
If .ColorIndex = 3 Then
.ColorIndex = 5
Else
.ColorIndex = 3
End If
End With
newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now()) + 5
waitTime = TimeSerial(newHour, newMinute, newSecond)
Debug.Print Now(); waitTime; stopTime
Application.Wait waitTime
Loop
End Sub
关于更改什么代码以阻止 Excel 崩溃的任何建议?
如果有机会“走过”午夜,不要独自依赖时间; 在开始和停止日期时间中包含日期。
Option Explicit
Dim waitTime As Date, stopTime As Date
Function startFlash(x As String)
Beep
stopTime = Now + TimeSerial(0, 2, 0)
'Debug.Print stopTime
Call sflash
MsgBox "done"
End Function
Sub sflash()
Do While waitTime <= stopTime
With Sheet1.Range("c8").Font
If .ColorIndex = 3 Then
.ColorIndex = 5
Else
.ColorIndex = 3
End If
End With
waitTime = Now + TimeSerial(0, 0, 5)
'Debug.Print Now; waitTime; stopTime
Do While Now < waitTime: DoEvents: Loop
Loop
End Sub
循环DoEvents 函数直到时间满足是更好的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.