如果我从Excel FormatCondition中读取了边框的ThemeColor,它将给我一个错误
“应用程序定义的错误或对象定义的错误”
在监视列表中,或
运行时错误5:“无效的过程调用或参数”
在立即窗口中阅读时。有时它只是Null。当设置了有效边界时,似乎会出现该错误。
从https://docs.microsoft.com/en-us/office/vba/api/excel.border.themecolor中我得到以下内容
尝试访问其颜色不是该颜色的对象的主题颜色 当前为主题将导致无效的请求运行时错误。
我正在检查的其他对象也有类似的问题,例如.Interior.ThemeColor
。
如何确定某个对象是否为主题-是否有官方的方法?我是否可以使用存在错误的事实来推断出该错误不是主题,还是可以由于其他原因而出现错误?
一些示例代码:
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 tc As Variant
tc = b1.ThemeColor 'error
tc = cf1.Interior.ThemeColor 'error
要重现,请使用条件格式规则创建Excel工作表。我使用的规则使用公式,例如= NOT(ISNUMBER(C9)),并在单元格的底部加上单元格填充颜色,有时还加边框,并覆盖了一系列单元格,例如$ C $ 8:$ C $ 39
答案 0 :(得分:0)
此不直接回答单元格是否为主题,而是直接在上下文中处理 Run-time error '5': Invalid procedure call or argument 以解决潜在的以典型的 error handling in VBA 方式呈现主题对象。所以而不是仅仅
something.ThemeColor ' access any theme-property
你可以在你的 Sub 中遵循这个基本结构
Sub ThemeTest()
Dim isThemed As Boolean: isThemed = True
On Error GoTo notThemedError
something.ThemeColor ' access any theme-property; jumps to notThemedError on error
On Error GoTo 0 ' reset error handling to normal
If isThemed Then do_something Else do_other
... more code
Exit Sub
notThemedError:
' Optionally re-raise the error if it's not Error 5
If Not Err.Number = 5 Then Err.Raise Err.Number, Err.Source, Err.Description
isThemed = False
Resume Next ' go on after where the error was raised
End Sub