Vba excel выделить текст в textbox
Отображает пользовательскую информацию или информацию из упорядоченного набора данных.
Примечания
Элемент управления TextBox (текстовое поле) обычно используется для отображения информации, добавленной пользователем. Он также может отображать набор данных, таких как таблица, запрос, лист или результат подсчета. Если TextBox привязан к источнику данных, изменение содержимого TextBox также изменяет значение связанного источника данных.
Форматирование любой части текста TextBox повлияет на весь текст элемента управления. Например, если изменить шрифт или размер любого символа элемента управления, изменение затронет все символы элемента управления.
Свойство по умолчанию для TextBox — это свойство Value.
Советы по использованию текстовых полей
TextBox — это гибкий контроль, управляемый следующими свойствами: Text, MultiLine, WordWrap и AutoSize.
Text содержит текст, отображаемый в текстовом поле.
MultiLine определяет способ отображения текста элементом управления TextBox (в виде одной строки или множества строк). Символы новой строки определяют конец одной строки и начало другой. Если значение MultiLine является ложным (значение по умолчанию), текст будет усечен, а не завернут.
WordWrap позволяет TextBox переносить строки текста, которые не помещаются в TextBox. Значение по умолчанию — True.
Если вы не используете WordWrap, TextBox отображает текст с новой строки, когда видит символ новой строки. Если WordWrap отключен, строки могут не полностью помещаться в TextBox. TextBox отображает части текста, которые умещаются в его границы, и обрезает те, которые выходят за них. WordWrap можно использовать лишь в случае, если MultiLine присвоено значение True.
AutoSize определяет, полностью ли отображается текст в TextBox. При использовании AutoSize вместе с TextBox размер последнего элементаувеличивается или уменьшается в зависимости от количества текста иразмера шрифта. Значение по умолчанию — False.
AutoSize удобно применять в таких случаях:
Отображение заголовка из одной или нескольких строк.
Отображение содержимого TextBox длиною в одну строку.
Отображение содержимого TextBox, состоящего из нескольких строк только для чтения.
Избегайте применять AutoSize к пустому элементу TextBox, который использует свойства MultiLine и WordWrap. В таком случае при вводе текста в TextBox этотэлемент автоматически принимает вид поля шириною в один символ, отображающего весь текст одной строкой.
Методы
Имя | Описание |
---|---|
Копировать | Копирует содержимое объекта в буфер обмена. |
Cut | Удаляет выбранную информацию из объекта и переносит ее в буфер обмена. |
Paste | Передает содержимое буфера обмена объекту. |
Свойства
Имя | Описание |
---|---|
AutoSize | Возвращает или задает boolean, который указывает, автоматически ли объект обновляется для отображения всего содержимого. Для чтения и записи. |
AutoTab | Возвращает или задает boolean, который указывает, происходит ли автоматическая вкладка, когда пользователь вводит максимально допустимое количество символов в TextBox. Для чтения и записи. |
AutoWordSelect | Возвращает или задает boolean, который указывает, является ли базовым элементом, используемым для расширения выбора, слово или один символ. Для чтения и записи. |
BackColor | Возвращает или задает длинный, который указывает фоновый цвет объекта. Для чтения и записи. |
BackStyle | Возвращает или задает набор integer, который задает фоновый стиль объекта. Для чтения и записи. |
BorderColor | Возвращает или задает long, который указывает пограничный цвет объекта. Для чтения и записи. |
BorderStyle | Возвращает или задает набор integer, который указывает тип границы управления. Для чтения и записи. |
CanPaste | Возвращает boolean, который указывает, содержит ли буфер обмена данными, поддерживаемые объектом. Только для чтения. |
CurLine | Возвращает или задает long, представляют текущую строку управления. Для чтения и записи. |
CurTargetX | Возвращает long, представляющие предпочтительное горизонтальное положение точки вставки в многолинейной textBox. Только для чтения. |
CurX | Возвращает или задает long, представляющие текущее горизонтальное положение точки вставки в многолинейной textBox. Для чтения и записи. |
DragBehavior | Возвращает или задает набор integer, который указывает, включает ли система функцию перетаскивания для управления. Для чтения и записи. |
Enabled | Возвращает или задает boolean, который указывает, может ли управление получать фокус и реагировать на события, созданные пользователем. Для чтения и записи. |
EnterFieldBehavior | Возвращает или задает набор integer, который указывает поведение выбора при вводе TextBox. Для чтения и записи. |
EnterKeyBehavior | Возвращает или задает boolean, определяющий эффект нажатия ENTER в TextBox. Для чтения и записи. |
ForeColor | Возвращает или задает длинный, который указывает цвет переднего плана объекта. Для чтения и записи. |
HideSelection | Возвращает или задает boolean, который указывает, остается ли выбранный текст выделен, если у управления нет фокуса. Для чтения и записи. |
IMEMode | Возвращает или задает integer, который указывает режим времени работы по умолчанию редактора метода ввода (IME) для управления. Для чтения и записи. |
IntegralHeight | Возвращает или задает boolean, который указывает, отображает ли TextBox полные строки текста или частичные строки. Для чтения и записи. |
LineCount | Возвращает long, указывав количество строк текста в TextBox. Только для чтения. |
Locked | Возвращает или задает boolean, который указывает, можно ли изменить управление. Для чтения и записи. |
MaxLength | Возвращает или задает long, указывав максимальное количество символов, которые пользователь может ввести в TextBox. Для чтения и записи. |
MouseIcon | Возвращает строку, которая представляет полное имя пути настраиваемого значка, назначенного для управления. Только для чтения. |
MousePointer | Возвращает или задает набор integer, который указывает тип указателя, отображаемого при позиционировании пользователя мыши над определенным объектом. Для чтения и записи. |
MultiLine | Возвращает или задает boolean, который указывает, может ли управление принимать и отображать несколько строк текста. Для чтения и записи. |
PasswordChar | Возвращает или задает строку, указываемую на отображаемого символа-замеса вместо символов, фактически входящих в TextBox. Для чтения и записи. |
ScrollBars | Возвращает или задает набор integer, который указывает, имеет ли управление вертикальные свитки, горизонтальные столбцы прокрутки или оба. Для чтения и записи. |
SelectionMargin | Возвращает или задает boolean, который указывает, может ли пользователь выбрать строку текста, щелкнув в регионе слева от текста. Для чтения и записи. |
SelLength | Возвращает или задает long, представляющие количество символов, выбранных в TextBox. Для чтения и записи. |
SelStart | Возвращает или задает длинный, который представляет отправную точку выбранного текста, или точку вставки, если текст не выбран. Для чтения и записи. |
SelText | Возвращает или задает строку, представляюную выбранный текст управления. Для чтения и записи. |
SpecialEffect | Возвращает или задает набор integer, который указывает внешний вид объекта. Для чтения и записи. |
TabKeyBehavior | Возвращает или задает boolean, который указывает, разрешены ли вкладки в области редактирования. Для чтения и записи. |
Text | Возвращает или задает строку, заданную текстом в области управления. Для чтения и записи. |
TextAlign | Возвращает или задает набор integer, который указывает, как текст выравнивается в области управления. Для чтения и записи. |
TextLength | Возвращает длинный текст, который представляет длину текста в области редактирования TextBox. Только для чтения. |
Значение | Возвращает или задает вариант, который задает текст в области редактирования. Для чтения и записи. |
WordWrap | Возвращает или задает boolean, который указывает, автоматически ли содержимое управления обертывалось в конце строки, а управление расширяется в соответствии с текстом. Для чтения и записи. |
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
у меня есть эта простая пользовательская форма, где у меня есть только TextBox1 и TextBox2 . Я ввожу текст в них обоих. Предположим, что фокус находится на (курсор находится в) TextBox2 . Когда я нажимаю на TextBox1 , Я хочу, чтобы весь текст в этом элементе должен быть выделен (выбран). Таким образом я использую этот код:
я использую Enter событие и не хочу использовать MouseDown событие, потому что мне нужен код, чтобы работать, когда TextBox1 активируется программно, поэтому я чувствую Enter событие, чтобы быть лучшим выбором, так как он уволен в обоих случаях! Еще один недостаток MouseDown событие: когда я нажимаю второй раз на TextBox1 , Я бы не ожидал, что весь текст будет выделен больше, потому что фокус был установлен на первом щелчке, и он не был изменен после того, как я нажал на тот же элемент управления во второй раз; так что в этом случае Я хотел бы, чтобы курсор действовал нормально (не держать текст помеченным).
обновление
Когда я нажимаю один раз на TextBox1 , Я ожидаю получить этот результат:
при повторном нажатии подсветка будет удалена, и курсор будет помещен в то место, где он был нажат.
не может быть проще, чем это, я думаю.
если вы нажмете на текстовое поле или вкладку в него, он будет делать то, что вы хотите. Чтобы отменить выбор текста, используйте клавиши со стрелками.
объяснение
если вы отлаживаете код, вы увидите, что хотя вы сказали .SetFocus фокус не на поле. .SetFocus не работает TextBox1_Enter() и вам нужно сосредоточиться на остальной части кода для работы. И, следовательно, моего альтернатива.
альтернатива
вам также может понравиться эта версия :) это преодолевает ограничение использования мыши в текстовом поле
Pff, заняло у меня некоторое время. На самом деле ваш код работает, но он выделяет текст до того, как произойдет событие click. Таким образом, щелчок в поле мгновенно переопределяет выбор, созданный кодом. Я использовал отложенный выбор, и он работает, хотя это немного мерзко.
код для текстовых полей:
обратите внимание, что он работает даже с частично, но теоретически это может помешать ему работать время от времени. Хмм, на секунду подумал, просто оставь это. Сомневаюсь, что это когда-нибудь вызовет проблемы.
теперь код в module1:
надеюсь, это сработает и для вас. Проблема инерции. :) Ура!
мне не удалось выбрать / выделить текст в событии Enter, поскольку события mousedown и mouseup, наступающие после, несколько сбрасывают выделение.
Я думаю, что самый правильный способ достижения того, что вы хотите это :
поэтому каждый раз, когда вы хотите активировать один из текстовых полей программно, вы должны вызвать sub SelectTboxText, что на самом деле не раздражает IMO. Я сделал 2 кнопки для этого в качестве примера.
это несколько улучшение того, что @vacip опубликовал. Преимущество заключается в том, что вам не нужно добавлять отдельный метод в модуль для каждого нового текстового поля.
следующий код в форму:
следующий код в модуле:
Я знаю, что это устарело, но я оставляю это здесь, вдруг это поможет кому-то в моем положении.
чего я хочу, так это:
- если я нажму на поле в первый раз: выберите весь текст
- если я нажму на него в следующий раз: поместите курсор туда, где находится мышь, и позвольте мне использовать мышь, чтобы выбрать подстроку
во-первых, важно знать, что "выделить весь текст" - это поведение по умолчанию при закладке в текстовое поле и что "поместить курсор здесь" является поведением по умолчанию при нажатии на текстовое поле, поэтому нам нужно только беспокоиться о том, что делает мышь.
для этого мы можем отслеживать активный элемент управления, но только во время перемещения мыши над нашим текстовым полем (т. е. перед щелчком)
код:
поведение, которое вы пытаетесь реализовать, уже встроено в TextBox . При перемещении мыши по левой стороне текстового поля указатель мыши будет указывать вправо. Если щелкнуть, то будет выделен весь текст в поле. Щелчок в другом месте отменит выбор текста.
Я попробую несколько других стратегий, чтобы увидеть, могу ли я заставить это работать в одном суб.
Требуется при клике на TextBox выделять текст. Собственно box-ы содержат пояснение, что вводить. Удалять по-умолчанию его не нужно. Но выделить перед введением текста, чтобы ускорить ввод, стоит.
По какой-то причине не срабатывает. Чувствую где-то рядом, но видимо что-то не учитываю.
Если внимательно присмотреться к элементу TextBox, то можно заметить, что при первом клике на нем происходит следующее: элемент приобретает фокус и каретка курсора встает на месте клика пользователя.
Когда мы пытаемся по события фокуса просто выделить весь текст внутри:
Происходит следующее. Наш текстовый элемент получает событие (Preview)MouseLeftButtonDown, которое вызывает фокус и только потом устанавливает каретку в нужное положение, тем самым снимая наше выделение от события фокуса. Эта та причина, по которой при получении элементом фокуса от клавиатуры, выделение срабатывает нормально, а при клике нет.
Одним из вариантов решения является самому отловить событие нажатия мыши и обработать его, но у элемента TextBox отсутствуют какие-либо события мышки кроме (preview)DoubleMouseClick. Для того, что бы решить эту проблему, используется регистрация события на все элементы TextBox через EventManager.RegisterClassHandler . При этом событие останавливается и элементу передается событие фокуса.
В данном варианте остается одна проблема, теперь каждый раз срабатывает событие фокуса и текст остается выделенным всегда, а мышь не работает. Последней правкой является остановка событие только тогда, когда фокус у элемента еще не получен. Для этого можно использовать свойство IsFocused, но поскольку элемент может содержать еще какие-то вложенные элементы, используется IsKeyboardFocusWithin .
Кстати, событие получения фокуса можно установить не через text.GotFocus += text_GotFocus , а через тот же EventManager.RegisterClassHandler . Разницы в данном случае не будет. Вот мы и приходим к такому коду:
И все из-за того, что событие клика так работает - само устанавливает фокус и потом устанавливает каретку, снимая наши попытки выделения.
VBA TextBox является одним из многих элементов управления из элементов управления UserForm в Excel. VBA TextBox может пригодиться, если вы хотите, чтобы пользователь вводил данные, такие как его имя, возраст, адрес, зарплата и т. Д. Используя элемент управления TextBox, вы можете позволить пользователям вводить такую информацию и сэкономить много времени, а также опечатки., VBA TextBox может состоять из статических или динамических данных.
UserForm сам по себе является очень полезным инструментом, который имеет различные параметры управления, такие как TextBox, MsgBox, InputBox и т. Д., Которые предоставляют более практичный способ получения данных от пользователя, чтобы вы могли функционально обрабатывать эти данные и находить из них некоторые полезные идеи.,
В этой статье вы получите практический опыт работы с Excel VBA TextBox.
Примеры Excel VBA TextBox
Ниже приведены различные примеры VBA TextBox в Excel.
Вы можете скачать этот шаблон Excel для VBA TextBox здесь - Шаблон Excel для VBA TextBox
Пример № 1 - Как вставить TextBox в VBA?
Ниже приведены шаги для вставки TextBox в Excel VBA.
Шаг 1: Откройте файл Excel и нажмите Alt + F11, чтобы перейти на панель VBA.
Шаг 2: Как мы уже обсуждали, TextBox - это опция, доступная в пользовательской форме. Поэтому нам нужно вставить UserForm в VBE. Перейдите в меню «Вставка» > нажмите «Пользовательская форма» .
Шаг 3: Как только вы вставляете пользовательскую форму в VBA, вы можете видеть параметр Toolbox, связанный с ним, и иметь различные параметры, связанные с UserForm.
Шаг 4: В этом наборе инструментов выберите TextBox .
Шаг 5: Перетащите этот TextBox на форму пользователя.
Шаг 6: Нажмите F4, чтобы увидеть свойства пользовательской формы (в качестве альтернативы вы можете сделать это, щелкнув правой кнопкой мыши на вставленной пользовательской форме). Эти свойства позволяют вам внести некоторые необходимые изменения, такие как изменение имени пользовательской формы, чтобы иметь возможность легко получить к нему доступ.
Некоторые другие основные изменения, которые вы можете сделать в панели свойств UserForm, такие как изменение шрифта, изменение размера и т. Д.
Вот как вы можете создать VBA TextBox.
Пример №2 - Установка значения в VBA TextBox
Давайте посмотрим, как мы можем установить значения для TextBox. Иногда бывает необходимо установить значения в противном случае, пользователь будет вводить все, что его интересует.
Шаг 1: Вставьте новую пользовательскую форму в VBE. Перейдите в меню « Вставка» > нажмите «Пользовательская форма».
Шаг 2: Из UserForm Tools выберите TextBox и перетащите его в UserForm.
Шаг 3: Вставьте CommandButton под UserForm так же, как вы добавили TextBox.
Шаг 5: Дважды щелкните по кнопке отправки или щелкните правой кнопкой мыши и выберите « Просмотреть код» .
Шаг 6: В коде вставьте строку нового кода в подпроцедуру, как показано ниже.
Код:
Этот выделенный код позволяет назначать значение справа, заключенное в двойные кавычки, в TextBox. Вы также можете использовать свойство TextBox.Text вместо TextBox.Values, чтобы установить значение для TextBox.
Шаг 7: Нажмите F5 или кнопку Run под VBE, чтобы запустить этот код, вы увидите пользовательскую форму с пустым TextBox. Как только вы нажмете кнопку отправки, там появится текст, назначенный для TextBox.
Выполните следующие шаги:
Шаг 1: Вставьте новую пользовательскую форму в VBA и добавьте в нее TextBox.
Шаг 2: Измените имя TextBox в разделе «Свойства» на « My_Age ».
Шаг 3: Дважды щелкните TextBox или щелкните его правой кнопкой мыши и выберите View Code .
Вы сможете увидеть начальную подпроцедуру, как показано ниже:
Код:
Шаг 4: Теперь попробуйте добавить условие If, которое начинается с If Not.
Код:
Шаг 5: Попросите компилятор проверить, является ли значение TextBox «My_Age» числовым или не использует IsNumeric Keyword перед условием «Если не».
Код:
Шаг 6: Когда каждое условие IF запрашивает, добавьте ключевое слово Then для него.
Код:
В этом фрагменте кода вы просите компилятор проверить, является ли значение, введенное пользователем в TextBox, числовым или нет. Если это не цифра, то что делать? Следуйте следующему шагу.
Шаг 7: С помощью MsgBox добавьте комментарий типа «Извините! Разрешены только цифры. », Если значение в TextBox не является числовым.
Код:
Шаг 8: Теперь закройте этот оператор IF, используя ключевое слово End IF.
Код:
Шаг 9: Теперь запустите этот код, нажав кнопку F5 на клавиатуре или кнопку Run из VBE, и просмотрите результат. Вы получите TextBox, как показано ниже:
Теперь я пытаюсь ввести в него целочисленное значение и посмотреть, позволяет ли оно мне вводить то же самое или нет.
Бинго, это позволяет мне хранить целочисленное значение.
Теперь давайте попробуем добавить некоторое число с плавающей точкой (значение с десятичными точками) в это текстовое поле и посмотрим, позволяет ли оно нам вводить то же самое.
Давайте проверим, позволяет ли это текстовое поле хранить некоторые отрицательные значения под ним или нет. Я наберу некоторое отрицательное число и проверю.
Наконец, давайте попробуем некоторую текстовую строку в поле и посмотрим, позволяет ли она хранить то же самое в текстовом поле или нет.
То, что нужно запомнить
- VBA TextBox - это специальная опция в пользовательской форме. Который предназначен для ввода данных от самого пользователя.
- Есть два способа установить значения для TextBox: с помощью TextBox.Text и с помощью TextBox.Value.
- Иногда необходимо ограничить ввод данных пользователем, чтобы мы получали правильный тип данных.
Рекомендуемые статьи
Это руководство по VBA TextBox. Здесь мы обсудим, как создать TextBox в Excel VBA вместе с практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи -
Читайте также: