Элемент управления пользовательской формы TextBox в VBA Excel. Использование текстового поля для ввода и вывода информации, основные свойства, примеры. Привязка текстового поля к ячейке.
Элемент управления TextBox
Текстовое поле незаменимо, когда необходимо заполнить пользовательскую форму новой информацией. Например, это может быть ФИО нового сотрудника и его паспортные данные, сумма выручки за день, новый электронный адрес и многое-многое другое.
Вводить информацию в TextBox на открытой форме можно не только с помощью клавиатуры, но и вставкой текста из буфера обмена. Когда текстовое поле применяется для ввода пароля, есть возможность отобразить все его знаки замещающим символом, например, звездочкой.
Свойства текстового поля
Свойство | Описание |
---|---|
AutoSize* | Автоподбор размера текстового поля. True – размер автоматически подстраивается под длину размещаемой строки. False – размер элемента управления определяется свойствами Width и Height. |
AutoTab | Включение автоматической табуляции – передачи фокуса следующему элементу управления при достижении максимального числа символов при значениях свойства MaxLenght > 0. True – автоматическая табуляция включена, False – выключена. |
ControlSource | Ссылка на источник данных для поля TextBox. |
ControlTipText | Текст всплывающей подсказки при наведении курсора на TextBox. |
Enabled | Возможность ввода, редактирования, копирования, вставки, удаления текста. True – все перечисленные опции включены, False – выключены (цвет текста в поле становится серым). |
Font | Шрифт, начертание и размер текста в поле. |
Height | Высота текстового поля. |
Left | Расстояние от левого края внутренней границы пользовательской формы до левого края текстового поля. |
Locked | Запрет ввода, редактирования, удаления текста. True – перечисленные опции запрещены (разрешено выделение и копирование текста), False – перечисленные опции разрешены. |
MaxLenght | Максимальная длина строки. По умолчанию – 0, что означает – ограничений нет. |
Multiline | Устанавливает многострочный (True) или однострочный (False) режим ввода-вывода текста. |
PasswordChar | Задает символ, который будет отображаться при вводе знаков пароля. |
TabIndex | Определяет позицию элемента управления в очереди на получение фокуса при табуляции, вызываемой свойством AutoTab или нажатием клавиш «Tab», «Enter». Отсчет начинается с 0. |
Text** | Текстовое содержимое (значение) поля (=Value). |
TextAlign | Выравнивание текста: 1 (fmTextAlignLeft) – по левому краю, 2 (fmTextAlignCenter) – по центру, 3 (fmTextAlignRight) – по правому краю. |
Top | Расстояние от верхнего края внутренней границы пользовательской формы до верхнего края текстового поля. |
Value** | Текстовое содержимое (значение) поля (=Text). |
Visible | Видимость текстового поля. True – TextBox отображается на пользовательской форме, False – TextBox скрыт. |
Width | Ширина текстового поля. |
WordWrap | Актуально при Multiline = True. Переход на новую строку при достижении границы текстового поля. True – переход включен, False – переход выключен. |
* При использовании свойства AutoSize в значении True следует учитывать, что автоматическое изменение размеров поля при вводе текста может нарушить дизайн пользовательской формы.
** Text и Value — это два обозначения одного и того же свойства. Если в окне Properties элемента управления TextBox в поле свойства Text начать ввод строки, в поле Value ввод будет дублироваться. И наоборот, при вводе текста в поле свойства Value, дублирование произойдет в поле Text.
В таблице перечислены только основные, часто используемые свойства текстового поля. Все доступные свойства отображены в окне Properties элемента управления TextBox.
Свойства BackColor, BackStyle, BorderColor, BorderStyle отвечают за внешнее оформление текстового поля и его границ. Попробуйте выбирать доступные значения этих свойств в окне Properties, наблюдая за изменениями внешнего вида элемента управления TextBox на проекте пользовательской формы.
Привязка текстового поля к ячейке
Привязать элемент управления TextBox к ячейке на рабочем листе можно двумя способами.
1. В окне Properties элемента управления TextBox в поле свойства ControlSource необходимо указать адрес ячейки:
2. Присвоить свойству ControlSource адрес ячейки в коде VBA Excel:
1 |
UserForm1.TextBox1.ControlSource = "C5" |
Теперь ячейка C5 активного листа будет привязана к элементу управления TextBox1. При открытии формы текстовое поле будет заполнено значением ячейки C5.
Чтобы наглядно ознакомиться с взаимозависимостью значения ячейки C5 и содержимого текстового поля, разместите на пользовательской форме еще какой-нибудь элемент управления и откройте ее в немодальном* окне:
1 2 3 4 |
Sub Test() UserForm1.TextBox1.ControlSource = "C5" UserForm1.Show 0 End Sub |
Измените значение ячейки C5 и нажмите клавишу «Tab» или «Enter» – изменения будут продублированы в текстовом поле на форме. Измените содержимое поля TextBox1, нажмите клавишу «Tab» или «Enter», передав фокус другому элементу управления, – изменения продублируются в ячейке C5.
Чтобы привязать текстовое поле к ячейке неактивного листа, необходимо в адресе указать имя листа по ярлыку с разделителем «!»:
1 |
UserForm1.TextBox1.ControlSource = "Лист2!A3" |
Если имя листа содержит пробел, заключите его в одинарные кавычки:
1 |
UserForm1.TextBox1.ControlSource = "'Мой лист'!B6" |
Точно также адрес ячейки конкретного листа можно указать непосредственно в окне Properties элемента управления TextBox в поле свойства ControlSource (без парных кавычек).
* Отображение пользовательской формы в немодальном окне позволяет редактировать ячейки на рабочем листе Excel, не закрывая форму.
Примеры использования TextBox
Пример 1
Обмен содержимым между текстовым полем, переменной и ячейкой на рабочем листе:
1 2 3 4 5 6 7 8 9 10 |
'Присвоение текстовому полю значения 'ячейки A2 и переменной a1 UserForm1.TextBox1.Text = Range("A2") UserForm1.TextBox1.Text = a1 'Присвоение ячейке B3 и переменной a2 'значения текстового поля Cells(3, 2) = UserForm1.TextBox1.Text a2 = UserForm1.TextBox1.Value 'Свойства Text и Value элемента 'управления TextBox равнозначны |
Пример 2
Программное создание элемента управления TextBox, размещение его по центру пользовательской формы, добавление всплывающей подсказки и текста по умолчанию.
Предположим, что текстовое поле предназначено для ввода даты, поэтому добавляем соответствующую подсказку, а в качестве текста по умолчанию – текущую дату.
Создаем новую пользовательскую форму с именем UserForm2. Если у вас другое имя формы, это не имеет значения, так как обращаться к ней будем с помощью ключевого слова «Me». Открываем модуль созданной формы и вставляем в него следующий код VBA Excel:
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 |
Private Sub UserForm_Initialize() Dim myTextBox As Control 'Создаем новый TextBox и присваиваем его переменной Set myTextBox = Me.Controls.Add("Forms.TextBox.1") 'Задаем размеры и заголовок пользовательской формы With Me .Height = 100 .Width = 220 .Caption = "Форма №2" End With 'Присваиваем значения свойствам текстового поля With myTextBox .Width = 100 .Height = 20 'Left и Top рассчитаны для Excel 2016* .Left = 60 - 5 .Top = 40 - 15 'Добавляем всплывающую подсказку .ControlTipText = "Введите дату подписания договора" 'Вставляем в поле текущую дату .Text = Format(Now, "DD.MM.YYYY") 'Выравниваем текст по центру .TextAlign = 2 End With End Sub |
В результате выполнения кода откроется следующая форма с всплывающей подсказкой при наведении на TextBox курсора:
* Значения свойств Left и Top рассчитаны для Excel 2016. Вычитаемые числа зависят от толщины границ пользовательской формы, которые в других версиях Excel могут отличаться.
Добрый вечер!
У меня такая проблема с текстовым полем.
У меня есть таблица, имеющая три столбца. Первый столбец — возрастная группа, второй столбец — год, третий — количество населения.
Из первых двух столбцов в пользовательской форме я должен сделать два комбобокса, из третьего текстовое поле. Операция такая должна быть: после выбора критериев из двух комбобоксов нужно, чтобы в текстовое поле ввелось значение из третьего столбца.
Какой код мне поможет?
Привет!
Объединенные ячейки в этих трех столбцах есть?
Нет
Смотрите решение в статье Поиск значения в таблице.
Добрый день, Евгений. Вопрос по этой теме. В TextBox ввожу дату 23/02/2021, а он передает это значение в ячейку как 02/23/2021 и формула выдаёт ошибку. Связаны TextBox и ячейка
.ControlSource = "Лист1!A5"
Пробовал такой способ
.Text = Format(Sheets("Лист1").[A5], "DD.MM.YYYY")
Всё равно пишет сначала месяц, потом день.
А если в TextBox ввести 02/23/2021, тогда в ячейке записывает 23/02/2021.
Добрый день, Сергей!
Используйте следующий код для приведения даты к нужному формату:
Таже петрушка(
Отображает день, месяц. А в ячейку передаёт наоборот — месяц, день.
Почему-то меняет их местами.
Попробуйте добавить в модуль формы еще одну процедуру:
Евгений, спасибо. Заработало. Но возникла другая проблема. Появилась ошибка #Число! в формуле, которая использует эту дату для вычисления.
.Text поменял на .Value результат тот же.
Сделал запись в ячейку, через переменную х типа Дата и все заработало. Спасибо за помощь. Изменил процедуру:
Добрый день, Евгений. Вопрос по этой теме. В TextBox макросом вносится текст — Изделие, модель, номер… и действует гарантия или нет. И хочется, чтобы если гарантия закончилась то текст «Гарантия закончилась» выделялся красным цветом. (А не весь текст в текстбоксе) Это возможно?
Здравствуйте, Віталій!
Это невозможно. Не знаю, подойдет ли вам, но вы могли бы отметку о гарантии выводить в отдельном TextBox.
Добрый день! Как в текстбоксе формы задать шаблон ввода, например телефона +7(918)000-00-00 или в каком разделе можно почитать. Спасибо.
Нашел у вас решение, спасибо
Обсуждение закрыто.