Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
3 / 3 / 2
Регистрация: 11.01.2019
Сообщений: 125

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

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

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

К сожалению, в TextBox видимо нет встроенных свойств учета маски ввода.
Желательно, чтобы при вводе был контроль на ввод только чисел.
Спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.06.2022, 10:56
Ответы с готовыми решениями:

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

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

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

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

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

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

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

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

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

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

Кликните здесь для просмотра всего текста
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
3 / 3 / 2
Регистрация: 11.01.2019
Сообщений: 125
17.06.2022, 11:48  [ТС]
Alex77755, все работает как и нужно.
Маску можно менять при желании. Воспринимаются только цифры.
Спасибо большое!!!

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

https://www.planetaexcel.ru/fo... &TID=15227
Авто коррекция ввода даты в TextBox
Фильтр ввода в textbox
Как сделать маску в TextBox для ввода номера телефон
Как сделать маску в TextBox для ввода e-mail
Разрешить ввод в текстбокс только цифр
Как задать маску ввода для texbox?
0
3 / 3 / 2
Регистрация: 11.01.2019
Сообщений: 125
18.06.2022, 23:15  [ТС]
Alex77755, прошу прощения, а как ваш вариант маски
сделать более универсальным?
например, для ввода Даты в texbox.
формат dd.mm.yyyy или dd/mm/yyyy
попробовал такую логику: ввод двух цифр и автоматом ставится
точка в поле. Еще две цифры и опять ставится точка.
А далее может быть ввод двух или четырех цифр.
если 2022, тогда ввод оконсен и пропускается число, если ввели две цифры, только 22 или иное., тогда добавляется к веденному 20. В итоге год выглядит как 2022, 2023 и т.д
Но вот возникают нюансы при коррекции даты.
удаляя одну цифру...все сдвигается и плывет.
А если вместе с точкой, то тем более, все становится некорректным.
Как тут можно контроль настроить ?
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
19.06.2022, 03:07
Но вот возникают нюансы при коррекции даты.
надо вводить корректно или удалять полностью и вводить корректно
несколько проверок корректности ввода сделал но не все
Месяц не может начинаться с 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
3 / 3 / 2
Регистрация: 11.01.2019
Сообщений: 125
19.06.2022, 10:27  [ТС]
Alex77755, добрый день!
спасибо! проверю вечером и отпишусь.
да проверок оказалось больше, чем изначально предполагал.

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

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

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

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

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

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

Жаль, что нет подобного календаря для Ворда! Спасибо еще раз!
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
21.06.2022, 06:10
Жаль, что нет подобного календаря для Ворда!
Я с вордом мало работаю
Но не уверен, что нельзя сделать. Скорей всего можно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.06.2022, 06:10
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru