我有一本excel工作簿。
在其中一个工作表中,我使用了Worksheet_calculate事件。这很好用。但是,当第一次打开工作簿时,我不希望调用MyFunction。最好的办法是什么?
到目前为止我唯一的想法是以下(虽然我不喜欢这样)。在工作簿上,open方法在其中一个工作表中放置了一个时间戳,然后在我的worksheet_calculate中有一个if语句,如果当前时间超过时间戳(在工作簿打开事件上创建)1分钟,则运行代码,否则不要#39;吨
认为必须有更好的方法吗?
Private Sub Worksheet_Calculate()
MyFunction()
End Sub
更新
我不希望我的代码在工作簿打开时执行的原因是因为有一些Bloomberg公式花了一点时间执行所以最初一些单元格值是#NA。
这会导致类型不匹配错误 - 记录发生的任何错误并自动发送电子邮件。因此,每次打开工作簿时都会出现“错误”错误。因为bloomberg公式没有立即更新
答案 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