Remkomplekty.ru

IT Новости из мира ПК
5 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Textbox в excel

Функция VAL в VBA Excel или как преобразовать TextBox в число (цифру).

Иногда при написании макросов необходимо производить вычисления или сравнения числовых значений, которые вносятся в поля «TextBox». Существует небольшая проблемка при работе с этими данными – информация из поля «TextBox» воспринимается программой как текстовая и, соответственно, в расчетах не может использоваться.

Для решения денной проблемы в VBA можно использовать функцию VAL(), которая переводит в численный формат данных. VAL — это функция конвертирующая текстовые значения аргумента в целые числовые или числовые значения с плавающей запятой. Следует отметить что функция Val при преобразовании десятичных дробей в число может распознать только точку, то есть, если вы напишете десятичную дробь через запятую, то функция распознает только первую (целую)часть дроби, остальной текст после запятой функция не воспримет. Например: VAL(«10,8»)= 10

Рассмотрим пример кода с данной функцией (VAL) и без нее:

Существует форма для внесения данных, в которой в два поля «TextBox1» и «TextBox1» вносятся числа, которые сравниваются нажатием кнопки «Сравнить»(CommandButton1) и суммируются нажатием кнопки «Сумма» (CommandButton2).

Если на нажатие кнопки сравнения «Сравнить»(CommandButton1) использовать код:

  1. Private Sub CommandButton1_Click()
  2. Dim i, b As String
  3. i = TextBox1.Value
  4. b = TextBox2.Value
  5. If i b = True Then MsgBox («Первое число больше «)
  6. End Sub

А на нажатие кнопки суммы «Сумма» (CommandButton2) применить код:

  1. Private Sub CommandButton2_Click()
  2. Dim i, b, d As String
  3. i = UserForm1.TextBox1.Value
  4. b = UserForm1.TextBox2.Value
  5. d = i + b
  6. TextBox3.Value = d End Sub

Сравнение значений будет выполняться верно, но расчеты суммы будут неверными:

Применим функцию VAL () в этих кодах:

1-й код (Сравнение двух чисел)

  1. Private Sub CommandButton1_Click()
  2. Dim i, b As String
  3. i = Val(UserForm1.TextBox1.Value)
  4. b = Val(UserForm1.TextBox2.Value)
  5. If i b = True Then MsgBox («Первое число больше «)
  6. End Sub

2-й код (Сумма двух чисел)

  1. Private Sub CommandButton2_Click()
  2. Dim i, b, d As String
  3. i = Val(UserForm1.TextBox1.Value)
  4. b = Val(UserForm1.TextBox2.Value)
  5. d = i + b
  6. TextBox3.Value = d End Sub

С таким кодом кнопки формы UserForm1 работают корректно, как показано на скриншоте далее.

Класс TextBox — создание текстового поля VBA

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

Давайте для начала рассмотрим основные свойства класса TextBox и его базовое событие, а потом напишем пример.

События класса TextBox VBA языка

Value или Text – текст, который введен в текстовое поле TextBox

Visible – позволяет спрятать (значение false) или снова отобразить (значение true) элемент.

MultiLine – данное свойство позволяет задать, будет ли текстовое поле однострочным (false), или многострочным (true).

WordWrap – свойство актуально использовать, если MultiLine содержит значение true, в таком случае, если WordWrap установлено в true, то произойдет автоматический перенос текста на новую строку, когда будет достигнута граница текстового поля TextBox.

ScrollBars – позволяет указать, будут или отображаться полосы прокрутки. Свойство может принимать следующие значения:

  • 0 – fmScrollBarsNone (полосы прокрутки отсутствуют)
  • 1– fmScrollBarsHorizontal (горизонтальная полоса прокрутки)
  • 2 – fmScrollBarsVertical (вертикальная полоса прокрутки)
  • 3 – fmScrollBarsBoth (горизонтальная и вертикальная прокрутки)

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

MaxLength – позволяет указать максимальное количество символов, которое можно ввести в текстовое поле. По умолчанию – 0, то есть, ограничения нет.

Как и у других элементов управления, у класса TextBox есть события, основным событием для TextBox является Change – оно возникает каждый раз, когда в текстовое поле вводится символ. Возможно вам приходилось видеть такую картинку: при вводе проверочного кода, пока его длинна не достигнет заданной (например, 12 символов), кнопка “Проверить” не будет доступной. Тут тоже можно такое реализовать.

