2009-05-15 25 views
1

シート/レンジをリアルタイムで(1cal/secではなく)連続的に計算してバックグラウンドで実行するにはどうすればよいですか?Excelでシートや範囲をリアルタイムで計算してバックグラウンドで計算するにはVBが必要です

私は基準 "(ない1つのCALC /秒)" 私は、これはあなたを失敗するかもしれないと思う

=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))

答えて

2

私はあなたが探している効果を生成するために、以下を使用しました:

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」に名前を変えることができますが、概念を簡単に説明できます。 (つまり、Excelが応答を停止しません

VBAがバックグラウンドで実行することができます
DoEvents 

ワークシートを計算するために、Excelを強制
Application.Calculate 

、および:ここ

二つの重要な事がありますユーザー入力に)。これは、タイマーが動作していても「停止」ボタンを押し続けることを可能にするものです。

+0

これは私が探していたものでした...ありがと... 1秒以内に再計算することは可能ですか? 10回/秒のように?何とかnow()関数をトリックすることによって? 10分の1秒ごとにオフセットされたいくつかの別々の "今"の変数を初期化するか? – CheeseConQueso

+0

また、時計が実行されている間にセルに入力すると、A1の出力が一時停止して、マクロ(StartStop_Click)が停止することはありません。 – CheeseConQueso

+0

Re Comment#1:HH:MM:SS:MSSのようにタイマーの解像度をもっと見たいですか? NOW()関数は、システムクロック(通常は約10ミリ秒)と同じ解像度にする必要がありますが、更新時間はDoEventsへの呼び出しの間にExcelがどれだけ必要とするかによって異なります。 –

2

....このメトリッククロックがストップウォッチのように実行したいが、私次のようなものが得られました。式が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 
関連する問題