这实际上是this previous topic的改进。
上下文
Excel 2003,Windows 7 Professional SP1。
问题:
如果工作簿B的窗口与工作簿A重叠,则条件格式会导致各种错误。换句话说,在某些时候,工作簿A落后于工作簿B.
根据窗口状态(Excel是否全屏显示,无论是ActiveWindow.WindowState = xlNormal
还是xlMaximized
,窗口是宽还是宽......),错误可能是:
主要是:调用引用定义名称的个人(易失性)函数的单元格在切换回工作簿A时不会计算。这是一个很大的问题,因为我需要使用Ctrl + Alt + F9强制计算。
经常会出现显示错误,特别是当工作簿A和B相互浮动时,相互重叠。当试图移动其中一个工作簿时,单元格内容消失,出现条件格式的单元格的幽灵单元格,屏幕冻结,窗口边框轨迹(W98样式)...
在工作簿A的Workbook_Activate
中,断点不会停止代码(尽管debug.print
和MsgBox
工作)并且您无法使用Application
或ActiveWindow
方法。 Application.CalculateFull
有时会导致所有单元格的内容消失,直到被选中(例如,使用Ctrl + A)。
如何解决或避免这个问题?
如果对任何人都有兴趣,我将在下面给自己回答!
答案 0 :(得分:1)
解决方案1: 只是不要使用引用条件格式公式中定义的单元格名称的个人函数。 此解决方案可以解决所有问题,但当 具有复杂的条件格式时,这是不可接受的。
解决方案2:
Bug sample
Bug sample (solved)
=MyFunctionWithCellNames($A1)
=IF(CondFormat,MyFunctionWithCellNames($A1))
Private Sub Workbook_Activate()
[CondFormat] = True
End Sub
Private Sub Workbook_Deactivate()
ThisWorkbook.Names("CondFormat").RefersToRange = False
End Sub
注1:有时,离开工作簿时切换[CondFormat]。 ThisWorkbook.Names
语法使其始终有效。
注2:我们必须使用其中一个单元格作为布尔CondFormat,因为只有宏才能访问VBA全局变量。
注3:我花了很多时间搞清楚这一点,我希望它对其他人有用。我认为条件格式的大多数问题只能在Excel 2003中以这种方式解决,因为Sheet.EnableFormatConditionsCalculation
方法只出现在Excel 2007中。