我已经彻底搜查过,找不到这个具体问题。
我将首先描述一个工作案例,然后是非工作案例,我认为这将描述我想要解决的问题。
工作案例:包含公式的条件格式单元格:
1 - 我已定义名称“ccell”,表示“= ADDRESS(ROW(),COLUMN())”
2 - 我已定义名称“ccellval”,指的是“= INDIRECT(ccell)”
3 - 我已定义名称“_IsFormula”,指的是“= ISFORMULA(ccellvalue)”
4 - 我有一个使用公式“= _IsFormula”的条件格式,并在行级应用(例如应用于“1:10000”)
预期的行为是,无论何时我向单元格输入公式,该单元格都会更改格式 - 并且它可以完美地运行。
非工作案例:带有数据验证的条件格式单元格
1 - 我使用上面提到的现有定义名称“ccell”
2 - 如果一个单元格经过数据验证,我有一个UDF返回一个布尔值:
Public Function Validated (ThisCell As Range) As Boolean
Dim v: v = Null
On Error Resume Next
v = ThisCell.Validation.Type
On Error GoTo 0
Validated = Not IsNull(v)
End Function
我在单元格中测试了这个UDF,当单元格经过数据验证和#VALUE时,它提供结果为TRUE!当它不是。
3 - 我已定义名称“_IsValidated”,表示“= Validated(ccell)”
4 - 我有一个使用公式“= _IsValidated”的条件格式并在行级应用(例如应用于“1:10000”)
预期的行为是,无论何时我向单元格添加数据验证,该单元格都会更改格式 - 而且它不起作用。
我尝试了各种排列,例如将ccell嵌入到我的“Validated”UDF中,而不是嵌入到“_IsValidated”定义的名称中。
我想用这个来实现什么?我正在为用户编写模板,我希望将单元格作为视觉辅助。
任何指针/想法都会非常感激:)非常感谢!
答案 0 :(得分:0)
您的问题是对ADDRESS
和INDIRECT
返回的误解。
ADDRESS
返回包含单元格地址的String
。并且INDIRECT
不返回单元格值,而是返回单元格引用。这就是为什么您的名字ccellval
最好是ccellref
。
您的UDF
Public Function Validated (ThisCell As Range) As Boolean
需要ThisCell
作为Range
(作为对单元格的引用),但您正在移交ccell
{{1} }}
所以:
1 - 使用上面提到的现有定义名称“ccell”
String
2 - 已定义名称“ccellref”,表示“= INDIRECT(ccell)”
3 - 如果单元格经过数据验证,请让UDF返回布尔值。
4 - 已定义名称“_IsValidated”,表示“= Validated(ccellref)”
5 - 使用公式“= _IsValidated”
的条件格式