最近因为项目需求,要制作一个excel导入的模板,模板中要求某几列的下拉框是多选的。。不得不临时研究了一下vba。其间各种心酸不多说。。。。。。
首先,这个是需要启用宏,在vb编辑器里写代码,所以你要确保你的excel是可以启用宏的。如果是正式版的office是可以直接用(破解版就不知道了)。我用的是wps。需要装个插件(网上可下载)
完成效果是这样的:可多选,不可重复。
第一步:在excel中加入ListBox控件,
第二步,在【设计模式】下右击控件,给控件注明相关属性,注意标红的三处。其中ListFillRange参数意为该listBox列表的值取自名为date的sheet的第一列(A列)中的1~3行。
第三步:双击该控件,进入编码区:注意【2】处,vb的方法名是生成的,例如需要选择【listBox1】再选择【change】会自动生成ListBox1_Change()这个方法,而不是写出来的。。。(做java的表示在这里卡了很久)
下面贴上Sheet1(Sheet1)中的代码:
Private Sub ListBox1_Change()
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
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If ActiveCell.Column = 3 And ActiveCell.Row > 1 Then
t = ActiveCell.Value
ReLoad = True '如果是根据单元格的值修改列表框,则暂时屏蔽listbox的change事件。
With ListBox1
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
End With
Else
ListBox1.Visible = False
End If
End Sub
Sheet2(date)中的代码:
Private Sub Worksheet_Change1(ByVal Target As Range)
Sheets("Sheet1").ListBox1.ListFillRange = "data!a1:a" & Cells(1, 1).End(xlDown).Row
End Sub
模块1中的代码:
Public ReLoad As Boolean '开关listbox的change事件
模块2中的代码:
Option Explicit
Sub ShowFM()
UserForm1.Show
End Sub
这个适合vb小白急需完成功能参考,让大神见笑了。
这里是实现后的excel,有需要的可以直接下载了,稍微改改就能用了----多选下拉框下载链接
转载自原文链接, 如需删除请联系管理员。
原文链接:【已解决】如何做excel表的下拉框多选,转载请注明来源!