У меня есть два варианта для вас:
- Обнаружение, что ячейка становится пустой ("") с помощью события Worksheet_change, и удаление проверки для удаления всплывающей подсказки
- Используйте ваше текущее событие Select, но введите блок IF, чтобы сказать «Если ячейка пуста, то удалите проверку, в противном случае создайте подсказку ...», чтобы гарантировать, что проверка (и, следовательно, ваша подсказка) будет удалена, когда вы нажмете на пустая ячейка
Я думаю, что лучшим вариантом, безусловно, является Вариант 1. Я включил Вариант 2 только для того, чтобы вы могли увидеть, как это можно сделать только с вашим текущим событием и как это логически следует вместо использования Worksheet_change для удаления всплывающей подсказки.
Вариант 1
Добавьте событие изменения рабочего листа, которое делает это:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.value = "" Then
Target.Validation.Delete
End If
End Sub
Это сработает при удалении вашего идентификатора из ячейки; тогда ваше Target.Value будет равно "" и, следовательно, любая проверка будет также автоматически удалена; убирает подсказку.
Непреднамеренным следствием является то, что это удаляет все проверки; поэтому, если вы хотите сохранить некоторые другие проверки (например, тип данных, список), вам придется повторно добавить его в ячейку; Вы можете написать подпрограмму только для этого (например, sub putValidationBack (x_in как Range) ..)
Вариант 2
Добавьте блок IF вокруг вашего текущего кода:
if Range(sTarget).Value = "" then
With Range(sTarget).Validation
.Delete
End with
Else
' Everything after and including your On Error Resume goes here
End if
То же, что и выше, это удалит все проверки, поэтому вам нужно будет вернуть все проверки, которые вы хотите сохранить.