首页 > 其他分享 >WPS Excel中配置下拉多选(VBA)

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

时间:2024-11-01 18:30:59浏览次数:1  
标签:VBA End Target 下拉多选 Excel Value newVal delimiter

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

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

 

 



 

标签:VBA,End,Target,下拉多选,Excel,Value,newVal,delimiter
From: https://www.cnblogs.com/m79464449p/p/18520992

相关文章

  • VBA和Python到底哪个比较难学
    标题:VBA和Python到底哪个比较难学摘要:对于编程初学者,VBA和Python的学习难度受多种因素影响,如个人编程基础、学习环境和目标任务。1、Python通常被视为入门友好的语言;2、VBA深入与Office应用协同工作;3、资源丰富程度;4、语言灵活性与功能性;5、社区支持;6、个人学习倾向。在这些......
  • 经纬恒润INTEWORK-VBA新版本正式发布
        在汽车电子研发领域,随着开发测试的深入,工程师们常常面临着一个共同的问题:如何高效地在多样化的开发测试场景中切换,并确保不同工具间的紧密协作。不同场景、不同工具的切换与使用给工程师带来高昂的学习成本和前后端信息传递的压力。面对这一问题,经纬恒润积极响应市......
  • python利用openpyxl处理excel(应用案例一)
    一前言环境:win10python3.8二应用案例如上要实现这样一张表格1分析不能去指定在某个位置去插入某个字段,如在a1去插入商品,a2去插入类型。不能这样做,给出字段后,要自动挨个插入2如一级字段批次信息要与它下面的二级字段相对应,二级字段占据了三列,一级字段也要占3列,且要合......
  • Vue 展示word\excel\pdf 内容
    Vue展示word\excel\pdf内容1、前言项目使用的是若依框架,有一个审核的功能,审核弹窗中需要显示出上传的文件内容,而没有原生的组件可以实现该功能。2、遇到的问题使用iframe组件、不报错,但最后实现的效果是下载而不是展示出来项目是vue2的版本使用@vue-office,直......
  • Vue3+Elementplus+Univer-Sheet实现在线excel及其需要注意的点
    1、准备项目环境Vue3自行准备node.js环境2、ElementPlus官网官网安装教程自行参照官网3、Univer插件官网1)官网网址2)开始直接点击GetStarted侧边栏点击  后面直接按照教程走即可 4、配置插件需要注意如果上述插件包已经下载并成功引入vue......
  • excel表格文字识别-ocr表格文字提取api接口集成
    表格文字识别接口的集成示例通常包含几个关键步骤,从接入API接口到最终数据处理和展示。以下是翔云表格文字识别接口的一个基本集成流程示例:1.获取接口信息在开始集成前,请确保已经获取了表格文字识别API的接口文档,并了解该接口的参数需求、返回结果格式、以及鉴权方......
  • 管家婆工贸ERP BB067.销售订单修改BOM类型+BB068.销售单按模板导出Excel
    BB067.销售订单修改BOM类型最低适用版本:工贸系列23.0插件简要功能说明:销售订单任意状态下,支持通过应用按钮将焦点行的BOM类型修改为订单BOM更多细节描述见下方详细文档插件操作视频:进销存类定制插件--销售订单修改BOM类型插件详细功能文档:销售订单增加应......
  • Mysql慢日志转Excel
    最近公司生产环境需要排查慢SQL,导出日志txt文件后排查混乱,查找相关资料后并没有找到方便快捷的格式化处理工具,于是自己编写了一套Java读取慢SQL日志转为Excel小工具。@DatapublicclassSlowQuery{privatedoublequeryTime;privatedoublelockTime;privateS......
  • 记录NPOI导出Excel并使用不同颜色标注特定条件相同的行
    一、环境概述开发工具:VisualStudio2022.Net环境:.NetCore6.0相关依赖:NPOI二、基本概述需求要实现导出的数据里如果连续行满足某个条件就用颜色标记,但是标记的区间要用不同颜色区分开,用了双指针,但是是记录了起始位置和偏移量,封装比较屎,这里主要记录一下思想。三、代码实......
  • Excel函数之VLOOKUP
    1.介绍VLOOKUP函数是Excel中的一个纵向查找函数,它与LOOKUP函数和HLOOKUP函数属于一类函数,在工作中都有广泛应用,例如可以用来查找数据,按列查找,在多个表格之间核对数据、传递数据,在多个表格之间快速导入数据等函数功能,主要用于查找和检索数据。2.使用VLOOKUP函数语法=VLOOK......