Excel 2016条件格式单元格经过数据验证

时间:2017-05-05 15:51:52

标签: excel vba excel-vba conditional-formatting

我已经彻底搜查过,找不到这个具体问题。

我将首先描述一个工作案例,然后是非工作案例,我认为这将描述我想要解决的问题。

工作案例:包含公式的条件格式单元格:

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)”

  • 我打算将我的UDF应用到当前的cell = ccell

4 - 我有一个使用公式“= _IsValidated”的条件格式并在行级应用(例如应用于“1:10000”)

预期的行为是,无论何时我向单元格添加数据验证,该单元格都会更改格式 - 而且它不起作用。

我尝试了各种排列,例如将ccell嵌入到我的“Validated”UDF中,而不是嵌入到“_IsValidated”定义的名称中。

我想用这个来实现什么?我正在为用户编写模板,我希望将单元格作为视觉辅助。

任何指针/想法都会非常感激:)非常感谢!

1 个答案:

答案 0 :(得分:0)

您的问题是对ADDRESSINDIRECT返回的误解。 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”

的条件格式