簡體   English   中英

需要VB使Excel能夠實時和在后台計算工作表或范圍

[英]Need VB to make Excel calculate a sheet or range in realtime and in the background

如何使excel連續實時計算工作表/范圍(不是1 calc / sec)並在后台進行?

我希望這個公制時鍾像秒表一樣運行....

=IF(LEN(ROUND((HOUR(NOW())*(100/24)),0))=1,"0"&ROUND((HOUR(NOW())*(100/24)),0),ROUND((HOUR(NOW())*(100/24)),0))&":"&IF(LEN(ROUND((MINUTE(NOW())*(100/60)),0))=1,"0"&ROUND((MINUTE(NOW())*(100/60)),0),ROUND((MINUTE(NOW())*(100/60)),0))&":"&IF(LEN(ROUND((SECOND(NOW())*(100/60)),0))=1,"0"&ROUND((SECOND(NOW())*(100/60)),0),ROUND((SECOND(NOW())*(100/60)),0))

我認為這可能會失敗你的“(不是1計算/秒)”標准,但我實現了類似的如下。 假設您的公式位於名為Sheet1的工作表的單元格A1中。

在ThisWorkbook代碼模塊中:

Private Sub Workbook_Open()
    Application.OnTime Now + TimeValue("00:00:01"), "RecalculateRange"
End Sub

...並在常規代碼模塊中:

Public Sub RecalculateRange()
    Sheet1.Range("A1").Calculate
    Application.OnTime Now + TimeValue("00:00:01"), "RecalculateRange"
End Sub

我已經使用以下方法來產生您正在尋找的效果:

Option Explicit

Public TimerRunning As Boolean
Dim CalculationDelay As Integer

Public Sub StartStop_Click()
    If (TimerRunning) Then
        TimerRunning = False
    Else
        TimerRunning = True
        TimerLoop
    End If
End Sub

Private Sub TimerLoop()
    Do While TimerRunning
        '// tweak this value to change how often the calculation is performed '
        If (CalculationDelay > 500) Then
            CalculationDelay = 0
            Application.Calculate
        Else
            CalculationDelay = CalculationDelay + 1
        End If
        DoEvents
    Loop
End Sub

StartStop_Click是我綁定到秒表的開始/停止按鈕的宏。 您可以獲得幻想,並根據TimerRunning的值將其名稱更改為“Start”或“Stop”,但我保持簡單以說明概念。

這里的兩個關鍵事項是:

Application.Calculate

這迫使Excel計算工作表,並且:

DoEvents

這允許VBA在后台運行(即Excel不會停止響應用戶輸入)。 這使得即使計時器正在運行,您仍然可以按下“停止”按鈕。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM