打包分享你的 Excel VBA 和自定义选项卡
办公电脑开放的权限不多,装软件也得批,虽然用到这台老爷机的机会不多,但秉承着最大化摸鱼效率的宗旨,做了几个小按钮,方便自己刷格式用,也能在多台设备(包括macOS)共享。不过还是没有Arixcel方便(笑)
编写Sub/macro后保存为.xlam
文件
#
- 先新建一个Excel工作簿(文件→新建)
- 打开Excel自带的VBA窗口(开发工具→Visual Basic,或者 Alt+F11)
- 一般我会选择插入模块的方式保存Sub/macro,所以在左侧对应VBA Project右键选择插入模块
建议把模块名(例如“模块1”)改为英文,以避免不同语言环境下打不开(中文模块名只能在中文系统环境+软件设置的情况下正常运作)。
如果不需要分享自定义选项卡,则编写完毕保存.xlam
后,共享给其他人即可。.xlam
通过Excel加载项的方式加载,可以手动移动到对应路径后
在Windows,路径为C:\Users\%%YourUsername%%\AppData\Roaming\Microsoft\AddIns
(把%%YourUsername%%
替换为你实际的用户文件夹名;AppData文件夹默认隐藏,建议用url访问)
在Excel加载项窗口选中,也可以不移动,选择浏览(B)...
手动locate到该文件。不使用locate的方式是为了防止误删,删了相当于卸了这个加载项。
如果希望将这些Sub/macro放到顶部tab选项卡里并共享,我这里使用Office RibbonX生成按钮,会需要对语句做一定的调整,下文会提到。
用Office RibbonX制作自定义选项卡 #
编写好函数后暂存为.xlam
,关闭Excel,然后用Office RibbonX Editor打开该文件。
选择菜单栏Insert,如果面向Office 2010+的版本,选Office 2010+ UI Part即可;如果有面向2007老版本的需求则选Office 2007 UI Part。这会向文件插入一个.xml
,我们通过自定义该文件来创建选项卡、分组和按钮。
选择刚刚创建的.xml
,选择菜单栏Insert,我们可以通过插入sample XML先看看示例,例如选择新建一个选项卡(Excel - A Custom Tab),也可以在既有的tab里插入分组、按钮等等。
这里也有一个教程(Archived,因为作者自己删了)。
例子:
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon>
<tabs>
<tab id="customTab" label="Formatting">
<group id="formattingGeneral" label="General">
<button id="generalSetZoomAndHideGridlines" label="Zoom 100% No Gridlines" size="large" onAction="SetZoomAndHideGridlines" imageMso="BlackAndWhiteWhite" />
<button id="generalShowFontWindow" label="Font Setting" size="large" onAction="ShowFontWindow" imageMso="CharacterBorder" />
</group>
<group id="formattingCell" label="Cell">
<button id="cellSetZoomAndHideGridlines" label="Center Across" size="large" onAction="CenterAcross" imageMso="OutlineDemoteToBodyText" />
<button id="cellSetYellowBackground" label="Yellow Bg" size="large" onAction="SetYellowBackground" imageMso="AppointmentColor10" />
<button id="cellSetGreyBackground" label="Grey Bg" size="large" onAction="SetGreyBackground" imageMso="AppointmentColor4" />
<button id="cellEdgeTopBorder" label="Top Border" size="large" onAction="EdgeTopBorder" imageMso="SelectionPaneHidden" />
</group>
<group id="formattingFont" label="Font">
<button id="fontSetRedFont" label="Red" size="large" onAction="SetRedFont" imageMso="AppointmentColor1" />
<button id="fontSetGreenFont" label="Green" size="large" onAction="SetGreenFont" imageMso="AppointmentColor3" />
<button id="fontSetBlueFont" label="Blue" size="large" onAction="SetBlueFont" imageMso="AppointmentColor2" />
<button id="fontSetBlackFont" label="Black" size="large" onAction="SetBlackFont" imageMso="BlackAndWhiteBlack" />
</group>
<group id="formattingValue" label="Value">
<button id="valueFormatMoneyNoDecimal" label="Money (Integer)" size="large" onAction="FormatMoneyNoDecimal" imageMso="DollarSign" />
<button id="valueFormatMultiple" label="Multiplier (#x)" size="large" onAction="FormatMultiple" imageMso="EquationMatrixGallery" />
</group>
<group id="formattingOther" label="Other">
<button id="otherAddRowWithSheetName" label="Top Row Sheet Name" size="large" onAction="AddRowWithSheetName" imageMso="Info" />
<button id="otherSetBasicWidth" label="A-D Width" size="large" onAction="SetBasicWidth" imageMso="TableDesign" />
<button id="otherCopyActiveSheet" label="Copy Active Worksheet" size="large" onAction="CopyActiveSheet" imageMso="WebServerDiscussions" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
这是一个创建新选项卡的例子,会在Excel顶部的ribbon最末,插入这个label
为Formatting
的tab,tab下有5个group,group里又分别是各个按钮,结构还是非常简单的。
对于按钮,注意确保id
的唯一性,onAction
对应为VBA中的Sub/macro名,imageMso
为按钮的icon,可以很方便地在搜索引擎获得(例如对于Excel 2016:BERT ImageMSO List Reference)。
如果你保存为.xlam
并已经加载到Excel加载项,在RibbonX Editor中保存后再次打开Excel时即可看到新建的tab。
此时点击这些按钮会报错,因为还没有将按钮与Sub/macro相链接。
修改Sub/macro #
为了让按钮和你的Sub/macro对应,需要在你不传参的Sub/macro头部()
内加入control As IRibbonControl
,例如:
Sub CenterAcross(control As IRibbonControl)
...
End Sub
保存后点击按钮,此时应该正常工作。
分享给其他人使用,只需要分享该.xlam
,让其在自己的Excel加载项中加载即可。
下载这个例子 #
你可以在这里下载我的例子,它包括这些小功能:
- 一键缩放所有表到100%,并隐藏网格线
- 一键修改中英文字体和字号
- 在每张表顶部加上表的名字(即底部tab写的名字)
Login via Github