Хитрости »
Основные понятия (23)
Сводные таблицы и анализ данных (9)
Графики и диаграммы (5)
Работа с VB проектом (12)
Power BI и Power Query (14)
Условное форматирование (5)
Списки и диапазоны (5)
Макросы(VBA процедуры) (63)
Разное (38)
Баги и глюки Excel (2)

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

 

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

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

В примере элементы формы очищаются, но в код можно подставить любое действие - добавление нового элемента списка(для 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" будут подставлены значения номеров самих ТекстБоксов. Но такой недостаток может быть очень полезным. Например, если необходимо проделать действия не над всеми ТекстБоксами, а лишь над некоторыми из них. Тогда даете им определенные имена имена и все. И в зависимости от имени можно проделывать различные действия: стирать значения, менять свойства элементов и т.д.
И есть еще один плюс такого подхода: когда необходимо заполнить значения ТекстБоксов значениями ячеек. Скажем надо заполнить 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, 2 976 скачиваний)


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

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

Access apple watch Multex Outlook Power Query и Power BI VBA работа в редакторе VBA управление кодами Бесплатные надстройки Дата и время Диаграммы и графики Записки Защита данных Интернет Картинки и объекты Листы и книги Макросы и VBA Надстройки Настройка Печать Поиск данных Политика Конфиденциальности Почта Программы Работа с приложениями Работа с файлами Разработка приложений Сводные таблицы Списки Тренинги и вебинары Финансовые Форматирование Формулы и функции Функции Excel Функции VBA Ячейки и диапазоны акции MulTEx анализ данных баги и глюки в Excel ссылки
Обсуждение: 12 комментариев
  1. zel:

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

  2. magrifa:

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

  3. magrifa:

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

  4. Яков:

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

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

  6. Юрий:

    Добрый день у меня на форме 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

    End With

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

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

    • Юрий:

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

  8. Наталья:

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

    • Юрий:

      На форме используются текстбоксы:
      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
  9. Ярослав:

    Подскажите пожалуйста, как мне заполнить 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")
    ...
    заранее спасибо.

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

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


Для оформления сообщений Вы можете использовать следующие тэги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Тренинги

Заказать
Юридическая информация

Использование материалов сайта

Политика Конфиденциальности

ИП Щербаков Дмитрий Валентинович
ОГРНИП: 318502700083307
ИНН: 504013350772

Наши партнеры

Перейти
Перейти

Счетчики

Рейтинг@Mail.ru Яндекс.Метрика
© 2018 Excel для всех   Войти