VBA-将宏添加到选项卡(进阶版)

VBA-将宏添加到选项卡(进阶版)

缘起

之前分享了简易方法。应大家的需求,分享一个进阶的方法。这里说它是进阶,一是最后达到的效果可以做到更多元化,二是这样做出来的选项卡不会被轻易初始化,三是操作起来略复杂,涉及了Office选项卡实现原理,Office文件的储存原理还有回调函数等。

方法

  1. 首先,新建一个xlsm格式的文件,这里我们一起新建全名叫TestFunc.xlsm的文件
  2. 在这个文件的VBE中插入模块。出于演示目的,我们就简单地写一个叫做OwnFunc的sub——大家在自己做的时候可以用自己的代码替换MsgBox (“Mscro worked.”)
Sub OwnFunc(control As IRibbonControl)
    MsgBox ("Mscro worked.")
End Sub
  1. 保存关闭后,用重命名的方式将文件改为.zip文件,变成TestFunc.zip
    Office文件从2007版开始本质上就是一个压缩包,并且是采用xml储存数据及设置,感兴趣的朋友可以了解一下xml文件和新型Office文件的储存原理。
  2. 打开压缩包后,在其中添加一个名为“customUI”的文件夹,并且在这个文件夹里面存入一个叫做“customUI.xml”的UTF-8编码的xml文件,此文件中应该有以下内容
    这些内容的作用就是规定自定义添加的选项卡以及其中的组别、按钮等,不过可以调整的属性比简易版方法更多(如size等)
<?xml version="1.0"?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="false">
<tabs>
<tab id="rxtabCustom" label="Audit" insertBeforeMso="TabHome">
<group id="mygroupB" label="Macro Func">
<button id="ButtonID" imageMso="HappyFace" size="large" label="Func" onAction="OwnFunc"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>

而且这里可以添加的控件的种类也很多,这里只是用button为例子,更多的种类可以参考下图:
在这里插入图片描述
5. 和刚刚添加的customUI文件夹同级有一个名为“_rels”的文件夹,进入此文件夹,打开“.rels”文件,在最后一个“<Relationship”字段前添加:

<Relationship Id="customUIRelID" Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="customUI/customUI.xml"></Relationship>
  1. 最后,你的压缩包应该长这个样子
    在这里插入图片描述
    保存在压缩包做的修改,然后将文件名改回TestFunc.xlsm。打开文件,点击多出来的那个笑脸,OwnFunc里设定的程序就运行起来了。

关于插件制作

这样的六步走下来,一个进阶版的选项卡就可以设置好了。另外文中提及的是制作自定义的xlsm文件,如果想做成插件,操作是一样的,只是操作的文件要另存为xlam,之后在别的机器上使用时需要做的就是将定义好的插件xlam文件导入就可以。关于ImageMSO,我从网络上找到一个大全,老规矩放在了下载模块,名字叫Office2007IconsGallery;同时也在公众号上提供百度云下载链接。![在这里插入图片描述](https://img-blog.csdnimg.cn/20190922125259147.jpg

要在Word VBA中向新建选项卡组中添加子按钮,可以按照以下步骤进行操作: 1. 打开Word文档,并按下Alt+F11打开VBA编辑器; 2. 在VBA编辑器中,选择“插入”->“用户窗体”->“Ribbon XML”; 3. 在Ribbon XML编辑器中,编写XML代码来创建新的选项卡组和子按钮,例如: ``` <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon> <tabs> <tab id="customTab" label="My Custom Tab"> <group id="customGroup" label="My Custom Group"> <button id="customButton" label="My Custom Button" onAction="MyCustomButton_Click" size="large" /> <menu id="customMenu" label="My Custom Menu"> <button id="customSubMenu1" label="Submenu Item 1" onAction="MyCustomSubMenu1_Click" /> <button id="customSubMenu2" label="Submenu Item 2" onAction="MyCustomSubMenu2_Click" /> </menu> </group> </tab> </tabs> </ribbon> </customUI> ``` 4. 在VBA项目中,添加一个新的模块并编写按钮的点击事件处理程序,例如: ``` Sub MyCustomButton_Click(control As IRibbonControl) ' Do something when the button is clicked End Sub Sub MyCustomSubMenu1_Click(control As IRibbonControl) ' Do something when submenu item 1 is clicked End Sub Sub MyCustomSubMenu2_Click(control As IRibbonControl) ' Do something when submenu item 2 is clicked End Sub ``` 5. 在VBA项目中,添加一个新的类模块,并将其命名为“MyRibbon”,以便在XML代码中引用它; 6. 在MyRibbon类模块中,添加一个回调函数以返回Ribbon XML代码,例如: ``` Public Function GetCustomUI(ByVal RibbonID As String) As String GetCustomUI = "<customUI xmlns='http://schemas.microsoft.com/office/2006/01/customui' loadImage='MyImageLoader'>" & _ " <ribbon>" & _ " <tabs>" & _ " <tab id='customTab' label='My Custom Tab'>" & _ " <group id='customGroup' label='My Custom Group'>" & _ " <button id='customButton' label='My Custom Button'" & _ " onAction='MyCustomButton_Click' size='large' />" & _ " <menu id='customMenu' label='My Custom Menu'>" & _ " <button id='customSubMenu1' label='Submenu Item 1'" & _ " onAction='MyCustomSubMenu1_Click' />" & _ " <button id='customSubMenu2' label='Submenu Item 2'" & _ " onAction='MyCustomSubMenu2_Click' />" & _ " </menu>" & _ " </group>" & _ " </tab>" & _ " </tabs>" & _ " </ribbon>" & _ "</customUI>" End Function ``` 7. 在VBA项目中,添加另一个模块并编写代码来加载Ribbon XML,例如: ``` Public Sub LoadCustomUI() Dim ribbon As IRibbonUI Set ribbon = Application.CommandBars("Ribbon"). _ Controls.Add(msoControlCustom, , "MyRibbon") ribbon.Invalidate End Sub ``` 8. 最后,在Word文档中添加一个宏以调用LoadCustomUI函数,例如: ``` Sub InitializeCustomUI() LoadCustomUI End Sub ``` 这样就可以在新建选项卡组中添加子按钮了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值