Excel:Ribbon CustomUI为VBA宏创建自定义功能区选项卡

任务描述

1、效果图

Excel:Ribbon CustomUI为VBA宏创建自定义功能区选项卡_第1张图片

2、功能描述

(1)MyTab选项卡->Opposite按键:将选中单元格的数值变为相反数

(2)MyTab选项卡->Round(Percentile)按键:将选中单元格的数值四舍五入保留两位小数,数值采用千分位表示,如123,456.78

(3)MyTab选项卡->Round(Integer)按键:将选中单元格的数值四舍五入保留整数,数值采用千分位表示,如123,456

 

以下是自定义功能区的创建过程:

一、编写宏代码,保存到xlsm文件中

1、打开一个新的Excel文档,按Alt+F11打开VBE,插入模块

Excel:Ribbon CustomUI为VBA宏创建自定义功能区选项卡_第2张图片

2、在新插入的模块中填入VBA代码

Excel:Ribbon CustomUI为VBA宏创建自定义功能区选项卡_第3张图片

示例代码:

'功能:选区内数值四舍五入保留两位小数,以千分号格式显示,负数仍以“-”显示
Sub RoundToPercentile(control As IRibbonControl)
For Each rng In Application.Selection
        If rng.Value <> "" And VBA.IsNumeric(rng) Then
            Range(rng.Address).NumberFormatLocal = "#,##0.00"
        End If
Next
End Sub

'功能:选区内数值四舍五入保留整数,以千分号格式显示,负数仍以“-”显示
Sub RoundToInteger(control As IRibbonControl)
For Each rng In Application.Selection
        If rng.Value <> "" And VBA.IsNumeric(rng) Then
            Range(rng.Address).NumberFormatLocal = "#,##0"
        End If
Next
End Sub

'功能:选区内数值正负号变换
Sub TakeOpposite(control As IRibbonControl)
    Dim rng As Range
    For Each rng In Application.Selection
        If rng.Value <> "" And VBA.IsNumeric(rng) Then
            Range(rng.Address).Value = -Range(rng.Address).Value
        End If
    Next
End Sub

3、保存Excel文档为xlsm

Excel:Ribbon CustomUI为VBA宏创建自定义功能区选项卡_第4张图片

二、修改xlsm文件(360压缩为例)

1、在windows下创建一个名为customUI的文件夹,文件夹下创建images文件夹_rels文件夹customUI.xml文件

Excel:Ribbon CustomUI为VBA宏创建自定义功能区选项卡_第5张图片

注意:以下所有编辑的xml内容中不能出现中文(包括中文注释,我之前在内容中加入了中文导致无法生成自定义的功能区)

2、images文件夹存放功能区图标的图片(支持PNG、JPG、GIF、BMP格式),将需要使用的图标放入该文件夹

Excel:Ribbon CustomUI为VBA宏创建自定义功能区选项卡_第6张图片

3、在_rels文件夹下新建customUI.xml.rels文件,在文件中添加如下内容:




  
  
  

注:Relationship标签绑定了图标Id和图标的路径,在customUI.xml中button标签的image属性将使用到这个Id。

4、customUI.xml是Excel自定义功能区的设计定义文件,在文件中添加如下内容:



  
   
    
       
        
          

说明:

(1)tab标签定义了一个选项卡,label属性为功能区选项卡上显示的名称,下面group和button标签的label属性同理;

(2)group标签定义了一个组别;

(3)button 标签定义了一个按键,image属性值为按键图标的ID(ID与图标路径在customU/_rels/CustomUI.xml.rels文件内已经绑定),onAction属性的值为点击按键后需要执行的宏的名称;

(4)“ ”表示换行。

最终,customUI文件夹的目录树如下:

└─customUI
    │  customUI.xml
    ├─images
    │      Opposite.png
    │      RoundToInteger.png
    │      RoundToPercentile.png
    └─_rels
            customUI.xml.rels

6、用压缩软件打开xlsm文件(可将后缀改为.xlsm.zip再打开,弄好后再改回来)

Excel:Ribbon CustomUI为VBA宏创建自定义功能区选项卡_第7张图片

Excel:Ribbon CustomUI为VBA宏创建自定义功能区选项卡_第8张图片

打开_rels目录下的的.rels文件,在前添加如下xml标签,这个标签指定了customUI.xml文件的路径:

添加后结果如下(记事本打开.rels文件格式不好看,我借助在线代码格式化调整了格式):

Excel:Ribbon CustomUI为VBA宏创建自定义功能区选项卡_第9张图片

7、将准备好的customUI文件夹复制到压缩文件中

Excel:Ribbon CustomUI为VBA宏创建自定义功能区选项卡_第10张图片

执行完以上的步骤,修改xlsm文件的过程已经完成。

三、测试

关闭压缩软件窗口,用Excel打开修改好的xlsm文件,弹出如下提示:

Excel:Ribbon CustomUI为VBA宏创建自定义功能区选项卡_第11张图片

点击“是”。然后弹出提示,点击“关闭”。即可在选项卡中看到customUI.xml中所设计的选项卡。

选中单元格,点击按键可以测试选项卡中按键的功能是否正确。

Excel:Ribbon CustomUI为VBA宏创建自定义功能区选项卡_第12张图片

重新保存后,修复提示将不会再弹出。将该xlsm文档保存成xlam(加载宏)后,即可在别的Excel中加载使用。

总结一下,自定义Excel的功能区有以下一些步骤:

1、编写宏,将带有宏的Excel文档保存成xlsm文件;

2、customUI/images文件夹中放入图标,在customUI/_rels文件夹中创建customUI.xml.rels文件,在文件中给图标指定Id;

3、选项卡的设计需求编写customUI/customUI.xml;

4、用压缩文件编辑xlsm文件的_rels/.rels文件,并将customUI复制到xlsm文件中。

5、大功告成,用Excel打开xlsm验证结果。

示例的xlsm文件已经上传到:https://download.csdn.net/download/u014695839/10949173

最后,我希望能各位多多交流,如有问题,务必指正!

你可能感兴趣的:(VBA)