Страницы: 1
RSS
Проверка ячейки на количество цифр. Как быть при копировании?
 
При вводе в ячейку данных предприятия решил сделать проверку на количество цифр, ведь легко ошибиться при вводе расчетного и корр. счетов.  
Сделал следующим образом:  
Private Sub Worksheet_Change(ByVal Target As Range)  
If Left(Target.Address(0, 0), 1) <> "B" Then Exit Sub  
'    Проверка количества цифр  
'Индекс  
If Target.Offset(0, -1).Value = "Индекс" Then  
   If Len(Target) <> 6 Then  
'    MsgBox "Введите правильный расчетный счет!", vbExclamation, "ОШИБКА!!!"  
       MsgBox "         Количество цифр индекса" & Chr(10) & Chr(10) & _  
              "            должно быть равным 6-ти." & Chr(10) & Chr(10) & _  
              "В введенном Вами поле количество цифр составляет " & Len(Target) & _  
              " цифр!" & Chr(10) & Chr(10) & _  
              "         Введите правильный индекс!", vbExclamation, "ОШИБКА!!!"  
       Target.Select  
       Target.Interior.Color = 255  
   Else  
       Target.Interior.Pattern = xlNone  
   End If  
End If  
'Рассчетный счет  
If Target.Offset(0, -1).Value = "Расч./счет" Then  
   If Len(Target) <> 20 Then  
'    MsgBox "Введите правильный расчетный счет!", vbExclamation, "ОШИБКА!!!"  
       MsgBox "         Количество цифр расчетного счета" & Chr(10) & Chr(10) & _  
              "            должно быть равным 20-ти." & Chr(10) & Chr(10) & _  
              "В введенном Вами поле количество цифр составляет " & Len(Target) & _  
              " цифр!" & Chr(10) & Chr(10) & _  
              "         Введите правильный расчетный счет!", vbExclamation, "ОШИБКА!!!"  
       Target.Select  
       Target.Interior.Color = 255  
   Else  
       Target.Interior.Pattern = xlNone  
   End If  
End If  
'Корреспондентский счет  
If Target.Offset(0, -1).Value = "Кор./счет" Then  
   If Len(Target) <> 20 Then  
       MsgBox "         Количество цифр корреспондентского счета" & Chr(10) & Chr(10) & _  
              "            должно быть равным 20-ти." & Chr(10) & Chr(10) & _  
              "В введенном Вами поле количество цифр составляет " & Len(Target) & _  
              " цифр!" & Chr(10) & Chr(10) & _  
              "         Введите правильный корреспондентский счет!", vbExclamation, "ОШИБКА!!!"  
       Target.Select  
       Target.Interior.Color = 255  
   Else  
       Target.Interior.Pattern = xlNone  
   End If  
End If  
End Sub  
 
Это все работает, если вводить в ячейку вручную. Но когда копируешь и вставляешь несколько значений, то это не работает.  
Вопрос:  
Как сделать, чтобы проверка запускалась и при копировании тоже?
 
Попробуйте такой вариант:  
 
 
Private Sub Worksheet_Change(ByVal Target As Range)  
   On Error Resume Next  
   Application.EnableEvents = False  
   For Each Target In Intersect(Target, [b:b])
 
       Select Case Target.Previous  
             
           Case "Индекс"  
               If Len(Target) <> 6 Then  
                   MsgBox " Количество цифр индекса" & Chr(10) & Chr(10) & _  
                          " должно быть равным 6-ти." & Chr(10) & Chr(10) & _  
                          "В введенном Вами поле количество цифр составляет " & Len(Target) & _  
                          " цифр!" & Chr(10) & Chr(10) & _  
                          " Введите правильный индекс!", vbExclamation, "ОШИБКА!!!"  
                   Target.Interior.Color = 255  
               Else  
                   Target.Interior.Pattern = xlNone  
               End If  
 
           Case "Расч./счет"  
               If Len(Target) <> 20 Then  
                   MsgBox " Количество цифр расчетного счета" & Chr(10) & Chr(10) & _  
                          " должно быть равным 20-ти." & Chr(10) & Chr(10) & _  
                          "В введенном Вами поле количество цифр составляет " & Len(Target) & _  
                          " цифр!" & Chr(10) & Chr(10) & _  
                          " Введите правильный расчетный счет!", vbExclamation, "ОШИБКА!!!"  
                   Target.Interior.Color = 255  
               Else  
                   Target.Interior.Pattern = xlNone  
               End If  
 
           Case "Кор./счет"  
               If Len(Target) <> 20 Then  
                   MsgBox " Количество цифр корреспондентского счета" & Chr(10) & Chr(10) & _  
                          " должно быть равным 20-ти." & Chr(10) & Chr(10) & _  
                          "В введенном Вами поле количество цифр составляет " & Len(Target) & _  
                          " цифр!" & Chr(10) & Chr(10) & _  
                          " Введите правильный корреспондентский счет!", vbExclamation, "ОШИБКА!!!"  
                   Target.Interior.Color = 255  
               Else  
                   Target.Interior.Pattern = xlNone  
               End If  
                 
       End Select  
   Next Target  
   Application.EnableEvents = True  
End Sub  
 
 
 
Обратите внимание на строки  
Application.EnableEvents = false  
....  
Application.EnableEvents = True  
 
 
Благодаря конструкции  For Each Target In Intersect(Target, [b:b])
обрабатываются все измененные ячейки в столбце B
 
Спасибо!!!  
Только теперь срабатывает после каждого обращения к листу и выдает ошибку, так как эти ячейки незаполнены еще.  
Но, думаю, что это мы поправим - поставлю условие на пустую ячейку.  
Спасибо!!!
Страницы: 1
Читают тему
Наверх