powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / числовые значения в TextBox
25 сообщений из 51, страница 1 из 3
числовые значения в TextBox
    #36460401
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, подскажите как сделать чтобы в TextBox моно было вводить только пятизначные числовые значения отрицательные и положительные.
...
Рейтинг: 0 / 0
числовые значения в TextBox
    #36460414
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
segailЗдравствуйте, подскажите как сделать чтобы в TextBox моно было вводить только пятизначные числовые значения отрицательные и положительные.

А каким образом можно ввести пятизначное значение СРАЗУ? у вас клавиатура сразу пять знаков выдает?

Вы определитесь, либо нужно ограничить ввод цифрами, либо сделать проверку после ввода (например по нажатию кнопки, по нажатию Enter, по потере фокуса и т.п.)
...
Рейтинг: 0 / 0
числовые значения в TextBox
    #36460436
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IsNumeric - проверяете, число ли
потом Val - превращаете в число
Abs - убираете знак
i>9999 and i<100000 - проверяете диапазон
(справедливо для целых чисел, вы не указали, могут ли быть дробные)
...
Рейтинг: 0 / 0
числовые значения в TextBox
    #36460440
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Нужно ограничить ввод до пятизначного значения, не зависимо отрицательное или положительное. Например: -12345 12345

При выполнение действия:

Private Sub TextBox1_Change()
‘…
End Sub
...
Рейтинг: 0 / 0
числовые значения в TextBox
    #36460499
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поставлю вопрос так. Код уже есть.
Как разрешить ввод минуса только впереди числового значения. С учетом того что в свойствах указано максимальное количество знаков 5?
Private Sub TextBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii < 48 Or KeyAscii > 57 Then
KeyAscii = 0
MsgBox " //////////////"
End If
End Sub
...
Рейтинг: 0 / 0
числовые значения в TextBox
    #36460569
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверяйте SelStart (положение курсора)
...
Рейтинг: 0 / 0
числовые значения в TextBox
    #36460657
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Shocker.Pro
> Проверяйте SelStart (положение курсора)

+ ещё нужно перекрывать момент вставки данных из буфера обмена

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
числовые значения в TextBox
    #36460663
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос,

Я бы вообще не стал обрабатывать KeyPress, а обрабатывал только Change, запоминая предыдущее значение и возвращая его взад при некорректном вводе
...
Рейтинг: 0 / 0
числовые значения в TextBox
    #36460668
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProИгорь Горбонос,

Я бы вообще не стал обрабатывать KeyPress, а обрабатывал только Change, запоминая предыдущее значение и возвращая его взад при некорректном вводе

А вот в моих контролах, я вобоще обрабатываю ввод только после его окончания (по нажатию Enter или потере фокуса). Если ввод неправильный, контрол ругается на пользователя и предлагает отредактировать значение или вернуть предыдущее и не дает контролу потерять фокус, пока не сделан корректный ввод.
...
Рейтинг: 0 / 0
числовые значения в TextBox
    #36460994
segail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче сделал грубо но на форме смотрится
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Private Sub TextBox_L_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If KeyAscii <  48  Or KeyAscii >  57  Then
        KeyAscii =  0 
        MsgBox " Не допустимое значение.", vbInformation, "Запрет ввода"
    End If
End Sub

Private Sub TextBox_L_Change()
    If TextBox_m1.Value = "-" Then TextBox_L.ForeColor = &HFF& Else TextBox_L.ForeColor = &H80000008
    If TextBox_L.Value = "" Then TextBox_m1.Value = ""
End Sub

Private Sub TextBox_m1_Change()
    If TextBox_L.Value = "" And TextBox_m1.Value = "-" Then
    MsgBox "Введите числовое значение в соседнем поле.", vbInformation, "Запрет ввода"
    TextBox_m1.Value = ""
    End If
    If TextBox_m1.Value <> "-" Then TextBox_m1.Value = ""
    If TextBox_m1.Value = "-" Then TextBox_L.ForeColor = &HFF& Else TextBox_L.ForeColor = &H80000008
End Sub
...
Рейтинг: 0 / 0
числовые значения в TextBox
    #36636478
