在Excel中使用VBA列表框中选择多个值
|在本文中,我们将学习如何创建一个列表框,在其中可以选择多个名称并可以从主数据中获取所需的数据。
让我们通过一个简单的练习来了解一下:-我们获取了数据,其中包含每位员工的电子邮件ID详细信息。
按照以下步骤创建列表框,该列表框提供使用VBA代码选择多个选项的选项:-
| ===插入列表框
要在Excel工作表上插入列表框,请转到“开发人员”选项卡>单击“插入”>,然后单击ActiveX控件下的“列表框”按钮
在“开发人员”选项卡上,单击“设计模式”以激活设计,然后在“开发人员”选项卡中单击“属性”,将出现“属性”对话框。
选择列表框,然后转到属性对话框。单击以分类选项卡。在“其他”标题下,转到“ ListFillRange”属性,并分配包含“列表框”值的范围。
在“行为”标题下,将“ Multiselect”属性更改为1-fmMultiSelectMulti
现在,在Excel工作表上插入两个命令按钮,转到“开发人员”选项卡>单击“插入”>,然后单击“表单控件”下的“按钮”图标
右键单击按钮,然后选择“编辑文本属性”,然后将两个按钮重命名为“取消选择名称”和“提交”。
按下Alt + F11键以打开Visual Basic编辑器。添加新模块,并将以下代码插入模块。
“上面的编码代码包含两个过程GettingSelectedItems和UnselectedItems。将过程GettingSelectedItems提交到提交按钮,并将过程UnselectedItems分配到取消选择名称按钮。
分配过程后,通过单击“开发人员”选项卡上的设计模式按钮来禁用设计模式。
逻辑解释
在此示例中,我们的目标是获取用户在“ L列表框”列中选择的名称的电子邮件ID。
用户可以在列表框中选择多个名称。选择名称后,用户将按下提交按钮,并且与列表框中所选名称相对应的电子邮件ID将显示在Excel工作表的L列中。
如果用户要取消选择列表框中的所有选定名称,则可以单击“取消选择名称”按钮。
为了实现上述目标,我们使用了excel公式和过程。
编写过程GettingSelectedItems是为了从列表框中获取所选名称,范围从K10到K23。
为了获取所选名称的电子邮件ID,我们使用以下Excel公式:-= IFERROR(VLOOKUP(K10,$ A $ 10:$ B $ 23,2,0),“”)
将上面的公式插入单元格L10中,并将此公式复制并粘贴到L10至L23的范围内。
该公式将通过在A10到B23范围内查找所选名称来提供电子邮件ID。
通过使用相同颜色的单元格字体和背景,我们隐藏了K10到K23范围内的值。
请遵循以下代码
Option Explicit Sub GettingSelectedItems() 'Getting selected items in ListBox1 Application.ScreenUpdating = False 'Declaring varialbes Dim ValueSelected As String, i, r As Integer 'deleting selected values Range("K10:K23").Select Selection.ClearContents 'Defining listbox1 of sheet TestDialog With Sheets("TestDialog").ListBox1 r = 0 'Using For loop for looping through all the items in List Box For i = 0 To .ListCount - 1 'Using .selected for selecting only those value which is selected by user in listbox If .Selected(i) Then 'Assigning selected value of List Box to Column K on the sheet Cells(r + 10, 11).Value = .List(i) r = r + 1 End If Next i End With Range("L10").Select End Sub Sub UnselectedItems() 'Unselecting all the items in the list box Application.ScreenUpdating = False 'Declaring varialbes Dim ValueSelected As String, i As Integer 'Defining listbox1 of sheet TestDialog With Sheets("TestDialog").ListBox1 'Using For loop for looping through all the items in List Box For i = 0 To .ListCount - 1 'Unselecting all the items in the list .Selected(i) = False Next i End With 'Deleting data from range K10 to K23 Range("K10:K23").Select Selection.ClearContents Range("L10").Select End Sub
如果您喜欢此博客,请在Facebook和Facebook上与您的朋友分享。
我们很希望收到您的来信,请让我们知道我们如何才能改善我们的工作并使您的工作更好。写信给我们[email protected]