Ячейки условного формата Excel 2016 с проверкой данных
Я тщательно искал и не могу найти эту конкретную проблему.
Сначала я опишу рабочий случай, за которым следует нерабочий случай, и я думаю, что он опишет проблему, которую я пытаюсь решить.
Рабочий случай: Ячейки условного формата, содержащие формулу:
1 - У меня есть определенное имя "ccell", которое относится к "= АДРЕС (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 в ячейке, и он выдает результат ИСТИНА, когда ячейка проверена на данные и # ЗНАЧЕНА! когда это не так.
3 - Я определил имя "_IsValidated", которое ссылается на "=Validated(ccell)"
- Я намерен это применить мой UDF к текущей ячейке = ccell
4 - У меня есть условный формат, который использует формулу "=_IsValidated" и применяется на уровне строк (например, применяется к "1:10000")
Ожидаемое поведение - каждый раз, когда я добавляю проверку данных в ячейку, эта ячейка меняет формат - и это не работает.
Я пробовал различные перестановки, такие как встраивание ccell в мою "Проверенную" UDF, а не в определенное имя "_IsValidated".
Чего я пытаюсь добиться с этим? Я пишу шаблоны для пользователей, и я хочу, чтобы клетки окрашивались в качестве визуального пособия.
Любые указатели / идеи будут с благодарностью приняты:) Большое спасибо!
1 ответ
Ваша проблема - это неправильное понимание того, что ADDRESS
а также INDIRECT
возвращается. 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 - Пусть ваш UDF вернет логическое значение, если ячейка проверена на наличие данных.
4 - Определено имя "_IsValidated", которое ссылается на "= Validated (ccellref)"
5 - иметь условный формат, который использует формулу "=_IsValidated"