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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2015, 15:32   #1
po4esal
Новичок
Джуниор
 
Регистрация: 29.10.2015
Сообщений: 3
По умолчанию Как отсекать ввод не цифр

Доброго дня! Ни разу не программист, но была необходимость сделать макрос. Его суть: на листе есть ячейки, в который пользователь может занести цифру, которая будет номером строки во вспомогательном листе. Введется формула "='лист такой-то'! B 'номер строки' . Каким образом отсекать ввод не цифр (например если нажать DEL будет ошибка).
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim zn As Integer

If Intersect(Target, Range("C13:C24,S13:S24,F5:Q5,F26:Q26")) Is Nothing Then Exit Sub
Application.EnableEvents = False
zn = Target.Value
Target.Formula = "=К!B" & zn & ""
Application.EnableEvents = True

End Sub
po4esal вне форума Ответить с цитированием
Старый 29.10.2015, 15:37   #2
AleksandrH
Форумчанин
 
Аватар для AleksandrH
 
Регистрация: 15.02.2010
Сообщений: 148
По умолчанию

курсор в нужную ячейку и Данные-Работа с данными-Проверка данных - параметры - Типданных:целое. Значение:больше.Минимум:0. - ОК
WIX-FILTERS. A Filter for every application.
AleksandrH вне форума Ответить с цитированием
Старый 29.10.2015, 15:38   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

я бы Вам, как "Ни разу не программисту" посоветовал бы воспользоваться стандартными средствами Excel для проверки данных.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 29.10.2015, 16:08   #4
po4esal
Новичок
Джуниор
 
Регистрация: 29.10.2015
Сообщений: 3
По умолчанию

Сделал проверку как вы посоветовали. После первого же неверного ввода макрос перестает работать.
po4esal вне форума Ответить с цитированием
Старый 29.10.2015, 16:22   #5
AleksandrH
Форумчанин
 
Аватар для AleksandrH
 
Регистрация: 15.02.2010
Сообщений: 148
По умолчанию

Нагло стырил регексп с соседней темы
Код:
Function yy(t1$)
  With CreateObject("vbscript.regexp"): .Global = True
      .Pattern = "\d+"
    If .test(t1) Then yy = .Execute(t1)(0).Value Else yy = ""
  End With
End Function


Private Sub Worksheet_Change(ByVal Target As Range)
Dim zn As Integer, y_y

If Intersect(Target, Range("C13:C24,S13:S24,F5:Q5,F26:Q26")) Is Nothing Then Exit Sub
'Application.EnableEvents = False
If Target.HasFormula Then
    Exit Sub
Else
y_y = yy(Target.Value)
zn = IIf(y_y = "", 1, y_y)
Target.Formula = "=K!B" & zn & ""
'Application.EnableEvents = True
End If
End Sub
WIX-FILTERS. A Filter for every application.
AleksandrH вне форума Ответить с цитированием
Старый 29.10.2015, 16:24   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
zn = int(val(Target.Value)):  if zn < 1 then exit sub
Application.EnableEvents = False
Target.Formula = "=К!B" & zn & ""
Application.EnableEvents = True
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 29.10.2015, 16:54   #7
po4esal
Новичок
Джуниор
 
Регистрация: 29.10.2015
Сообщений: 3
По умолчанию

Заработало когда еще добавил On Error Resume Next
Может кому пригодится полный код
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim zn As Integer

If Intersect(Target, Range("C13:C24,S13:S24,F5:Q5,F26:Q26")) Is Nothing Then Exit Sub
    On Error Resume Next

zn = Int(Val(Target.Value)):  If zn < 1 Then Exit Sub
Application.EnableEvents = False
Target.Formula = "=К!B" & zn & ""
Application.EnableEvents = True

End Sub
Спасибо за подсказку, хотя не понимаю что делает int(val(Target.Value))
po4esal вне форума Ответить с цитированием
Старый 29.10.2015, 17:03   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

проверку значения через проверку данных нужно вообще убрать
int(val(Target.Value))
выделяет целую часть от значения из Target, если там не число вернет 0 и не станет ничего делать дальше

сюда ведь нужно число >=1
Target.Formula = "=К!B" & zn & ""
и можно упростить до
Target.Formula = "=К!B" & zn
добавлять пустую строку в конце нет ни какого смысла
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 29.10.2015 в 17:07.
IgorGO вне форума Ответить с цитированием
Старый 31.10.2015, 00:54   #9
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

Вот еще вариант

Код:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim zn As String
If Intersect(Target, Range("C13:C24,S13:S24,F5:Q5,F26:Q26")) Is Nothing Then Exit Sub
    Application.EnableEvents = False
    zn = Target.Value
If Not IsNumeric(zn) Or zn = "Empty" Then Target.ClearContents: Application.EnableEvents = True: Exit Sub
    Target.Formula = "=К!B" & zn & ""
    Application.EnableEvents = True
End Sub
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 02.11.2015, 00:03   #10
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

очередной пример точно сформулированной задачи:
тема:
Цитата:
как отсечь ввод не цифр
а на самом деле нужно проверить что в ячейке число >= 1 и <= Количества_строк_на_листе

допустим,
введено 0 (ноль)
это цифра? (бросьте в меня камень, если нет)
а в ячейке получите #ИМЯ?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка на ввод цифр и букв helpkz Помощь студентам 5 23.04.2013 13:01
Ввод только цифр в ComboBox Smogg Win Api 2 12.12.2012 18:15
Pascal ввод цифр Brabus Помощь студентам 4 21.01.2011 00:14
Ввод только цифр StdentOfCollege Общие вопросы Delphi 3 09.04.2010 16:13
Ввод цифр Veytarn Общие вопросы C/C++ 4 30.12.2006 20:02