Хорошо, теперь настало время практики. Я не буду снова вникать во все мелочи, как в прошлых статьях, поэтому скажу прямо: добавьте в проект новый модуль и новую форму. Выберите из окна ToolBox элемент управления Надпись (Label), добавьте ее на форму, пусть будет вверху, под ней поставьте текстовое поле (TextBox), а в самом низу – пусть будет кнопка (CommandButton с надписью “Проверить”). Хорошо, как и прежде, в редакторе кода для модуля прописываем процедуру:

Учтите, что имя вашего модуля и формы могут отличаться.

Теперь нам нужно написать программный код на языке VBA, который будет делать следующее:

В текстовое поле будет вводиться текст, длина текста не больше 12 символов, пока длина будет меньше 12 символов, кнопка “Проверить” будет недоступна. Как только мы достигаем предела, кнопка становится активной, при нажатии на нее, содержимое текстового поля TextBox должно отобразиться в поле Label (Надпись).

Читать еще:  Формула промежуточные итоги в excel

И так, давайте посмотрим на процедуры, которые я прописал в редакторе кода для формы:

Тут идет обработка одиночного щелчка по кнопке, при нажатии на кнопку, свойству Caption объекта Label1 (Надпись) будет присвоено содержимое текстового поля TextBox1 (свойство Text).

Тут происходит обработка события Change для текстового поля объекта TextBox1 класса vba TextBox. Переменная LenText будет хранить длину вводимого текста, при каждом вводе данных будет происходить проверка длины, если она ровна 12 – то произойдет активация кнопки, иначе 0 кнопка будет неактивна.

В этой процедуре происходит настройка начальных значений, некоторые из них можно задать и в окне Свойств, но я решил для наглядности прописать все в программном коде. Тут нет ничего страшно, как только форма загрузится в память, кнопка “Проверить” будет неактивной, размер шрифта для текстового поля и надписи установлен в 20, также мы установили максимальную длину текста для класса TextBox VBA языка и его однострочность.

Спасибо за внимание. Автор блога Владимир Баталий

Советую ещё почитать:

  • Утилита WMI CIM Studio — часть 3
  • Автозамена слов, фраз и математических выражений в Word 2007
  • Примеры создания диалогового окна
  • Коллекция Word HeadersFooters и объекты HeaderFooter — работа с колонтитулами
  • Урок 6 по VBA — Константы

Как быстро заполнить/очистить элементы на форме(TextBox-ы, ComboBox-ы)

Очень часто при работе с формами(UserForm) приходится заполнять значениями КомбоБоксы(ComboBox) и ТекстБоксы(TextBox). Иногда однотипными данными. Или очистить их все после выполнения какого-либо действия. А может проверить, все ли элементы заполнены, прежде чем продолжать действие. Если КомбоБоксов/ТекстБоксов пару штучек — не проблема

и всех делов. А если их порядка двадцати? Или больше? Мало того, что писать это все долго, так еще и код растягивается, как портянка. Но это можно сделать гораздо проще и удобнее. Воспользоваться можно несколькими способами. Этот способ наиболее популярен, если необходимо произвести однотипные действия со всеми ТекстБоксами на форме:

Sub All_TextBoxes() Dim oControl As Control For Each oControl In UserForm1.Controls If TypeOf oControl Is MSForms.TextBox Then oControl.Value = «» Next oControl End Sub

В примере элементы формы очищаются, но в код можно подставить любое действие — добавление нового элемента списка(для ComboBox), поменять представление данных в TextBox, проверить наличие данных в проверяемом элементе и т.д. Тут уж зависит от поставленной задачи. Конечно, подобным способом можно проделать разные действия и с остальными элементами формы. Только надо будет заменить тип для проверки элементов:

ComboBox — MSForms.ComboBox CheckBox — MSForms.CheckBox CommandButton — MSForms.CommandButton Frame — MSForms.Frame Image — MSForms.Image Label — MSForms.Label ListBox — MSForms.ListBox MultiPage — MSForms.MultiPage SpinButton — MSForms.SpinButton TabStrip — MSForms.TabStrip ToggleButton — MSForms.ToggleButton

Это не единственный способ проделывания однотипных действий с элементами формы. Код ниже использует имена элементов для обращения к ним:

