2015-08-19 64 views
0

這是每秒更新一次單元值的代碼。光標持續閃爍,每秒運行一次宏

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

:將

Application.Cursor = xlDefault 

正如你分的第一行。至少,這工作,當你做這樣的事情:當這是從開發者的標籤在Excel中推出的光標看起來即使它運行正常

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 

。我沒有用你每秒啓動子系統的設置進行測試(這可能會導致閃爍)。

關於編輯:我測試了每秒調用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)啓動。在倒計時期間可以編輯單元格。

+0

光標仍然閃爍。在這背後是否正在改變細胞的價值? – Kartiki

+0

@Kartiki我看到了問題。希望在編輯中的解決方法可以工作。 –