VBA UDFfunction导致excel“不响应”

我有一些非常简单的代码导致Excel崩溃。

我已经debugging了代码中可以看到的variables,它们看起来很好,除了几秒之后,Now()不会改变,waitTime也不会改变 – 虽然时间不同,即时间没有前移(例如,现在可能卡在3:00:05,waitTime卡在3:00:09)。

而application.wait不会等待我要求的5秒钟。

单元格的字体颜色也不会改变。

我不知道如何进一步debugging。

在工作表“sheet1”中,我有以下单元格条目 – 在C8中我有一个手动更改的数字。 在D8我有

=if(C8>25,"yup",startFlash(C8)) 

这工作正常。 它调用没有问题的function。 这里是macros代码:

 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 

任何build议什么代码来改变停止Excel崩溃?

如果有机会“午夜走路”,不要单独依靠时间; 在开始date和停止date时间中包含date。

 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函数,直到你的时间满足是一个更好的方法。