如何把自己常用的EXCEL宏代码进行合理的组织,得到类似于EXCEL原生选项卡上的菜单?
下面Step by Step的演示,如何从自己原始的代码开始,得到最终的成品。
- 步骤一,准备好原始的代码,以备导入或者复制。
- 步骤二,新建一个EXCEL文件,并另存为XLAM格式
- 步骤三,安装Office Custom UI Editor,见附件1
说明:用该软件打开XLAM文件,复制以下的XML语句,保存后退出
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" >
<ribbon startFromScratch="false">
<tabs>
<tab id="TA89" label="A89-其他工具">
<group id="GA89B11" label="B11-CAD工具">
<menu id="MA89B11C01" label="B11-CAD工具" image="A8911" size="large" itemSize="normal" >
<button id="A89B11C01" label="C01-批量替换多对文本" onAction="Dingmurch01SU_04bRA_A89B11C01" imageMso="SkipOccurrence"/>
<button id="A89B11C02" label="C02-批量锁定全部图层" onAction="Dingmurch01SU_04bRA_A89B11C02" imageMso="FileDocumentEncrypt"/>
</menu>
<button id="A89B11C03" label="C03-批量解锁全部图层" onAction="Dingmurch01SU_04bRA_A89B11C03" imageMso="QueryBuilder"/>
<button id="A89B11C04" label="C04-批量合并多张图纸" onAction="Dingmurch01SU_04bRA_A89B11C04" imageMso="SplitCells" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
即可得到以下效果
简单而言,记住关键字和实物之间的对应关系即可
TAB对应选项卡
GROUP为同一选项卡下的分组
MENU为需要点击后弹出式菜单
BUTTON为具体的某个对应功能的菜单,注意以上实例,BUTTON可以在MENU的下级,也可以直接在GROUP下级。
<tab id="TA89" label="A89-其他工具">
<group id="GA89B11" label="B11-CAD工具">
TAB和GROUP有两个关键字,ID和LABEL,其中的ID只要不重复可以随意命名,LABLE即最终体现到加载项的可见文字
<menu id="MA89B11C01" label="B11-CAD工具" size="large" itemSize="normal" >
MENU中也有ID和LABEL,功能同上,另外它增加了SIZE和TIEMSIZE,SIZE取large,则它在选项卡上占三行的空间,如果normal则像C03-按钮一样,占一行的高度
<button id="A89B11C01" label="C01-批量替换多对文本" onAction="Dingmurch01SU_04bRA_A89B11C01" imageMso="SkipOccurrence"/>
BUTTON中也有ID和LABE,SIZE,功能同上,另外它增加了OnAction,这个即为需要调用的宏或者过程名称。imageMso为对应的图标
- 步骤四,移植原始代码并套壳
例如原始代码有个过程
Sub Dingmurch01SU_03bMA_A83B04C21()
'【A对应菜单】
'【B对应功能】
'【C调试时间】2021.04.12
Dim GB02CAEA03Batch_Input As Range
Dim GB02CAEA03Batch_Output1 As Integer
Dim GB02CAEA03Batch_Aux As Integer
Dingstringlen = InputBox("输入随机数最大范围", Dingmurch10PB_00VER_MBOX, "")
If Dingstringlen <> "" And IsNumeric(Dingstringlen) = True Then
Set MYrg = Application.Selection
For Each GB02CAEA03Batch_Input In MYrg
k = Round(Rnd * Dingstringlen, 2)
If k = 0 Then
k = 10 ^ -2
Else
GB02CAEA03Batch_Input = k
End If
Next
End If
End Sub
这个“Dingmurch01SU_03bMA_A83B04C21”不能直接用于OnAction,需要如下方式套个壳
Sub Dingmurch01SU_04bRA_A83B04C21(control As IRibbonControl)
Dingmurch01SU_03bMA_A83B04C21
End Sub
- 步骤5,为每个按钮选择图标,本步骤利用EXCELHOME论坛下载的一个加载项解决,见附件2。
由于XML配置文件内容庞杂每次修改不太方便,因此本人用EXCEL表格搭建了一个快速生成配置文件的功能,详细见附件3,本文生成的示例文件见附件4。
- 附件3使用说明
根据Q列的文件头,复制相应的行并插入对应的位置,然后填写AA,AB,AC,AD,AE,AF等相关列,完成后只需要完整复制Y列的内容,即可完成XML文件的更新。
PS:XML文件还有更多的标签或者属性, getVisible, screentip,supertip, tag等,可以实现根据权限展示或者隐藏某个按钮的功能,有兴趣的可以自行测试研究。
PS :以上附件,可从以下任一位置下载
https://cloud.189.cn/t/amqiqeYfiiIz
https://caiyun.139.com/m/i?015CHbpdG1oXC提取码:S4oL