如何在VBA Excel中创建相关组合框?
我们知道如何使用数据验证在工作表上创建级联下拉列表。但是,我们如何在VBA用户窗体上创建级联组合框下拉列表。这是基本需求之一。在本文中,我们将学习如何在VBA中创建一个依赖的组合框。 === VBA中从属组合框的逻辑要在VBA中创建从属组合框,我们需要在源元素发生事件时初始化组合框。例如,如果组合框取决于单选按钮组,则在有人选择单选按钮后,应立即运行依赖于加载的组合框的代码。或者,如果组合框依赖于另一个组合框,则每次更改组合框中的值时,都应加载组合框。
足够的理论。让我们跳入一个例子,看看它是如何工作的。
ComboBox取决于另一个Combobox创建两个组合框。第一个应该列出一些国家名称。
另一个应列出所选国家/地区的州名。如果用户在第一个组合框中更改了国家/地区,则第二个组合框的列表应更改。
让我们创建一个表单,该表单具有两个带有标签国家和地区的组合框以及一个用于提交输入的命令按钮。
第一个组合框应列出国家名称,并且不依赖于任何值。因此,我们将像基本组合框初始化一样将其加载到form_intialize事件中。
双击用户表单。它将在UserForm对象中打开编码区域。现在,从左侧的下拉菜单中选择用户窗体。然后从右侧的下拉菜单中选择初始化。
将插入一个空的子名称UserForm_Initialize()。该子程序中编写的任何内容都将在用户表单显示之前执行。
因此,我们在此处编写组合框的初始化代码。
Private Sub UserForm_Initialize() countries = Array("India", "Nepal", "Bhutan", "Shree Lanka") UserForm1.ComboBox1.List = states End Sub
我们已经初始化了第一个组合框。每当您加载用户表单时,第一个combox就会准备好国家名称。
现在要加载第二个组合框,我们需要查看在第一个组合框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
在这里,我们使用了select case语句。当我们想查看从多个值中选择了哪个值时,select case语句非常有用。我已经解释了它“ link:/ general-topics-vba-vba-select-case-nested-if-else-if-statements [在这里详细]”的替代方案。
要存储用户插入的值,请使用提交按钮。在命令按钮Submit中编写以下代码,以保存用户在工作表上选择的国家和州。
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代码。
如何运作?
当您运行具有代码userform.show的子程序时,VBA在运行userform.show命令后立即运行userform_initialize事件。在userform_intialize事件中,我们初始化了具有国家/地区列表的第一个组合框。之后,表格显示给用户。
现在,当用户从第一个组合框中选择任何值时,将运行事件combobox1_AfterUpdate事件。此事件包含检查用户在combobox1中选择了哪个值的代码,并基于该值设置状态数组,并使用状态数组初始化combobox2值。
好的,这就是您在VBA用户窗体中创建级联组合框的方式。我希望我能提供足够的解释,并且这篇文章可以达到目的。如果您对本文或任何VBA主题有任何疑问,请在下面的评论部分中问我。
相关文章:
Excel VBA UserForms入门 | *我将解释如何在excel中创建表单,如何使用VBA工具箱,如何处理用户输入,最后如何存储用户输入。我们将使用一个示例和逐步指南来逐步介绍这些主题。
`link:/ general-topics-in-vba-vba-variables-in-excel [Excel中的VBA变量] || * VBA代表Visual Basic for Applications。
它是Microsoft的一种编程语言。它与Microsoft Office应用程序(例如MSExcel,MS-Word和MS-Access)一起使用,而VBA变量是特定的关键字。
Excel VBA变量范围 | *在所有编程语言中,我们都有变量访问说明符,用于定义可从何处访问已定义变量。 Excel VBA也不例外。 VBA也具有范围说明符。
ByRef和ByVal参数当参数作为ByRef参数传递给其他子函数时,将发送实际变量的引用。对变量副本所做的任何更改都将反映在原始参数中。
在Microsoft Excel中使用VBA删除没有确认提示的工作表由于要使用VBA删除工作表,因此您知道自己在做什么。
您想告诉Excel不要显示此警告并删除该死的表。
在Microsoft Excel 2016中使用VBA添加和保存新工作簿] |在此代码中,我们首先创建了对工作簿对象的引用。然后,我们使用一个新的工作簿对象对其进行了初始化。这种方法的好处是您可以轻松地对此新工作簿进行操作。像保存,关闭,删除等一样,链接:/ menus-toolbars-status-bar-in-vba-在Microsoft Excel中使用vba-显示状态栏上的消息Excel VBA状态栏*]| excel中的状态栏可用作代码监视器。当您的VBA代码很长并且您使用VBA执行多项任务时,通常会禁用屏幕更新,以免看到屏幕闪烁。
`link:/ general-topics-in-vba-off-warning-messages-using-vba-in-microsoft-excel [在Microsoft Excel 2016中使用VBA关闭警告消息] | **此代码不仅禁用VBA警报,但也增加了代码的时间效率。让我们看看如何。
热门文章:
50 Excel快捷方式以提高生产率更快地完成任务。这50个快捷键将使您在Excel上的工作速度更快。
Excel中的VLOOKUP函数在Excel 2016中为COUNTIF使用此惊人的功能对条件进行计数。您无需过滤数据即可计算特定值。
Countif功能对于准备仪表板至关重要。
如何在Excel中使用SUMIF函数这是仪表板的另一个重要功能。这可以帮助您汇总特定条件下的值。