Ячейки условного формата 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,

Ваш UDFPublic 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"

Другие вопросы по тегам