image

Мы знаем, как создать каскадный раскрывающийся список на листе с помощью проверки данных. Но как создать каскадный выпадающий список со списком в пользовательской форме VBA. Это одна из основных потребностей. В этой статье мы узнаем, как создать зависимое поле со списком в VBA. === Логика для зависимого поля со списком в VBA Чтобы создать зависимое поле со списком в VBA, нам необходимо инициализировать поле со списком по событию исходного элемента. Например, если поле со списком зависит от группы переключателей, то код для загрузки зависимого поля со списком должен запускаться сразу после того, как кто-то выберет переключатель. Или, если поле со списком зависит от другого поля со списком, то в зависимости от поля со списком оно должно загружаться каждый раз, когда значение в поле со списком изменяется.

Довольно теории. Давайте рассмотрим пример, чтобы увидеть, как это работает.

ComboBox в зависимости от другого Combobox Создайте два combobox. Сначала следует перечислить несколько названий стран.

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

Давайте создадим форму, которая имеет два поля со списком с метками стран и штатов и командную кнопку для отправки ввода.

image

В первом поле со списком должны быть указаны названия стран, и он не зависит от какого-либо значения. Поэтому мы загрузим его в событие form_intialize, как и для базовой инициализации combobox.

Дважды щелкните пользовательскую форму. Это откроет область кодирования в объекте UserForm. Теперь в левом раскрывающемся меню выберите форму пользователя. Затем в правом раскрывающемся меню выберите инициализировать.

image

Будет вставлено пустое дополнительное имя UserForm_Initialize (). Все, что написано в этом подпрограмме, будет выполнено до появления пользовательской формы.

Итак, мы пишем здесь код инициализации для combobox.

Private Sub UserForm_Initialize()

countries = Array("India", "Nepal", "Bhutan", "Shree Lanka")

UserForm1.ComboBox1.List = states

End Sub

У нас инициализировано первое поле со списком. Каждый раз, когда вы загружаете пользовательскую форму, первое поле со списком будет готово с названиями стран.

Теперь, чтобы загрузить второе поле со списком, нам нужно посмотреть, какое значение выбрано в первом поле со списком1, и запускать код каждый раз, когда поле со списком 1 меняет свои значения. Для этого воспользуемся событием Combobox_AfterUpdate.

В раскрывающемся списке слева выберите combobox1. В правом раскрывающемся меню выберите AfterUpdate. Мы также можем использовать событие Change, но в статье мы будем придерживаться AfterUpdate.

Теперь напишите следующий код:

Private Sub ComboBox1_AfterUpdate()

Select Case ComboBox1.Value

Case "India":

states = Array("Delhi", "UP", "UK", "Gujrat", "Kashmir")

Case "Nepal":

states = Array("Arun Kshetra", "Janakpur Kshetra", "Kathmandu Kshetra",_

"Gandak Kshetra", "Kapilavastu Kshetra")

Case "Bhutan":

states = Array("Bumthang", "Trongsa", "Punakha", "Thimphu", "Paro")

Case "Shree Lanka":

states = Array("Galle", "Ratnapura", "Colombo", "Badulla", "Jaffna")

End Select



ComboBox2.List = states



End Sub

image

Здесь мы использовали оператор select case. Оператор select case хорош, когда мы хотим увидеть, какое значение выбрано из множества значений. Я объяснил это link: / general-themes-in-vba-vba-select-case-alternate-of-nested-if-else-if-applications [здесь подробно].

Чтобы сохранить значение, введенное пользователем, используйте кнопку отправки. Напишите приведенный ниже код в кнопке отправки команд, чтобы сохранить страну и штат, выбранные пользователем на листе.

Private Sub CommandButton1_Click()

country = ComboBox1.Value

State = ComboBox2.Value

ThisWorkbook.Worksheets("sheet1").Range("G1") = country

ThisWorkbook.Worksheets("sheet1").Range("H1") = State

Unload Me

End Sub

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

Sub load_userform()

UserForm1.Show

End Sub

Теперь запустите код load_userform.

image

Как это работает?

Когда вы запускаете подпрограмму с кодом userform.show, VBA запускает события userform_initialize сразу после выполнения команды userform.show. В событии userform_intialize мы инициализировали первое поле со списком, в котором есть список стран. После этого форма отображается пользователю.

