读取FormatCondition属性的奇怪错误

时间:2018-11-26 03:00:25

标签: excel vba

我有一个FormatConditioncf1。我执行以下操作:

Dim WS As Worksheet
Dim fcs As FormatConditions
Dim cf1 As FormatCondition
Dim b1 As Border

Set WS = ActiveSheet
Set fcs = WS.Cells.FormatConditions
Set cf1 = fcs.item(1)
Set b1 = cf1.Borders.item(xlEdgeBottom)

Dim ls As XlLineStyle
ls = b1.LineStyle

如果我随后尝试在“即时”窗口中读取b1.LineStyle或将其分配给变量(按照上面的最后一行),则会得到

  

错误1004:“无法获取Border类的LineStyle属性”

(监视列表中的错误字符串相同,但没有错误编号)

b1.Weight我得到类似的东西

无论条件格式的边框上是否有一行(肯定不能正确),都会发生这种情况。如果确实没有该格式的线条样式,我会认为LineStyle应该是xlLineStyleNone,如果有线条样式,那么它肯定应该可读吗?

有人知道怎么回事吗,我该如何解决?

请注意:我已经查看了发现的边框,并且其他一些Border属性似乎正确(即Color=0ColorIndex-4142-4105 )。 ThemeColorTintAndShadeNull,而CreatorxlCreatorCode

我在 setting LineStyle和Weight中发现了一些有关问题的参考,这些人说工作表已被锁定。据我所知,情况并非如此。


添加: 尝试读取b1.ThemeColor时,有时也会出现其他错误。

  

“应用程序定义的错误或对象定义的错误”

在监视列表中,或

  

运行时错误5:'无效的过程调用或参数'

在立即窗口中阅读时。其他时候只是Null


进一步添加: 对于cf1.Interior.InvertIfNegative,我得到

  

“应用程序定义的错误或对象定义的错误”

在监视列表中,或

  

运行时错误1004:“应用程序定义或对象定义的错误”

当尝试在立即窗口中阅读时。

也许我还没有找到其他人。

1 个答案:

答案 0 :(得分:2)

实际上,我可以复制您描述的问题。

问题似乎出在Set b1 = cf1.Borders.item(xlEdgeBottom)中,根据文档FormatCondition.Borders property,这是正确的。

但是似乎存在一个错误,因为xlEdgeBottom的值为9(根据xlBordersIndex enumeration),并且如果我们研究cf1.Borders的调试,我们看到只有项目1…4(见图片),其中4似乎是底部边框。

enter image description here

如果没有其他人在这里有一个很好的主意,我会说这看起来像一个Excel错误。

要解决此问题,您可以使用例如Set b1 = cf1.Borders.item(4)作为底部边框。


解决方案是……

Set b1 = cf1.Borders.item(xlBottom)实际上为我工作。

很明显,FormatCondition.Borders没有使用正确的xlBordersIndex enumeration,而是使用了xlTopxlLeftxlBottom,{{1} }。

另请参阅FormatConditions border on a single edge

但这仍然与文档不符,必须是一个错误。