不要在工作簿打开时执行工作表计算事件

我有一个Excel工作簿。

在其中一个工作表中,我使用了Worksheet_calculate事件。 这工作正常。 但是,首次打开工作簿时,我不希望调用MyFunction。 什么是最好的做的呢?

我到目前为止唯一的想法是以下(我不喜欢这个虽然)。 在工作簿打开方法中在其中一个工作表中放置一个时间戳,然后在我的worksheet_calculate中有一个if语句,如果当前时间比时间戳(在工作簿打开事件上创build的时间戳)多1分钟,则运行代码,否则, “T。

想尽一切办法?

Private Sub Worksheet_Calculate() MyFunction() End Sub 

更新

我不希望我的代码在工作簿打开时执行的原因是因为有一些彭博公式需要一些时间来执行,所以最初的一些单元格值是#NA。

这会导致types不匹配错误 – logging发生的任何错误,并自动发送电子邮件。 所以每次打开工作簿都会有一个“错误”,因为彭博社公式没有马上更新

下面的代码应该适合你。 第一次计算被称为它设置标志,以允许未来的呼叫处理。 这意味着第一个计算调用不会处理您的代码。

ThisWorkbook代码:

 Private Sub Workbook_Open() bFunctionFlag = False End Sub 

表单代码:

 Public bFunctionFlag As Boolean Private Sub Worksheet_Calculate() If bFunctionFlag = True Then Call MyFunction bFunctionFlag = True End Sub Private Function MyFunction() MsgBox "Calculate" End Function 

在工作簿公开活动,你可以有

 Private Sub Workbook_Open() Application.EnableEvents = False 'Run Workbook Open code Application.EnableEvents = True End Sub 

或者如果你需要从外部服务运行事件,那么用公共variables做类似的事情。 例如Dim wbOpenEventEnded as Boolean