ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 多级菜单非递归算法/示例-全国省市行政区划三级菜单/自适应级数

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-8-28 18:01 | 显示全部楼层 |阅读模式
本帖最后由 百度不到去谷歌 于 2014-8-28 21:09 编辑

年初写了递归版的N级菜单  但是速度偏慢 当数据多时很慢
最近写代码助手的时候改进的了多级菜单算法 直接循环不再递归
以行政区划为例 接近3000条数据的菜单 原方法要几十秒 现在方法6秒完成 主要耗时都是生成菜单UI本身
一般情况的菜单不会这么多 1000行以内的话 基本上瞬间生成完成  效果如下
特别说明:本程序可扩展为N级菜单,只要你的源数据是按顺序排列的多级格式,直接在数据源表写入数据再生成菜单即可看到效果
行政区划多级菜单.gif
核心代码为mPopTree中 数据表中 运行按钮 即可在测试表中看到效果
代码有注释 需要研究的自行查看 若不考虑速度优化程序可以写的更短
写长了的原因是要提速  欢迎探讨 希望有人能让速度更快
1-VBA-行政划分多级菜单.rar (412.31 KB, 下载次数: 11070)
再附一个4级菜单的杂乱数据生成菜单示例 这里源代码没动 只是修改了数据源
4级菜单.gif


评分

14

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-8-28 20:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
向高手学习,长长见识

TA的精华主题

TA的得分主题

发表于 2014-8-28 21:33 | 显示全部楼层
我发现在treeview上采取递归与非递归的区别很大,我做过一个文件搜索的treeview,我的F盘20000多个文件,速度天差地别,但做菜单递归不递归区别不是很大,原因大概在建菜单过程上。
自适应就的我以前就做过,本来不想公开,既然百度兄这么大方,那么我也贡献出来。我采用的是自定义树形结构。

点评

也许你是对的  发表于 2014-8-29 00:45

TA的精华主题

TA的得分主题

发表于 2014-8-28 21:36 | 显示全部楼层
附件如下:

自适应多级菜单树形非递归构建.zip

94.78 KB, 下载次数: 2755

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-28 21:41 | 显示全部楼层
本帖最后由 百度不到去谷歌 于 2014-8-28 21:44 编辑
wzsy2_mrf 发表于 2014-8-28 21:36
附件如下:

你注意看我的动画哦 我说的自适应不是指的多列自适应
而是 当点击单元格时 会判断当前单元格所在级 比如
湖北-宜昌-长阳
如果点在宜昌 那么就只会出现湖北这个层级的二级菜单 而不是出现整个3级菜单
如果点在长阳这里  那么出现的只是宜昌这个层级的一级菜单
这才是我说的自适应级数 就是菜单本身根据所处的级别来显示对应的子菜单
免去每次都从顶级菜单选择 因为很多时候你是要修改后面的值而不需要修改前面的
另外我以前也用你的这个算法 但是需要3层循环 我改进的只有2层
速度是6秒 你这个得12秒

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-28 21:47 | 显示全部楼层
wzsy2_mrf 发表于 2014-8-28 21:36
附件如下:

对了 第二个动画 用的就是你那个自定义树结构的数据 没给你打招呼哈 不会侵权吧 哈哈

TA的精华主题

TA的得分主题

发表于 2014-8-28 21:57 | 显示全部楼层
百度不到去谷歌 发表于 2014-8-28 21:41
你注意看我的动画哦 我说的自适应不是指的多列自适应
而是 当点击单元格时 会判断当前单元格所在级 比如 ...

这样有何意义?一般第你一个输入的时候后面不已经输入了,再在后面摘出子菜单何用,当然如果做其它事另当别论。另外,摘出子菜单与建原来大菜单是二个过程,我要加上也随便可加。至于二层、三层毫无意义,反正每个 结点都经历一遍,几层都一样。速度在我这里测你的是6s,我的大概是8妙,你不知是怎么测的,这其实也完全正常,结构化总会有些时间消耗。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-28 22:06 | 显示全部楼层
wzsy2_mrf 发表于 2014-8-28 21:59
既然公开了,当然不存在这些问题,其实这些结构还是有些不成熟之处,对付这些毫无问题,如果是BOM之类的还 ...

其实菜单和tree就是个树形结构 自定义结构我觉得可以参考他们的结构和参数来做
自定义结构做成类好了 加上内部方法更容易使用一些

TA的精华主题

TA的得分主题

发表于 2014-8-28 21:59 | 显示全部楼层
百度不到去谷歌 发表于 2014-8-28 21:47
对了 第二个动画 用的就是你那个自定义树结构的数据 没给你打招呼哈 不会侵权吧 哈哈

既然公开了,当然不存在这些问题,其实这些结构还是有些不成熟之处,对付这些毫无问题,如果是BOM之类的还得有所改进,我正在做,但未必会再公开。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-28 22:01 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
wzsy2_mrf 发表于 2014-8-28 21:57
这样有何意义?一般第你一个输入的时候后面不已经输入了,再在后面摘出子菜单何用,当然如果做其它事另当 ...

这可是不一样的亲  一行3个数据 如果我要修改第3级的数据 那么如果没有子菜单 就需要每次都从顶级菜单一层层选下来 你不觉得很繁琐吗 这还是3层 如果4层五层的话 要修改后面级数的就太麻烦了
另外我子菜单的建立是直接摘取的主菜单 和数据没关系了  那个算是另外一个方向的研究  顺便玩一下而已
各取所需了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-15 15:20 , Processed in 0.044437 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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