MyVBA加载宏——添加自定义菜单03——功能分析
时间:2022-07-22
本文章向大家介绍MyVBA加载宏——添加自定义菜单03——功能分析,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
功能分析
要实现的这个添加代码的菜单,需要具备以下几个特点:
- 要添加的项目肯定会不停的改变,所以必须要能够方便添加代码和自动更新。
- 即能添加单个的按钮,也能在菜单上继续添加下拉式的菜单,这样方便一些同类型的功能放在一起。
01
自动更新
要自动更新是比较简单的,只要在加载宏打开的时候,执行一次添加菜单的功能即可,所以,需要在加载宏的Thisworkbook模块添加代码:
Private Sub Workbook_Open()
Call AddCommanBar
End Sub
这样加载宏打开的时候,每次都去重新创建一次菜单,只要把创建菜单的代码逻辑规划好就可以。
02
分类自动添加
因为需要分类(单独按钮和新的弹出式)创建,所以必须有个地方能够让我们知道要创建的是什么类型的,个人做法是:
毕竟这个不是非常复杂的程序,所以在一个单独的文件夹专门存放代码,然后手动创建一个目录,平时只要去维护这个目录即可。
目录的信息主要有:
msoControl 添加控件类型(单独按钮和新的弹出式)
caption 控件的显示名称
faceID 控件的图标
endflag 这个是标记弹出式控件结束的
按如下格式创建一个CommandBarDir.txt文件:
msoControl,caption,faceID,endflag
1,vba_main,538,
1,i_row,73,
10,Object,361,
1,dic,2,
1,ado,50,
1,fso,53,
1,json,203,
1,Clipboard,19,1
每增加一个代码文件的时候,都要在目录中添加一行信息。这种常用的片段代码个人认为不会特别多,所以手动维护一个这样的目录应该不难。
前面的1和10对应的分别是msoControlButton和msoControlPopup,这个数字可以在立即窗口这样输入查看:
?msoControlButton
这个就是VBA内置定义好了的枚举类型:
caption对应的名称就是保存代码的txt文件:
这里不使用遍历获取文件的目的是,菜单的顺序用习惯了还是不喜欢变动的,如果遍历获取文件,默认是按照字母排序的,可能在更新的时候有变动。
faceID是控件前面的小图标,这个其实无所谓,有兴趣可以写个简单的代码,在菜单上添加控件,设置不同的faceID看看:
Sub TestExcelCMDB()
Dim cmdb As CommandBarButton
Application.CommandBars("Worksheet Menu Bar").Reset
Dim i As Long
For i = 1 To 200
Set cmdb = Application.CommandBars("Worksheet Menu Bar").Controls.Add(msoControlButton, Temporary:=True)
cmdb.FaceId = i
Next
End Sub
endflag就是为了标识msoControlPopup的结束。
基本上前期的一些基础就这些了,这里主要做的就是维护好CommandBarDir.txt文件。
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(2)-easyui构建前端页面框架[附源码]
- 扬言毁灭人类的索菲亚再一次挑战了人类
- SQL Server 存储过程生成insert语句
- silverlight 背景透明
- .Net 转战 Android 4.4 日常笔记(1)--工具及环境搭建
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(33)-MVC 表单验证
- 如何利用深度学习识别千万张图片?
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(32)-swfupload多文件上传[附源码]
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(31)-MVC使用RDL报表
- 43 Hot Flex and ActionScript 3.0 APIs, tips and tools for Autumn 2008
- 异步数据存储
- 谈谈基于SQL Server 的Exception Handling[中篇]
- C# AD(Active Directory)域信息同步,组织单位、用户等信息查询
- 如何仅使用TensorFlow C+来训练深度神经网络
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Git-git diff命令结果解析
- 快速学习-sentinel实时监控
- Git技术干货!工作中Git的使用实践和常用命令合集!
- gremlin-both()与bothE().bothV()的区别
- C# Time.deltaTime 增量时间
- Docker--docker ps 命令与结果解析
- Junit5系列-Junit5中@DisplayName自定义名称
- Junit5系列-Junit5中Assertions断言类
- 使用libev监视文件夹下文件(夹)属性变动的方案和实现
- C++拾取——stl标准库中集合交集、并集、差集、对称差方法
- netty结合Protostuff传输对象案例,单机压测秒级接收35万个对象
- Kubernates之Deployment滚动升级和回滚
- 简记特定容器list和forward_list算法
- Games101--Assignment2
- 快速学习-如何使用sentinel