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

news/2025/1/12 15:46:12/文章来源:https://www.cnblogs.com/m79464449p/p/18520992

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

这里我用的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

 

以下为打开方式

 

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

 

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

 

 

 

 

 

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

 

 

最后附上版本图

 

 

 

 

以下为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

 

 



 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/825366.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

manim边做边学--通用三维坐标系

ThreeDAxes是Manim中用于创建三维坐标系的类。 在数学、物理和工程等领域,三维坐标系的绘制是非常重要的。 ThreeDAxes使得用户能够在动画中直观地展示三维空间中的对象和关系,从而提高演示文稿和教学的效果。 ThreeDAxes提供了多种参数,如坐标轴的范围、长度、颜色、粗细等…

KubeSphere v4 应用商店配置指南

在 KubeSphere v4 版本中,为保持平台的简洁性,系统默认移除了内置应用商店中的应用。用户可以按照下列步骤进行手动配置和添加。注意:应用商店和扩展市场有所不同,扩展市场的使用方法将在后续文档中详细介绍。Helm Repo 源:安装过程中需要从源下载 Chart 包,确保源可用并…

Go语言的动态链接库(DLL)创建和使用

# Go语言的动态链接库(DLL)创建和使用 在讨论Go语言的动态链接库(DLL)创建和使用时,核心要点包括:创建DLL的步骤、调用DLL中的函数、跨平台兼容性问题、性能优化策略。创建DLL的步骤是理解和实践Go语言动态链接库的基础,涉及编写DLL源代码、编译为DLL文件以及确保DLL在目…

DNS介绍与实现方法

简介:域名系统(Domain Name System,缩写:DNS)是互联网的一项服务。是一种可以将域名和IP地址相互映射的以层次结构分布的数据库系,允许终端用户设备将给定的人类可读URL转换为网络可以理解的机器可用IP地址。 工作原理:DNS是一种基于TCP/UDP可以将域名和IP地址相互映射的…

采集电力 IEC104 转 profinet IO 项目案例

VFBOX协议转换网关支持PLC,modbus,EthernetIP,Profinet,CCLink,EtherCAT,IEC61850,IEC104,bacnet,DLT645,HJ212,opc ua,opc da,DNP3。目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 准备工作 2 4 配置VFBOX网关采集IEC104设备数据 2 5 用PROFINET IO协议转发数据 4 …

一个简单的 ASP.NET Core 依赖注入例子,提高代码的可维护性和可扩展性

依赖注入可以提高代码的可维护性、可测试性、可替换性和可扩展性,降低组件之间的耦合度,使得代码更加清晰和灵活,ASP.NET Core 提供了内置的依赖注入容器,可以帮助我们轻松地将服务注册到容器中前言:什么是依赖注入 依赖注入可以提高代码的可维护性、可测试性、可替换性和…

protobuf json

为什么大厂这么爱用protobuf? https://mp.weixin.qq.com/s/COQu3rckfZJUelSVBV6IMA 为什么大厂这么爱用protobuf? 原创 腾讯技术工程 腾讯技术工程 2024年10月30日 17:34 广东 话题背景 在protobuf在国内兴起的时候,json over http 的 RESTful ,api也在国内同步兴起了。司…

MS Projcet 和 Redmine 在进行项目管理的时候有什么区别

在进行项目管理的时候,MS Project和Redmine有以下主要的区别:1.平台属性不同;2.功能侧重点不同;3.使用者不同;4.兼容性不同;5.成本差异。总的来说,MS Project适用于规模较大、复杂度较高的项目管理,而Redmine适用于小型团队、开源社区以及迭代开发速度较快的项目管理。…

恶意 Prompt 攻击

黑掉大模型?恶意 Prompt 攻击成无解之谜? https://mp.weixin.qq.com/s/vliCct-0PwEdaGFSpYt9tQ 黑掉大模型?恶意 Prompt 攻击成无解之谜? 原创 Atone 腾讯技术工程 2024年11月01日 17:35 广东作者:Atone,混元安全防守团队成员 随着大模型应用的逐步发展,出现了一种新型的…

『模拟赛』多校A层冲刺NOIP2024模拟赛17

『模拟赛记录』多校A层冲刺NOIP2024模拟赛17Rank 一般A. 网络 签不上的签到题。 首先考虑枚举路径的做法,如果先枚举再计算的话复杂度会是 \(\mathcal{O(\binom{n+m-2}{n-1}(n+m))}\) 的,稍微优化一点的过程中可以去掉后面的 \((n+m)\)。考虑此时我们要记什么,首先遇到加号其…