Консультация № 181046
30.11.2010, 20:13
0.00 руб.
0 13 2
Здравствуйте, уважаемые эксперты! Прошу Вас ответить на следующий вопрос:
Как запретить ввод букв в ячейку в Excel?? ( необходим макрос на VBA)

спасибо)

Обсуждение

Неизвестный
30.11.2010, 21:20
общий
Уважаемый Виталий!
А зачем Вам, собственно, макрос?? Не проще ли намного просто-напросто выбрать тип данных "Действительное" ??
Неизвестный
30.11.2010, 21:43
общий
это ответ
Здравствуйте, Миронычев Виталий!
в модуле "ЭтаКнига" нужно написать следующее
Код:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim i As Integer
Const letters As String = "qwertyuiopasdfghjklzxcvbnmёйцукенгшщзхъфывапролджэячсмитьбю"

For i = 1 To Len(Target.Value)
If InStr(1, letters, Mid(Target.Value, i, 1), vbTextCompare) > 0 Then
MsgBox "Нельзя вводить буквы", vbExclamation
Target.Clear
Target.Select
Exit Sub
End If
Next i

End Sub
Неизвестный
30.11.2010, 22:30
общий
это ответ
Здравствуйте, Миронычев Виталий!
Пропишите в исходнике листа следующее:

Dim TolkoTzifra As String
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

У меня в Excel макрос пошел прекрасно, чего желаю и Вам
Неизвестный
30.11.2010, 22:35
общий
Dim TolkoTzifra As String необязательно, это лишь название искомой переменной.
Неизвестный
01.12.2010, 00:18
общий
Самый маленький и прекрасно работающий макрос для Вашей задачи:

Private Sub Worksheet_Change(ByVal Target As Range)
For Each cl In Target.Cells
If WorksheetFunction.IsText(cl) Then cl.ClearContents
Next
End Sub


Минимум текста и все работает
Неизвестный
01.12.2010, 13:47
общий
на самом деле макрос хоть и маленький, но он некорректно будет работать с IP-адресами или если разряды в числе разделены пробелами. также если дата введена в формате, отличном от системного. например "192.168.10.12", "123 456 789" или "01-01-2011". это будет восприниматься как текст в связи с невозможностью преобразования в число или другой формат. поэтому лучше все-таки делать проверку вводимых символов.
Неизвестный
01.12.2010, 13:54
общий

Не могу не согласиться, работать корректно он будет только с набором простых чисел, поэтому рекомендую все-таки вариант выше
Неизвестный
01.12.2010, 13:55
общий
в Вашем ответе № 264457 неверно описано решение. в вопросе спрашивалось не как вводить только цифры, а как ввести любой символ кроме букв. и здесь от проверки алфавита никуда не деться.
Неизвестный
01.12.2010, 14:04
общий

упс...факт, вопрос неправильно прочел и истолковал..
Неизвестный
02.12.2010, 07:17
общий
Уважаемый Миронычев Виталий, автор вопроса!
Пожалуйста, скажите, подходит ли Вам ответ или его изменить, т.е. оставить ограничение "только цифры" или нужно запретить ввод ТОЛЬКО букв?

С уважением, Евгений.
Неизвестный
02.12.2010, 08:20
общий
Попробуйте такой вариант решения:

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

Возможно, именно это Вы искали?
Неизвестный
02.12.2010, 20:37
общий
Такими темпами Вы через пару постов к моему ответу придете
Неизвестный
02.12.2010, 23:24
общий
Надеюсь, что нет
Форма ответа