WPS Excel中配置下拉多选(VBA)

网上找到两种方案,一种利用数据选择其他单元格,也就是在其他单元格建数据。需求是模板,不合适

这里我用的VBA,踩了挺多坑,详细说下

首先更新WPS为最新版,确保可用VBA和JSA  确定使用VBA还是JSA,两种语法不同

  1.  VBA较老,语法可靠些,推荐(本文使用VBA)
  2.  JSA为新引入JS,但支持较少,不太推荐
  3.  如选择VBA,请跳转至以下链接查看详情。若为JSA,请另寻方案

VBA配置借鉴了csdn一篇博客,以下为相关链接:

CSDN-指南:https://blog.csdn.net/qq_36448758/article/details/134162812

金山文档-多选方案:https://www.kdocs.cn/article/2C6CD5AA30.html

 

以下为打开方式

WPS Excel中配置下拉多选(VBA)

WPS Excel中配置下拉多选(VBA)

 

默认为空,先创建一个新的宏再编辑

WPS Excel中配置下拉多选(VBA)

 

此处为VBA编辑,注意在红色框处写入代码

WPS Excel中配置下拉多选(VBA)

 

 

WPS Excel中配置下拉多选(VBA)

 

WPS Excel中配置下拉多选(VBA)

 

 

若不生效的话再切回WPS点击运行

WPS Excel中配置下拉多选(VBA)

 

 

最后附上版本图

WPS Excel中配置下拉多选(VBA)

 

 

 

 

以下为VBA代码

不选择值时显示空,选址值后替换空,用、间隔

 1 Private Sub Worksheet_Change(ByVal Target As Range)  2     Dim oldVal As String  3     Dim newVal As String  4     Dim delimiter As String  5     delimiter = "" ' 设置分隔符  6   7     ' 限定只在B列进行处理  8     If Not Intersect(Target, Me.Range("B:B")) Is Nothing Then  9         If Target.Count > 1 Then Exit Sub 10  11         On Error Resume Next 12         Application.EnableEvents = False 13         newVal = Trim(Target.Value) ' 去除新值两侧空格 14         Application.Undo 15         oldVal = Trim(Target.Value) ' 去除旧值两侧空格 16  17         If oldVal <> "" And newVal <> "" Then 18          19             ' 如果最终值为空,保持为空 20             If InStr(Target.Value, "") Then 21                 Target.Value = newVal ' 移除新值(如果它出现在开头) 22             Else 23                 If InStr(1, oldVal, newVal) > 0 Then 24                     ' 移除新值及其前面的分隔符 25                     Target.Value = Replace(oldVal, delimiter & newVal, "") 26                     Target.Value = Replace(Target.Value, newVal, "") ' 移除新值(如果它出现在开头) 27                 Else 28                     ' 新值不在旧值中,则添加它 29                     If oldVal <> "" Then 30                         Target.Value = oldVal & delimiter & newVal 31                     Else 32                         Target.Value = newVal 33                     End If 34                 End If 35             End If 36         End If 37  38         ' 清理多余的分隔符 39         Target.Value = Application.Trim(Target.Value) ' 去掉两侧空格 40         If Left(Target.Value, Len(delimiter)) = delimiter Then 41             Target.Value = Mid(Target.Value, Len(delimiter) + 1) 42         End If 43         If Right(Target.Value, Len(delimiter)) = delimiter Then 44             Target.Value = Left(Target.Value, Len(Target.Value) - Len(delimiter)) 45         End If 46  47         ' 如果最终值为空,保持为空 48         If Target.Value = "" Then 49             Target.Value = "" ' 设置为一个空字符串 50         ElseIf Target.Value = "0" Then 51             Target.Value = "" ' 设置为一个空字符串 52         ElseIf Target.Value = 0 Then 53             Target.Value = "" ' 设置为一个空字符串 54         End If 55     End If 56  57 exitHandler: 58     Application.EnableEvents = True 59 End Sub

 

WPS Excel中配置下拉多选(VBA)

 


 

发表评论

相关文章