Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 060

Раздел: Basic
/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Необходимо создать условия для трех TextBox при вводе числовых значений вручную с клавиатуры.

1.Условие для TextBox2 ввод в ручную только числовых значений от 0 до 40 и от 0 -40 Основной цвет значений красный, если заносится значение с отрицательным знаком то цвет становится синим.
2.Условие для TextBox3 ввод только числовых значений не более пятизначных.
3.Условие для TextBox4 ввод только числовых значений, но числовое значение не должно быть равно или превышать значение TextBox3.

resseg Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: resseg (статус: Посетитель)
Вопрос отправлен: 2 августа 2009, 15:35
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Егор

Здравствуйте, resseg!
хм... в с++ и дельфи удобнее - там есть функции преобразования... ладно, будем работать с тем, что есть.

первое - работаем не с TextBox непосредственно, а с его свойством text - TextBox1.Text

второе - придётся разбирать строку самому :( - сначала удалим пробелы в начале и конце введённого текста функцией trim(), затем проверим первый символ (цифра или знак минус), а затем в цикле проверим остальные символы (цифра ли это)

третье - преобразуем строку в число функцией Val()

четвёртое - проверим полученное число на принадлежность диапазону -40...40

ну и, думаю, можно проверять введённое значение не в процессе ввода (хотя и так можно), а уже после ввода - при нажатии на какую-либо кнопку. ну, тут уже вам решать :)

с остальными TextBox'ами, думаю, разберётесь? :)

кстати, для третьего TextBox'а дополнительно можно установить максимальную длину - это свойство MaxLength

код в приложении

Приложение:
  1. Private Sub CommandButton1_Click()
  2.  
  3. s = Trim(TextBox2.Text)
  4.  
  5.  
  6. If Mid(s, 1, 1) = "-" Then s = Right(s, Len(s) - 1)
  7.  
  8.  
  9. correct = True
  10.  
  11.  
  12. For i = 1 To Len(s)
  13. If Mid(s, i, 1) < 0 Or Mid(s, i, 1) > 9 Then correct = False
  14. Next i
  15.  
  16.  
  17. If correct = False Then
  18.  
  19. Exit Sub
  20. End If
  21.  
  22.  
  23. X = Val(TextBox2.Text)
  24.  
  25.  
  26. If X < -40 Or X > 40 Then
  27. TextBox2 = ""
  28.  
  29. Exit Sub
  30. End If
  31.  
  32.  
  33. If X > 0 Then TextBox2.ForeColor = &HFF&
  34. If X < 0 Then TextBox2.ForeColor = &HFF0000
  35.  
  36. End Sub


Ответ отправил: Егор (статус: 10-ый класс)
Время отправки: 5 августа 2009, 21:57
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 27; последнее сообщение — 7 августа 2009, 18:52; участников в обсуждении: 2.

Страницы: [1] [2] [Следующая »]

Егор

