Элемент управления пользовательской формы TextBox в VBA Excel. Использование текстового поля для ввода и вывода информации, основные свойства, примеры. Привязка текстового поля к ячейке.

Элемент управления TextBox

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

Текстовое поле незаменимо, когда необходимо заполнить пользовательскую форму новой информацией. Например, это может быть ФИО нового сотрудника и его паспортные данные, сумма выручки за день, новый электронный адрес и многое-многое другое.

Если с помощью текстового поля требуется вводить заранее известную информацию, элементы которой можно сгруппировать в список, то в этом случае удобнее вместо элемента управления TextBox использовать ListBox или ComboBox.

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

Иногда, если на пользовательской форме используется только одно текстовое поле и кнопка «OK» (или кнопки «OK» и «Отмена»), для ввода информации такую форму можно заменить функцией InputBox, а для вывода информации, когда не требуется редактирование отображаемого текста, – функцией MsgBox.

Свойства текстового поля

СвойствоОписание
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:

UserForm1.TextBox1.ControlSource = "C5"

Теперь ячейка C5 активного листа будет привязана к элементу управления TextBox1. При открытии формы текстовое поле будет заполнено значением ячейки C5.

Чтобы наглядно ознакомиться с взаимозависимостью значения ячейки C5 и содержимого текстового поля, разместите на пользовательской форме еще какой-нибудь элемент управления и откройте ее в немодальном* окне:

Измените значение ячейки C5 и нажмите клавишу «Tab» или «Enter» – изменения будут продублированы в текстовом поле на форме. Измените содержимое поля TextBox1, нажмите клавишу «Tab» или «Enter», передав фокус другому элементу управления, – изменения продублируются в ячейке C5.

Чтобы привязать текстовое поле к ячейке неактивного листа, необходимо в адресе указать имя листа по ярлыку с разделителем «!»:

UserForm1.TextBox1.ControlSource = "Лист2!A3"

Если имя листа содержит пробел, заключите его в одинарные кавычки:

UserForm1.TextBox1.ControlSource = "’Мой лист’!B6"

Точно также адрес ячейки конкретного листа можно указать непосредственно в окне Properties элемента управления TextBox в поле свойства ControlSource (без парных кавычек).

* Отображение пользовательской формы в немодальном окне позволяет редактировать ячейки на рабочем листе Excel, не закрывая форму.

Примеры использования TextBox

Пример 1
Обмен содержимым между текстовым полем, переменной и ячейкой на рабочем листе:

Пример 2
Программное создание элемента управления TextBox, размещение его по центру пользовательской формы, добавление всплывающей подсказки и текста по умолчанию.

Предположим, что текстовое поле предназначено для ввода даты, поэтому добавляем соответствующую подсказку, а в качестве текста по умолчанию – текущую дату.

Создаем новую пользовательскую форму с именем UserForm2. Если у вас другое имя формы, это не имеет значения, так как обращаться к ней будем с помощью ключевого слова «Me». Открываем модуль созданной формы и вставляем в него следующий код VBA Excel:

В результате выполнения кода откроется следующая форма с всплывающей подсказкой при наведении на TextBox курсора:

* Значения свойств Left и Top рассчитаны для Excel 2016. Вычитаемые числа зависят от толщины границ пользовательской формы, которые в других версиях Excel могут отличаться.

Для ввода и редактирования текста предназначены текстовые поля — элемент TextBox. Так же как и у элемента Label текст элемента TextBox можно установить или получить с помощью свойства Text.

По умолчанию при переносе элемента с панели инструментов создается однострочное текстовое поле. Для отображения больших объемов информации в текстовом поле нужно использовать его свойства Multiline и ScrollBars . При установке для свойства Multiline значения true, все избыточные символы, которые выходят за границы поля, будут переноситься на новую строку.

Кроме того, можно сделать прокрутку текстового поля, установив для его свойства ScrollBars одно из значений:

None : без прокруток (по умолчанию)