valdemar_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
в TextBox ввожу цифры 0,2, потом по нажатию CommndButton происходит событие
Worksheets("Recept").Cells(tbScet_row, 12).NumberFormat = "0.00" (преобразует ячеку к чиловому формату)
Worksheets("Recept").Cells(tbScet_row, 12).Value = tbKolUPak.Text (вводится текст в определенную ячейку)
это число вставляется в ячейку с пометкой как текст и при это формат у ячейки остается числовой, если ввести 0.2 т.е. через точку то вставляется нармально = 0,20
необходимо вводить в TextBox число 0,2 или 0,55 и чтобы оно как число записывалось в ячеку как число
Неподскажешь в чем проблема ?
...
Рейтинг: 0 / 0
числовые значения в TextBox
    #36636513
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
valdemar_ru Shocker.Pro,
в TextBox ввожу цифры 0,2, потом по нажатию CommndButton происходит событие
Worksheets("Recept").Cells(tbScet_row, 12).NumberFormat = "0.00" (преобразует ячеку к чиловому формату)
Worksheets("Recept").Cells(tbScet_row, 12).Value = tbKolUPak.Text (вводится текст в определенную ячейку)
это число вставляется в ячейку с пометкой как текст и при это формат у ячейки остается числовой, если ввести 0.2 т.е. через точку то вставляется нармально = 0,20
необходимо вводить в TextBox число 0,2 или 0,55 и чтобы оно как число записывалось в ячеку как число
Неподскажешь в чем проблема ?

Пора писать вторую статью - о том, чтобы не использовали неявные преобразования.
Код: plaintext
Worksheets("Recept").Cells(tbScet_row,  12 ).Value = CCur(tbKolUPak.Text)
CCur заменить на нужную функцию.
...
Рейтинг: 0 / 0
числовые значения в TextBox
    #36637523
valdemar_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
Я дописал функцию
Worksheets("Recept").Cells(tbScet_row, 12).Value = CSng (tbKolUPak.Text)
но теперь когда вводишь 2.5 или символ форма закрывается и выдает ошибку несоответствие типов.
Я так полагаю надо написать проверку, что нужно вводить только цифры и запятую ?
...
Рейтинг: 0 / 0
числовые значения в TextBox
    #36637617
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
valdemar_ru Shocker.Pro,
Я дописал функцию
Worksheets("Recept").Cells(tbScet_row, 12).Value = CSng (tbKolUPak.Text)
но теперь когда вводишь 2.5 или символ форма закрывается и выдает ошибку несоответствие типов.
Я так полагаю надо написать проверку, что нужно вводить только цифры и запятую ?

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

То есть, конечно, самый простой выход - CSng(Replace(tbKolUPak.Text, ".", ","))
Но это работать будет только при установленной запятой в качестве разделителя.

Либо проверять IsNumeric и ругаться на пользователя.
...
Рейтинг: 0 / 0
числовые значения в TextBox
    #36637637
valdemar_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Большущие Спасибо!!!
...
Рейтинг: 0 / 0
числовые значения в TextBox
    #36637919
.Михаил.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
segail, может быть воспользоваться регулярными выражениями ?
...
Рейтинг: 0 / 0
числовые значения в TextBox
    #36645201
valdemar_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нашел код корый проверяет, что бы можно было вводить цифры, пробел и -
он работает только на половину т.е. вводишь циры ошибка не выходит вводишь символ на английской расскладке выдает ошибку, но если ввести символ на русской раскладке вывалется по ошибке (Invalid procedure call or argument (Error 5)).
Private Sub tbSnils_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Dim Errors
If InStr("0123456789- ", Chr(KeyAscii)) = 0 Then
KeyAscii = 0
Errors = MsgBox("1")
End If
End Sub
...
Рейтинг: 0 / 0
числовые значения в TextBox
    #36645230
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эт лажа....

К тому же никак не защищает от вставки из буфера.
...
Рейтинг: 0 / 0
числовые значения в TextBox
    #36645310
valdemar_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
Что можете посоветовать ?
...
Рейтинг: 0 / 0
числовые значения в TextBox
    #36645341
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IsNumeric
...
Рейтинг: 0 / 0
числовые значения в TextBox
    #36646668
valdemar_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Написал код для проверки:
Private Sub tbSnils_Change()
If Pr = True Then
Pr = False
Exit Sub
End If
Proverka
End Sub

