powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / EXCEL , VBA Ввод данных в контрол типа TextBox
8 сообщений из 8, страница 1 из 1
EXCEL , VBA Ввод данных в контрол типа TextBox
    #32760669
Mouse_Beginner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
На диалоговом окне  имеется  72  контрола типа 
“TextBox” , в которые пользователь вводит  информацию.
Тип информации – только ЧИСЛОВОЙ , с  2 -мя
знаками после точки.
Что надо сделать, чтобы в эти контролы нельзя было ввести
НЕЧИСЛО  ( запятая допускается как разделитеь
дробной части.


СПАСИБО
...
Рейтинг: 0 / 0
EXCEL , VBA Ввод данных в контрол типа TextBox
    #32760738
1) проверять корректность в событии validate
2) фильтровать ввод событием KeyPress
3) использовать вместо textbox MaskEdBox
...
Рейтинг: 0 / 0
EXCEL , VBA Ввод данных в контрол типа TextBox
    #32761308
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по крайней мере до офис 2000 у textbox нет Validate - это только чистый васик.
...
Рейтинг: 0 / 0
EXCEL , VBA Ввод данных в контрол типа TextBox
    #32761505
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = 27 Then
TextBox1.Cancel = True
ElseIf Not ((KeyAscii >= vbKey0 And KeyAscii <= vbKey9) Or (KeyAscii = 46) Or (KeyAscii = vbKeyTab) Or (KeyAscii = 13)) Then
KeyAscii = 0
End If
End Sub

Пример можно развить
...
Рейтинг: 0 / 0
EXCEL , VBA Ввод данных в контрол типа TextBox
    #32762142
Mongol_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
big-dukeпо крайней мере до офис 2000 у textbox нет Validate - это только чистый васик. но можно подключить библеотеку
...
Рейтинг: 0 / 0
EXCEL , VBA Ввод данных в контрол типа TextBox
    #32762253
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4Mongol_v
Квкую библиотеку надо подклюить к vba чтобы у TextBox появилось св-во Validate ?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
EXCEL , VBA Ввод данных в контрол типа TextBox
    #38783558
VikSha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот такой получился у меня код:

Тип информации – только ЧИСЛОВОЙ, количество знаков до десятичного разделителя определяется переменной LimDig (6 в примере).
Переменная DecComa определяет количество десятичных разрядов (2 в примере), максимальое - 8.
Увеличить количество знаков после десятичного разделителя (точки или запятой) просто, - добавьте "решеток" (#) в строке FndComa.

Особенности кода:
-если ввод начат с нуля, к нему добавляется десятичный разделитель;
-если ввод начат с десятичного разделителя добавляется ведущий ноль;
-введеная в поле точка, заменяется на запятую.

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

С уважением VikSha
...
Рейтинг: 0 / 0
EXCEL , VBA Ввод данных в контрол типа TextBox
    #38783561
VikSha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: vbnet
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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
'Вот такой получился у меня код:
'
Private Sub txt_КД_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
 'Для корректной работы процедуры ввода числовой информации в TextBox, неободимо запретить
 'вставку скопированных данных в TextBox, копирование, вырезание и удаление данных из TextBox
        Select Case KeyCode
        Case vbKeyC And Shift = 2 'Копировать CTRL+C
             KeyCode = 0
        Case vbKeyV And Shift = 2 'Вставить CTRL+V
             KeyCode = 0
        Case vbKeyX And Shift = 2 'Вырезать CTRL+X
             KeyCode = 0
        Case vbKeyDelete 'Удалить DELETE
             KeyCode = 0
    End Select
End Sub

'txt_КД - это TextBox, в который пользователь вводит  информацию.

'Тип информации – только ЧИСЛОВОЙ, количество знаков до десятичного разделителя определяется переменной LimDig (6 в примере).
'Переменная DecComa определяет количество десятичных разрядов (2 в примере), максимальое - 8.
'Увеличить количество знаков после десятичного разделителя (точки или запятой) просто, - добавьте "решеток" (#) в строке FndComa.
'
'Особенности кода:
'-если ввод начат с нуля, к нему добавляется десятичный разделитель;
'-если ввод начат с десятичного разделителя добавляется ведущий ноль;
'-введеная в поле точка, заменяется на запятую.
'
Private Sub txt_КД_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
     On Error Resume Next
    Dim txt_X As Object
        Set txt_X = Me.txt_КД
'количество знаков до десятичного разделителя
    Dim LimDig As Integer
       LimDig = 6
'количество десятичных разрядов
    Dim DecComa As Integer
        DecComa = 2
'строка для поиска знаков после разделителя
    Dim FndComa As String
        FndComa = "*," & Left("########", DecComa)
'считываем текст из textbox в переменную t
    Dim t As String
        t = txt_X.Value
'флаг присутствия десятичного разделителя
    Dim FlagComa As Integer
        FlagComa = 0
    If InStr(1, t, ",") Then FlagComa = 1 'запятая
'проверим не превышено ли количество знаков до разделителя
        If (Len(t) >= (LimDig + FlagComa)) And txt_X.SelStart <= LimDig And KeyAscii <> 44 Then KeyAscii = 0
     Select Case KeyAscii
'цифры 1 - 9 и <Backspace> (эти символы всегда разрешены)
        Case 49 To 57, 8
'обработка цифры 0
        Case 48
'если ввод начат с нуля добавим десятичный разделитель
            If txt_X.SelStart < 1 Then
            t = "0"
            KeyAscii = 44
            End If
'обработка десятичного разделителя (44 - код запятой, 46 - код точки)
        Case 44, 46
'если в поле  введена точка, то заменим ее на запятую
            KeyAscii = 44
'если ввод начат с десятичного разделителя добавим ведущий ноль
            If txt_X.SelStart < 1 Then t = "0" & t
            If FlagComa Then KeyAscii = 0 'вторую запятую нельзя
'------------если нужен дефис (минус перед числом), раскоментируйте код---------------
        'Case 45
        '    If InStr(1, txt_X.Text, "-") Then KeyAscii = 0 'второй минус нельзя
        '    If txt_X.SelStart Then KeyAscii = 0 'минус допустим только перед числом
'-------------------------------------------------------------------------------------
        Case Else
'остальные символы запрещены
             KeyAscii = 0
    End Select
'проверим не превышено ли количество десятичных разрядов
        If t Like (FndComa) And txt_X.SelStart >= Len(t) - DecComa Then KeyAscii = 0
'записываем обработанный текст обратно в textbox
        txt_X.Value = t
        'txt_X = Int(t * 100) / 100
End Sub


Модератор: Учимся использовать тэги оформления кода - FAQ
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / EXCEL , VBA Ввод данных в контрол типа TextBox
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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