【发布时间】:2017-06-14 15:58:06
【问题描述】:
上下文:
Excel 2003、Windows 7 专业版 SP1
- 处理包含自定义函数的工作簿 A。
- 工作簿 B 已打开或编辑
-
返回工作簿 A,
Workbook_Activatesub 如下:Private Sub Workbook_Activate ActiveSheet.Calculate End Sub 此过程应强制计算工作簿 A 的自定义函数,在工作簿 B 的编辑期间,这些单元格显示
#VALUE。
以下是我电脑上的bug,希望大家帮帮我!
- 当工作簿(不是整个 Excel 窗口)不在状态
ActiveWindow.WindowState = xlNormal时(即全屏或最小化)
或:
- 当工作簿处于状态
ActiveWindow.WindowState = xlNormal并且工作簿的宽度 > 725 像素 (!)
那么:
- 函数
Workbook_Activate一直被触发(好事)。 -
ActiveSheet.Calculate函数未触发(或无效)。 - 断点不会停止代码。
- 您无法运行任何编辑单元格的代码或运行
Application.CalculateFull,否则会出现显示错误,例如在选择范围之前文本或边框消失的整个范围。
问题解决:
在过程Workbook_Activate中,如果我们在ActiveSheet.Calculate之前添加ActiveWindow.WindowState = xlNormal:
当工作簿不在状态 ActiveWindow.WindowState = xlNormal 并且 Excel 窗口最大化时
- 仅在这种情况下,错误仍然存在。这是唯一没有触发函数 ActiveSheet.Calculate 的情况。
ActiveWindowmethods 也不会触发。
Obs.: Application.EnableEvents = False 不会改变任何东西。 (它可能甚至没有被触发。)
谢谢!
【问题讨论】:
-
ActiveSheet可能不是你想的那样。也许在运行Calculate方法之前尝试Activate您想要的工作表,或者至少使用MsgBox ActiveSheet.Name之类的东西对其进行调试,这样您就可以确定哪个工作表当前处于活动状态。由于这种潜在的混淆,许多人建议不要使用ActiveSheet,而是直接指定工作表。 -
ActiveSheet 是正确的,我已经检查过了。实际上,一切正常(debug.print、msgbox...),除了 .Calculate 或 .CalculateFull 方法没有正确触发。