You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

相同FaceID下弹出菜单图标样式差异及Excel 365样式获取方法

如何在Excel 365弹出菜单中获取Modern风格图标

问题背景

相同FaceID在Excel 365与旧版本(如2003)的弹出菜单中显示的图标不仅样式差异大,甚至图标本身都不同。目前使用传统CommandBar创建弹出菜单时,无法获取Excel 365的Modern风格图标:

With Application.CommandBars.Add(Name:=gsMENUNOTES, _
  Position:=msoBarPopup, MenuBar:=False, Temporary:=True)
    With .Controls.Add(Type:=msoControlButton)
        .Caption = "New note"
        .OnAction = "NewNote"
        .FaceId = 4385
    End With
End With

核心原因

传统CommandBar属于Office旧版命令栏体系,默认加载兼容旧版本的图标库。而Excel 365的Ribbon使用Modern UI图标集,两者的FaceID映射并不完全一致,直接用FaceId无法在CommandBar中调用Modern图标。

解决方案

方案1:改用Ribbon XML创建弹出菜单(推荐)

这是原生支持Excel 365 Modern图标的方式,通过自定义Ribbon的popup控件实现右键弹出菜单,直接指定Ribbon内置图标:

  1. 添加Ribbon XML代码
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
  <contextMenus>
    <!-- 自定义右键弹出菜单,可指定触发位置,比如工作表单元格 -->
    <contextMenu idMso="ContextMenuCell">
      <menu id="customPopupMenu" label="我的菜单" insertBeforeMso="Cut">
        <button id="btnNewNote" label="New note" imageMso="NoteCreate" onAction="NewNote"/>
      </menu>
    </contextMenu>
  </contextMenus>
</customUI>
  • imageMso指定Ribbon内置Modern图标ID,NoteCreate对应新建笔记的Modern图标,可通过Office官方图标文档查询对应ID。
  1. VBA回调代码
Sub NewNote(control As IRibbonControl)
    ' 这里编写你的新建笔记逻辑
    MsgBox "新建笔记"
End Sub

方案2:提取Ribbon图标并赋值给CommandBar按钮

如果必须使用CommandBar,可以先从Ribbon风格的命令栏中提取Modern图标,再将其设置为CommandBarButton的自定义图片:

Sub CreatePopupWithModernIcon()
    Dim tempBar As CommandBar
    Dim tempBtn As CommandBarButton
    Dim popupBar As CommandBar
    Dim popupBtn As CommandBarButton
    
    ' 临时创建命令栏提取Modern图标
    Set tempBar = Application.CommandBars.Add(Name:="TempBar", Temporary:=True)
    Set tempBtn = tempBar.Controls.Add(Type:=msoControlButton)
    tempBtn.FaceId = 4385 ' 指定目标FaceID
    tempBtn.Style = msoButtonIconAndCaption ' 确保图标加载完成
    
    ' 创建目标弹出菜单
    Set popupBar = Application.CommandBars.Add(Name:=gsMENUNOTES, Position:=msoBarPopup, Temporary:=True)
    Set popupBtn = popupBar.Controls.Add(Type:=msoControlButton)
    
    ' 复制临时按钮的图标到弹出菜单按钮
    tempBtn.CopyFace
    popupBtn.PasteFace
    
    ' 设置按钮其他属性
    popupBtn.Caption = "New note"
    popupBtn.OnAction = "NewNote"
    
    ' 清理临时命令栏
    tempBar.Delete
End Sub

Sub NewNote()
    ' 你的业务逻辑
    MsgBox "新建笔记"
End Sub
  • 此方法通过临时创建默认加载Modern图标的命令栏,提取图标后应用到目标弹出菜单按钮上。

补充说明

  • Ribbon内置图标ID可通过Office官方文档查询,确保使用Excel 365支持的Modern图标ID。
  • 若需批量处理图标,可参考你提供的Ribbon图标浏览器代码,遍历并提取所需图标。

内容的提问来源于stack exchange,提问作者Malamare

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 19:45:32