ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 省市县级联菜单

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-8-17 07:50 | 显示全部楼层 |阅读模式
image.png image.jpg image.jpg

省市县对照表.7z

62.23 KB, 下载次数: 81

辅件

省市县级联菜单1_0_3.7z

35.24 KB, 下载次数: 113

主件

评分

12

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-8-17 08:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
值得肯定!!!

TA的精华主题

TA的得分主题

发表于 2023-8-18 10:51 | 显示全部楼层
在此基础上改造,动态,可以添加项目:左右键菜单都可以!
微信截图_20230818104626.png 微信截图_20230818105058.png

TA的精华主题

TA的得分主题

发表于 2023-8-18 10:54 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
1692327148518.png

代码稍作了修改,


tree结构.rar (70.09 KB, 下载次数: 34)

TA的精华主题

TA的得分主题

发表于 2023-8-18 13:28 | 显示全部楼层
做的太棒了!就是少了一个省份

TA的精华主题

TA的得分主题

发表于 2023-8-18 15:02 | 显示全部楼层
kuangben8 发表于 2023-8-18 13:28
做的太棒了!就是少了一个省份

好像没有看见台湾省,是吧!!!

TA的精华主题

TA的得分主题

发表于 2023-8-18 15:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
改进后:
微信截图_20230818150944.png




树.rar (209.54 KB, 下载次数: 48)

TA的精华主题

TA的得分主题

发表于 2023-8-18 15:12 | 显示全部楼层
都是楼主修改的,我只是参与讨论和代发!!!版权归楼主

TA的精华主题

TA的得分主题

发表于 2023-8-18 16:03 | 显示全部楼层
  1. function Region() {
  2.         if (!(this instanceof Region)) throw new Error("请使用new实例化对象")
  3.         //if (Region._instance != null) return Region._instance
  4.         const cityTree = main()
  5.         const menuName = "省市县级联菜单"
  6.         try { CommandBars.Item(menuName).Delete() } catch {}
  7.         const popupMenu = CommandBars.Add(menuName, msoBarPopup)                // 弹出菜单
  8.         popupMenu.Control = popupMenu                                                                        // 扩充一个属性,方便递归
  9.         const setPopupMenuControl = function(cityTree, popupControl, addr) {
  10.                 let cities = Object.keys(cityTree)
  11.                 let subPopupMenu, subTree
  12.                 cities.forEach(city => {
  13.                         subTree = cityTree[city]
  14.                         if (subTree != null) {
  15.                                 if (city != addr) {
  16.                                         subPopupMenu = popupControl.Control.Controls.Add(msoControlPopup)
  17.                                         setPopupMenuControl(subTree, subPopupMenu, addr + city + ",")        // 递归添加组件
  18.                                 } else {
  19.                                         subPopupMenu = popupControl                                                                // 减少一个层级
  20.                                         setPopupMenuControl(subTree, subPopupMenu, city)                // 递归添加组件
  21.                                 }
  22.                         } else {
  23.                                 subPopupMenu = popupControl.Control.Controls.Add(msoControlButton)
  24.                                 subPopupMenu.Tag = addr + city
  25.                                 subPopupMenu.OnAction = "setCity"
  26.                         }
  27.                         subPopupMenu.Caption = city
  28.                 })
  29.         }
  30.         setPopupMenuControl(cityTree, popupMenu, "")
  31.        
  32.         let city = ""
  33.         const P = Region.prototype
  34.         setCity = () => { city = CommandBars.ActionControl.Tag }
  35.         P.getCity = () => {                // 获取选择的城市
  36.                 city = ""
  37.                 CommandBars.Item(menuName).ShowPopup()
  38.                 return city.replace(",", "")
  39.         }
  40.         P.getCities = () => {        // 获取选择的城市数组
  41.                 CommandBars.Item(menuName).ShowPopup()
  42.                 let cities = city.split(",")
  43.                 return cities.length > 0 ? cities : []
  44.         }
  45.         return Region._instance = this
  46. }

  47. function setCity() {}        // 弹出菜单组件中的OnAction指向,只为服务于Region对象

  48. function Workbook_SheetSelectionChange(sht, rng) {
  49.         if (rng.Count > 1||sht.Name!="菜单") return
  50.         Application.Cursor=xlDefault
  51.         rng.Value2 = new Region().getCity()
  52. }

  53. function Workbook_SheetBeforeRightClick(Sh, rg, cancel)
  54. {       
  55.         if (rg.Count > 1||Sh.Name!="右键菜单") return
  56.         Application.CommandBars("Cell").Enabled = false
  57.         Application.Cursor=xlDefault
  58. //        const arr = [new Region().getCities()]
  59. //        rg.Resize(arr.length, arr[0].length).Value2 = arr
  60.         const arr = new Region().getCities()
  61.         rg.Resize(1, arr.length).Value2 = arr
  62. }
复制代码


TA的精华主题

TA的得分主题

发表于 2023-8-22 14:47 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-4 01:06 , Processed in 0.052865 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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