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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2010, 14:08   #11
Евгений Уральский
Пользователь
 
Регистрация: 17.11.2010
Сообщений: 20
По умолчанию

На самом деле макрос хоть и маленький, но он некорректно будет работать с IP-адресами или если разряды в числе разделены пробелами. Или если дата введена в формате, отличном от системного. например "192.168.10.12", "123 456 789" или "01-01-2011". Это будет восприниматься как текст в связи с невозможностью преобразования в число или другой формат. Поэтому лучше все-таки делать проверку вводимых символов.
Не Боги горшки обжигают, все начинали с малого, даже сами Боги..
Евгений Уральский вне форума Ответить с цитированием
Старый 01.12.2010, 14:12   #12
Евгений Уральский
Пользователь
 
Регистрация: 17.11.2010
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Евгений Уральский Посмотреть сообщение
В общем, в итоге сделал и все пошло на ура:

Private Sub Worksheet_Change(ByVal Target As Range)
If (Target.Rows.Count = 1) And (Target.Columns.Count = 1) Then
Application.EnableEvents = False
If IsNumeric(Target.Value) <> True Then
TolkoTzifra = MsgBox("Вводите только цифры", vbOKOnly + vbCritical, "Ошибка")
Cells(Target.Row, Target.Column).Select
Selection.ClearContents
Selection.NumberFormat = "0.0"
Else:
Cells(Target.Row, Target.Column + 1).Select
End If
Application.EnableEvents = True
End If
End Sub
Не совсем все, как хотел..ведь символы теперь тоже не вводятся, как и буквы.. Необходима проверка алфавита, а не запрет "Только цифры"
Не Боги горшки обжигают, все начинали с малого, даже сами Боги..
Евгений Уральский вне форума Ответить с цитированием
Старый 01.12.2010, 15:15   #13
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

на выбор два варианта:
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
  Const BadChars As String = "xy..."
  Dim i As Long, s As String
  For Each cl In Target.Cells
    s = CStr(cl.Value)
    For i = 1 To Len(s)
      If InStr(BadChars, Mid(s, i, 1)) > 0 Then cl.ClearContents
    Next
  Next
End Sub

или

Private Sub Worksheet_Change(ByVal Target As Range)
  Const OkChar As String = "0123456789.,-_/\"
  Dim i As Long, s As String
  For Each cl In Target.Cells
    s = CStr(cl.Value)
    For i = 1 To Len(s)
      If InStr(OkChar, Mid(s, i, 1)) = 0 Then cl.ClearContents
    Next
  Next
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 01.12.2010 в 15:20.
IgorGO вне форума Ответить с цитированием
Старый 01.12.2010, 15:28   #14
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Еще вариантик. Запрет ввода русских прописных и строчных букв
Код:
Option Explicit
Option Compare Text

Private Sub Worksheet_Change(ByVal Target As Range)
If Target Like "*[а-я]*" Then
    With Application
        .EnableEvents = False: .Undo: .EnableEvents = True
    End With
End If
End Sub

Последний раз редактировалось nilem; 01.12.2010 в 15:31.
nilem вне форума Ответить с цитированием
Старый 02.12.2010, 11:22   #15
Евгений Уральский
Пользователь
 
Регистрация: 17.11.2010
Сообщений: 20
По умолчанию

Уважаемый IgorGO , в первом варианте буквы прописываются превосходно А вот второй вроде работает.
Не Боги горшки обжигают, все начинали с малого, даже сами Боги..
Евгений Уральский вне форума Ответить с цитированием
Старый 02.12.2010, 11:35   #16
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

в модуль листа надо положить одну из этих функций. (другую полностью закомментировать)
константы BadChars (или OkChar) необходимо заполнить соответственно недопустимыми или (для OkChar) разрешенными символами.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 19.09.2012, 10:37   #17
fm12
Новичок
Джуниор
 
Регистрация: 19.09.2012
Сообщений: 2
По умолчанию

Private Sub Worksheet_Change(ByVal Target As Range)
Const OkChar As String = "0123456789.,-_/\"
Dim i As Long, s As String
For Each cl In Target.Cells
s = CStr(cl.Value)
For i = 1 To Len(s)
If InStr(OkChar, Mid(s, i, 1)) = 0 Then cl.ClearContents
Next
Next
End Sub

Можно ли добавить в этот код сообщение, которое будет выскакивать при вводе текста, например "Недопустимо"?
fm12 вне форума Ответить с цитированием
Старый 19.09.2012, 10:56   #18
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Private Sub Worksheet_Change(ByVal Target As Range)
  Const OkChar As String = "0123456789.,-_/\"
  Dim i As Long, s As String
  For Each cl In Target.Cells
    s = CStr(cl.Value)
    For i = 1 To Len(s)
      If InStr(OkChar, Mid(s, i, 1)) = 0 Then 
        msgbox "знак " & Mid(s, i, 1) & " запрещен!", vbokonly, "В ячейке " & cl.address
        cl.ClearContents
        Exit sub
      end if
    Next
  Next
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 19.09.2012, 11:48   #19
fm12
Новичок
Джуниор
 
Регистрация: 19.09.2012
Сообщений: 2
По умолчанию

IgorGO, спасибо большое. Но есть еще просьба, можно ли сделать так чтоб все это было применимо только к столбцу "В" с 4-й строки.
fm12 вне форума Ответить с цитированием
Старый 19.09.2012, 12:06   #20
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Private Sub Worksheet_Change(ByVal Target As Range)
  Const OkChar As String = "0123456789.,-_/\"
  Dim i As Long, s As String, rg as range
  set rg = application.intersect(range("B4:B" & rows.count), target) 
  if rg is nothing then exit sub
  For Each cl In rg.Cells
    s = CStr(cl.Value)
    For i = 1 To Len(s)
      If InStr(OkChar, Mid(s, i, 1)) = 0 Then 
        msgbox "знак " & Mid(s, i, 1) & " запрещен!", vbokonly, "В ячейке " & cl.address
        cl.ClearContents
        Exit sub
      end if
    Next
  Next
End Sub
однако... внимательно читайте подпись
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрет нажатия кнопки и запрет неправильного ввода данных De_Kurlzz Помощь студентам 1 15.06.2011 15:14
Запрет ввода с клавиатуры DoGFoX Помощь студентам 5 16.06.2010 23:40
Запрет ввода с клавиатуры букв Omedus Общие вопросы Delphi 13 16.05.2010 14:39
Как сделать запрет ввода букв в поле для ввода input zvezda_t PHP 1 27.12.2009 22:02
Запрет ввода в Stringgrid D-Snaker Помощь студентам 1 18.06.2009 08:08