zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    VUE assets里的scss没有引用会被打包进代码里,本地代码和打包后的代码样式不一致解决办法
    echarts图表配置
    关于哈希路由多项目部署同一个服务器的链接访问问题
    git操作失误,提交代码因为网络问题没有成功,然后操作时候点错按钮导致代码全部没有了,也没用备份,如何解决
    浏览器刷新时候不删除信息,关闭后删除用户信息处理办法,浏览器监听刷新以及删除事件、cookie、session、sessionStorage、localStorage区别
    angular打包部署设置publicPath文件目录及访问地址,解决打包完成后,运行打包文件,报错404,js,css未找到
    Oracle spatial与arcsde 的关系
    Oracle Spatial图层元数据坐标范围影响R-TREE索引的ROOT MBR吗?
    centos下安装supervisor的步骤详解
    laravel 队列
  • 原文地址:https://www.cnblogs.com/Stefan-Gao/p/14288035.html
Copyright © 2011-2022 走看看