Доброго времени суток. Есть такая беда надо чтоб макрос перед выполнением проверял заполнены ли определенный ячейки, и если не так то выдавал какое либо сообщение после чего завершал работу. Адреса ячеек: E29-E35 и B27 Пароль снятие защиты листа, защиты книги и защиты VBA ="1741737"
Помогите пожалуйста....
Доброго времени суток. Есть такая беда надо чтоб макрос перед выполнением проверял заполнены ли определенный ячейки, и если не так то выдавал какое либо сообщение после чего завершал работу. Адреса ячеек: E29-E35 и B27 Пароль снятие защиты листа, защиты книги и защиты VBA ="1741737"
On Error Resume Next cc_ = Intersect(Range("B27,E29:E35").SpecialCells(xlCellTypeBlanks), Range("B27,E29:E35")).Address(0, 0) If cc_ <> "" Then MsgBox "Не заполнены ячейки " & cc_ Exit Sub End If On Error GoTo 0
[/vba]
Ну, за конфетку я горы сверну. Ловите [vba]
Код
On Error Resume Next cc_ = Intersect(Range("B27,E29:E35").SpecialCells(xlCellTypeBlanks), Range("B27,E29:E35")).Address(0, 0) If cc_ <> "" Then MsgBox "Не заполнены ячейки " & cc_ Exit Sub End If On Error GoTo 0
Function ЕстьПустыеЯчейки() As Boolean ' возврат - False, если нет пустых ячеек, или они есть, но пользователь согласен продолжать обработку Dim emptyCell As Boolean, cell As Range emptyCell = False With Sheets("Бар") For Each cell In Union(.Range("E29:E35"), .Range("B27")) If IsEmpty(cell) Then emptyCell = True Exit For End If Next End With If emptyCell Then emptyCell = ( _ MsgBox("Имеются незаполненные данные (" & cell.Address(0, 0) & ")" & vbCrLf & "Продолжить?", vbOKCancel) _ = vbCancel) End If ЕстьПустыеЯчейки = emptyCell End Function
[/vba]
Функция проверяет нужный диапазон и сообщает о проблемах. Можно результат функции использовать для прерывания обработки в других процедурах, по типу: [vba]
Код
if ЕстьПустыеЯчейки() then exit sub
[/vba] А у меня ключик от вебманей сдох с диском ноута... пока копию ещё не нашел :)
И вообще, вам бы неплохо ваш код переписать с точки зрения "правильности". А то что это за "Select-Selection"
Как-то так можно:
[vba]
Код
Function ЕстьПустыеЯчейки() As Boolean ' возврат - False, если нет пустых ячеек, или они есть, но пользователь согласен продолжать обработку Dim emptyCell As Boolean, cell As Range emptyCell = False With Sheets("Бар") For Each cell In Union(.Range("E29:E35"), .Range("B27")) If IsEmpty(cell) Then emptyCell = True Exit For End If Next End With If emptyCell Then emptyCell = ( _ MsgBox("Имеются незаполненные данные (" & cell.Address(0, 0) & ")" & vbCrLf & "Продолжить?", vbOKCancel) _ = vbCancel) End If ЕстьПустыеЯчейки = emptyCell End Function
[/vba]
Функция проверяет нужный диапазон и сообщает о проблемах. Можно результат функции использовать для прерывания обработки в других процедурах, по типу: [vba]
Код
if ЕстьПустыеЯчейки() then exit sub
[/vba] А у меня ключик от вебманей сдох с диском ноута... пока копию ещё не нашел :)
И вообще, вам бы неплохо ваш код переписать с точки зрения "правильности". А то что это за "Select-Selection"AndreTM
Skype: andre.tm.007 Donate: Qiwi: 9517375010
Сообщение отредактировал AndreTM - Четверг, 28.05.2015, 00:02
AndreTM, Спасибо огромное, но метод "_Boroda_" Примемлем больше =) Мне как ненужно чтоб пользователь мог продолжить пока все не заполнит =))))
AndreTM, Спасибо огромное, но метод "_Boroda_" Примемлем больше =) Мне как ненужно чтоб пользователь мог продолжить пока все не заполнит =))))Dosmaster
Мне как ненужно чтоб пользователь мог продолжить пока все не заполнит =))))
Так тогда вам придется вставить проверку (код Boroda) в каждую вашу процедуру. А если внезапно изменится диапазон ячеек для проверки, или надо будет проверять по разным условиям?.. А я вам показываю, как это можно сделать. Ну и мою функцию недолго исправить - достаточно не записывать ответ диалога в переменную emptyCell, и вы получите безусловно ответ о том, что есть проблемы.
Мне как ненужно чтоб пользователь мог продолжить пока все не заполнит =))))
Так тогда вам придется вставить проверку (код Boroda) в каждую вашу процедуру. А если внезапно изменится диапазон ячеек для проверки, или надо будет проверять по разным условиям?.. А я вам показываю, как это можно сделать. Ну и мою функцию недолго исправить - достаточно не записывать ответ диалога в переменную emptyCell, и вы получите безусловно ответ о том, что есть проблемы.AndreTM
Skype: andre.tm.007 Donate: Qiwi: 9517375010
Сообщение отредактировал AndreTM - Четверг, 28.05.2015, 00:02
А здесь какая-то неясная непонятность - я поначалу именно так и написал (не, вру, сначала Каунт написал), но у меня заругался VBA. Я вражеский не знаю, поэтому разбираться не стал - лениво было. Дальше как обычно - метод научного тыка, откопал вариант без ругани, им и ответил. А сейчас все также написал - работает! И Каунт тоже работает! Чудеса.
А здесь какая-то неясная непонятность - я поначалу именно так и написал (не, вру, сначала Каунт написал), но у меня заругался VBA. Я вражеский не знаю, поэтому разбираться не стал - лениво было. Дальше как обычно - метод научного тыка, откопал вариант без ругани, им и ответил. А сейчас все также написал - работает! И Каунт тоже работает! Чудеса._Boroda_
Понятно А я подумал, что какую-то нестандартную ситуацию обрабатывал... Правда, так и не понял какую, и как она могла возникнуть (хотя, вариант, что это осталось от "эксперимента" у меня тоже был )
Понятно А я подумал, что какую-то нестандартную ситуацию обрабатывал... Правда, так и не понял какую, и как она могла возникнуть (хотя, вариант, что это осталось от "эксперимента" у меня тоже был )KSV