Проверка на заполнение.

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Аватара пользователя
AlexZZZ
Сообщения: 237
Зарегистрирован: 01 июн 2007, 00:27
Откуда: Москва и область

&quot писал(а):Кстати, вы можете для проверки на заполнение нужных ячеек использовать
валидацию данных
У меня в проекте используется данный способ для проверки исключения повторяющихся значений. Просто уже избегаю вносить дополнительные формулы ввиду огромного их количества дополнительных тормозов. Стараюсь теперь такие задачи перекладывать на макросы.
Uralmaster
Сообщения: 5
Зарегистрирован: 20 янв 2011, 12:57

Макросы замечательные но увы проблемки начались
Ограничиваю диапазон

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column >= 2 And Target.Column <= 6 And Target.Row >= 8 And Target.Row <= 701 Then
k = Target.Row - 7
If Len(Cells(k, 2)) = 0 Or Len(Cells(k, 3)) = 0 Or Len(Cells(k, 4)) Or Len(Cells(k, 5)) = 0 Or Len(Cells(k, 6)) = 0 Or Len(Cells(k, 7)) = 0 Then
Application.EnableEvents = False
Target.ClearContents
Application.EnableEvents = True
MsgBox " 'Скобки не нужны! Здесь это оператор а не функция!
End If
End Sub

Если проверяемые строки начинаются с 8 строки то ввожу ограничение диапазона (файлик приложил)
'If Target.Column >= 2 And Target.Column <= 6 And Target.Row >= 8 And Target.Row <= 701 Then

Не хочет работать

Ввожу в начале
If Target.Cells.Count > 1 Then Exit Sub
If Not Application.Intersect(Range("B8:H801"), Target) Is Nothing Then
Тоже не хочет

Ввел k = Target.Row – 7 чтоб с 8 строки начал заполнять – работает с 8 строки
Но если зайдешь выше – ошибка опять


Прошел код нормально другой выложенный ранее но только в оригинале
(оригинал макроса ранее дает ошибку в 1 строке - этот не дает)
Private Sub Worksheet_Change(ByVal Target As Range)
flag = 0
If Target.Row <> 1 Then
For j = 2 To 7 Step 1
If Cells(Target.Row - 1, j) = "" Then
flag = 1
End If
Next j
If flag = 1 Then
Application.EnableEvents = False
Target.Value = ""
Application.EnableEvents = True
MsgBox ("Заполните всю информацию по дате ")
End If
End If
End Sub

Вопрос1: как нормально сделать ограничение диапазона ?

Вопрос2: менять цвет фона ячеек которые должны быть заполнены при текущей проверке на оттенок красного вместо таблички ( она часто вылазит и надоедает)

Вопрос3: Во 2-м приложенном файле реализована функция – если не заполнены ячейки хотя бы в одной строке – не дает переходить с листа на лист и закрыть файл – этот лучше с табличкой
Как эту функцию внести в макрос ?

Заранее благодарен
Вложения
Проверка на за&#.zip
(60.85 КБ) 21 скачивание
Uralmaster
Сообщения: 5
Зарегистрирован: 20 янв 2011, 12:57

Получилось выделить исходный диапазон – проверил ошибок не выдает

Осталось сделать подсветку незаполненных ячеек в строке вместо MsgBox + если не заполнены ячейки хотя бы в одной строке – не дает переходить с листа на лист и закрыть файл – вылазит табличка "Полностью Заполните поля строки !"
Пока не знаю как реализовать

Файлик прилагаю.


Код

Код: Выделить всё

Private Sub Worksheet_Change(ByVal Target As Range)
flag = 0
If Target.Column >= 2 And Target.Column <= 7 And Target.Row > 8 And Target.Row <= 701 Then ‘ вводим диапазон где будет проверка
For j = 2 To 7 Step 1
If Cells(Target.Row - 1, j) = "" Then
flag = 1
End If
Next j
If flag = 1 Then
Application.EnableEvents = False
Target.Value = ""
Application.EnableEvents = True
MsgBox ("Заполните всю информацию по дате")
End If
End If
End Sub
Вложения
Проверка на за&#.zip
(9.23 КБ) 23 скачивания
SAS888
Сообщения: 156
Зарегистрирован: 16 янв 2008, 08:28

Посмотрите пример во вложении.
Uralmaster
Сообщения: 5
Зарегистрирован: 20 янв 2011, 12:57

Огромнейшая благодарность SAS88 - ну Вы действительно чудеса творите!
Мой код детский по сравнению с Вами-работает только чуть поправить надо ..Но ваш это просто чудо как работает !!Я бы сам не допер до этого - точно ...

Мой файлик конечно приложу чтоб сравнить - но применять конечно надо код уважаемого SAS888
Вложения
Проверка на за&#.zip
(62.32 КБ) 35 скачиваний
Ответить