Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
1 / 1 / 1
Регистрация: 11.01.2019
Сообщений: 99
1

Как сделать маску для ввода чисел в TextBox ?

16.06.2022, 10:56. Показов 2567. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день! Подскажите, пожалуйста, как сделать маску при вводе чисел для поля TextBox?
Пример: 5350127.55 должно выглядеть при вводе как 5 350 127.55 или 5,350,127.55

К сожалению, в TextBox видимо нет встроенных свойств учета маски ввода.
Желательно, чтобы при вводе был контроль на ввод только чисел.
Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.06.2022, 10:56
Ответы с готовыми решениями:

Как сделать маску в TextBox для ввода e-mail
Возможно сделать в VBA Excel в Textbox запихать маску для ввода @mail адреса, или помогите сделать...

Как сделать маску в TextBox для ввода номера телефон
Подскажите,как в VBA можно на поле TextBox(именно это) написать обработчик,что бы он проверял на...

Можно ли сделать для TextBox маску ввода?
Я новичёк в этом деле... Можно ли сделать для TextBox маску ввода, к примеру дату??? Если можно...

Как сделать маску ввода для дбэдита?
У меня форма редактирования содержит поля в которые вывожу данные из таблицы. Тут же пользователь...

19
1846 / 1161 / 354
Регистрация: 11.07.2014
Сообщений: 4,102
16.06.2022, 14:34 2
ykr, а вам как хотелось бы: Текст заносится по маске при выходе и текстбокса (это проще) или маска отслеживалась при вводе, т.е. изменение во время ввода цифр?
0
1 / 1 / 1
Регистрация: 11.01.2019
Сообщений: 99
16.06.2022, 15:56  [ТС] 3
Burk, лучше конечно иметь маску именно при вводе чисел, а не после выхода из TextBox.
Понимаю, что нужно как то группировать вводимые цифры на миллионы, тысячи и т.д. и на ходу перестраивать с учетом предполагаемой маски.
Можно предположить, что максимальное число это миллиарды.....то маска будет ###,###,###,###.##
Возможно, что нужно ждать ввода точки "." и после этого перестраивать вид в поле.
Но как быть, если это число будет целым?

Конечно рядом можно вставить еще один TextBox2 и выводить число в это поле с применением Format с нужной маской,
но это уже другой подход.

Нашел как сделать контроль на ввод чисел в TextBox и запрет ввода букв и спецсимволов.
0
1846 / 1161 / 354
Регистрация: 11.07.2014
Сообщений: 4,102
16.06.2022, 16:24 4
ykr, вводить только числа это достаточно просто,но ещё надо учитывать исправление, удаление цифр пользователем и, вследствие этого, изменение троек чисел. Посмотрю.

Добавлено через 12 минут
ykr, а вы хотите видеть ххх в тектбоксе или после ввода трех цифр просто вставить пробел и сдвигать положение курсора вправо (влево) и окончательно проверить маску при выходе или при вводе точки?
0
1 / 1 / 1
Регистрация: 11.01.2019
Сообщений: 99
16.06.2022, 20:05  [ТС] 5
Burk, давайте как проще.
Можно конечно сразу визуализировать маску в поле.
Например, в поле при открытии формы может быть написано:
(xxx),(xxx),(xxx),(xxx).xx
или
xxx,xxx,xxx,xxx.xx
или
xxx xxx xxx xxx.xx
т.е выбрать разделитель между знаками, как параметр.

При заполнении поля пользователь заранее должен ставить в нужную группу числа. Выбрать миллиарды собирается заполнять или миллионы или тысячи. Курсор должен по идее двигаться вправо по мере заполнения маски и перескакивать вправо в следующую группу, по мере заполнения поля. Итак, до заполнения дробной части, если она есть.
Если нужно, исправить число, то исправляются нужные позиции в определенной группе.
Число окончательно визуализируется после выхода из поля.

Вариант2, он проще.
Вводится число до точки .xx и после выхода из поля число визуализируется.

Но в обоих вариантах остается вопрос, что делать после выхода с поля, с визуализацией незаполненных позиций?
Оставлять незаполненные решетки "##7,#45" - нет смысла, после выхода с поля их нужно убирать.
Ну, а если возвращаться в поле для коррекции числа нужно обратно маску возвращать, с ранее заполненным числом.
В общем все как-то усложняется. Может есть уже ранее придуманный простой вариант работы с маски чисел?
0
11517 / 3803 / 681
Регистрация: 13.02.2009
Сообщений: 11,222
17.06.2022, 02:52 6
вариант в лоб
пропускает только числа с одной точкой и двумя знаками после точки
разделители разрядов пробелы

Кликните здесь для просмотра всего текста
Visual Basic
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
Option Explicit
 
Dim f As Boolean
 
Private Sub TextBox1_Change()
    Dim t, i, x
        If f = False Then
            f = True
            x = Replace(TextBox1.Text, " ", "")
            If Len(x) > 0 Then
                t = Right(x, 1)
                If IsNumeric(t) Or t = "." Then
    
                    Select Case t
                        Case 0 To 9, "."
                            TextBox1.Text = form(x)
                        Case Else
                            TextBox1.Text = Left(x, Len(x) - 1)
                    End Select
                Else
                    TextBox1.Text = Left(x, Len(x) - 1)
                End If
            End If
            f = False
        End If
End Sub
 
Private Function form(s)
    Dim t, u
    u = Split(s, ".")
    form = VBA.Trim(Format(u(0), "### ### ### ###"))
    If InStr(1, s, ".") > 0 Then
        form = form & "." & Left(u(1), 2)
    End If
End Function
0
1 / 1 / 1
Регистрация: 11.01.2019
Сообщений: 99
17.06.2022, 11:48  [ТС] 7
Alex77755, все работает как и нужно.
Маску можно менять при желании. Воспринимаются только цифры.
Спасибо большое!!!

Вот ниже ссылки, которые были весьма полезны по обсуждаемой теме.

https://www.planetaexcel.ru/fo... &TID=15227
Авто коррекция ввода даты в TextBox
Фильтр ввода в textbox
Как сделать маску в TextBox для ввода номера телефон
Как сделать маску в TextBox для ввода e-mail
Разрешить ввод в текстбокс только цифр
Как задать маску ввода для texbox?
0
1 / 1 / 1
Регистрация: 11.01.2019
Сообщений: 99
18.06.2022, 23:15  [ТС] 8
Alex77755, прошу прощения, а как ваш вариант маски
сделать более универсальным?
например, для ввода Даты в texbox.
формат dd.mm.yyyy или dd/mm/yyyy
попробовал такую логику: ввод двух цифр и автоматом ставится
точка в поле. Еще две цифры и опять ставится точка.
А далее может быть ввод двух или четырех цифр.
если 2022, тогда ввод оконсен и пропускается число, если ввели две цифры, только 22 или иное., тогда добавляется к веденному 20. В итоге год выглядит как 2022, 2023 и т.д
Но вот возникают нюансы при коррекции даты.
удаляя одну цифру...все сдвигается и плывет.
А если вместе с точкой, то тем более, все становится некорректным.
Как тут можно контроль настроить ?
0
11517 / 3803 / 681
Регистрация: 13.02.2009
Сообщений: 11,222
19.06.2022, 03:07 9
Но вот возникают нюансы при коррекции даты.
надо вводить корректно или удалять полностью и вводить корректно
несколько проверок корректности ввода сделал но не все
Месяц не может начинаться с 2 и выше
день не может начинаться с 4 и выше и не может быть больше 31
для ввода корректной даты проще использовать календарь. Их полно разных. Вызвать календарь и выбрать дату
Кликните здесь для просмотра всего текста

Visual Basic
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
83
84
85
86
87
88
89
Private Sub TextBox2_Change()
    Dim t, i, x
        If f = False Then
            f = True
            If Len(TextBox2) > 10 Then
                TextBox2 = Left(TextBox2, 10)
                f = False
                Exit Sub
            End If
            
            x = Replace(TextBox2.Text, ".", "")
            
            If Len(x) > 0 Then
                t = Right(x, 1)
                If IsNumeric(t) Then
                        Select Case t
                        Case 0 To 9
                            TextBox2.Text = form2(x)
                    End Select
                Else
                    TextBox2.Text = Left(x, Len(x) - 1)
                End If
            End If
            f = False
        End If
End Sub
 
Private Function form2(s)
    Dim t, u, x, d, m, y
    Select Case Len(s)
    
        Case 1 'одна цифра
            If s > 3 Then
                form2 = ""
                Exit Function
            End If
            form2 = s
        Case 2
            If s < 32 Then
                form2 = s & "."
            Else
                form2 = Left(s, 1)
            End If
        Case 3
            d = Left(s, 2)
            m = Mid(s, 3, 1)
            If m < 2 Then
                form2 = d & "." & m
            Else
                form2 = d & "."
            End If
        Case 4
            d = Left(s, 2)
            m = Mid(s, 3, 2)
            If m < 13 Then
                form2 = d & "." & m & "."
            Else
                form2 = d & "." & Left(m, 1)
            End If
        Case 5
            d = Left(s, 2)
            m = Mid(s, 3, 2)
            y = Mid(s, 5, 1)
            If y >= 2 Then
                form2 = d & "." & m & "." & y
            Else
                form2 = d & "." & m & "."
            End If
        Case 6
            d = Left(s, 2)
            m = Mid(s, 3, 2)
            y = Mid(s, 5, 2)
            If y > 20 Then
                form2 = d & "." & m & ".20" & y
            Else
                form2 = d & "." & m & "." & y
            End If
        Case 7
            d = Left(s, 2)
            m = Mid(s, 3, 2)
            y = Mid(s, 5, 3)
            form2 = d & "." & m & "." & y
        Case 8
            d = Left(s, 2)
            m = Mid(s, 3, 2)
            y = Mid(s, 5, 4)
            form2 = d & "." & m & "." & y
    End Select
End Function
0
1 / 1 / 1
Регистрация: 11.01.2019
Сообщений: 99
19.06.2022, 10:27  [ТС] 10
Alex77755, добрый день!
спасибо! проверю вечером и отпишусь.
да проверок оказалось больше, чем изначально предполагал.

Насчет календаря, то рад бы его применить, но его нет в Офисе 2013, 2016, 2019.
Раньше был и я им польщовался в Access.
Попробовал поискать, но под VBA не нашел.
Есть .Net и другие...., там и TextBox имеет свойство Маска.

Может у вас есть ссылка на календарь для VBA?
0
11517 / 3803 / 681
Регистрация: 13.02.2009
Сообщений: 11,222
19.06.2022, 13:58 11
Да календарей самодельных море
Вложения
Тип файла: rar Calendar_UserForm.rar (97.4 Кб, 16 просмотров)
0
11517 / 3803 / 681
Регистрация: 13.02.2009
Сообщений: 11,222
19.06.2022, 14:21 12
Вот немного допилил и сохранил в надстройку
Вызов через контекстное меню
Дату возвращает в активную ячейку
Миниатюры
Как сделать маску для ввода чисел в TextBox ?  
Вложения
Тип файла: rar Calendar_UserForm_н.rar (17.9 Кб, 14 просмотров)
0
1 / 1 / 1
Регистрация: 11.01.2019
Сообщений: 99
19.06.2022, 14:40  [ТС] 13
Alex77755,
спасибо, вечером все проверю.
насчет календаря понял, он бывает нужен часто.
и чаще в эксель форме.