Теперь, когда пользователь выбирает любое значение из первого поля со списком, запускается событие combobox1_AfterUpdate. Это событие содержит код для проверки того, какое значение выбрано пользователем в combobox1, и на основе этого значения оно устанавливает массив состояний и инициализирует значения combobox2 массивом состояний.

Так что да, ребята, вот как вы создаете каскадное поле со списком в пользовательской форме VBA. Надеюсь, я достаточно объяснил, и статья послужила своей цели. Если у вас есть какие-либо сомнения относительно этой статьи или любой темы VBA, спросите меня в разделе комментариев ниже.

Статьи по теме:

link: / applications-word-outlook-in-vba-Getting-started-with-excel-vba-userforms [Начало работы с пользовательскими формами Excel VBA] | * Я объясню, как создать форму в Excel, как использовать Панель инструментов VBA, как обрабатывать вводимые пользователем данные и, наконец, как хранить вводимые пользователем данные. Мы рассмотрим эти темы на одном примере и пошаговом руководстве.

link: / general-themes-in-vba-vba-variables-in-excel [переменные VBA в Excel] | * VBA означает Visual Basic для приложений.

Это язык программирования от Microsoft. Он используется с приложениями Microsoft Office, такими как MSExcel, MS-Word и MS-Access, тогда как переменные VBA являются конкретными ключевыми словами.

link: / general-themes-in-vba-excel-vba-variable-scope [Область действия переменной Excel VBA] | * Во всех языках программирования у нас есть спецификаторы доступа к переменным, которые определяют, откуда можно получить доступ к определенной переменной. Excel VBA — не исключение. VBA тоже имеет спецификаторы области видимости.

link: / cells-range-rows-and-columns-in-vba-what-is-the-difference-between-byref-and-byval-arguments-vba-интервью-question [ByRef and ByVal Arguments] | Когда аргумент передается как аргумент ByRef в другую подпрограмму или функцию, отправляется ссылка на фактическую переменную. Любые изменения, внесенные в копию переменной, будут отражены в исходном аргументе.

link: / files-workbook-and-worksheets-in-vba-delete-sheet-without-confirm-prompts-using-vba-in-microsoft-excel [Удалять листы без запросов на подтверждение с помощью VBA в Microsoft Excel] | Поскольку вы удаляете листы с помощью VBA, вы знаете, что делаете.

Вы хотите сказать Excel, чтобы он не показывал это предупреждение и не удалял этот проклятый лист.

link: / files-workbook-and-worksheets-in-vba-add-and-save-new-workbook-using-vba-in-microsoft-excel [Добавить и сохранить новую книгу с помощью VBA в Microsoft Excel 2016] | В этом коде мы сначала создали ссылку на объект книги. А затем мы инициализировали его новым объектом книги. Преимущество этого подхода заключается в том, что вы можете легко выполнять операции с этой новой книгой. Например, сохранение, закрытие, удаление и т. Д. Display A Message On Строка состояния Excel VBA * | Строку состояния в Excel можно использовать как монитор кода. Когда ваш код VBA длинный и вы выполняете несколько задач с помощью VBA, вы часто отключаете обновление экрана, чтобы экран не мерцал.

link: / general-themes-in-vba-turn-off-warning-messages-using-vba-in-microsoft-excel [Отключить предупреждающие сообщения с помощью VBA в Microsoft Excel 2016] | * Этот код отключает не только VBA предупреждения, но также увеличивает временную эффективность кода. Посмотрим как.

Популярные статьи:

link: / keyboard-formula-shortcuts-50-excel-shortcuts-to-вашу-продуктивность [50 комбинаций клавиш Excel для повышения вашей продуктивности] | Выполняйте свою задачу быстрее. Эти 50 ярлыков заставят вас работать в Excel еще быстрее.

link: / формулы-и-функции-введение-функции-vlookup [Функция ВПР в Excel] | Это одна из наиболее часто используемых и популярных функций Excel, которая используется для поиска значений из разных диапазонов и листов. link: / tips-countif-in-microsoft-excel [COUNTIF в Excel 2016] | Подсчитайте значения с условиями, используя эту удивительную функцию. Вам не нужно фильтровать данные для подсчета определенных значений.

Функция Countif важна для подготовки вашей приборной панели.

link: / excel-formula-and-function-excel-sumif-function [Как использовать функцию СУММЕСЛИ в Excel] | Это еще одна важная функция приборной панели. Это поможет вам суммировать значения для конкретных условий.