Страницы: 1
RSS
Задать формат с разделителями и указать количество знаков после запятой
 
Всем доброго времени суток!
Чтобы в userform сразу разрешать ввод только цифр я написал так (подсмотрел на другом форуме):
Код
Private Sub TextBox1_Change()
    Dim s&
    On Error Resume Next
    Me.TextBox1 = Trim(Me.TextBox1)
    s = Me.TextBox1
    If Err Then
        Me.TextBox1 = Left(Me.TextBox1, Len(Me.TextBox1) - 1)
    End If
End Sub

Подскажите, пожалуйста, как мне задать формат отображения вводимых данных с разделителями ("12 345,56" )?
И как ограничить количество знаков после запятой (для некоторых ячеек мне нужен один знак, для некоторых - два, а для некоторых - мне надо, чтобы запятую вообще не мог ввести пользователь)?

Заранее всех благодарю!
 
Контроль ввода в TextBox  только цифры (Автор – Игорь)
Код
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    txt = Me.TextBox1    ' читаем текст из поля (для недопущения ввода двух и более запятых)
    If InStr(1, txt, ",") > 0 And Len(txt) - InStr(1, txt, ",") = 2 Then KeyAscii = 0  ' только 2 цифры после запятой
    Select Case KeyAscii
        Case 8:    ' нажат Backspace - ничего не делаем
        Case 44: KeyAscii = IIf(InStr(1, txt, ",") > 0, 0, 44)    ' если запятая уже есть - отменяем ввод символа
        Case 46: KeyAscii = IIf(InStr(1, txt, ",") > 0, 0, 44)    ' заменяем при вводе точку на запятую
        Case 48 To 57    ' если введена цифра  - ничего не делаем
        Case Else: KeyAscii = 0    ' иначе отменяем ввод символа
    End Select
End Sub
 
Юрий, большое Вам спасибо!!

А отображение  в textbox вводимых цифр сразу с учетом формата текста с разделителями в этом же коде можно реализовать? Спасибо.
 
Код
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    TextBox1.Text = Format(TextBox1.Text, "### ##0.00")
End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Dim txt$
    txt = Me.TextBox1    ' читаем текст из поля (для недопущения ввода двух и более запятых)
    If InStr(1, txt, ",") > 0 And Len(txt) - InStr(1, txt, ",") = 2 Then KeyAscii = 0  ' только 2 цифры после запятой
    Select Case KeyAscii
    Case 8:    ' нажат Backspace - ничего не делаем
    Case 44: KeyAscii = IIf(InStr(1, txt, ",") > 0, 0, 44)    ' если запятая уже есть - отменяем ввод символа
    Case 46: KeyAscii = IIf(InStr(1, txt, ",") > 0, 0, 44)    ' заменяем при вводе точку на запятую
    Case 48 To 57    ' если введена цифра  - ничего не делаем
    Case Else: KeyAscii = 0    ' иначе отменяем ввод символа
    End Select
End Sub
Я сам - дурнее всякого примера! ...
 
Уважаемый KukIP, спасибо большое!
Оказывается все просто!)))
 
Уважаемые специалисты, добрый вечер!
Начал сегодня воплощение ваших советов на своем примере и увидел кучу проблем:
http://i.piccy.info/i9/d160abff75309f485849d8620b017951/1426795932/95995/88­4595/oshybka_proverka_na_...
http://i.piccy.info/i9/3591af012f67f5e71071ee40464a1ba9/1426796269/87558/88­4595/oshybka_proverka_na_...
http://i.piccy.info/i9/053bd738e9d7418e8329cadf6b7829a4/1426796291/77614/88­4595/oshybka_proverka_na_...

Код вот:
Код
Private Sub tx1TovarArub_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    tx1TovarArub.Text = Format(tx1TovarArub.Text, "### ##0.00")
End Sub
 
Private Sub tx1TovarArub_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Dim txt$
    txt = Me.tx1TovarArub     ' читаем текст из поля (для недопущения ввода двух и более запятых)
    If InStr(1, txt, ",") > 0 And Len(txt) - InStr(1, txt, ",") = 2 Then KeyAscii = 0 ' только 2 цифры после запятой
    Select Case KeyAscii
    Case 8:      ' нажат Backspace - ничего не делаем
    Case 44: KeyAscii = IIf(InStr(1, txt, ",") > 0, 0, 44) ' если запятая уже есть - отменяем ввод символа
    Case 46: KeyAscii = IIf(InStr(1, txt, ",") > 0, 0, 44) ' заменяем при вводе точку на запятую
    Case 48 To 57 ' если введена цифра - ничего не делаем
    Case Else: KeyAscii = 0 ' иначе отменяем ввод символа
    End Select
End Sub
Вроде сделал, все, как вы сказали, но видимо что-то не учел. Подскажите плиз что к чему?
 
 Создал форму, на ней TextBox, назвал его tx1TovarArub. Добавил на форму кнопку. Скопировал последний показанный Вами код - всё работает.
 
Да, Юрий, действительно, Вы правы - тоже создал новую форму, на ней TextBox, назвал его tx1TovarArub, все работает. Буду ковыряться дальше...
 
Все, разобрался! Спасибо всем!! Работает!!)
Страницы: 1
Наверх