Егор (статус: 10-ый класс), 5 августа 2009, 00:44 [#1]:

Basic-то какой версии?
VB 6.0, Visual Basic .NET (Visual Studio 2005) и т.д.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
resseg

resseg (статус: Посетитель), 5 августа 2009, 20:36 [#2]:

VB 6.5
resseg

resseg (статус: Посетитель), 5 августа 2009, 20:41 [#3]:

По условию в TextBox2 можно вводить только числовые значения от -40 до 40.
Но при комбинации чисел, например -40- или -2- -3-3 3-2- выдается ошибка
Как сделать, чтобы минус вводился только спереди числа и негде больше?

код

Private Sub TextBox2_Change()
TextBox2.ForeColor = &H80000012
If TextBox2 = "" Then Exit Sub
If TextBox2 = "-" Then Exit Sub
If TextBox2 = "--" Or TextBox2 = "---" Then TextBox2 = "-": Exit Sub
X = TextBox2 * 1
If X * 1 > 40 Or X * 1 < -40 Then TextBox2 = "": MsgBox "Допустимые значения температуры топлива от -40 гр.С до 40 гр.С", vbInformation, "Запрет ввода"
If X * 1 > 0 Then TextBox2.ForeColor = &HFF&
If X * 1 < 0 Then TextBox2.ForeColor = &HFF0000
End Sub

Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii < 45 Or KeyAscii > 57 Then
KeyAscii = 0
MsgBox " Не допустимое значение.", vbInformation, "Запрет ввода"
End If
If KeyAscii < 48 And KeyAscii > 45 Then
KeyAscii = 0
MsgBox " Не допустимое значение.", vbInformation, "Запрет ввода"
End If
End Sub
resseg

resseg (статус: Посетитель), 5 августа 2009, 22:24 [#4]:

Что-то я не понял, причем тут CommandButton1_Click
Мне необходимо чтобы условие выполнялось при вводе значений в TextBox2.
Проще говоря, от -40 до 40 и больше ни чего. Чтобы пользователь не смог ввести комбинацию других значений.
Вот полный код, но он не дает того результата который мне необходим.

Private Sub TextBox2_Change()
TextBox2.ForeColor = &H80000012
If TextBox2 = "" Then Exit Sub
If TextBox2 = "-" Then Exit Sub
If TextBox2 = "--" Or TextBox2 = "---" Then TextBox2 = "-": Exit Sub
X = TextBox2 * 1
If X * 1 > 40 Or X * 1 < -40 Then TextBox2 = "": MsgBox "Допустимые значения температуры топлива от -40 гр.С до 40 гр.С", vbInformation, "Запрет ввода"
If X * 1 > 0 Then TextBox2.ForeColor = &HFF&
If X * 1 < 0 Then TextBox2.ForeColor = &HFF0000
End Sub
------------------------------------------------------------
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii < 45 Or KeyAscii > 57 Then
KeyAscii = 0
MsgBox " Не допустимое значение.", vbInformation, "Запрет ввода"
End If
If KeyAscii < 48 And KeyAscii > 45 Then
KeyAscii = 0
MsgBox " Не допустимое значение.", vbInformation, "Запрет ввода"
End If
End Sub
Егор

Егор (статус: 10-ый класс), 6 августа 2009, 11:38 [#5]:

Хм, необходимо было ЯВНО указать, что нужен именно фильтр при ВВОДЕ. :)

Хорошо.

1. Вначале - не думаю, что нажатие каждой "неверной" клавиши должно обязательно сопровождаться выводом собщения об ошибке - раздражает. просто игнорируем и всё


2. Строки кода
-------------------------------------------------------------------------
If KeyAscii < 48 And KeyAscii > 45 Then
KeyAscii = 0
MsgBox " Недопустимое значение.", vbInformation, "Запрет ввода"
End If
=========================================================================
НИКОГДА не выполняются - т.к. значение кода не может быть одновременно и меньше 48 (ноль) И больше 45 (девятка).
Убираем эти строки.


3. Далее. В вашу программу можно вводить не только минус (ну, это понятно), но ещё и точку и слэш ("/") - а вот это не нужно, так?
Исправленный код:
-------------------------------------------------------------------------
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'фильтр на ввод цифр и знака "минус":
If (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii <> 45 Then
KeyAscii = 0
'MsgBox " Не допустимое значение.", vbInformation, "Запрет ввода" - убираем, ибо раздражает
End If
End Sub
=========================================================================


4. В обработчике TextBox2_Change уже проверяем число на корректность:
-------------------------------------------------------------------------
Private Sub TextBox2_Change()
'пустую строчку просто игнорируем
If TextBox2.Text = "" Then Exit Sub

'установим нужный цвет сразу же - проверим первый символ - он "минус" или нет:
If Left(TextBox2.Text, 1) = "-" Then
TextBox2.ForeColor = &HFF&
Else
TextBox2.ForeColor = &HFF0000
End If

'ищем минус, начиная со второго символа (первым символом минус быть может, вторым - уже нет)
i = InStr(2, TextBox2.Text, "-")

'удалим найденный минус (если он найден)
If i > 0 Then
TextBox2.Text = Left(TextBox2.Text, i - 1) + Right(TextBox2.Text, Len(TextBox2.Text) - i)
End If
End Sub
=========================================================================


5. А вот проверку на то, чтобы число было в интервале от -40 до 40, лучше делать в другом обработчике - Exit - этот обработчик вызывается тогда, когда вы пытаетесь выйти из TextBox'a. Это удобнее. Возможно, пользователь, сам увидит ошибку и исправит её ещё до выхода из TextBox'a - зачем ему лишний раз "тыкать" носом в ошибку, которую он и так видит и сам хочет исправить?
-------------------------------------------------------------------------
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'преобразуем текст из TextBox2 в число:
X = Val(TextBox2.Text)

'проверим принадлежность заданному диапазону:
If X < -40 Or X > 40 Then
MsgBox "Допустимые значения температуры топлива от -40 гр.С до 40 гр.С", vbInformation, "Запрет ввода"
'Cancel = True означает, что выйти из textbox нельзя:
Cancel = True
Else
Cancel = False
End If
End Sub
=========================================================================

Ответ устраивает? :) Тогда мне пятёрку поставьте :)
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Егор

Егор (статус: 10-ый класс), 6 августа 2009, 11:40 [#6]:

и пишите комментарии в программах, пожалуйста - ОЧЧЧЧЕНЬ полезная, оказывается, штука. :)
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
resseg

resseg (статус: Посетитель), 6 августа 2009, 17:42 [#7]:

Код не запускается, происходит вход в VB c обозначением параметра If KeyAscii в начале.
Егор

Егор (статус: 10-ый класс), 6 августа 2009, 17:55 [#8]:

Всё точно скопировано? Один в один?
Эту строчку ("if KeyAscii...") ещё раз нужно проверить

Там именно
"if KeyAscii"
или
"if (KeyAscii"?
С открывающей круглой скобкой?

Если возникает ошибка, то нужно описание - какая ошибка. Можно и скриншот выложить - а то я не понимаю, что значит фраза "Код не запускается, происходит вход в VB c обозначением параметра If KeyAscii в начале."
VB не Excel'евский, случаем? :)
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
resseg

resseg (статус: Посетитель), 6 августа 2009, 21:09 [#9]:

Данный код дает то, что мне нужно, без касяков,но после нуля вводится несколько цифр (подправьте)
и необходим цвет положительных и отрицательных значений. Все.

Private Sub TextBox2_Change()
If Trim(TextBox2.Text) <> CStr(Fix(Val(TextBox2.Text))) Then
lblError2.Visible = True
Else
lblError2.Visible = False
End If

If Fix(Val(TextBox2.Text)) > 40 Then
TextBox2.Text = 40
End If
If Fix(Val(TextBox2.Text)) < -40 Then
TextBox2.Text = -40
End If
End Sub

Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If (KeyAscii = 45) Or ((KeyAscii >= 48) And (KeyAscii <= 57)) Then
' OK
If KeyAscii = 45 Then
TextBox2.Text = Val(TextBox2.Text) * -1
KeyAscii = 0
End If
Else
Debug.Print KeyAscii
KeyAscii = 0
End If
End Sub
Егор

Егор (статус: 10-ый класс), 6 августа 2009, 21:32 [#10]:

а чем мой код не устраивал?

после "подправьте" забыли написать ПОЖАЛУЙСТА
а ещё есть такое слово, как "спасибо"

этот код зачем? что он делает?
--------------------------
If KeyAscii = 45 Then
TextBox2.Text = Val(TextBox2.Text) * -1
=========================================

вы мой код читаете вообще? там была операция смены цвета:
--------------------------
'установим нужный цвет сразу же - проверим первый символ - он "минус" или нет:
If Left(TextBox2.Text, 1) = "-" Then
TextBox2.ForeColor = &HFF&
Else
TextBox2.ForeColor = &HFF0000
End If
=========================================

если вы САМИ дошли до такой конструкции, как "Trim(TextBox2.Text) <> CStr(Fix(Val(TextBox2.Text)))", то удаление лишних нулей, думаю, для вас не проблема :)
а то у меня такое чуство, что вы нисколько не вникаете в смысл, а просто хотите, чтобы кто-то что-то за вас сделал - не вышло здесь (где-то при перепечатке ошибку ВЫ допустили, не я) - вы бежите в другое место и там берёте чужой код, не думая.
там не заработало - идёте сюда
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Егор

Егор (статус: 10-ый класс), 6 августа 2009, 21:39 [#11]:

если пользователь вводит "5-" и у него это автоматом конвертируется в "-5" - это я ещё могу как-то понять, но если он вводит "-5-" и это превращается в "5" - извините, мне такая программа не понравилась бы. пусть будет блокировка - чтобы не мог вводить больше минусов вообще, если один уже ввёл - это стандартное поведение подавляющего количества программ, зачем делать что-то не по стандарту? обоснование этого есть? обоснование "это круто, прикольно" не канает.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
resseg

resseg (статус: Посетитель), 6 августа 2009, 22:32 [#12]:

Я этого не скрываю, Вы правы, я не профессионал и не специалист по программированию.
По этому, я обратился к вам.

1. Начало Ващшего кода

Private Sub TextBox1_Change()
If KeyAscii < 48 And KeyAscii > 45 Then
KeyAscii = 0
MsgBox " Недопустимое значение.", vbInformation, "Запрет ввода"
End If

2. Остановка код не срабатывает

3. Продолжение кода

Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'фильтр на ввод цифр и знака "минус":
....

На пункте 2 происходит вход VB и остановка в конце End If
Егор

Егор (статус: 10-ый класс), 7 августа 2009, 00:04 [#13]:

:)
Я же написал, что эти строки НЕ нужны - удалить :)))
Ладно, сделаем ещё и так, чтобы уберались лишние нолики. Но вот тут, думаю, нолики имеет смысл убирать лишь после того, как пользователь ввёл число - формально запись "002" не является же ошибкой? И в математике это корректно :) Но лишние нолики уберутся сразу же после того, как пользователь выйдет из TextBox'a.
И ещё - я у вас видел, что при ошибке будет появлятся метка с сообщением об ошибке - это интересный ход. :) Я его оставил, т.е. вам необходимо будет, чтобы на форме была метка с именем lblError2, а в ней запись об ошибке.

Кхм... Ещё одна ошибка была :) - если скопировать произвольный текст (из другой программы, например) и вставить его в TextBox, то этот некорректный текст вставится без проблем :)
Косяк исправил проверкой всех символов и удалением нецифр :)