Sub All_TextBoxes() Dim li As Long For li = 1 To 10 UserForm1.Controls(«TextBox» & li).Value = li Next li End Sub

Недостаток данного метода: имена элементов должны строго соответствовать используемым в коде и лишь нумерация на конце имени должна различаться. За нумерацию отвечает переменная li и, конечно, цикл, в котором задается начальное и конечные значения. В примере ТекстБоксам с именами от «TextBox1» до «TextBox10» будут подставлены значения номеров самих ТекстБоксов. Но такой недостаток может быть очень полезным. Например, если необходимо проделать действия не над всеми ТекстБоксами, а лишь над некоторыми из них. Тогда все, что необходимо дать ТекстБоксам определенные имена с нумерацией(«ToDB1″,»ToDB2» и т.д.) и в зависимости от имени можно проделывать различные действия: стирать значения, менять свойства элементов и т.д.
И есть еще один плюс такого подхода: когда необходимо заполнить значения ТекстБоксов значениями ячеек. Скажем надо заполнить 10 ТекстБоксов(с именами TextBox1 , TextBox2 , TextBox3 и т.д.) из ячеек диапазона A2:A11 листа с именем «Лист2″(т.е. из 10 ячеек, начиная с ячейки A2). Код будет выглядеть так:

Sub Fill_TextBoxes_FromCells() Dim li As Long For li = 1 To 10 UserForm1.Controls(«TextBox» & li).Value = Sheets(«Лист2»).Range(«A» & li).Value ‘или применить Cells вместо Range ‘UserForm1.Controls(«TextBox» & li).Value = Sheets(«Лист2»).Cells(li, 1).Value Next li End Sub

Подробнее про обращение к диапазонам из VBA можно узнать из этой статьи: Как обратиться к диапазону из VBA

Tips_Macro_WorkWithGroupControls.xls (51,5 KiB, 3 460 скачиваний)

Статья помогла? Поделись ссылкой с друзьями!

Поиск по меткам

Вы правильно идете. Просес овладения VBA (как и любой) содержит две параллельные дороги — теория и задачи. По теории горы книг и все переписывают азы друг у друга, да ктому же читаешь на 30 странице и не помнишь что на 1 -ой. Решение отдельной задачи с подробными коментариями, это вторая, очень нужная Дорога. Спосибо.

А как сделать тоже самое, имею ввиду очистку, только на листе.Сейчас пользуюсь
таким кодом.
Private Sub test()
TextBox1 = «»
TextBox2 = «»
TextBox3 = «»
TextBox4 = «»
TextBox5 = «»
End Sub

Читать еще:  Vba excel циклы

Спасибо пришлось самой найти
For iCount = 1 To 10
OLEObjects(«TextBox» & iCount).Object.Value = «»
Но я вам благодарна, что ваши идеи заставляют извилины работать.

При использовании combobox (в макросе Exel) часто возникают новые значения,которые должны быть занесены в ниспадающий список. Мохно ли автоматизировать занесение этих значений в список после набора их в окне combobox.

Яков, я бы рекомендовал на форум обратиться. Ваш вопрос к статье никакого отношения не имеет.

Добрый день у меня на форме 10 комбобоксов я использую такой код т.е. пишу для каждого соmbobox отдельно

With Sheets(«справка»)
LastRow = .Cells(Rows.Count, 2).End(xlUp).Row
Me.ComboBox1.List = .Range(«b2:b» & LastRow).Value
Me.ComboBox2.List = .Range(«b2:b» & LastRow).Value
Me.ComboBox3.List = .Range(«b2:b» & LastRow).Value

Как можно сократить код.Спасибо.

Юрий, а статью-то прочитать не судьба? Там есть Ваш случай, только в качестве примера TextBox.

Разобрался .Все работает. Главное внимательно прочесть
Спасибо за сайт.

Ваш сайт для меня — просто находка! Какой вопрос ни возникает, здесь есть практически все ответы. Спасибо! И за эту статью отдельное спасибо!

На форме используются текстбоксы:
txtb_НачальнаяДата,txtb_КонечнаяДата,txtb_Cтоимость и т.д. до 10 штук. Начальные буквы txtb, а далее меняются окончания. Как очистить текстбоксы.
Вариант :txtb_НачальнаяДата.Value=»» -это понятно ,а через цикл можно?

Юрий, применить смекалку и доступные инструкции проверки:

Sub All_TextBoxes() Dim oControl As Control For Each oControl In UserForm1.Controls If TypeOf oControl Is MSForms.TextBox Then If left(Control.Name,4) = «txtb» Then oControl.Value = «» End If End If Next oControl End Sub

Подскажите пожалуйста, как мне заполнить Textbox, которые имеют разные названия (по типу «a», «h». ) из ячеек с7:с12.
Сейчас я использую такой код, но он очень уж не оптимальный исходя из того что мне надо заполнять 10 заданий, 10 вариантов, в каждом по 7 textbox (700 строчек).
.
If Co = «Вариант1» Then
h = Range(«c7»)
d = Range(«c8»)
q = Range(«c9»)
h1 = Range(«c10»)
d1 = Range(«c11»)
q1 = Range(«c12»)
ElseIf Co = «Вариант2» Then
h = Range(«d7»)
d = Range(«d8»)
q = Range(«d9»)
h1 = Range(«d10»)
d1 = Range(«d11»)
q1 = Range(«d12»)
ElseIf Co = «Вариант3» Then
h = Range(«e7»)
d = Range(«e8»)
q = Range(«e9»)
h1 = Range(«e10»)
d1 = Range(«e11»)
q1 = Range(«e12»)
.
заранее спасибо.

Поделитесь своим мнением

Комментарии, не имеющие отношения к комментируемой статье, могут быть удалены без уведомления и объяснения причин. Если есть вопрос по личной проблеме — добро пожаловать на Форум

5.3.3 Элемент управления TextBox (текстовое поле)

Элемент управления TextBox, свойство Value (Text)

Текстовое поле (TextBox) — один из самых часто используемых элементов управления (см. рис. 5.3).

Рис. 5.3 Текстовое поле (элемент управления TextBox) на форме

Текстовое поле используется:

  • для приема каких-либо текстовых данных, вводимых пользователем (например, для отправки по почте, для занесения в базу данных и т.п.);
  • для вывода пользователю текстовых данных с возможностью их редактирования (из базы данных, листа Excel и т.п.);
  • для вывода пользователю текстовых данных с возможностью копирования и печати, но без возможности изменения (классический пример — текст лицензионного соглашения).

Некоторые важные свойства этого элемента управления:

  • Value (или Text, эти два свойства для текстового поля идентичны) — то текстовое значение, которое содержится в этом поле. Используется для занесения исходного значения и для приема значения, введенного пользователем, в строковую переменную.
  • AutoSize — возможность для текстового поля автоматически менять свой размер, чтобы вместить весь текст. Использовать не рекомендуется, так как может нарушиться весь дизайн вашей формы.
  • ControlSource — ссылка на источник текстовых данных для поля. Может ссылаться, например, на ячейку в Excel, на поле в Recordset и т.п. При изменении пользователем данных в текстовом поле автоматически изменится значение на источнике, определенном в ControlSource.
  • ControlTipText — текст всплывающей подсказки, которая появляется, когда пользователь наводит указатель мыши на элемент управления. Рекомендуется к заполнению для всех элементов управления (для самой формы не предусмотрена).
  • Enabled — если переставить в False, то текст в поле станет серым и с содержимым поля ничего сделать будет нельзя (ни ввести текст, ни выделить, ни удалить). Обычно это свойство используется (для всех элементов управления), чтобы показать пользователю, что этот элемент управления отключен до выполнения каких-либо условий.
  • Locked — поле будет выглядеть как обычно, пользователь сможет выделять и копировать данные из него, но не изменять их. Обычно используется для показа неизменяемых данных типа лицензионных соглашений, сгенерированных значений и т.п.
  • MaxLength — максимальная длина значения, которое можно ввести в поле. Иногда можно использовать свойство AutoTab — при достижении определенного количества символов управление автоматически передается другому элементу управления.
  • MultiLine — можно ли использовать в текстовом поле несколько строк или необходимо обойтись одной. Если вам нужно текстовое поле для приема одного короткого значения, подумайте, нельзя ли вместо него обойтись функцией InputBox.
  • PasswordChar — указать, за каким символом будут «прятаться» вводимые пользователем значения. Используется, конечно, при вводе пароля.
  • ScrollBars — будут ли показаны горизонтальная и вертикальная полосы прокрутки (в любом сочетании). Если текст может быть большим, без них не обойтись.
  • WordWrap — настоятельно рекомендуется включать в тех ситуациях, когда значение MultiLine стоит в True. В этом случае будет производиться автоматический переход на новую строку при достижении границы текстового поля.
Читать еще:  Excel количество по условию

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

Главное событие для текстового поля — это событие Change (то есть изменение содержания поля). Обычно на это событие привязывается проверка вводимых пользователем значений или синхронизация введенного значения с другими элементами управления (например, сделать доступной кнопку, изменить текст надписи и т.п.)

Класс TextBox — создание текстового поля VBA

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

Давайте для начала рассмотрим основные свойства класса TextBox и его базовое событие, а потом напишем пример.

События класса TextBox VBA языка

Value или Text – текст, который введен в текстовое поле TextBox

Visible – позволяет спрятать (значение false) или снова отобразить (значение true) элемент.

MultiLine – данное свойство позволяет задать, будет ли текстовое поле однострочным (false), или многострочным (true).

WordWrap – свойство актуально использовать, если MultiLine содержит значение true, в таком случае, если WordWrap установлено в true, то произойдет автоматический перенос текста на новую строку, когда будет достигнута граница текстового поля TextBox.

ScrollBars – позволяет указать, будут или отображаться полосы прокрутки. Свойство может принимать следующие значения:

  • 0 – fmScrollBarsNone (полосы прокрутки отсутствуют)
  • 1– fmScrollBarsHorizontal (горизонтальная полоса прокрутки)
  • 2 – fmScrollBarsVertical (вертикальная полоса прокрутки)
  • 3 – fmScrollBarsBoth (горизонтальная и вертикальная прокрутки)

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

MaxLength – позволяет указать максимальное количество символов, которое можно ввести в текстовое поле. По умолчанию – 0, то есть, ограничения нет.

Как и у других элементов управления, у класса TextBox есть события, основным событием для TextBox является Change – оно возникает каждый раз, когда в текстовое поле вводится символ. Возможно вам приходилось видеть такую картинку: при вводе проверочного кода, пока его длинна не достигнет заданной (например, 12 символов), кнопка “Проверить” не будет доступной. Тут тоже можно такое реализовать.

Хорошо, теперь настало время практики. Я не буду снова вникать во все мелочи, как в прошлых статьях, поэтому скажу прямо: добавьте в проект новый модуль и новую форму. Выберите из окна ToolBox элемент управления Надпись (Label), добавьте ее на форму, пусть будет вверху, под ней поставьте текстовое поле (TextBox), а в самом низу – пусть будет кнопка (CommandButton с надписью “Проверить”). Хорошо, как и прежде, в редакторе кода для модуля прописываем процедуру:

Учтите, что имя вашего модуля и формы могут отличаться.

Теперь нам нужно написать программный код на языке VBA, который будет делать следующее:

В текстовое поле будет вводиться текст, длина текста не больше 12 символов, пока длина будет меньше 12 символов, кнопка “Проверить” будет недоступна. Как только мы достигаем предела, кнопка становится активной, при нажатии на нее, содержимое текстового поля TextBox должно отобразиться в поле Label (Надпись).

И так, давайте посмотрим на процедуры, которые я прописал в редакторе кода для формы:

Тут идет обработка одиночного щелчка по кнопке, при нажатии на кнопку, свойству Caption объекта Label1 (Надпись) будет присвоено содержимое текстового поля TextBox1 (свойство Text).

Тут происходит обработка события Change для текстового поля объекта TextBox1 класса vba TextBox. Переменная LenText будет хранить длину вводимого текста, при каждом вводе данных будет происходить проверка длины, если она ровна 12 – то произойдет активация кнопки, иначе 0 кнопка будет неактивна.

В этой процедуре происходит настройка начальных значений, некоторые из них можно задать и в окне Свойств, но я решил для наглядности прописать все в программном коде. Тут нет ничего страшно, как только форма загрузится в память, кнопка “Проверить” будет неактивной, размер шрифта для текстового поля и надписи установлен в 20, также мы установили максимальную длину текста для класса TextBox VBA языка и его однострочность.

Спасибо за внимание. Автор блога Владимир Баталий

Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector
×
×