Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.01.2011, 16:33   #1
Olya1985
Форумчанин
 
Регистрация: 31.12.2010
Сообщений: 113
По умолчанию ignore empty cells

подскажите, пожалуйста, как в данном скрипте игнорировать пустые ячейки
иначе происходит зацикливание.

Private Sub Worksheet_Change(ByVal Target As Range)

For Each n In Worksheets(2).Range("A:A")
If Len(n) < 3 Then MsgBox ("insert number more than 3 symbols") 'Then cl.ClearContents


Next
End Sub
Olya1985 вне форума Ответить с цитированием
Старый 03.01.2011, 16:37   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Код:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim n As Range: On Error Resume Next
    Application.EnableEvents = False    ' отключаем обработку событий
    For Each n In Intersect(Worksheets(2).UsedRange, Worksheets(2).[a:a])
        If Len(n) < 3 Then cl.ClearContents
    Next
    Application.EnableEvents = True    ' включаем обратно
End Sub
Вот только непонятен смысл этого макроса...
Вы бы полностью описали, чего пытаетесь добиться, да ещё и с примером файла, - так мы бы подсказали, как избиваться от этого странного кода.
EducatedFool вне форума Ответить с цитированием
Старый 03.01.2011, 16:44   #3
Olya1985
Форумчанин
 
Регистрация: 31.12.2010
Сообщений: 113
По умолчанию

смысл макроса в том, что он не дает ввести числа в столбец A которые имеют число цифр меньше 3. а можно ли не учитывать пустые строки с помощью ignore blanks или добавив что то типа
If Application.CountA(Rows()) = 0 Then
End If
Olya1985 вне форума Ответить с цитированием
Старый 03.01.2011, 16:51   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

вы все-таки пошли по пути программирования...
откройте вложение, попробуйте в колонку А внеси число короче 3-х или длиннее 10 символов. а там нет макросов.
в Вашем случае пустые ячейки не при чем, в начале процедуры отключите события, а в конце включите (Application.EnableEvents = False ... Application.EnableEvents = True). потому что в теле процедуры в ячейки вносятся новые данные, а процедура срабатывает на каждое изменение на листе...
Вложения
Тип файла: rar Книга513.rar (4.9 Кб, 10 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 03.01.2011, 16:57   #5
Olya1985
Форумчанин
 
Регистрация: 31.12.2010
Сообщений: 113
По умолчанию

а почему тогда происходит зацикливание при вводе числа меньше 3.

когда ввожу больше 10 то все нормально работает.

получается что макрос пустые ячейки принимает за число меньшее 3.
и логично было бы исключить blanks.
Private Sub Worksheet_Change(ByVal Target As Range)

For Each n In Worksheets(2).Range("A:A")

If Len(Target) > 10 Then MsgBox ("insert number less than 10 symbols")
If Len(n) < 3 Then MsgBox ("insert number more than 3 symbols")


Next
End Sub
Olya1985 вне форума Ответить с цитированием
Старый 03.01.2011, 17:00   #6
Olya1985
Форумчанин
 
Регистрация: 31.12.2010
Сообщений: 113
По умолчанию

Игорь,

в вашем файле excel просто включена функция validation. и там проставлена галочка ignore blanks. меня интересувет как отобразить ignore blanks в моем коде.
Olya1985 вне форума Ответить с цитированием
Старый 03.01.2011, 17:02   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

If Len(n) < 3 and Len(n) > 0 Then MsgBox ("insert number more than 3 symbols")
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 03.01.2011, 17:09   #8
Olya1985
Форумчанин
 
Регистрация: 31.12.2010
Сообщений: 113
По умолчанию

теперь решилась проблема с зацикливанием на числе меньше 3, но вот если вводить кол-во цифр более 10, то вот тогда опять зацикливание
Olya1985 вне форума Ответить с цитированием
Старый 03.01.2011, 17:55   #9
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Код:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target.Column <> 1 Then Exit Sub

Application.EnableEvents = False    ' отключаем обработку событий

Select Case Len(Target)
Case 0: Application.EnableEvents = True: Exit Sub
Case Is < 4: MsgBox ("insert number more than 3 symbols"): Application.Undo
Case Is > 9:  MsgBox ("insert number less than 10 symbols"): Application.Undo
End Select


Application.EnableEvents = True    ' включаем обработку событий

End Sub
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 03.01.2011, 18:02   #10
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Код:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Target.Column <> 1 Then Exit Sub
    Application.EnableEvents = False    ' отключаем обработку событий
    If Target <> "" And Not IsNumeric(Target) Then MsgBox ("insert number less than 10 symbols and  more than 3 symbols"): Application.Undo: Application.EnableEvents = True: Exit Sub
    If Target <> "" And Len(Target) < 3 Or Len(Target) > 10 Then MsgBox ("insert number less than 10 symbols and  more than 3 symbols"): Application.Undo
    Application.EnableEvents = True    ' Включаем обработку событий
End Sub
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728

Последний раз редактировалось kuklp; 03.01.2011 в 18:43.
kuklp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кнопочка Ignore this exception type работает колько для конкретного проекта? Или сразу для всех? TwiX Общие вопросы Delphi 4 12.06.2010 19:00
проверка списка с помощю empty jon888 PHP 5 09.11.2009 13:24
Вопрос по функциям trim и empty Svetix PHP 4 01.06.2009 23:48
Нестандартное использование Cells.FormulaR1C1 и Cells.Text Lokkie Microsoft Office Excel 3 21.01.2009 17:41
условие если значение = empty zetrix Microsoft Office Excel 0 30.10.2006 18:58