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


СПАСИБО
...
Рейтинг: 0 / 0
29.10.2004, 12:05
    #32760738
EXCEL , VBA Ввод данных в контрол типа TextBox
1) проверять корректность в событии validate
2) фильтровать ввод событием KeyPress
3) использовать вместо textbox MaskEdBox
...
Рейтинг: 0 / 0
29.10.2004, 15:20
    #32761308
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXCEL , VBA Ввод данных в контрол типа TextBox
по крайней мере до офис 2000 у textbox нет Validate - это только чистый васик.
...
Рейтинг: 0 / 0
29.10.2004, 16:56
    #32761505
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXCEL , VBA Ввод данных в контрол типа TextBox
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
30.10.2004, 19:41
    #32762142
Mongol_v
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXCEL , VBA Ввод данных в контрол типа TextBox
big-dukeпо крайней мере до офис 2000 у textbox нет Validate - это только чистый васик. но можно подключить библеотеку
...
Рейтинг: 0 / 0
31.10.2004, 09:18
    #32762253
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXCEL , VBA Ввод данных в контрол типа TextBox
4Mongol_v
Квкую библиотеку надо подклюить к vba чтобы у TextBox появилось св-во Validate ?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
22.10.2014, 03:09
    #38783558
VikSha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXCEL , VBA Ввод данных в контрол типа TextBox
Вот такой получился у меня код:

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

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

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

С уважением VikSha
...
Рейтинг: 0 / 0
22.10.2014, 03:18
    #38783561
VikSha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXCEL , VBA Ввод данных в контрол типа TextBox
Код: 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
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / EXCEL , VBA Ввод данных в контрол типа TextBox / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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