关于快速访问工具栏(QAT)的宏与技术问题咨询
快速访问工具栏(QAT)自定义宏及常见问题解决方案
嘿,这里整理了你需要的QAT编辑宏,还有你问到的几个问题的实用解决方案,都是Office自定义场景里常用的方法:
用于编辑QAT的VBA宏示例
这个宏可以帮你快速在QAT上添加自定义按钮,还能直接设置图标、提示文本等属性:
Sub CustomizeQAT() Dim cmdBar As CommandBar Dim cmdBtn As CommandBarButton ' 获取快速访问工具栏的命令栏对象 Set cmdBar = Application.CommandBars("Quick Access Toolbar") ' 可选:清除现有自定义按钮,按需启用 ' cmdBar.Reset ' 添加自定义宏按钮到QAT Set cmdBtn = cmdBar.Controls.Add(Type:=msoControlButton, Temporary:=True) With cmdBtn .Caption = "我的自定义工具" .OnAction = "MyCustomMacro" ' 替换为你的宏名称 .Style = msoButtonIconAndCaption .FaceId = 123 ' 用内置图标ID,可替换为自定义图标 .TooltipText = "点击运行我的专属宏工具" ' 直接设置提示文本 End With MsgBox "QAT自定义完成!", vbInformation End Sub ' 配套测试宏 Sub MyCustomMacro() MsgBox "自定义宏运行成功!" End Sub
如何给按钮添加自定义提示文本(Tooltip)?
分两种场景处理:
- 用VBA创建按钮:直接在按钮对象里设置
.TooltipText属性就行,就像上面宏里写的那样,一行代码搞定。 - 手动添加/内置按钮:如果是手动加的按钮,或者要改内置按钮的Tooltip,推荐用Office的自定义UI文件(比如Excel的
.xlsm里的customUI.xml),示例代码如下:
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"> <ribbon> <qat> <button id="MyCustomBtn" label="我的按钮" screentip="快速启动工具" supertip="点击执行XX操作,提升工作效率" onAction="MyCustomMacro"/> </qat> </ribbon> </customUI>
其中screentip是鼠标悬停时的短提示,supertip是展开的详细说明。
如何给任意按钮添加Tooltip?
对于QAT上的内置按钮(比如保存、撤销),手动方式没法直接改,但用VBA或自定义UI就能实现:
- VBA遍历修改:
Sub ChangeBuiltInBtnTooltip() Dim cmdBar As CommandBar Dim cmdBtn As CommandBarButton Set cmdBar = Application.CommandBars("Quick Access Toolbar") ' 遍历QAT按钮,找到目标按钮 For Each cmdBtn In cmdBar.Controls If cmdBtn.Caption = "保存" Then ' 根据按钮标题判断 cmdBtn.TooltipText = "一键保存当前文档所有更改" Exit For End If Next cmdBtn End Sub
- 自定义UI方式:通过
idMso引用内置按钮,直接设置提示文本:
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"> <ribbon> <qat> <button idMso="FileSave" screentip="快速保存" supertip="点击保存当前工作簿的所有修改"/> </qat> </ribbon> </customUI>
如何更改“White Arrow”按钮的图标?
分内置按钮和自定义按钮两种情况:
- 自定义按钮:用VBA直接设置图标,支持内置图标或自定义图片:
' 方法1:用内置图标FaceId(可查Office图标库获取对应ID) cmdBtn.FaceId = 45 ' 方法2:加载本地自定义图片 Dim img As StdPicture Set img = LoadPicture("C:\Icons\custom_arrow.png") ' 推荐16x16/32x32像素 cmdBtn.Picture = img cmdBtn.Mask = img ' 设置遮罩让图标显示更清晰
- 内置“White Arrow”按钮:用自定义UI重新定义图标,还能把图标嵌入到文档里(避免依赖本地路径):
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"> <ribbon> <qat> <button idMso="WhiteArrow" image="CustomArrow" screentip="自定义箭头"/> </qat> <resources> <bt:images xmlns:bt="http://schemas.microsoft.com/office/2006/11/commands"> <bt:image id="CustomArrow" src="customUI/images/arrow_custom.png"/> </bt:images> </resources> </ribbon> </customUI>
如何插入自定义图标?
有三种常用方法:
- VBA加载本地图片:就像上面改图标时的代码,用
LoadPicture加载本地PNG/ICO文件,赋值给按钮的.Picture属性。 - 自定义UI嵌入图标:把图标放到Office文件的
customUI/images文件夹里(可以用压缩软件打开.xlsm/.docx等文件操作),然后在customUI.xml里引用,这样图标会和文档一起保存,不会丢失。 - 手动操作:右键QAT→「自定义快速访问工具栏」→选中目标按钮→点击「更改按钮图标」→选择「浏览」导入本地图片(部分Office版本支持)。
是否可以添加更多子菜单,例如Submenus_1到Submenus_5?
完全可以!不管用VBA还是自定义UI,都能创建多级子菜单:
VBA实现示例
Sub AddQATSubmenus() Dim cmdBar As CommandBar Dim mainMenu As CommandBarPopup Dim subMenu As CommandBarPopup Dim cmdBtn As CommandBarButton Set cmdBar = Application.CommandBars("Quick Access Toolbar") ' 创建主菜单 Set mainMenu = cmdBar.Controls.Add(Type:=msoControlPopup, Temporary:=True) mainMenu.Caption = "我的功能菜单" mainMenu.TooltipText = "展开查看所有子功能" ' 循环添加Submenus_1到Submenus_5 For i = 1 To 5 Set subMenu = mainMenu.Controls.Add(Type:=msoControlPopup) subMenu.Caption = "Submenus_" & i ' 在每个子菜单里添加示例按钮 Set cmdBtn = subMenu.Controls.Add(Type:=msoControlButton) cmdBtn.Caption = "功能" & i cmdBtn.OnAction = "SubmenuFunc" & i cmdBtn.TooltipText = "运行Submenus_" & i的功能 Next i MsgBox "QAT子菜单添加完成!", vbInformation End Sub ' 示例子菜单功能宏 Sub SubmenuFunc1() MsgBox "Submenus_1的功能运行成功!" End Sub ' 可复制SubmenuFunc1,修改数字得到SubmenuFunc2到SubmenuFunc5
自定义UI实现示例
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"> <ribbon> <qat> <popup id="MainMenu" label="我的功能菜单" screentip="我的功能菜单"> <popup id="Submenu1" label="Submenus_1"> <button id="Sub1Func" label="功能1" onAction="SubmenuFunc1"/> </popup> <popup id="Submenu2" label="Submenus_2"/> <popup id="Submenu3" label="Submenus_3"/> <popup id="Submenu4" label="Submenus_4"/> <popup id="Submenu5" label="Submenus_5"/> </popup> </qat> </ribbon> </customUI>
每个子菜单里还可以继续添加按钮或更深层级的子菜单,完全满足你的需求。
内容的提问来源于stack exchange,提问作者rediffusion
相关产品推荐
相关产品推荐

