Найти тему
VBA Excel с нуля

VBA Excel № 92.3. Worksheet. Событие Change. Корректность введенных данных (часть 3).

В предыдущих двух публикациях был представлен метод, который вполне подходит для практического применения, несмотря на свою трудоемкость. Для обеспечения сохранения правил, проверяющих корректность вводимых данных при их вставке в определенный диапазон (копировании диапазона), можно использовать инструмент проверки данных в Excel. Приведенный ниже код демонстрирует пример решения этой задачи:

-2

Эта процедура обработки событий отслеживает статус проверки данных в указанном диапазоне (называемом "МойДиапазон"), где установлены ПРАВИЛА проверки вводимых данных (установку правил смотри скриншот).

-3

Если переменная VT (ValidationType – тип проверки) содержит ошибку, это означает, что одна или несколько ячеек в диапазоне "МойДиапазон" больше не соответствуют правилам проверки вводимых данных. Это может произойти, например, при копировании данных в диапазон, содержащий такие правила. В таком случае код использует метод Undo объекта Application для отмены последнего действия пользователя.

И конечно, давайте разберем этот код построчно:

1. Private Sub Worksheet_Change(ByVal Target As Range)

- Это начало объявления процедуры. Private Sub означает, что это приватная (только для этого модуля) процедура, и она срабатывает при изменении данных на листе Excel, к которому она привязана. Worksheet_Change - это событие, которое возникает при изменении данных.

2. Dim VT As Long

- Объявление переменной VT типа Long (целое число), которая будет использоваться для хранения типа проверки данных в диапазоне.

3. ' Проверка, прошли ли все ячейки в диапазоне проверки

- Комментарий, описывающий следующую строку кода.

4. ' проверку успешно?

- Дополнительный комментарий, поясняющий ожидаемый результат проверки.

5. On Error Resume Next

- Эта строка кода указывает программе продолжать выполнение кода даже в случае возникновения ошибки. В данном случае, если при попытке доступа к типу проверки данных происходит ошибка, программа не останавливается, а продолжает выполнение.

6. VT= Range("МойДиапазон").Validation.Type

- Здесь происходит попытка прочитать тип проверки данных в диапазоне с именем "МойДиапазон" и присвоить его переменной VT.

7. If Err.Number <> 0 Then

- Эта строка кода начинает условие. Если значение Err.Number (код ошибки) не равно нулю, то есть если произошла ошибка при выполнении предыдущей строки кода, то выполняются следующие действия.

8. Application.Undo

- Эта строка отменяет последнее действие пользователя в Excel, в данном случае, отменяет вставку данных в диапазон.

9. MsgBox "Последняя операция отменена. " & _ "Правила проверки данных были удалены.", vbCritical

- Эта строка выводит сообщение с предупреждением о том, что последняя операция была отменена, и правила проверки данных были удалены. vbCritical указывает на стиль сообщения (критическое предупреждение).

10. End If

- Завершение условия.

11. End Sub

- Конец процедуры.

-4
Попробуйте скопировать диапазон “E4:E6” с данными (11,13,15) в именованный диапазон «МойДиапазон»…

Выводится сообщение об ошибке, как показано на скриншоте. Процедура Worksheet_Change позволяет отслеживать удаление правил проверки вводимых данных.

Эта процедура корректно работает только в случае, если все ячейки в проверяемом диапазоне имеют одинаковый тип проверки данных.
Использование этой процедуры предотвращает очистку стека отмены операций.

Наука
7 млн интересуются