Версия для печати

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

Что умеет Excel

 

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

TextBox1 = ""
TextBox2 = ""
TextBox1 = ""
TextBox2 = ""

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

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
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
Label - MSForms.OptionButton
SpinButton - MSForms.SpinButton
TabStrip - MSForms.TabStrip
ToggleButton - MSForms.ToggleButton
ComboBox - MSForms.ComboBox
CheckBox - MSForms.CheckBox
CommandButton - MSForms.CommandButton
Frame - MSForms.Frame
Image - MSForms.Image
Label - MSForms.Label
ListBox - MSForms.ListBox
MultiPage - MSForms.MultiPage
Label - MSForms.OptionButton
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
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″ будут подставлены значения номеров самих ТекстБоксов. Но такой недостаток может быть очень полезным. Например, если Вам надо проделать действия не над всеми ТекстБоксами, а лишь над некоторыми из них. Тогда даете им определенные имена имена и все. И в зависимости от имени можно проделывать различные действия: стирать значения, менять свойства элементов и т.д.

Скачать пример »

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



Поддержать автора сайта
Поделиться ссылкой
  1. zel
    16 Декабрь 2011 в 11:50 | #1

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

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