VBA Excel. Маска ввода в TextBox

    Создание маски ввода в TextBox с помощью кода VBA Excel на примере номера телефона и номера паспорта. Применимо для набора номера с клавиатуры.

    TextBox и маска ввода в VBA Excel

    В отличие от VBA Access в VBA Excel нет свойства InputMask объекта TextBox. Поэтому, чтобы добавить подобие маски для TextBox в VBA Excel, приходится писать дополнительную процедуру, контролирующую действия пользователя и добавляющую в нужные места вводимого номера знаки-разделители.

    В следующих примерах мы будем создавать простые маски ввода в TextBox с помощью события TextBox_Change и оператора Select Case. Маска будет добавляться при вводе символов с клавиатуры. При вставке номера из буфера обмена, добавление маски не предусмотрено.

    Мы не будем добавлять автоматическую проверку вводимого знака (цифра или другой символ), так как после ввода с клавиатуры в любом случае требуется зрительная проверка введенного номера.

    Также, при редактировании полностью введенного номера, не стоит удалять более 1 цифры, иначе структура маски может будет нарушена.

    Маска ввода номера телефона

    Простой код для создания маски ввода номера телефона в TextBox в формате «+7(000)000-00-00»:

    Строки кода VBA Excel:

    ограничивают длину строки, вводимой в TextBox, их можно заменить на установку максимальной длины при инициализации формы:

    Если ограничение строки установить при инициализации формы, при ручном редактировании введенного номера можно удалять две цифры без риска нарушить структуру маски.

    Маска ввода номера паспорта

    Простой код для создания маски ввода номера паспорта в TextBox в формате «00 00 000000»:

    Если ограничение строки установить при инициализации формы:

    тогда при ручном редактировании введенного номера можно удалять две цифры без риска нарушить структуру маски.

    Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

    3 комментария для “VBA Excel. Маска ввода в TextBox”

    1. Дмитрий

      Я знаю точно, что код работает, а в vb6 в текстовом поле курсор постоянно перемещается после каждого ввода цифры в исходное положение, подскажите, разницы то я думаю нет, что VBA, что VB6

      1. Евгений

        Дмитрий, попробуйте задать маску в VB6 с помощью элемента управления Masked Edit. Библиотека Microsoft Masked Edit Control 6.0 должна быть подключена. Посмотрел в VB 2012, который у меня установлен, там есть элемент управления MaskedTextBox, но в VB6, скорее всего, его нет.

    2. У меня работает по такому же принципу, только через IF, но тормозит сама склейка. Я пробовал склеивать в текстбоксе и в отдельной переменной — не помогает. При склеивании пауза на 1-2 сек.

    Добавить комментарий

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