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

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

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

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

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

Private Sub TextBox1_Change()
‘…
End Sub
...
Рейтинг: 0 / 0
10.02.2010, 14:09
    #36460499
segail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
числовые значения в TextBox
Поставлю вопрос так. Код уже есть.
Как разрешить ввод минуса только впереди числового значения. С учетом того что в свойствах указано максимальное количество знаков 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
10.02.2010, 14:25
    #36460569
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
числовые значения в TextBox
Проверяйте SelStart (положение курсора)
...
Рейтинг: 0 / 0
10.02.2010, 14:39
    #36460657
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
числовые значения в TextBox
> Автор: Shocker.Pro
> Проверяйте SelStart (положение курсора)

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

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

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

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

А вот в моих контролах, я вобоще обрабатываю ввод только после его окончания (по нажатию Enter или потере фокуса). Если ввод неправильный, контрол ругается на пользователя и предлагает отредактировать значение или вернуть предыдущее и не дает контролу потерять фокус, пока не сделан корректный ввод.
...
Рейтинг: 0 / 0
10.02.2010, 16:01
    #36460994
segail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
числовые значения в TextBox
Короче сделал грубо но на форме смотрится
Код: 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
19.05.2010, 13:50
    #36636478
valdemar_ru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
числовые значения в TextBox
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
19.05.2010, 13:56
    #36636513
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
числовые значения в TextBox
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
19.05.2010, 18:27
    #36637523
valdemar_ru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
числовые значения в TextBox
Shocker.Pro,
Я дописал функцию
Worksheets("Recept").Cells(tbScet_row, 12).Value = CSng (tbKolUPak.Text)
но теперь когда вводишь 2.5 или символ форма закрывается и выдает ошибку несоответствие типов.
Я так полагаю надо написать проверку, что нужно вводить только цифры и запятую ?
...
Рейтинг: 0 / 0
19.05.2010, 19:23
    #36637617
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
числовые значения в TextBox
valdemar_ru Shocker.Pro,
Я дописал функцию
Worksheets("Recept").Cells(tbScet_row, 12).Value = CSng (tbKolUPak.Text)
но теперь когда вводишь 2.5 или символ форма закрывается и выдает ошибку несоответствие типов.
Я так полагаю надо написать проверку, что нужно вводить только цифры и запятую ?

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

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

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

Большущие Спасибо!!!
...
Рейтинг: 0 / 0
19.05.2010, 22:12
    #36637919
.Михаил.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
числовые значения в TextBox
segail, может быть воспользоваться регулярными выражениями ?
...
Рейтинг: 0 / 0
24.05.2010, 13:52
    #36645201
valdemar_ru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
числовые значения в TextBox
нашел код корый проверяет, что бы можно было вводить цифры, пробел и -
он работает только на половину т.е. вводишь циры ошибка не выходит вводишь символ на английской расскладке выдает ошибку, но если ввести символ на русской раскладке вывалется по ошибке (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
24.05.2010, 13:59
    #36645230
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
числовые значения в TextBox
Эт лажа....

К тому же никак не защищает от вставки из буфера.
...
Рейтинг: 0 / 0
24.05.2010, 14:32
    #36645310
valdemar_ru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
числовые значения в TextBox
Shocker.Pro,
Что можете посоветовать ?
...
Рейтинг: 0 / 0
24.05.2010, 14:46
    #36645341
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
числовые значения в TextBox
IsNumeric
...
Рейтинг: 0 / 0
25.05.2010, 09:20
    #36646668
valdemar_ru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
числовые значения в TextBox
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
25.05.2010, 09:23
    #36646678
valdemar_ru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
числовые значения в TextBox
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
25.05.2010, 09:35
    #36646693
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
числовые значения в TextBox
во-первых, оформляйте код правильно

Код: 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
25.05.2010, 09:40
    #36646705
valdemar_ru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
числовые значения в TextBox
Shocker.Pro, Pr

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

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

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

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


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