ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 357|回复: 10

[分享] 获取某个单元格的数据有效性列表

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-7-10 09:19 | 显示全部楼层 |阅读模式


获取某个单元格的数据有效性列表

子函数代码如下:
  1. Function GetDataValidationList(OneRng As Range) As String
  2.     '--------------------------------------------
  3.     '  获取某个单元格设置的数据有效性列表
  4.     '  参数:
  5.     '       OneRng,要获取数据有效性的单个单元格
  6.     '  返回值:
  7.     '       数据有效性的文本列表,以半角字符“,”间隔
  8.     '--------------------------------------------
  9.     '设置数据有效性,有2种方式:
  10.     '   1、直接在数据有效性数据验证窗口的“来源”输入框中输入。
  11.     '       此时:系统强制使用半角字符“,”间隔,类似于:1,2,3,4,5,6,7,8
  12.     '   2、在数据有效性数据验证窗口的“来源”输入框中输入公式。
  13.     '       使用公式则有以下情况:
  14.     '       (1)、公式引用的单元格来自本表,此时的设置公式类似于:=$H$10:$H$14
  15.     '       (2)、公式引用的单元格来自其他表,此时的设置公式类似于:=sheet1!$A$1:$A$8
  16.     '--------------------------------------------
  17.     ' 边缘码农  2024.07.10
  18.     '--------------------------------------------
  19.     ' 定义变量
  20.     Dim DVFormula As String '数据有效性设置文本
  21.     Dim LsArr() As String ' 临时分割数组
  22.     Dim Sht As Worksheet '工作表对象
  23.     Dim Rng As Range '临时单元格对象
  24.     '--------------------------------------------
  25.     On Error Resume Next
  26.     DVFormula = OneRng.Cells(1, 1).Validation.Formula1
  27.     If Err.Number > 0 Then
  28.         GetDataValidationList = "未设置数据有效性"
  29.         Exit Function
  30.     End If
  31.     If DVFormula <> "" Then
  32.         If Left(DVFormula, 1) = "=" Then
  33.             ' 数据有效性的第一个字符是=,引用公式
  34.             DVFormula = Mid(DVFormula, 2, Len(DVFormula) - 1) ' 去掉开头的=
  35.             LsArr = Split(DVFormula, "!")
  36.             Set Sht = ActiveSheet
  37.             If UBound(LsArr()) > 0 Then
  38.                 ' 分割后数组成员大于0,有两个成员,第1个成员是工作表名称
  39.                 Set Sht = Sheets(LsArr(0))
  40.             End If
  41.             DVFormula = ""
  42.             For Each Rng In Sht.Range(LsArr(UBound(LsArr)))
  43.                 If Rng <> "" Then
  44.                     DVFormula = DVFormula & Rng & ","
  45.                 End If
  46.             Next
  47.             DVFormula = Left(DVFormula, Len(DVFormula) - 1)
  48.         End If
  49.         GetDataValidationList = DVFormula
  50.     End If
  51. End Function
复制代码
调用方式:
  1. MsgBox GetDataValidationList(Range("a3"))
复制代码
或者:
  1. MsgBox GetDataValidationList(Range("a3:k5"))
复制代码
当参数是单元格区域时,只取单元格区域的第一个单元格。

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-7-10 09:39 | 显示全部楼层
建议楼主上个实例。

TA的精华主题

TA的得分主题

发表于 2024-7-10 09:57 | 显示全部楼层
ykcbf1100 发表于 2024-7-10 09:39
建议楼主上个实例。

老师,麻烦老师能给我这个表格写个程序吗,谢谢了,
https://club.excelhome.net/threa ... tml?_dsign=799c8ea9

新月统计表.rar

23.53 KB, 下载次数: 7

TA的精华主题

TA的得分主题

发表于 2024-7-10 10:02 | 显示全部楼层
dgseg 发表于 2024-7-10 09:57
老师,麻烦老师能给我这个表格写个程序吗,谢谢了,
https://club.excelhome.net/thread-1696310-1-1.ht ...

我看下,看能不能做。

TA的精华主题

TA的得分主题

发表于 2024-7-10 10:09 | 显示全部楼层
dgseg 发表于 2024-7-10 09:57
老师,麻烦老师能给我这个表格写个程序吗,谢谢了,
https://club.excelhome.net/thread-1696310-1-1.ht ...

老师是这个附件,刚才上传错了,麻烦老师给看看

新月统计表1.rar

24.04 KB, 下载次数: 8

TA的精华主题

TA的得分主题

发表于 2024-7-10 10:10 | 显示全部楼层
ykcbf1100 发表于 2024-7-10 10:02
我看下,看能不能做。

老师是这个附件,刚才上传错了,麻烦老师给看看

新月统计表1.rar

24.04 KB, 下载次数: 0

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-10 10:14 | 显示全部楼层
ykcbf1100 发表于 2024-7-10 09:39
建议楼主上个实例。

单位的电脑装了加密软件。
所以最近我从不上传文件,上传的都是加密的文件,其他人打不开,没有意义。

TA的精华主题

TA的得分主题

发表于 2024-7-10 10:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
dgseg 发表于 2024-7-10 10:10
老师是这个附件,刚才上传错了,麻烦老师给看看

新月统计表1.rar

我看了一下,还没搞清楚要去做什么。
你这个写代码也比较费时的,适合付费定制,一对一沟通完成。

TA的精华主题

TA的得分主题

发表于 2024-7-10 10:16 | 显示全部楼层
边缘码农 发表于 2024-7-10 10:14
单位的电脑装了加密软件。
所以最近我从不上传文件,上传的都是加密的文件,其他人打不开,没有意义。

好的,我知道了。

TA的精华主题

TA的得分主题

发表于 2024-7-10 10:24 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-18 01:25 , Processed in 0.043527 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表