Но блин, сейчас форма в вордовском документе создана.
Как его пристроить?
или запускать и ворд и эксель для календаря?
0
11517 / 3803 / 681
Регистрация: 13.02.2009
Сообщений: 11,222
19.06.2022, 14:59 14
В последнем моём сообщении календарь в надстройке
Просто подключить надо и все
Будет работать в любой книге
вызывается по ПКМ из любой ячейки
0
1 / 1 / 1
Регистрация: 11.01.2019
Сообщений: 99
19.06.2022, 22:45  [ТС] 15
Alex77755, попробовал ввод даты в TextBox.
при вводе даты dd.mm.yyyy все отрабатывает как нужно.
Коррекция даты есть только, если год нужно ввести другой.
коррекции даты и месяца нет...там все сдвигается, что впрочем мы и предполагали..что с этим бороться излишне..
Поэтому, действительно, если ввел дату с ошибкой нужно выделить все поле, удалить
что там было и заново ввести всю дату.

Что касается календаря и надстройки.
Я правильно понимаю, что этот календарь можно будет
использовать только при работе с Excel ?

Пока не получилось надстройку подключить...архив сохранил..файлы извлек...
При подключении пишет-file not found.
Завтра буду разбираться, что и почему не находит.

Спасибо за помощь!
0
11517 / 3803 / 681
Регистрация: 13.02.2009
Сообщений: 11,222
20.06.2022, 02:47 16
Да этот календарь написан на VBA для екселя и работает только с екселем
запаковал другим архиватором
Вложения
Тип файла: 7z Calendar_UserForm_н.7z (16.1 Кб, 8 просмотров)
0
1 / 1 / 1
Регистрация: 11.01.2019
Сообщений: 99
20.06.2022, 15:56  [ТС] 17
Alex77755, добрый день! Надстройка установилась. Но в контекстом меню ее не видно.
Использую офис 2019.
Как ее вызвать, можете эксель лист с примером вложить?
Буду признателен, спасибо!
0
11517 / 3803 / 681
Регистрация: 13.02.2009
Сообщений: 11,222
20.06.2022, 16:33 18
Цитата Сообщение от ykr Посмотреть сообщение
Как ее вызвать, можете эксель лист с примером вложить?
хмм...
какой лист? я выложил надстройку
просто запустите ексел и просто откройте файл Calendar_UserForm_н.xla
Или подключите её стандартным способом:
Файл - Параметры - Настройки - Внизу окна Надстройки ексел - перейти - Обзор - и указать путь к надстройке
Миниатюры
Как сделать маску для ввода чисел в TextBox ?   Как сделать маску для ввода чисел в TextBox ?  
0
1 / 1 / 1
Регистрация: 11.01.2019
Сообщений: 99
20.06.2022, 16:33  [ТС] 19
Alex77755, Отбой! Все ОК - Календарь в меню появился, вызывается и устанавливает дату в активную ячейку.
Нужно было перезапустить офис или перегрузиться.

Жаль, что нет подобного календаря для Ворда! Спасибо еще раз!
0
11517 / 3803 / 681
Регистрация: 13.02.2009
Сообщений: 11,222
21.06.2022, 06:10 20
Жаль, что нет подобного календаря для Ворда!
Я с вордом мало работаю
Но не уверен, что нельзя сделать. Скорей всего можно
0
21.06.2022, 06:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.06.2022, 06:10
Помогаю со студенческими работами здесь

Как задать маску ввода в TextBox
в С++ есть такой термин маска ввода.используется когда в textbox нужно вести данные определённого...

Как ограничить ввод информации или задать маску ввода в компонент textBox?
Как ограничить ввод информации или задать маску ввода в компонент textBox

Как сделать маску в TextBox
Доброго времени суток. Подскажите как сделать при вводе пробел через каждые 3 цифры в textbox,...

Как сделать маску ввода в DbEdit?
как сделать маску ввода в DBedit(свойство EditMask не работает), либо как можно из компонента...

Как сделать маску ввода телефона в контактной форме?
Здравствуйте! Возникла проблема с созданием маски телефонного номера в контактной форме. ...

Как сделать TextBox для ввода матрицы?
матрица может быть разного размера, для решения СЛАУ, знаю, что тема заезженная.

Как задать маску для ввода?
Доброго времени суток. Начинаю изучать питон. Пытаюсь создать простейшую программу для отправки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru