如何触发VBA Workbook_SheetCalculate事件?

时间:2017-12-10 15:26:49

标签: excel vba excel-vba

我尝试了Workbook_SheetCalculate事件并试图触发它,但它没有用,虽然我重新计算了工作表!

如何触发此事件?

2 个答案:

答案 0 :(得分:2)

这里有一个例子,在事件的工作表中有以下代码:

Private Sub Worksheet_Calculate()
 MsgBox "Calculating"
End Sub

然后在工作表中的任何单元格中输入=RAND()

该公式会导致重新计算并触发事件。

或者从标准模块使用以下内容:

Public Sub Test()

'Application.Calculate   ''could use this event for the workbook

With Worksheets("Sheet5") 'sheet containing the event code

    .Calculate

End With

End Sub

关键似乎是工作表中有一些东西要计算,例如=RAND()

我记得另一篇文章,在某个时候,链接到以下Excel’s Smart Recalculation Engine

快速摘录说:

  

Excel通常只计算可能的最小单元格数。

     

Excel的智能重新计算引擎通常可以最大限度地减少计算   时间跟踪变化并仅重新计算

     
      
  • 已更改或标记为需要重新计算的单元格,公式,值或名称。
  •   
  • 细胞依赖于需要重新计算的其他细胞,公式,名称或值。
  •   

因此,如果您在工作表中只有常量,即使您发出了Worksheet.Calculate,也不会出现msgbox。您可以通过从工作表中删除=RAND()并将1放入单元格来对此进行测试。

答案 1 :(得分:1)

如果我有两张表,每张都有一个非易失性公式,并且这在工作簿模块中:

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
    Debug.Print Sh.Name
End Sub

我在调用时看到两个工作表名称:

Application.CalculateFull

或:

Application.CalculateFullRebuild

但没有输出:

Application.Calculate

如果我在其中一张纸上添加挥发性配方,那么在致电Application.Calculate时我会收到该表。

如果您仍然遇到问题,则需要发布一些详细信息,包括您的活动代码以及您在工作表上的公式类型。