Страница 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
&quot писал(а):Ведь это уже не запрет ввода, а проверка уже осуществленных изменений на листе
Это не вместо, а вместе с запретом. Дело в том, что внесённые данные у меня построчно защищаются. А поскольку последнюю строку можно в данном случае "недозаполнить", то после срабатывания "защищающего" макроса дальнейшее заполнение документа станет невозможным. Для этого перед срабатыванием этого макроса и нужна проверка. Сейчас попробовал код в отдельный модуль поместить, вроде работает.

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
&quot писал(а):Лучше не выводить с помощью MsgBox сообщений о необходимости заполнения
обязательных ячеек, а менять цвет фона (.interior.color) ячеек которые должны быть заполнены при текущей проверке на оттенок красного.
Спасибо за совет, я кстати, подумывал над этим. Правда, в данном проекте у меня уже применяется условное форматирование (сделал его ещё до того, как vba стал изучать).
&quot писал(а):Идем на рекорд самого длинного топика
Правда, по количеству просмотров топика, Irochkу вряд ли догоним. Уж больно название топика трогательное. Сам бы обязательно помог, если бы знал как. :)

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

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

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

Добавлено: 11 июл 2007, 14:50
Asya
Это была шутка :) Я хотела написать "Спасибо за ответственный подход к заполнению, вам все равно деваться было некуда" :)
Если уж вы так хотите вывести текст - выводите его в строке состояния
Aent, научите, пожалуйста

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

Добавлено: 11 июл 2007, 20:28
AlexZZZ
Asya, не будем Гуру по пустякам отвлекать. ;)

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

Application.StatusBar = "Спасибо!"
Только на мой взгляд, строка состояния в глаза гораздо меньше на себя внимания обращает. Для благодарностей за правильное заполнение как раз сойдёт! :)

P.S.: Как вариант можно и в заголовок окна вывести

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

Application.Caption = "Привет!"
Только не забыть сделать

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

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.Caption = Empty
End Sub

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

Добавлено: 11 июл 2007, 21:06
Aent
&quot писал(а):строка состояния в глаза гораздо меньше на себя внимания обращает.
Если ваши пользователи её не замечают и если у вас есть нескроллируемая область
листа (достаточно пары строк вверху), то сообщения можно выводить
прямо на лист (красным фонтом 20 размера ;) )

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

Добавлено: 11 июл 2007, 21:20
AlexZZZ
Вообще, сейчас попробовал, напоминалка хорошая получается!

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

Private Sub Worksheet_Change(ByVal Target As Range)
Application.StatusBar = "Обязательно заполните дату, наименование организации, адрес, телефон!"
End Sub
Чем длиннее строка, тем заметнее! Aent, спасибо за идею!