如何触发VBA工作簿\u SheetCalculate事件?
我尝试了Workbook\u SheetCalculate事件并试图触发它,但它不起作用,尽管我重新计算了工作表如何触发VBA工作簿\u SheetCalculate事件?,vba,excel,Vba,Excel,我尝试了Workbook\u SheetCalculate事件并试图触发它,但它不起作用,尽管我重新计算了工作表 如何触发此事件?以下是一个示例,在事件工作表中有以下代码: Private Sub Worksheet_Calculate() MsgBox "Calculating" End Sub 然后在工作表的任何单元格中输入=RAND() 公式会导致重新计算并触发事件 或从标准模块使用以下各项: Public Sub Test() 'Application.Calculate ''
如何触发此事件?以下是一个示例,在事件工作表中有以下代码:
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通常只计算可能的最小单元格数
Excel的智能重新计算引擎通常会最小化计算
通过跟踪更改和仅重新计算来计算时间
- 已更改或标记为需要重新计算的单元格、公式、值或名称
- 依赖于需要重新计算的其他单元格、公式、名称或值的单元格
因此,如果工作表中只有常量,即使您发出了工作表。计算msgbox也不会出现。您可以通过从工作表中删除
=RAND()
并仅将1
放入单元格来测试这一点。以下是一个示例,在该事件的工作表中有以下代码:
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通常只计算可能的最小单元格数
Excel的智能重新计算引擎通常会最小化计算
通过跟踪更改和仅重新计算来计算时间
- 已更改或标记为需要重新计算的单元格、公式、值或名称
- 依赖于需要重新计算的其他单元格、公式、名称或值的单元格
因此,如果工作表中只有常量,即使您发出了工作表。计算msgbox也不会出现。您可以通过从工作表中删除
=RAND()
,然后将1
放入单元格来测试这一点。如果我有两个工作表,每个工作表都有一个非易失性公式,并且在工作簿模块中:
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
Debug.Print Sh.Name
End Sub
我在通话中看到两张纸的名字:
Application.CalculateFull
或:
但没有以下输出:
Application.Calculate
如果我在其中一张表中添加了一个易失性公式,那么我在调用Application.Calculate
时就会得到该表
如果您仍有问题,则需要发布更多详细信息,包括事件代码和工作表上的公式类型。如果我有两张工作表,每张工作表都有一个非易失性公式,并且在工作簿模块中:
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
Debug.Print Sh.Name
End Sub
我在通话中看到两张纸的名字:
Application.CalculateFull
或:
但没有以下输出:
Application.Calculate
如果我在其中一张表中添加了一个易失性公式,那么我在调用Application.Calculate
时就会得到该表
如果您仍有问题,则需要发布更多详细信息,包括事件代码和工作表上的公式类型。其他工作簿事件是否正常工作?我认为你最好使用sheet_Recreacte如果你想计算所有内容,那么就使用
Application.CalculateFull
甚至Application.CalculateFullRebuild
@TSion.D.P,VBA中没有名为:(sheet_Recreacte)的事件,其他事件都能正常工作@TimWilliams,我需要的是每次重新计算工作表时触发包含一些命令的事件:(工作簿\u SheetCalculate)@Haythamairah你抬头看了吗?根据MSDN,在工作簿中重新计算(工作)工作表时应触发事件。您可能有Application.EnableEvents=False
?其他工作簿事件是否正常工作?我认为你最好使用sheet_Recreacte如果你想计算所有内容,那么就使用Application.CalculateFull
甚至Application.CalculateFullRebuild
@TSion.D.P,VBA中没有名为:(sheet_Recreacte)的事件,其他事件都能正常工作@TimWilliams,我需要的是每次重新计算工作表时触发包含一些命令的事件:(工作簿\u SheetCalculate)@Haythamairah你抬头看了吗?根据MSDN,在工作簿中重新计算(工作)工作表时应触发事件。可能您有Application.EnableEvents=False
?