使用条件格式在工作表上打开Excel 2010文件时,Workbook_open()将不会执行

我有一个名为travels.xlsm的工作簿。

ThisWorkbook我有这个代码:

Private Sub Workbook_Open() MsgBox "hello" Application.Calculation = xlManual ActiveWorkbook.RefreshAll 'refresh the querytables without recalculating Application.Calculation = xlAutomatic End Sub 

而这个代码在UDFs模块中:

 Function hasHyperlink(rng As Range) As Boolean hasHyperlink = rng.Hyperlinks.Count End Function 

当活动工作表包含使用我的用户定义函数的条件格式时打开文件时, Workbook_open()子将不会执行。

当活动工作表在条件格式化中不使用此function时,closures工作簿时,请保存并再次打开 – 按预期方式执行。 这有点奇怪

我不想在closures工作簿之前closures特定工作表上的工作簿或调用Workbook_BeforeClose()子来激活该“安全”工作表。

任何人有解决scheme的想法? 这是在Excel中的错误?

对于类似的讨论请参阅: Excel工作簿打开事件macros并不总是运行

我认为最好的答案是下面的答案之一出现在对其中一个答案的评论:

我想出了一个解决scheme,考虑类似链接的答案。 工作簿中的一个私有布尔variables用于确定是否触发了workbook_open事件。 如果不是,我将处理程序添加到workbook_activate和workbook_sheet_change,如果未设置该variables,则重新运行workbook_open事件。 – DrMarbuse

如果可行,更简单的方法是将代码移至Workbook_Activate事件。 过去,我遇到过Workbook_Open没有解雇的问题(我想我没有想到为什么解决不了)。