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

时间:2015-07-20 13:31:59

标签: excel vba excel-vba

我有一本excel工作簿。

在其中一个工作表中,我使用了Worksheet_calculate事件。这很好用。但是,当第一次打开工作簿时,我不希望调用MyFunction。最好的办法是什么?

到目前为止我唯一的想法是以下(虽然我不喜欢这样)。在工作簿上,open方法在其中一个工作表中放置了一个时间戳,然后在我的worksheet_calculate中有一个if语句,如果当前时间超过时间戳(在工作簿打开事件上创建)1分钟,则运行代码,否则不要#39;吨

认为必须有更好的方法吗?

Private Sub Worksheet_Calculate()
    MyFunction()
End Sub

更新

我不希望我的代码在工作簿打开时执行的原因是因为有一些Bloomberg公式花了一点时间执行所以最初一些单元格值是#NA。

这会导致类型不匹配错误 - 记录发生的任何错误并自动发送电子邮件。因此,每次打开工作簿时都会出现“错误”错误。因为bloomberg公式没有立即更新

2 个答案:

答案 0 :(得分:1)

以下代码应该适合您。 第一次调用calculate时,它会设置标志以允许将来调用进行处理。这意味着第一次计算调用不会处理您的代码。

ThisWorkbook Code:

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

答案 1 :(得分:0)

在工作簿公开活动中,您可以

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

或者如果您需要从外部服务运行事件,那么使用公共变量执行类似操作。例如Dim wbOpenEventEnded as Boolean