Excel 2016有条件格式化数据validation的单元格

我已经彻底search,找不到这个具体的问题。

我将首先描述一个工作案例,然后是一个非工作案例,我想这将描述我正在努力解决的问题。

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

1 – 我定义了名称“ccell”,它是指“= ADDRESS(ROW(),COLUMN())”

  • 它返回当前单元格的地址

2 – 我已经定义名称“ccellval”,它是指“= INDIRECT(ccell)”

  • 它返回当前单元格的值

3 – 我已经定义了名称“_IsFormula”,它是指“= ISFORMULA(ccellvalue)”

  • 它返回一个布尔标志,表示当前单元格包含一个公式

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

预期的行为是,任何时候我input一个单元格的公式,该单元格改变格式 – 它完美的作品。

非工作案例:使用数据validation条件格式化单元格

1 – 我使用上面提到的现有的定义名称“ccell”

  • 它返回当前单元格的地址

2 – 如果单元格是数据validation的,我有一个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 

我已经testing了这个UDF in-cell,并且在数据validation和#VALUE时提供了TRUE结果! 当它不是。

3 – 我定义了名为“_IsValidated”的引用“= Validated(ccell)”

  • 我打算把这个UDF应用到当前cell = ccell

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

预期的行为是,任何时候我将数据validation添加到单元格,该单元格更改格式 – 它不起作用。

我已经尝试了各种排列,比如将ccellembedded到“已validation”的UDF中,而不是“_IsValidated”定义的名称中。

我想用这个做什么? 我正在为用户编写模板,而且我希望将单元格作为视觉辅助工具着色。

任何指针/想法将受到感谢:)非常感谢!

你的问题是ADDRESSINDIRECT返回的误解。 ADDRESS返回一个包含单元格地址的String 。 而INDIRECT不会返回一个单元格值,而是一个单元格引用。 这就是为什么你的名字ccellval最好是ccellref

您的UDF Public Function Validated (ThisCell As Range) As Boolean需要ThisCell作为Range (作为一个单元格的引用),但你交出ccell这是一个String

所以:

1 – 使用上面提到的现有的定义名称“ccell”

  • 它返回当前单元格的地址作为一个String

2 – 已定义名称“ccellref”,其引用“= INDIRECT(ccell)”

  • 它返回当前单元格的引用

3 – 如果单元格是数据validation的,让您的UDF返回布尔值。

4 – 定义了名称为“_IsValidated”的引用“= Validated(ccellref)”

5 – 具有使用公式“= _IsValidated”的条件格式