【已解决】如何做excel表的下拉框多选 |
您所在的位置:网站首页 › 下拉可以刷新已选0 › 【已解决】如何做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 SubSheet2(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,有需要的可以直接下载了,稍微改改就能用了----多选下拉框下载链接
|
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |