|在本文中,我们将学习如何创建一个列表框,在其中可以选择多个名称并可以从主数据中获取所需的数据。

让我们通过一个简单的练习来了解一下:-我们获取了数据,其中包含每位员工的电子邮件ID详细信息。

Data

按照以下步骤创建列表框,该列表框提供使用VBA代码选择多个选项的选项:-

| ===插入列表框

要在Excel工作表上插入列表框,请转到“开发人员”选项卡>单击“插入”>,然后单击ActiveX控件下的“列表框”按钮

ArrowInsertingListBox

在“开发人员”选项卡上,单击“设计模式”以激活设计,然后在“开发人员”选项卡中单击“属性”,将出现“属性”对话框。

选择列表框,然后转到属性对话框。单击以分类选项卡。在“其他”标题下,转到“ ListFillRange”属性,并分配包含“列表框”值的范围。

在“行为”标题下,将“ Multiselect”属性更改为1-fmMultiSelectMulti

ArrowPropertiesDialogBox

ArrowPropertiesDialogBox-2

现在,在Excel工作表上插入两个命令按钮,转到“开发人员”选项卡>单击“插入”>,然后单击“表单控件”下的“按钮”图标

ArrowCommandButton

右键单击按钮,然后选择“编辑文本属性”,然后将两个按钮重命名为“取消选择名称”和“提交”。

按下Alt + F11键以打开Visual Basic编辑器。添加新模块,并将以下代码插入模块。

“上面的编码代码包含两个过程GettingSelectedItems和UnselectedItems。将过程GettingSelectedItems提交到提交按钮,并将过程UnselectedItems分配到取消选择名称按钮。

ArrowAssigningMacro

AssigningMacro

分配过程后,通过单击“开发人员”选项卡上的设计模式按钮来禁用设计模式。

逻辑解释

在此示例中,我们的目标是获取用户在“ 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]