Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何触发VBA工作簿\u SheetCalculate事件?_Vba_Excel - Fatal编程技术网

如何触发VBA工作簿\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 ''

我尝试了Workbook\u SheetCalculate事件并试图触发它,但它不起作用,尽管我重新计算了工作表


如何触发此事件?

以下是一个示例,在事件工作表中有以下代码:

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