我有一些非常简单的代码导致Excel崩溃。
我已经调试了代码中可以看到的变量,它们看起来很好,只是在几秒钟后,Now()不会改变而且waitTime不会改变 - 尽管时间彼此不同,即时间有没有向前移动(例如,现在可能会在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崩溃的任何建议?
答案 0 :(得分:1)
如果有任何机会走过去,不要单独依赖时间。午夜;包括开始日期和停止日期时间。
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 Function直到你的时间相遇是一种更好的方法。