繁体   English   中英

VBA UDF 函数导致excel“不响应”

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM