|
||||||||
Как быстро заполнить/очистить элементы на форме(TextBox-ы, ComboBox-ы)
Время создания: 16.03.2019 23:43
Текстовые метки: TextBox, ComboBox
Раздел: Разные закладки - VBA - Форма
Запись: xintrea/mytetra_db_adgaver_new/master/base/1514993694inddbi27jp/text.html на raw.githubusercontent.com
|
||||||||
|
||||||||
Как быстро заполнить/очистить элементы на форме(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" будут подставлены значения номеров самих ТекстБоксов. Но такой недостаток может быть очень полезным. Например, если необходимо проделать действия не над всеми ТекстБоксами, а лишь над некоторыми из них. Тогда даете им определенные имена имена и все. И в зависимости от имени можно проделывать различные действия: стирать значения, менять свойства элементов и т.д. 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, 2 725 скачиваний) |
||||||||
Прикрепленные файлы:
|
||||||||
Так же в этом разделе:
|
||||||||
|
||||||||
|