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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 17:54:54