Страница 3 из 5
Re: Проверка на заполнение.
Добавлено: 08 июл 2007, 22:47
Asya
Код: Выделить всё
With worksheets("Лист1")
..................................
.cells (при работе с ячейками)
..................................
End with
Просто Вы активируете лист 1, а продолжаете использовать cells листа 2, так как это модуль листа два.
После активации можно еще использовать Activesheet.cells
А так как worksheet_change уже не используется, то и Application.EnableEvents уже не надо. А удобно будет это решение? Ведь это уже не запрет ввода, а проверка уже осуществленных изменений на листе.
Re: Проверка на заполнение.
Добавлено: 08 июл 2007, 23:00
AlexZZZ
" писал(а):Ведь это уже не запрет ввода, а проверка уже осуществленных изменений на листе
Это не вместо, а вместе с запретом. Дело в том, что внесённые данные у меня построчно защищаются. А поскольку последнюю строку можно в данном случае "недозаполнить", то после срабатывания "защищающего" макроса дальнейшее заполнение документа станет невозможным. Для этого перед срабатыванием этого макроса и нужна проверка. Сейчас попробовал код в отдельный модуль поместить, вроде работает.
Re: Проверка на заполнение.
Добавлено: 10 июл 2007, 12:58
Asya
А можно так, заполнение листа последовательно проверять построчно как раньше, а перед закрытием книги проверять заполнена ли полностью последняя строка:
в модуле "Эта книга" поместить:
Код: Выделить всё
Private Sub Workbook_BeforeClose(Cancel As Boolean)
lastrow = Worksheets("Лист1").Cells.SpecialCells(xlLastCell).Row
.............................................................................................
осуществляем проверку наличия данных в строке lastrow
if есть пустые then
msgbox "Заполните данные в последней строке"
Cancel = True
Else: msgbox "Спасибо за ответственный подход к заполнению"
Cancel = False
End If
..........................................................................................
End sub
Идем на рекорд самого длинного топика

Re: Проверка на заполнение.
Добавлено: 10 июл 2007, 22:08
Aent
Давно хотел вам посоветовать:
Лучше не выводить с помощью MsgBox сообщений о необходимости заполнения
обязательных ячеек, а менять цвет фона (.interior.color) ячеек которые должны быть заполнены при текущей проверке на оттенок красного.
А после того как необходимые значения введены - нормализовать цвет.
Если уж вы так хотите вывести текст - выводите его в строке состояния.
Проверено на многих проектах.
А сообщение с msgbox уместно при попытке сохранения недозаполненной книги.
Re: Проверка на заполнение.
Добавлено: 11 июл 2007, 11:24
AlexZZZ
" писал(а):Лучше не выводить с помощью MsgBox сообщений о необходимости заполнения
обязательных ячеек, а менять цвет фона (.interior.color) ячеек которые должны быть заполнены при текущей проверке на оттенок красного.
Спасибо за совет, я кстати, подумывал над этим. Правда, в данном проекте у меня уже применяется условное форматирование (сделал его ещё до того, как vba стал изучать).
" писал(а):Идем на рекорд самого длинного топика
Правда, по количеству просмотров топика, Irochkу вряд ли догоним. Уж больно название топика трогательное. Сам бы обязательно помог, если бы знал как.

Re: Проверка на заполнение.
Добавлено: 11 июл 2007, 14:22
Игорь Акопян
Aent, однозначно!
а уж
" писал(а):Else: msgbox "Спасибо за ответственный подход к заполнению"
вообще убрать, ибо после пары таких сообщений, юзер задумается об убийстве

Re: Проверка на заполнение.
Добавлено: 11 июл 2007, 14:50
Asya
Это была шутка

Я хотела написать "Спасибо за ответственный подход к заполнению, вам все равно деваться было некуда"
Если уж вы так хотите вывести текст - выводите его в строке состояния
Aent, научите, пожалуйста
Re: Проверка на заполнение.
Добавлено: 11 июл 2007, 20:28
AlexZZZ
Asya, не будем Гуру по пустякам отвлекать.
Только на мой взгляд, строка состояния в глаза гораздо меньше на себя внимания обращает. Для благодарностей за правильное заполнение как раз сойдёт!
P.S.: Как вариант можно и в заголовок окна вывести
Только не забыть сделать
Код: Выделить всё
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.Caption = Empty
End Sub
Re: Проверка на заполнение.
Добавлено: 11 июл 2007, 21:06
Aent
" писал(а):строка состояния в глаза гораздо меньше на себя внимания обращает.
Если ваши пользователи её не замечают и если у вас есть нескроллируемая область
листа (достаточно пары строк вверху), то сообщения можно выводить
прямо на лист (красным фонтом 20 размера

)
Re: Проверка на заполнение.
Добавлено: 11 июл 2007, 21:20
AlexZZZ
Вообще, сейчас попробовал, напоминалка хорошая получается!
Код: Выделить всё
Private Sub Worksheet_Change(ByVal Target As Range)
Application.StatusBar = "Обязательно заполните дату, наименование организации, адрес, телефон!"
End Sub
Чем длиннее строка, тем заметнее!
Aent, спасибо за идею!