Horizontal : создает горизонтальную прокрутку при длине строки, превышающей ширину текстового поля

Vertical : создает вертикальную прокрутку, если строки не помещаются в текстовом поле

Both : создает вертикальную и горизонтальную прокрутку

Автозаполнение текстового поля

Элемент TextBox обладает достаточными возможностями для создания автозаполняемого поля. Для этого нам надо привязать свойство AutoCompleteCustomSource элемента TextBox к некоторой коллекции, из которой берутся данные для заполнения поля.

Итак, добавим на форму текстовое поле и пропишем в код события загрузки следующие строки:

Режим автодополнения, представленный свойством AutoCompleteMode , имеет несколько возможных значений:

None : отсутствие автодополнения

Suggest : предлагает варианты для ввода, но не дополняет

Append : дополняет введенное значение до строки из списка, но не предлагает варианты для выбора

SuggestAppend : одновременно и предлагает варианты для автодополнения, и дополняет введенное пользователем значение

Перенос по словам

Чтобы текст в элементе TextBox переносился по словам, надо установить свойство WordWrap равным true . То есть если одно слово не умещается на строке, то но переносится на следующую. Данное свойство будет работать только для многострочных текстовых полей.

Ввод пароля

Также данный элемент имеет свойства, которые позволяют сделать из него поле для ввода пароля. Так, для этого надо использовать PasswordChar и UseSystemPasswordChar .

Свойство PasswordChar по умолчанию не имеет значение, если мы установим в качестве него какой-нибудь символ, то этот символ будут отображаться при вводе любых символов в текстовое поле.

Свойство UseSystemPasswordChar имеет похожее действие. Если мы установим его значение в true , то вместо введенных символов в текстовом поле будет отображаться знак пароля, принятый в системе, например, точка.

Событие TextChanged

Из всех событий элемента TextBox следует отметить событие TextChanged , которое срабатывает при изменении текста в элементе. Например, поместим на форму кроме текстового поля метку и сделаем так, чтобы при изменении текста в текстовом поле также менялся текст на метке:

Текстовые поля форм Windows Forms используются для получения входных данных от пользователя или для отображения текста. Windows Forms text boxes are used to get input from the user or to display text. TextBox Управления обычно используется для ввода и редактирования текста, несмотря на то, что его можно также сделать доступным только для чтения. The TextBox control is generally used for editable text, although it can also be made read-only. Текстовые поля можно отобразить несколько строк, переноса текста по размеру элемента управления и добавлять основные элементы форматирования. Text boxes can display multiple lines, wrap text to the size of the control, and add basic formatting. TextBox Элемент управления предоставляет в одном формате, введенные в элементе управления или отображать текст. The TextBox control provides a single format style for text displayed or entered into the control. Чтобы отобразить несколько типов форматированного текста, используйте RichTextBox элемента управления. To display multiple types of formatted text, use the RichTextBox control. Дополнительные сведения см. в разделе Обзор элемента управления RichTextBox. For more information, see RichTextBox Control Overview.

Работа с элементом управления TextBox Working with the TextBox Control

Текст, отображаемый элементом управления, содержащийся в Text свойство. The text displayed by the control is contained in the Text property. По умолчанию можно ввести не более 2048 символов в текстовом поле. By default, you can enter up to 2048 characters in a text box. Если задать Multiline свойства true , можно ввести текст до 32 КБ. If you set the Multiline property to true , you can enter up to 32 KB of text. Text Свойство можно задать во время разработки в окне свойств во время выполнения в коде, или вводимыми пользователем во время выполнения. The Text property can be set at design time with the Properties Window, at run time in code, or by user input at run time. Текущее содержимое текстового поля могут быть получены во время выполнения путем чтения Text свойство. The current contents of a text box can be retrieved at run time by reading the Text property.

В следующем примере кода задает текст в элементе управления во время выполнения. The following code example sets text in the control at run time. InitializeMyControl Процедуры не выполняется автоматически; его необходимо вызывать. The InitializeMyControl procedure will not execute automatically; it must be called.