如何在Word中使用VBA显示或隐藏快速访问工具栏(QAT)
在Word中用VBA单独控制快速访问工具栏(QAT)的显示/隐藏
首先明确:Office并没有提供直接控制QAT显示/隐藏的idMso命令,也没有公开的原生VBA方法可以单独切换QAT的可见性——Application.CommandBars.ExecuteMso ("MinimizeRibbon")只能控制整个功能区的折叠/展开,无法单独作用于QAT。
如果需要实现这个需求,可以通过修改Windows注册表的方式间接实现,以下是具体步骤和代码:
实现思路
QAT的显示状态存储在Windows注册表中,通过修改对应键值,再重启Word即可生效。不同Office版本的注册表路径略有差异,核心是修改ShowQuickAccessToolbar这个DWORD键的值:
- 值为
1:显示QAT - 值为
0:隐藏QAT
VBA代码示例
Option Explicit ' 声明操作注册表的API函数 Private Declare PtrSafe Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" ( _ ByVal hKey As LongPtr, _ ByVal lpSubKey As String, _ ByVal ulOptions As Long, _ ByVal samDesired As Long, _ phkResult As LongPtr _ ) As Long Private Declare PtrSafe Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" ( _ ByVal hKey As LongPtr, _ ByVal lpValueName As String, _ ByVal lpReserved As Long, _ lpType As Long, _ lpData As Any, _ lpcbData As Long _ ) As Long Private Declare PtrSafe Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" ( _ ByVal hKey As LongPtr, _ ByVal lpValueName As String, _ ByVal Reserved As Long, _ ByVal dwType As Long, _ lpData As Any, _ ByVal cbData As Long _ ) As Long Private Declare PtrSafe Function RegCloseKey Lib "advapi32.dll" ( _ ByVal hKey As LongPtr _ ) As Long ' 注册表权限常量 Private Const KEY_READ = &H20019 Private Const KEY_WRITE = &H20006 Private Const HKEY_CURRENT_USER = &H80000001 Private Const REG_DWORD = 4 Sub ToggleQATVisibility() Dim regPath As String Dim hKey As LongPtr Dim currentValue As Long Dim dataSize As Long Dim result As Long ' 根据你的Office版本修改路径中的版本号: ' Office 2010: 14.0 ' Office 2013: 15.0 ' Office 2016/2019/365: 16.0 regPath = "Software\Microsoft\Office\16.0\Word\Options" ' 打开注册表项 result = RegOpenKeyEx(HKEY_CURRENT_USER, regPath, 0, KEY_READ Or KEY_WRITE, hKey) If result <> 0 Then MsgBox "无法打开注册表路径,请检查Office版本是否正确。", vbExclamation Exit Sub End If ' 查询当前ShowQuickAccessToolbar的值 dataSize = Len(currentValue) result = RegQueryValueEx(hKey, "ShowQuickAccessToolbar", 0, REG_DWORD, currentValue, dataSize) ' 如果键不存在,默认设为1(显示QAT) If result <> 0 Then currentValue = 1 End If ' 切换值:1变0,0变1 currentValue = Abs(currentValue - 1) ' 写入修改后的值 result = RegSetValueEx(hKey, "ShowQuickAccessToolbar", 0, REG_DWORD, currentValue, dataSize) If result = 0 Then MsgBox "QAT显示状态已切换,请重启Word以使设置生效。", vbInformation Else MsgBox "修改注册表失败,请检查权限。", vbExclamation End If ' 关闭注册表项 RegCloseKey hKey End Sub
注意事项
- 代码中的Office版本号需要对应你的实际版本,否则无法找到正确的注册表路径。
- 修改的是当前用户的注册表分支,无需管理员权限,但系统权限限制可能导致修改失败。
- 修改后必须重启Word才能看到效果,因为Word仅在启动时读取该注册表设置。
内容的提问来源于stack exchange,提问作者Bdadoo57
相关产品推荐
相关产品推荐

