wps实现多选下拉框3种方案
一、js宏listbox控件方案
优点:
1.wps默认宏环境,无需安装VBA环境
2.下拉框位置定位准确
缺点:
1.下拉框数据无法代码初始化,只能使用区域设置
2.一次只能选一个,多次选择实现多选
操作步骤:
1.工具->开发工具->拖动一个列表框到工作表
2.双击控件 或 查看代码,进入代码编辑
3.代码编辑的时候头上可以选择不同的事件进行监听处理
4. 右击控件可以进行属性设置
配置:
代码:
function ListBox1_Click() { var cellValue = new String(ActiveCell.Value2); var listVal = ListBox1.Value; if(cellValue=="undefined"){ ActiveCell.Value2=listVal; }else{ if(!cellValue.includes(listVal)){ ActiveCell.Value2=cellValue+","+listVal; }else{ ActiveCell.Value2= removeCharFromList(cellValue,listVal); } } } // 删除字符串中的某个子串 function removeCharFromList(str, charToRemove) { return str.split(',').filter(char => char !== charToRemove).join(','); } function Workbook_SheetSelectionChange(Sh, Target) { if(ActiveCell.Column==2 && ActiveCell.Row>1){ ListBox1.Top=ActiveCell.Top+ActiveCell.Height; ListBox1.Left=ActiveCell.Left+ActiveCell.Width; ListBox1.Width=ActiveCell.Width; ListBox1.Visible=true; }else{ ListBox1.Visible=false; } }
效果:
二、js宏listbox+form窗体方案
优点:
1.wps默认宏环境,无需安装VBA环境
2.下拉框数据可以代码初始化,无需区域设置
缺点:
1.下拉框位置无法精准定位
2.一次只能选一个,多次选择实现多选
操作步骤:
1.工具->开发工具->WPS宏编辑器 或者 查看代码,进入代码编辑
2. 新增窗体UserForm1,并拖动一个ListBox到form中
3. 代码编辑的时候头上可以选择不同的事件进行监听处理
配置:
代码:
//窗体初始化 function UserForm1_Initialize() { //下拉框初始化选项 var items = ["东", "南", "西", "北"]; for (var i = 0; i < items.length; i++) { UserForm1.ListBox1.AddItem(items[i],i); } } //选区改变事件 function Workbook_SheetSelectionChange(Sh, Target) { if(ActiveCell.Column==2 && ActiveCell.Row>1){ //显示窗体 UserForm1.Show(); }else{ //隐藏窗体 UserForm1.Hide(); } } //下拉框点击事件 function UserForm1_ListBox1_Click() { //获取单元格的值 var cellVal = new String(ActiveCell.Value2); //获取下拉框选中的值 var listBoxVal = UserForm1.ListBox1.Value; if(cellVal=="undefined"){ //第一次选中 ActiveCell.Value2 = listBoxVal; }else{ if(!cellVal.includes(listBoxVal)){ //添加选项 ActiveCell.Value2 = cellVal+","+listBoxVal; }else{ //删除选项 ActiveCell.Value2 = removeCharFromList(cellVal,listBoxVal); } } UserForm1.Hide(); //选择其它单元格,模拟失焦 var adderss = "C"+ActiveCell.Row; ActiveSheet.Range(adderss).Select(); } // 删除字符串中的某个子串 function removeCharFromList(str, charToRemove) { return str.split(',').filter(char => char !== charToRemove).join(','); }
效果:
三、vb宏listbox方案
优点:
1.支持多选,一次选多个
2.下拉框位置定位准确
缺点:
1.需要安装VBA环境
步骤:
1.工具->开发工具-> VB编辑器 或 查看代码,进入代码编辑
2.代码编辑的时候头上可以选择不同的事件进行监听处理
3. 右击控件可以进行属性设置
配置:
代码:
Private Sub ListBox1_Change() If Reload Then Exit Sub 'ListBox1改变事件 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) With ListBox1 '第 2 列 且 单元格大于 1,因为表头的字段不需要进行多选 If ActiveCell.Column = 2 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
效果: