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
效果:


浙公網安備 33010602011771號