Vba Excel 2003-使用条件格式显示错误
这实际上是一种改进 上下文:Vba Excel 2003-使用条件格式显示错误,vba,excel,Vba,Excel,这实际上是一种改进 上下文: Excel2003,Windows7专业版SP1 处理工作簿A,其中包含调用个人函数的条件格式单元格。此函数引用工作簿a的定义名称 工作簿B已打开或编辑(不仅已激活)。它可以是任何工作簿 我们激活后工作簿A 问题: 如果工作簿B的窗口与工作簿A的窗口重叠,条件格式会导致各种错误。换句话说,当某个时刻工作簿A落后于工作簿B时 根据窗口状态(Excel是否全屏显示,ActiveWindow.WindowsState=xlNormal或xlMaximized,窗口是窄
Excel2003,Windows7专业版SP1
- 处理工作簿A,其中包含调用个人函数的条件格式单元格。此函数引用工作簿a的定义名称
- 工作簿B已打开或编辑(不仅已激活)。它可以是任何工作簿
- 我们激活后工作簿A
如果工作簿B的窗口与工作簿A的窗口重叠,条件格式会导致各种错误。换句话说,当某个时刻工作簿A落后于工作簿B时 根据窗口状态(Excel是否全屏显示,ActiveWindow.WindowsState=xlNormal或
xlMaximized
,窗口是窄还是宽…),漏洞可能是:
- 主要是:当切换回工作簿A时,调用引用已定义名称的个人(volatile)函数的单元格不会计算。这是一个很大的问题,因为我需要使用Ctrl+Alt+F9强制计算
- 显示错误经常发生,特别是当工作簿A和B相邻浮动、相互重叠时。单元格内容消失,具有条件格式的单元格出现重影,屏幕冻结,当尝试在其中一个工作簿周围移动时,将显示窗口边框轨迹(W98样式)
- 在工作簿A的
中,断点不会停止代码(尽管Workbook\u Activate
和debug.print
工作),并且不能使用MsgBox
或Application
方法ActiveWindow
有时会导致所有单元格的内容消失,直到选中为止(例如,使用Ctrl+A)Application.CalculateFull
我将在下面回答我自己,如果它对任何人都有兴趣的话 解决方案1: 只是不要在条件格式公式中使用引用已定义单元格名称的个人函数。 此解决方案解决了所有问题,但当您必须使用复杂的条件格式时,它是不可接受的 解决方案2:
这将是在条件格式公式中驱动调用个人函数的布尔值
=MyFunctionWithCellNames($A1)
变成:
=IF(CondFormat,MyFunctionWithCellNames($A1))
Private子工作簿_Activate()
[CondFormat]=真
末端接头
专用子工作簿_Deactivate()
ThisWorkbook.Names(“CondFormat”).ReferStorRange=False
末端接头
thiswoolk.Names
语法使其始终有效
注2:我们必须将其中一个单元格用于boolean CondFormat,因为只有宏才能访问VBA全局变量
注3:我花了很多时间来弄清楚这一点,我希望它对其他人有用。我认为大多数条件格式的问题只能在Excel 2003中以这种方式解决,因为只有在Excel 2007中才出现了
Sheet.enableFormatConditionScalCalculation
方法。而不是使用Windows状态,您可以使用工作簿.activate将工作簿A放在前面