excel实用典型vba代码(ExcelVBA.通用工具之47制作个人EXCEL插件)

如何把自己常用的EXCEL宏代码进行合理的组织,得到类似于EXCEL原生选项卡上的菜单?

下面Step by Step的演示,如何从自己原始的代码开始,得到最终的成品。

  1. 步骤一,准备好原始的代码,以备导入或者复制。
  2. 步骤二,新建一个EXCEL文件,并另存为XLAM格式
  3. 步骤三,安装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>

即可得到以下效果

excel实用典型vba代码(ExcelVBA.通用工具之47制作个人EXCEL插件)(1)

简单而言,记住关键字和实物之间的对应关系即可

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为对应的图标

  1. 步骤四,移植原始代码并套壳

例如原始代码有个过程

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

  1. 步骤5,为每个按钮选择图标,本步骤利用EXCELHOME论坛下载的一个加载项解决,见附件2。

由于XML配置文件内容庞杂每次修改不太方便,因此本人用EXCEL表格搭建了一个快速生成配置文件的功能,详细见附件3,本文生成的示例文件见附件4。

  1. 附件3使用说明

根据Q列的文件头,复制相应的行并插入对应的位置,然后填写AA,AB,AC,AD,AE,AF等相关列,完成后只需要完整复制Y列的内容,即可完成XML文件的更新。

excel实用典型vba代码(ExcelVBA.通用工具之47制作个人EXCEL插件)(2)

PS:XML文件还有更多的标签或者属性, getVisible, screentip,supertip, tag等,可以实现根据权限展示或者隐藏某个按钮的功能,有兴趣的可以自行测试研究。

PS :以上附件,可从以下任一位置下载

https://cloud.189.cn/t/amqiqeYfiiIz

https://caiyun.139.com/m/i?015CHbpdG1oXC提取码:S4oL

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页