对于每秒运行一次的宏,光标不断闪烁

时间:2015-08-19 04:24:35

标签: excel-vba vba excel

这是每秒更新一次单元格值的代码。

Sub showtimer()
If CStr(ThisWorkbook.Worksheets("Convergence_Plot").Cells(1, 3).Value) = "0" Then
    Call startpostprocess
    Exit Sub
End If
    ThisWorkbook.Worksheets("Convergence_Plot").Cells(1, 3).Value = ThisWorkbook.Worksheets("Convergence_Plot").Cells(1, 3).Value - TimeSerial(0, 0, 1)
    timetimer = Now + TimeValue("00:00:01")
    Application.OnTime timetimer, "showtimer", , True
End Sub

光标持续闪烁/显示蓝色处理光标。 如何避免?

1 个答案:

答案 0 :(得分:1)

:将

Application.Cursor = xlDefault

作为你的潜艇的第一行。至少这可以在您执行以下操作时起作用:

Sub test()
Dim i As Long
Application.Cursor = xlDefault
For i = 1 To 100000
    Debug.Print i 'to chew up time
Next i
MsgBox "Done!"
End Sub

当从Excel中的开发人员选项卡启动时,即使游标正在运行,它也会显示正常。我没有测试它每秒启动子设置(这可能会导致一些闪烁)。

On Edit:我测试了每秒调用sub的情况,看到仍有闪烁。问题是对Application.Cursor的更改不会持续超过函数调用。所以在你的情况下,你没有看到蓝色处理光标(至少我没有看到它),但你看到光标每秒重置,这同样令人讨厌。

这是一个潜在的解决方法。您的代码似乎是单元格C1中的倒计时。当倒计时达到0时,启动子startpostprocess。大概是你按照你的方式(每秒调用showtimer)来做到这一点,因为你希望Excel在倒计时期间可用。实现这一目标的一种方法是在倒计时期间连续运行Countdown子程序(因此它对光标的更改不会超出范围)并使用DoEvents来保持Excel响应:

Sub Countdown(n As Long)
    Application.Cursor = xlDefault
    Dim start As Double

    Do While n >= 0
        ThisWorkbook.Worksheets("Convergence_Plot").Cells(1, 3).Value = n
        start = Timer()
        Do While Timer < start + 1
            DoEvents
        Loop
        n = n - 1
    Loop
    startpostprocess
End Sub

Sub StartCountDown()
    Countdown ThisWorkbook.Worksheets("Convergence_Plot").Cells(1, 3).Value
End Sub

我将单元格C1中的时间值更改为一个简单的整数计数器。当我在C1中放入10并调用StartCountDown时,单元格以1秒为增量变为10,9,8,...,1,0,然后startpostprocess(我为它创建了一个存根,只是弹出一个msgbox)启动。倒计时期间可以编辑单元格。