Вот код в полном виде:

-------------------------------------------------------
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'фильтр на ввод цифр и знака "минус":
If (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii <> 45 Then
KeyAscii = 0
End If
End Sub

Private Sub TextBox2_Change()
'пустую строчку просто игнорируем
If TextBox2.Text = "" Then Exit Sub
'установим нужный цвет сразу же - проверим первый символ - он "минус" или нет:
If Left(TextBox2.Text, 1) = "-" Then
TextBox2.ForeColor = &HFF&
Else
TextBox2.ForeColor = &HFF0000
End If
'так как в данном случае возникают не очень хорошие последствия, если работать непосредственно
'с TextBox2.Text, то заведём отдельную строчку и все операции проделаем с ней, а потом уже её
'перепишем в TextBox2.Text
s = ""
'проверим все символы по порядку на принадлежность их цифрам и вставим в строку цифры и минус (если он первый):
For i = 1 To Len(TextBox2.Text)
If s = "" And Mid(TextBox2.Text, i, 1) = "-" Then s = "-"
If Mid(TextBox2.Text, i, 1) >= "0" And Mid(TextBox2.Text, i, 1) <= "9" Then
s = s + Mid(TextBox2.Text, i, 1)
End If
Next i
'получившуюся строку записываем в TextBox2.Text
If TextBox2.Text <> s Then TextBox2.Text = s
'преобразуем текст из TextBox2 в число:
x = Val(s)
'сделаем индикатор того, что ввод неправильный:
If x < -40 Or x > 40 Then lblError2.Visible = True Else lblError2.Visible = False
End Sub

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'преобразуем текст из TextBox2 в число:
x = Val(TextBox2.Text)
'проверим принадлежность заданному диапазону:
If x < -40 Or x > 40 Then
MsgBox "Допустимые значения температуры топлива от -40 гр.С до 40 гр.С", vbInformation, "Запрет ввода"
'Cancel = True означает, что выйти из textbox нельзя:
Cancel = True
'преобразуем строку в число, а затем это число обратно в строку - так мы удалим ведущие нули
Else
Cancel = False
End If
TextBox2.Text = Str(Val(TextBox2.Text))
End Sub
=======================================================
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Егор

Егор (статус: 10-ый класс), 7 августа 2009, 00:05 [#14]:

а "спасибы" никто не отменял, между прочим :)

хотя бы поблагодарить человека за помощь нужно
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
resseg

resseg (статус: Посетитель), 7 августа 2009, 15:46 [#15]:

Выдает ошибку на:
'сделаем индикатор того, что ввод неправильный:
If x < -40 Or x > 40 Then lblError2.Visible = True Else lblError2.Visible = False
Непосредственно на lblError2.Visible = False
--------------------------------------------------------
Короче я ни разу не мог запустить форму с Вашими кодами. Что бы посмотреть, как выполняется условие.
Нужна пятерка, держите пятерку.
Нужна благодарность. Благодарю.
Егор

Егор (статус: 10-ый класс), 7 августа 2009, 16:13 [#16]:

Я же написал, что lblError2 - это я взял из вашего же кода. Думал, что эта метка у вас есть. Ну, раз VB ругается на эту строчку, значит, метки у вас на форме нет. Или добавляйте эту метку или удаляйте эти строки.
Метку сможете добавить, а потом переименовать в lblError2? Или объяснить как это сделать?

Либо подправляем код - убираем все упоминания об этой метке. Фрагмент кода:
---------------------
...
'получившуюся строку записываем в TextBox2.Text
If TextBox2.Text <> s Then TextBox2.Text = s
'преобразуем текст из TextBox2 в число:
x = Val(s)
'сделаем индикатор того, что ввод неправильный:
If x < -40 Or x > 40 Then lblError2.Visible = True Else lblError2.Visible = False
End Sub
...
=======================

заменяем на:

---------------------
...
'получившуюся строку записываем в TextBox2.Text
If TextBox2.Text <> s Then TextBox2.Text = s
End Sub
...
=======================

т.е.:

[оставляем-->] 'получившуюся строку записываем в TextBox2.Text
[оставляем-->] If TextBox2.Text <> s Then TextBox2.Text = s
[УБИРАЕМ==>] 'преобразуем текст из TextBox2 в число:
[УБИРАЕМ==>] x = Val(s)
[УБИРАЕМ==>] 'сделаем индикатор того, что ввод неправильный:
[УБИРАЕМ==>] If x < -40 Or x > 40 Then lblError2.Visible = True Else lblError2.Visible = False
[оставляем-->] End Sub

Вот честно, у меня всё работает. Правда. Я не издеваюсь и не даю нерабочий код - сам сидел, отлаживал. Работает.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
resseg

resseg (статус: Посетитель), 7 августа 2009, 16:56 [#17]:

Честно сказать я запутался с таким ограмадным кодом на один объект. У меня на форме объект TextBox2 остальное я все удалил. Первоначальный код который я давал для примера, он тоже удален, так как он не выполняет необходимые условия. Я вставляю Ваш код за 07.08.09 он вообще не работает из за выше перечисленных проблем. Сейчас Вы даете дополнительно рекомендации, но я уже плыву как топор в воде.

Подробней об условие:
Пользователь с клавиатуры вводит в TextBox2 числовые значения температуры. По условию кода можно вводить значения, от -40 до 40 и больше ни каких вариантов. Данные температуры будут вычисляться по формуле в Excel.
Если код позволят вводить какие либо другие значения, и пользователь по ошибке введет не то что надо (а он это введет рано или поздно), то при дальнейшем вычисление, мы получим ералаш.

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

Егор (статус: 10-ый класс), 7 августа 2009, 17:48 [#18]:

Вот, уже немного понятнее. Хорошо.
На форме есть поле ввода - textbox2 - так? Если вы всё удалили, а потом снова поставили, то по умолчанию это будет не textbox2, а textbox1 (не два, а один).

Давайте сделаем так:

1. Делаем новую, ПУСТУЮ форму. На неё ставим ДВА textbox'a - один будет первым, другой - вторым.

2. Сделаем на ЛЮБОМ из textbox'ов двойной щелчок мышью - попадаем в инспектор кода.
Там будет следующее:
-----------------------------------
Private Sub TextBox2_Change()

End Sub
==================================
Так?
Ну или будет ...TextBox1_Change()... - первый текстбокс. В нашем случае это не важно.

3. Потом удаляете ВСЕ строчки в инспекторе кода.

4. Затем вводите тот код, который я приведу в следующем сообщении.

5. Запускаем (нажав F5)

6. Во второе поле ввода (TextBox2) заносим что хотим - фильтр работает, ерунда не вводится. Но можно вводить любые числа - очень большие (но не более 15 цифр) - это не беда. Нажимаем Enter - при этом автоматически перейдём в другое поле, а число в исходном поле меняется на корректное - если оно было больше 40, то будет 40, если было меньше -40, то будет -40. Если было в диапазоне [-40...40], то оно не изменится.

Работает :)
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Егор

Егор (статус: 10-ый класс), 7 августа 2009, 17:51 [#19]:

Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'фильтр на ввод цифр и знака "минус":
If (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii <> 45 Then
KeyAscii = 0
End If
End Sub

Private Sub TextBox2_Change()
'ввод разрешим не более 15 цифр:
TextBox2.MaxLength = 15
'пустую строчку просто игнорируем
If TextBox2.Text = "" Then Exit Sub
'установим нужный цвет сразу же - проверим первый символ - он "минус" или нет:
If Left(TextBox2.Text, 1) = "-" Then
TextBox2.ForeColor = &HFF&
Else
TextBox2.ForeColor = &HFF0000
End If
'так как в данном случае возникают не очень хорошие последствия, если работать непосредственно
'с TextBox2.Text, то заведём отдельную строчку и все операции проделаем с ней, а потом уже её
'перепишем в TextBox2.Text
s = ""
'проверим все символы по порядку на принадлежность их цифрам и вставим в строку цифры и минус (если он первый):
For i = 1 To Len(TextBox2.Text)
If s = "" And Mid(TextBox2.Text, i, 1) = "-" Then s = "-"
If Mid(TextBox2.Text, i, 1) >= "0" And Mid(TextBox2.Text, i, 1) <= "9" Then
s = s + Mid(TextBox2.Text, i, 1)
End If
Next i
'получившуюся строку записываем в TextBox2.Text
If TextBox2.Text <> s Then TextBox2.Text = s
End Sub

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'преобразуем текст из TextBox2 в число:
x = Val(TextBox2.Text)
'проверим принадлежность заданному диапазону:
If x < -40 Then TextBox2.Text = "-40"
If x > 40 Then TextBox2.Text = "40"
TextBox2.Text = Str(Val(TextBox2.Text))
End Sub
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
Егор

Егор (статус: 10-ый класс), 7 августа 2009, 18:06 [#20]:

Кстати, в екселе есть автоматическая проверка введённых значений - выделяете ячейку, выбираете пункты меню Данные - Проверка и в появившемся окне указываете тип данных (целое число), значение (между), минимум (-40), максимум (40).
На вкладках "Сообщение для ввода" и "Сообщение об ошибке" вводите нужные сообщения. Всё. Теперь в ячейку можно ввести лишь целые числа из заданного диапазона. :)
Может в вашем случае это больше подойдёт?
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.

Страницы: [1] [2] [Следующая »]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 3 декабря 2021, 12:32
Выполнено за 0.03 сек.
Рейтинг@Mail.ru