Private Sub tbSnils_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 8 Or KeyCode = 46 Then
Pr = True
End If
End Sub

Sub Proverka()
Dim P As Variant
For i = 1 To Len(UserForm.tbSnils.Text)
P = Mid(UserForm.tbSnils.Text, i, 1)
If P < Chr(48) Or P > Chr(57) Then
If P < Chr(150) Or P > Chr(150) Then
If P < Chr(32) Or P > Chr(32) Then
If P < Chr(160) Or P > Chr(160) Then
If P < Chr(45) Or P > Chr(45) Then
MsgBox ("Вводить можно только цифры и - (шаблон ###-###-### ##)")
Exit Sub
End If
End If
End If
End If
End If
Next
'UserForm.tbSnils.SetFocus
End Sub
...
Рейтинг: 0 / 0
числовые значения в TextBox
    #36646678
valdemar_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Написал код для проверки:
авторPrivate Sub tbSnils_Change()
If Pr = True Then
Pr = False
Exit Sub
End If
Proverka
End Sub

Private Sub tbSnils_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 8 Or KeyCode = 46 Then
Pr = True
End If
End Sub

Sub Proverka()
Dim P As Variant
For i = 1 To Len(UserForm.tbSnils.Text)
P = Mid(UserForm.tbSnils.Text, i, 1)
If P < Chr(48) Or P > Chr(57) Then
If P < Chr(150) Or P > Chr(150) Then
If P < Chr(32) Or P > Chr(32) Then
If P < Chr(160) Or P > Chr(160) Then
If P < Chr(45) Or P > Chr(45) Then
MsgBox ("Вводить можно только цифры и - (шаблон ###-###-### ##)")
Exit Sub
End If
End If
End If
End If
End If
Next
End Sub
Проверка работает, но елси происходит событие KeyDown и после етого ввести символ или что то скопировать, то ошибка не выходит если не попробовать еще раз. Подскажите как можно поправить или почему так происходит ?
...
Рейтинг: 0 / 0
числовые значения в TextBox
    #36646693
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
во-первых, оформляйте код правильно

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
Private Sub tbSnils_Change()
    If Pr = True Then
        Pr = False
        Exit Sub
    End If
    Proverka   
End Sub

Private Sub tbSnils_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode =  8  Or KeyCode =  46  Then
        Pr = True
    End If
End Sub

Sub Proverka()
Dim P As Variant
    For i =  1  To Len(UserForm.tbSnils.Text)
      P = Mid(UserForm.tbSnils.Text, i,  1 )
        If P < Chr( 48 ) Or P > Chr( 57 ) Then
        If P < Chr( 150 ) Or P > Chr( 150 ) Then
        If P < Chr( 32 ) Or P > Chr( 32 ) Then
        If P < Chr( 160 ) Or P > Chr( 160 ) Then
        If P < Chr( 45 ) Or P > Chr( 45 ) Then
          MsgBox ("Вводить можно только цифры и - (шаблон ###-###-### ##)")
          Exit Sub
        End If
        End If
        End If
        End If
        End If   
    Next
End Sub

во-вторых. немного поясните смысл возни с Pr - я его не уловил
...
Рейтинг: 0 / 0
числовые значения в TextBox
    #36646705
valdemar_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, Pr

глобальная переменная которая позволяет отлавливать нажатия KeyCode=8 (BackSpace) и KeyCode=46 (Del) что бы можно было удалять введнный текст и проверка в этот момент не работала.
...
Рейтинг: 0 / 0
числовые значения в TextBox
    #36646724
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
valdemar_ru Shocker.Pro, Pr

глобальная переменная которая позволяет отлавливать нажатия KeyCode=8 (BackSpace) и KeyCode=46 (Del) что бы можно было удалять введнный текст и проверка в этот момент не работала.

А что меняет наличие этой проверки? Все равно кроме предупреждения прога у вас ничего не делает, вводить не запрещает, так какая разница, идет проверка после ввода символа или после удаления символа.

Я к тому, что если отключить проверку Pr , все работает нормально?
Я просто не работал с MSForms, не знаю особенностей возникновения Change
...
Рейтинг: 0 / 0
25 сообщений из 51, страница 1 из 3
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / числовые значения в TextBox
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]