需要VB来使Excel在实时和后台计算表单或范围

我怎样才能让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))

我用以下来产生你正在寻找的效果:

 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是我连接到秒表的开始/停止button的macros。 您可以看中它,并根据TimerRunning的值将其名称更改为“开始”或“停止”,但我保持简单来说明这个概念。

这里的两个关键是:

 Application.Calculate 

这强制Excel计算工作表,并且:

 DoEvents 

这允许VBA在后台运行(即,Excel不会停止响应用户input)。 即使计时器正在运行,也可以按“停止”button。

我认为这可能会使你的“(不是1 calc / sec)”标准失败,但是我得到了类似如下的结果。 假定您的公式位于名为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