ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] m级下拉菜单的制作

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-8-12 09:13 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
hqz883 发表于 2021-8-12 08:53
我有个表跟你这个非常类似,但是我刚开始接触VBA还不是很懂,我把你的代码粘贴过去也没改好。你能帮我看看s ...

这是筛选,和下拉菜单有关系吗?

TA的精华主题

TA的得分主题

发表于 2021-8-12 09:24 | 显示全部楼层
梦幻的流星 发表于 2021-8-12 09:13
这是筛选,和下拉菜单有关系吗?

呃,可以不下拉,但是也需要与基本数据的保持一致,保证数据有效性,所以我想到的就是下拉菜单了

TA的精华主题

TA的得分主题

发表于 2021-8-13 08:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
非常不错,收藏了

TA的精华主题

TA的得分主题

发表于 2021-9-27 16:25 | 显示全部楼层
梦幻的流星 发表于 2021-7-31 11:56
根据网友建议的优化

楼主,您好!
首先,对于您学习VBA还未满一年就能写出这样的代码,
衷心地向您送上10086个赞!!

我真心认为您的代码很不错,也很实用,
但我发现了两个问题,现提出来好让大家讨论讨论:

1、假如A~E列已填满内容,此时更改B列的内容后,C列应清空且重设数据验证,而D~E列应清空且取消数据验证,这样设置才合理,其它如此类推;

2、以您的数据库为例,安徽省有一个合肥市,假如河南省也有一个同名的合肥市呢?那么第3列(区/县)在选择时就会乱套了。因此,每一列的选项不光要考虑其前一列的数据,还要考虑其前前一列、前前前一列……如此设置才合理。

以上是我的小小意见,如有不对,望谅!

TA的精华主题

TA的得分主题

发表于 2022-12-10 21:38 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
感谢楼主分享

TA的精华主题

TA的得分主题

发表于 2022-12-13 08:28 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
vitrel 发表于 2021-9-27 16:25
楼主,您好!
首先,对于您学习VBA还未满一年就能写出这样的代码,
衷心地向您送上10086个赞!!

'代码来源:  [求助]大数据量,多级下拉菜单速度问题https://club.excelhome.net/thread-328961-1-1.html(出处: ExcelHome技术论坛)
'代码参考:  多级菜单(数据有效性)终极方案【VBA】https://club.excelhome.net/thread-1510919-1-1.html(出处: ExcelHome技术论坛)


Private Sub Worksheet_Change(ByVal Target As Range)
    Dim nL%
    nL = Target.Column
    If Target.Row = 1 Or nL < 1 Or nL > 6 Or Target.CountLarge > 1 Then Exit Sub
    Application.EnableEvents = False
    Target.Offset(0, 1).Resize(1, 7 - nL).ClearContents

    Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim sj(), cTxt$, Arr(), sj2(1 To 7), nRow&, nL&

    If Target.Row = 1 Or Target.Column < 1 Or Target.Column > 7 Or Target.CountLarge > 1 Then Exit Sub
    nL = Target.Column

    sj = Range("a" & Target.Row).Resize(1, 7).Value

    With Sheets("地址")
        nRow = .Cells(1048576, nL).End(xlUp).Row
        Arr = .Range("a1").Resize(nRow, nL).Value


    End With
    For i = 2 To nRow
        For j = 1 To nL - 1
            If Arr(i, j) <> "" Then
                If cTxt <> "" Then
                    i = nRow
                    Exit For
                End If

                sj2(j) = Arr(i, j)

            End If
            If sj2(j) <> sj(1, j) Then Exit For
        Next
        If j = nL And Arr(i, nL) <> "" Then
            cTxt = cTxt & "," & Arr(i, nL)

        End If
    Next
    With Target.Validation
        .Delete
        If cTxt <> "" Then .Add 3, 1, 1, Mid(cTxt, 2)
    End With
End Sub


TA的精华主题

TA的得分主题

发表于 2022-12-13 11:05 | 显示全部楼层
梦幻的流星 发表于 2021-7-31 11:56
根据网友建议的优化

给个建议,更换一级菜单选择后,后面几级自动清除内容
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-20 09:43 , Processed in 0.030916 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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