vba - 在具有条件格式的工作表上打开 Excel 2010 文件时,Workbook_open() 将不会执行

标签 vba excel

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

ThisWorkbook中,我有以下代码:

Private Sub Workbook_Open()
    MsgBox "hello"
    Application.Calculation = xlManual

    ActiveWorkbook.RefreshAll   'refresh the querytables without recalculating

    Application.Calculation = xlAutomatic
End Sub

以及 UDF 模块中的代码:

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

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

当我关闭工作簿时,事件工作表在条件格式中未使用此功能,保存并再次打开 - 它会按预期执行。 这有点奇怪。

我不想关闭特定工作表上的工作簿,也不想在关闭工作簿之前调用 Workbook_BeforeClose() 子函数来激活该“安全”工作表。

有人有解决方案吗?这是 Excel 中的错误吗?

最佳答案

有关类似的讨论,请参阅:Excel Workbook Open Event macro doesn't always run

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

I came up with a solution considering an answer to a similar link. A private boolean variable in the workbook is used to determine if the workbook_open event was fired. If not the I added handlers to workbook_activate and to workbook_sheet_change and rerun the workbook_open event if the variable was not set. – DrMarbuse

更简单的是,如果可行,只需将代码移至 Workbook_Activate 事件即可。过去,当我遇到 Workbook_Open 未触发的问题时,我就这样做过(我想我从来没有弄清楚为什么它没有触发)。

关于vba - 在具有条件格式的工作表上打开 Excel 2010 文件时,Workbook_open() 将不会执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33592783/

相关文章:

vba - 将 now() 转换为 MS Access VBA 中的特定格式

VBA Microsoft Outlook 邮件处理 - 添加另一个案例

vba - 使用 VBA 循环遍历工作簿切片器名称

excel - 公式数组问题

excel - 在 API GetSystemTime 中使用经过的毫秒数进行性能测试

SQLite在where子句中的前一个选择值

excel - 如何在自定义数字格式Excel中使用多个条件运算符?

excel - 使用标题名称的自动过滤字段

excel vba 脚本不会执行预期的 msgbox?

excel - 如何根据条件自定义图标