起因:给河南省各地市联通公司发需求表中有一个多选项
首先需要创建一个表二自行命名,需要根据表中要多选的表头及内容加入写入表二中
打开开发工具,这样便可以在标题中找到开发工具
开启宏信任,启用宏
开发工具选项卡→控件选项组→插入→ActiveX控件→列表框(ActiveX控件)
随便框选画一个位置(可再调整)
右键画出来的位置-属性
数据分类中的ListStyle选1-fmListStyleOption
行为分类中的MultiSelect选1-fmMultiSelectMulti
ListFillRange填写复选选项的位置:如在这里是–(sheet表名)!A2:A5
选好之后是这样
查看代码-编写Sheet1代码
代码
注意If ActiveCell.Column = 4 And ActiveCell.Row > 1 Then 中的4为我demo表中的第四列可自行修改
'--------------------
Private Sub ListBox1_Change()
'加载ListBox1
If Reload Then Exit Sub
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) = True Then t = t & "," & ListBox1.List(i)
Next
ActiveCell = Mid(t, 2)
End Sub
'---------------------
'sdsadsds
Private Sub ListBox2_Change()
'加载ListBox2
If Reload Then Exit Sub
For i = 0 To ListBox2.ListCount - 1
If ListBox2.Selected(i) = True Then t = t & "," & ListBox2.List(i)
Next
ActiveCell = Mid(t, 2)
End Sub
'-------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'设置ListBox1
With ListBox1
'第 n 列 且 单元格大于 1,因为表头的字段不需要进行多选
'在这里,ActiveCell.Column是录入位置所在的列,根据需要调整。在本题中为第1列,n=1,就为1。
'在这里,ActiveCell.Row是录入位置所在的行,根据需要这调整。在本题中录入位置从第2行开始,就为2-1=1。
If ActiveCell.Column = 4 And ActiveCell.Row > 1 Then
t = ActiveCell.Value
Reload = True '如果是根据单元格的值修改列表框,则暂时屏蔽listbox的change事件。
For i = 0 To .ListCount - 1 '根据活动单元格内容修改列表框中被选中的内容
If InStr(t, .List(i)) Then
.Selected(i) = True
Else
.Selected(i) = False
End If
Next
Reload = False
.Top = ActiveCell.Top + ActiveCell.Height '以下语句根据活动单元格位置显示列表框
.Left = ActiveCell.Left
.Width = ActiveCell.Width
.Visible = True
Else
.Visible = False
End If
End With
End Sub
调试-编译VAB即可
如果有下方提示,将文件另存为-保存为启用宏的工作簿.xlsm形式再打开运行即可