CommandBar & Ribbon

在EXCEL2007以前,Excel 的按钮都是CommandBar,但从2007开始微软开始采用 Ribbon (功能区),但CommandBar没有全部取消,还有一部分继续存在。

列示菜单工具栏
Sub 列示菜单工具栏()
   Dim x As Integer
   For x = 1 To Application.CommandBars.Count
      Cells(x, 1).Value = x
      Cells(x, 2).Value = Application.CommandBars(x).Name
      Cells(x, 3).Value = Application.CommandBars(x).NameLocal
   Next x
End Sub

在EXCEL2007以后继续可以用的工具条主要是两个方面:
1. 单元格区域右键菜单:

Sub AddCellsMenu()  '为单元格区域添加右键菜单
  Dim CellMenu As Office.CommandBarButton
  Set CellMenu = Application.CommandBars("Cell").Controls.Add(Type:=msoControlButton, Before:=1, Temporary:=True)
  With CellMenu
      .Caption = "大黑山"
      .FaceId = 620                    '显示对应ID的图标
      .OnAction = "CellsMenuClick"    '指定该按菜单点击后执行的宏名称
  End With
End Sub

Sub CellsMenuClick()
    MsgBox "单元格右键菜单"
End Sub

2、工作表标签添加右键菜单

Sub AddSheetMenu()  '为工作表标签添加右键菜单
  Dim CellMenu As Office.CommandBarButton
  Set CellMenu = Application.CommandBars("Ply").Controls.Add(Type:=msoControlButton, Before:=1, Temporary:=True)
  With CellMenu
      .Caption = "大黑山"               '标题
      .FaceId = 17                      '显示对应ID的图标
      .OnAction = "SheetsMenuClick"     '这个是关键,就是这个按钮按下去是执行的宏的名称

  End With
End Sub

Sub SheetsMenuClick()
    MsgBox "工作表标签右键菜单"
End Sub

以上两段代码是几乎一样的,唯一的区别:一个是Cell,一个是Ply。

手工为文档添加功能区:

Office2007及以后,界面全部改变了,叫做功能区(Ribbon),没有提供Com接口,全部需要写XML。

Step1:新建一个名为CustomUI的 文件夹

Step2:文件夹内新建一个CustomUI.xml的文件

Step3:用记事本或Notepad++打开CustomUI.xml文件开始手写XML然后保存(以下xml摘抄自张立良老师):

<?xml version="1.0"?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="ribbonLoaded">
    <ribbon>
        <tabs>
            <tab id="工资管理" label="工资管理" insertAfterMso="TabHome">
                <group id="Group1" label="Mde By 张老师">
                    <splitButton id="SplitButton1" size="large">
                        <button id="SplitButton1__btn" imageMso="ViewNextItemMenu" label="显示/隐藏"/>
                        <menu id="SplitButton1__mnu">
                            <button id="显示帐号" imageMso="ViewNextItemMenu" onAction="显示帐号_Click" label="显示帐号"/>
                            <button id="隐藏帐号" onAction="隐藏帐号_Click" label="隐藏帐号"/>
                            <menuSeparator id="Separator1"/>
                            <button id="显示身份证号" imageMso="ViewNextItemMenu" onAction="显示身份证号_Click" label="显示身份证号"/>
                            <button id="隐藏身份证号" onAction="隐藏身份证号_Click" label="隐藏身份证号"/>
                            <menuSeparator id="Separator2"/>
                            <button id="显示部门" imageMso="ImportMoreMenu" onAction="显示部门_Click" label="显示部门"/>
                            <button id="隐藏部门" onAction="隐藏部门_Click" label="隐藏部门"/>
                            <menuSeparator id="Separator3"/>
                            <button id="显示所有列" imageMso="TableColumnsInsertLeft" onAction="显示所有列_Click" label="显示所有列"/>
                            <button id="隐藏无发生额的列" onAction="隐藏无发生额的列_Click" label="隐藏无发生额的列"/>
                        </menu>
                    </splitButton>
                    <splitButton id="SplitButton2" size="large">
                        <button id="SplitButton2__btn" imageMso="AccountingFormat" label="代发工资"/>
                        <menu id="SplitButton2__mnu">
                            <button id="导出工资数据" imageMso="SubdocumentOpen" onAction="导出工资数据_Click" label="导出工资数据"/>
                            <button id="校验工资" onAction="校验工资_Click" label="校验工资"/>
                        </menu>
                    </splitButton>
                    <button id="工资项目" imageMso="OutlineGroup" onAction="工资项目_Click" label="工资项目" size="large"/>
                    <button id="职工管理" imageMso="OutlookGlobe" onAction="职工管理_Click" label="职工管理" size="large"/>
                    <button id="部门管理" imageMso="MeetingsWorkspace" onAction="部门管理_Click" label="部门管理" size="large"/>
                    <splitButton id="SplitButton3" size="large">
                        <button id="SplitButton3__btn" imageMso="SharePointListsWorkOffline" label="导入数据"/>
                        <menu id="SplitButton3__mnu">
                            <button id="从外部导入工资表" imageMso="ReturnToTaskList" onAction="从外部导入工资表_Click" label="从外部导入工资表"/>
                            <button id="复制基础信息" onAction="复制基础信息_Click" label="复制基础信息"/>
                        </menu>
                    </splitButton>
                </group>
                <group id="Group2" label="其他">
                    <button id="使用说明" imageMso="TentativeAcceptInvitation" onAction="使用说明_Click" label="使用说明" size="large"/>
                    <button id="官方网站" imageMso="OpenStartPage" onAction="官方网站_Click" label="官方网站" size="large"/>
                </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>
View Code

Step4:将xlsm文件追加后缀 .zip

Step5:然后把CustomUI文件夹放进  .zip  的压缩包中

Step6:删掉追加的  .zip  后缀

Step7:VBA中回调:

'回调方式一:
Sub macro(control As IRibbonControl)    'macro 为 xml 中对应的 onAction
    Select Case control.ID              'control.ID 为xml中对应的ID
    Case "DataCreate": Call 创建数据库
    Case "AddOrRemove": Call 添加删除账号
    Case "ModiUser": Call 修改用户名
    End Select
End Sub
'回调方式二:
Sub 个税核对_Click(Optional control As IRibbonControl)  '个税核对_Click 为 xml 中对应的 onAction
 On Error GoTo AA:
    Dim I As Long, Has1 As Boolean
    Has1 = False
    For I = 1 To Sheets.Count
        If IsGZB(Sheets(I)) Then If Left(Sheets(1).Name, 3) = "1月份" Then Has1 = True: Exit For
    Next I
    If Has1 = False Then MsgBox "当前工资系统未从1月开始启用,不能汇总计算全年个税。", vbInformation, "提示": Exit Sub
    GSHD.Show
AA:  ErrSub
End Sub

 

posted @ 2021-01-17 00:41  大黑山  阅读(408)  评论(1编辑  收藏  举报