我的客户使用Excel 2010并且没有升级计划。 我为客户构建了一个相当复杂的电子表格,其中包括几个表和大量的VBA代码。表格中的某些列允许自动过滤,表格单元格的一些自定义公式会更改单元格的字体颜色。
我们发现清除自动过滤器和设置字体颜色的VBA代码之间存在冲突。具体来说,如果清除过滤器,则出现错误
-2147417848方法'颜色'对象'字体'失败
发生在VBA中,更重要的是,从任何选定单元格周围边界上的那一点开始不再显示,这使得表格难以使用。我们也看到了工作簿的腐败。即使忽略错误,也会出现选择边界问题。
我已经将大型电子表格剥离成一个非常简单的电子表格来说明。显然,这不是现实世界的代码,但确实存在同样的问题。
可以看出,单元格B2中的公式是" = changeColor(A2)"
" changeColor()"的代码是:
Public Function changeColor(t As String) As String
changeColor = t
If t = "Fred" Then
Application.Caller.Font.Color = vbBlue
Else
Application.Caller.Font.Color = vbRed
End If
End Function
这一切都完美无缺,直到添加自动过滤器然后将其移除。即:
单击“名称”列标题中的向下箭头,修改过滤器以排除" Sheila"。这按预期工作,第3行不再可见。
再次点击向下箭头"从名称"清除过滤器。现在可以看到该行但是用鼠标选择单元格不再显示这些单元格周围的边框(尽管它们实际上是选中的)。 VBA立即窗口确认"方法'颜色'对象'字体'失败"发生错误。
如果在清除自动过滤器时将计算设置为手动,则不会出现任何问题。如果" changeColor"被修改,以便Font.Color属性不被更改,然后没有看到任何问题。
有谁知道如何避免这种情况?它不会出现在Excel 2013中,因此可能是2010年的特色"。我应该使用不同的代码来设置颜色,还是有办法在清除过滤器时检测到代码正在运行?任何想法都将不胜感激。