【已解决】如何做excel表的下拉框多选

最近因为项目需求,要制作一个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,有需要的可以直接下载了,稍微改改就能用了----多选下拉框下载链接

 

  • 12
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 26
    评论
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值