Заполнение формы данными из «умной» и «обычной» таблицы Excel с помощью кода VBA. Загрузка данных из таблицы в поля элементов управления формы.
Исходные данные для примера
Есть «умная» таблица с именем «Таблица1» на листе с именем «Лист1» (на ярлыке):
Необходимо форму «UserForm2»:
заполнить данными из выбранной строки таблицы «Таблица1».
Заполнение поля со списком
Сначала необходимо при открытии формы «UserForm2» заполнить список поля «ComboBox1» данными первого столбца таблицы «Таблица1»:
1 2 3 4 5 6 7 8 9 |
Private Sub UserForm_Initialize() With ComboBox1 'заполняем список поля ComboBox1 данными первого столбца «умной» таблицы .List = ThisWorkbook.Sheets("Лист1").Range("Таблица1").Columns(1).Value 'вставляем значение первой позиции списка (нумерация начинается с нуля) 'в качестве значения поля ComboBox1 .Value = .List(0) End With End Sub |
Код размещается в модуле формы.
Заполнение текстовых полей
Заполняем текстовые поля «TextBox1» и «TextBox2» значениями из таблицы в соответствии с выбранным в поле ComboBox1 значением:
1 2 3 4 5 6 7 8 9 10 11 |
Private Sub ComboBox1_Change() With ThisWorkbook.Sheets("Лист1") On Error GoTo Isprav TextBox1.Text = WorksheetFunction.VLookup(ComboBox1.Value, .Range("Таблица1"), 2, 0) TextBox2.Text = WorksheetFunction.VLookup(ComboBox1.Value, .Range("Таблица1"), 3, 0) End With Exit Sub Isprav: TextBox1.Text = "" TextBox2.Text = "" End Sub |
Код размещается в модуле формы. Результат работы кодов VBA Excel обеих процедур:
Теперь при выборе в поле со списком любого значения из первого столбца таблицы, текстовые поля «TextBox1» и «TextBox2» будут автоматически заполнены соответствующими значениями из 2 и 3 столбцов.
Для заполнения текстовых полей используется функция рабочего листа «VLookup» — аналог функции «ВПР».
Обработчик ошибок срабатывает при ручном наборе в поле ComboBox1 значений, отсутствующих в первом столбце таблицы.
Если таблица «обычная»
В случае, если таблица не «умная», а представляет из себя «обычную» таблицу (набор данных), ее рабочий диапазон можно присвоить объектной переменной:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
Private Sub UserForm_Initialize() Dim myRange As Range, n As Long With ThisWorkbook.Sheets("Лист1") n = .Range("A1").CurrentRegion.Rows.Count Set myRange = .Range(.Cells(2, 1), .Cells(n, 3)) End With With ComboBox1 'заполняем список поля ComboBox1 данными первого столбца «обычной» таблицы .List = myRange.Columns(1).Value 'вставляем значение первой позиции списка (нумерация начинается с нуля) 'в качестве значения поля ComboBox1 .Value = .List(0) End With End Sub Private Sub ComboBox1_Change() Dim myRange As Range, n As Long With ThisWorkbook.Sheets("Лист1") n = .Range("A1").CurrentRegion.Rows.Count Set myRange = .Range(.Cells(2, 1), .Cells(n, 3)) End With On Error GoTo Isprav TextBox1.Text = WorksheetFunction.VLookup(ComboBox1.Value, myRange, 2, 0) TextBox2.Text = WorksheetFunction.VLookup(ComboBox1.Value, myRange, 3, 0) Exit Sub Isprav: TextBox1.Text = "" TextBox2.Text = "" End Sub |
Предыдущая статья: Добавление строки в таблицу с сортировкой