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