Vba MSAccess-最小化工具栏功能区OnLoad()?

Vba MSAccess-最小化工具栏功能区OnLoad()?,vba,ms-access,Vba,Ms Access,我正在寻找一种可靠的方法来最小化OnLoad()事件期间默认的MSAccess工具栏功能区 我意识到可以完全隐藏工具栏,但这并不是我想要做的-我只想最小化功能区: DoCmd.ShowToolbar "Ribbon", acToolbarNo 'Hides the full toolbar DoCmd.ShowToolbar "Ribbon", acToolbarYes 'Show 我尝试了两种方法,成功率参差不齐: 在Access 2010和2013(VB7)中: 早期版本: Se

我正在寻找一种可靠的方法来最小化OnLoad()事件期间默认的MSAccess工具栏功能区

我意识到可以完全隐藏工具栏,但这并不是我想要做的-我只想最小化功能区:

DoCmd.ShowToolbar "Ribbon", acToolbarNo    'Hides the full toolbar
DoCmd.ShowToolbar "Ribbon", acToolbarYes   'Show
我尝试了两种方法,成功率参差不齐:

在Access 2010和2013(VB7)中:

早期版本:

SendKeys "^{F1}", False
这两种方法似乎都可以在会话之间切换。是否有方法确定当前状态,然后应用适当的代码

我有访问权限的用户:2007、2010、2013

谢谢你的建议


标记在MSDN上查看此答案。他分享了一些不同的方法,包括一个示例数据库

例如。 在Access 2010中,您可以通过以下方式更改功能区状态:

CommandBars.ExecuteMso "MinimizeRibbon"

他将以下内容链接到:

根据所使用的访问权限,您可能会使用不同的功能

从-:


下面是我实现的一个片段:

Select Case SysCmd(acSysCmdAccessVer)
    Case 7: accVer = "95"
    Case 8: accVer = "97"
    Case 9: accVer = "2000"
    Case 10: accVer = "2002"
    Case 11: accVer = "2003"
    Case 12: accVer = "2007"
    Case 13: accVer = "Pirated!"
    Case 14: accVer = "2010"
    Case 15: accVer = "2013"
    Case Else: accVer = "Unknown"
End Select

RibbonState = (CommandBars("Ribbon").Controls(1).Height < 100)

Select Case RibbonState
    Case True
        'Do nothing, already minimized
    Case False
        If accVer > 13 Then
            CommandBars.ExecuteMso "MinimizeRibbon"
        Else
            SendKeys "^{F1}", False
        End If
End Select
选择Case SysCmd(acSysCmdAccessVer)
案例7:accVer=“95”
案例8:accVer=“97”
案例9:accVer=“2000”
案例10:accVer=“2002”
案例11:accVer=“2003”
案例12:accVer=“2007”
案例13:accVer=“盗版!”
案例14:accVer=“2010”
案例15:accVer=“2013”
案例:accVer=“未知”
结束选择
RibbonState=(命令栏(“Ribbon”)。控件(1)。高度<100)
选择Case RibbonState
情况属实
“什么都不做,已经最小化了
案例错误
如果accVer>13,则
commandbar.ExecuteMso“MinimizeRibbon”
其他的
SendKeys“^{F1}”,False
如果结束
结束选择

Access 2010及更高版本您应该在启动表单中执行此操作。如果只使用ExecuteMso行,则每次打开窗体时,它都会切换功能区。要始终在启动时最小化功能区,请使用以下代码

If CommandBars("ribbon").Height > 100 Then
    CommandBars.ExecuteMso "MinimizeRibbon"
End If
希望这对像我这样正在寻找答案的人有所帮助


Dave刚刚搬到Access 2016。我的数据库使用与Dave Stuart提供的代码类似的代码。看起来最小化的ribbon现在的高度为“102”,因此使用了(例如):

子切换功能区(可选显示)
如果我不喜欢(表演),那么
CommandBars.ExecuteMso“MinimizeRibbon”切换
ElseIf Show=则为真
如果命令栏(“功能区”)。高度<100,则
commandbar.ExecuteMso“MinimizeRibbon”
如果结束
ElseIf Show=False则
如果命令栏(“功能区”)。高度>100,则
commandbar.ExecuteMso“MinimizeRibbon”
如果结束
如果结束
端接头

完美!我检测Access版本和RibbonState,然后使用相应的ExecuteMSO或sendKeys命令。注意:检测MSAccess 2013需要“案例15”。
如果accVer>13,则
-accVer在此处保留一个字符串,以供参考
SysCmd(acSysCmdAccessVer)
=
应用程序。版本
感谢您修复复制粘贴错误。不确定我的sub/end如何在代码之外结束。:)
Select Case SysCmd(acSysCmdAccessVer)
    Case 7: accVer = "95"
    Case 8: accVer = "97"
    Case 9: accVer = "2000"
    Case 10: accVer = "2002"
    Case 11: accVer = "2003"
    Case 12: accVer = "2007"
    Case 13: accVer = "Pirated!"
    Case 14: accVer = "2010"
    Case 15: accVer = "2013"
    Case Else: accVer = "Unknown"
End Select

RibbonState = (CommandBars("Ribbon").Controls(1).Height < 100)

Select Case RibbonState
    Case True
        'Do nothing, already minimized
    Case False
        If accVer > 13 Then
            CommandBars.ExecuteMso "MinimizeRibbon"
        Else
            SendKeys "^{F1}", False
        End If
End Select
If CommandBars("ribbon").Height > 100 Then
    CommandBars.ExecuteMso "MinimizeRibbon"
End If
If CommandBars("ribbon").Height > 120 Then
  CommandBars.ExecuteMso "MinimizeRibbon"
End If
Sub ToggleRibbon(Optional Show)

    If IsMissing(Show) Then
        CommandBars.ExecuteMso "MinimizeRibbon"   'Toggle

    ElseIf Show = True Then
        If CommandBars("ribbon").Height < 100 Then
            CommandBars.ExecuteMso "MinimizeRibbon"
        End If

    ElseIf Show = False Then
        If CommandBars("ribbon").Height > 100 Then
            CommandBars.ExecuteMso "MinimizeRibbon"
        End If

    End If

End Sub