Использование VBA для контроля ввода данных



Достаточно важная задача при работе в системе Excel – проверка вводимых в ячейки данных на соответствие некоторым условиям и занесение данных в ячейки из заранее подготовленных списков. Эти задачи можно решить, как с использованием пункта Проверка данных вкладки ленты Данные, так и с использованием программирования на VBA.

Пример: при вычислении по формуле

 не может быть отрицательным и  не может быть равен нулю. Если не предусмотреть проверку, при вводе нулевого значения  в ячейке для  появится сообщение о делении на ноль (рисунок 1.1).

Рис. 1.1. Системное сообщение об ошибке

 

Если воспользоваться пунктом ленты Проверка данных с заданием в параметрах условия Значение не равно 0 и заданием Вид - Останов, сообщение об ошибке появится в окне сообщений, как показано на рисунке 1.2.

Рис. 1.2. Сообщение об ошибке с использованием Проверки данных

Аналогично можно задать проверку для значения .

Решим эту же задачу с использованием программирования. При этом ячейку с неверным вводом данных будем очищать и выделять розовой заливкой, значение в ячейке для  будем удалять при неверном вводе  или , позицию курсора на листе будем оставлять в ячейке для  или , пока не будет задано правильное значение. Основную программу напишем для события листа Change, фиксацию курсора в B3 – для события листа SelectionChange. На рисунке 1.3 показаны результаты реализации этих задач.

а – сообщение при вводе нуля в B3;

б – после задания допустимого значения в B3

Рис. 1.3. Работа программы

 

Текст программ с комментариями:

Private Sub Worksheet_Change(ByVal Target As Range)

'было выполнено редактирование для ячейки Target Application.EnableEvents = False

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

Adr = Target.Address

'адрес отредактированной ячейки

If (Adr = "$A$3" Or Adr = "$B$3") Then

' если отредактированы A3 или B3

If [A3].Value < 0 Or [B3].Value = 0 And _

Range(ADR).Interior.Color <> RGB(250, 200, 250) Then

'если значение в ячейке A3 < 0 или B3 = 0 и не розовая ячейка

ADR [C3].ClearContents

' очищаем ячейку C3

Range(ADR).ClearContents    

' очищаем ячейку

ADR Range(ADR).Interior.Color = RGB(250, 200, 250)

' задаем розовый цвет для ADR,

‘чтобы повторно не появлялось сообщение

MsgBox ADR & " - недопустимое значение!", vbExclamation, _

"Ошибка" Else

If IsEmpty(Range("c3").Value) Then Range("C3").Formula = "=SQRT($A$3)/$B$3"

Range(ADR).Interior.Pattern = xlNone 'удаляем заливку ADR End If

End If End If

Application.EnableEvents = True End Sub

PrivateSubWorksheet_SelectionChange(ByValTargetAsRange) If IsEmpty([A3].Value) Then [A3].Select

' возвращаемся в A3, если пустое значение в этой ячейке If IsEmpty([B3].Value) Then [B3].Select

' возвращаемся в B3, если пустое значение в этой ячейке End Sub

Пункт Проверка данных вкладки ленты Данные можно использовать также для работы со списками. Список может быть оформлен на том же листе или на другом листе книги Excel. Пример использования показан на рисунке 1.4.

 

Рис. 1.4. Пример использования списка (а) и задания его параметров (б)

 


Дата добавления: 2018-02-18; просмотров: 2002; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!