Как справиться с этой причудой проверки Excel?

У меня есть этот код. Это надуманный код для примера.

Sub x()
    ActiveSheet.Range("A1").Validation.Delete
    ActiveSheet.Range("A1").Validation.Add Type:=xlValidateCustom, Formula1:="=VALUE(RIGHT(A1,6))>0"
End Sub

Если при выполнении кода A1 пуст, я получаю ошибку 1004, ошибку, определяемую приложением или объектом. Я полагаю, это потому, что формула дает #VALUE! вместо False. Если я попытаюсь установить проверку вручную, я получу предупреждение о том, что результатом является ошибка, но если я нажму OK, проверка будет работать нормально.

Я решил, что это потому, что я не освобождал пустые ячейки от проверки, поэтому я добавил строку:

Sub x()
    ActiveSheet.Range("A1").Validation.Delete
    ActiveSheet.Range("A1").Validation.IgnoreBlank = True
    ActiveSheet.Range("A1").Validation.Add Type:=xlValidateCustom, Formula1:="=VALUE(RIGHT(A1,6))>0"
End Sub

Но это просто сдвинуло ошибку на одну строку вверх. Теперь я получаю ошибку 1004 в строке IgnoreBlank = True.

Я полагаю, я мог бы временно ввести значение в ячейку, установить проверку, а затем удалить содержимое ячейки, но я надеюсь, что есть другой способ.

Я делаю что-то неправильно? Изначально я планировал программную проверку в конце вместо использования функции проверки Excel.


person RobertSF    schedule 10.10.2017    source источник


Ответы (1)


Похоже, вы не можете установить IgnoreBlank до того, как что-то Add сделаете, и в этот момент будет слишком поздно.

Помимо вашей собственной идеи обходного пути (и ее вариантов, например, установка проверки на формулу, которая всегда TRUE, переворачивание IgnoreBlank и изменение формулы на реальную), вы также можете обрабатывать пустые ячейки в самой формуле проверки:

=IF(ISBLANK(A1), TRUE, VALUE(RIGHT(A1,6))>0)
person GSerg    schedule 10.10.2017