【问题标题】:VBA auto hide ribbon in Excel 2013Excel 2013 中的 VBA 自动隐藏功能区
【发布时间】:2018-10-31 00:16:56
【问题描述】:

如何在 VBA 中的 Excel 2013 中 Auto-hide Ribbon?我想通过单击下图中标有蓝色的 Excel 菜单右上角的上箭头图标,然后单击标有橙色的第一个选项来实现我所得到的:

我也对 VBA 切换回第三个选项 Show Tabs and Commands 感兴趣。对我来说重要的是在 Excel 菜单中保留上箭头图标(标记为蓝色)。

我已经尝试过此线程中显示的提示:VBA minimize ribbon in Excel 但我对结果并不满意。

尝试 1

Application.ExecuteExcel4Macro "Show.ToolBar(""Ribbon"",False)

这很好,但隐藏了蓝色图标。

尝试 2

CommandBars.ExecuteMso "MinimizeRibbon"

这接近我想要的。这会保留蓝色图标,但不会隐藏整个菜单。切换到图片Show Tabs中显示的第二个选项。

尝试 3

SendKeys "^{F1}"

attampt 根本不起作用。此外,它应该模仿尝试2。所以即使这样我也不会满足。

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    我看不到其他人提出了这个问题...这不是解决方法,这是我认为您正在寻找的实际 idMSO。这段代码让我的 excel 窗口看起来就像第一个选项对 Auto-Hide Ribbon 所做的一样,一切都消失了。

    在代码运行之前,我的窗口看起来像这样,“恢复”大小:

    运行以下代码:

    Sub HideTheRibbon()
        CommandBars.ExecuteMso "HideRibbon"
    End Sub
    

    将使您的窗口看起来像这样,以最大化的窗口大小(就像您手动按下 Auto-Hide Ribbon 按钮会发生的情况一样):

    如果您希望在工作簿打开时自动隐藏功能区,请将其放入工作簿代码中:

    Sub Workbook_Open()
        CommandBars.ExecuteMso "HideRibbon"
    End Sub
    

    或者,为了实现同样的目的,您可以将此代码放在一个模块中:

    Sub Auto_Open()
        CommandBars.ExecuteMso "HideRibbon"
    End Sub
    

    如果您希望窗口恢复正常,请再次运行完全相同的代码。 换句话说,以下代码在运行时不会产生任何视觉变化,因为 idMSO "HideRibbon " 是一个切换按钮:

    Sub HideTheRibbon()
        CommandBars.ExecuteMso "HideRibbon"
        CommandBars.ExecuteMso "HideRibbon"
    End Sub
    

    如果您想要 excel 中所有 idMSO 的完整列表,请单击适用于您的以下内容:Excel 2013+Excel 2010Excel 2007

    【讨论】:

    • 我很高兴您提出了这个解决方案。简单有效:-)
    • 很好的解决方案。
    • 原来(至少 Excel 2016)需要 Application.CommandBars.ExecuteMso "HideRibbon" 如果代码没有在模块中使用。
    【解决方案2】:

    我将其用于演示目的

    ActiveWindow.DisplayGridlines = False

    ActiveWindow.DisplayHeadings = False

    Application.DisplayFormulaBar = False

    Application.DisplayFullScreen = True这是我用来隐藏功能区的方法

    【讨论】:

    • 已接受答案的插入stackoverflow.com/a/39310260/375368 DisplayFullScreen 参数在不更改实际 MainWindow 的情况下工作。这个答案对我来说更合适。使用 Excel 在 Office 16 中工作。
    【解决方案3】:

    也许你应该做一些更复杂的事情:

    使用CommandBars.ExecuteMso "MinimizeRibbon" 显示/隐藏功能区。 根据您的需要,您可以显示/隐藏功能区中的所有其他选项卡。例如。在这里使用一些代码 -> Excel Hide/Show all tabs on Ribbon except custom tab

    因此两个步骤:

    第 1 步 - 使用 CommandBars.ExecuteMso 显示或隐藏

    第 2 步 - 使用链接中的一些宏显示或隐藏其余选项卡。

    有点大的解决方法,但你会得到你想要的。

    【讨论】:

    • 链接里有足够的。但仍然,明确地 - 在这里 -> rondebruin.nl/win/s2/win012.htm。这个想法是要确保,每当调用“CommandBars.ExecuteMso MinimizeRibbon”时,您都会调用一些额外的宏(步骤 2),它会隐藏或显示所有选项卡。 De Bruin 先生已经很好地解释了这一点。希望对你有帮助:)
    • 您的答案对于构建自定义功能区非常有用,并且可能会导致目标。尽管提供的链接清楚地解释了功能区的构建,但我很高兴 Tyeler 提到了一个简单的解决方案。如果泰勒没有透露他的解决方案,那么赏金就是你的了。谢谢。
    【解决方案4】:

    我在 Workbook_Open 上调用此宏来检查功能区,如果没有隐藏,它将隐藏功能区(实际上我将它位于另一个 Sub 中,它也删除了 Workbook_Open 的公式栏、状态栏、标题和网格线) ...

    Sub HideRibbon()
    If CommandBars("Ribbon").Controls(1).Height < 100 Then
    Exit Sub
    Else
        CommandBars.ExecuteMso ("MinimizeRibbon")
    End If
    End Sub
    

    然后我在 Workbook_BeforeClose 上调用此宏以检查功能区,如果未显示,它将显示下一个打开的 Excel 电子表格的功能区。

    Sub ShowRibbon()
    If CommandBars("Ribbon").Controls(1).Height > 100 Then
    Exit Sub
    Else
        CommandBars.ExecuteMso ("MinimizeRibbon")
    End If
    End Sub
    

    这消除了在打开工作簿时隐藏功能区的机会,然后用户手动显示功能区,这反过来会在关闭时反转显示并实际隐藏功能区。打开时,功能区将再次显示。这将在每次打开和关闭工作簿时保持相同。

    【讨论】:

      【解决方案5】:

      试试这个:

      Sub ShowHideRibbon()
      
      If CommandBars("Ribbon").Controls(1).Height < 100 Then
          CommandBars.ExecuteMso ("MinimizeRibbon")
      Else
          CommandBars.ExecuteMso ("MinimizeRibbon")
      End If
      
      End Sub
      

      或者这个:

      Sub ShowHideRibbon1()
      
      If Application.ExecuteExcel4Macro("Get.ToolBar(7,""Ribbon"")") Then
          Application.ExecuteExcel4Macro "Show.ToolBar(""Ribbon"", False)"
      Else
          Application.ExecuteExcel4Macro "Show.ToolBar(""Ribbon"", True)"
      End If
      
      End Sub
      

      【讨论】:

      • 不是这样。第一个 Sub 导致 Attempt 2 的结果,第二个 Sub 导致 Attempt 1 的结果。我对其中任何一个都不满意。
      【解决方案6】:

      首先,转到 Excel 选项,然后转到“快速操作工具栏”。

      从那里,搜索“隐藏功能区”并添加到工具栏。在 QAT 上之后,您可以使用 ALT+# 快速调用它(在我的计算机上它是第 8 件事,因此 ALT+8 将自动隐藏)。

      然后只需添加一个执行 SendKeys ALT 然后 8 的子:

      Sub Macro1()
      ActiveSheet.Activate
      'Cells(1, 1).Select
      SendKeys "%0", True
      SendKeys "8", True
      
      End Sub
      

      注意:我知道拥有ActiveSheet.Activate 很愚蠢,我只是添加它来测试宏。根据调用方式,您可以删除/注释掉该行。 % 等同于 ALT,从技术上讲,我必须按 0 再按 8,因此是两条线。

      【讨论】:

      • 感谢您提出这个想法。由于 Excel 命令中有这样一个本机“按钮” - 如果没有发送键就不能调用它吗?您的想法是个好主意,但不能通过在其他用户组合上发送密钥来完成 - 除非他们修改了他们的快速操作工具栏。
      • @PrzemyslawRemin - 嗯,关于其他用户的要点。我敢肯定有一些方法可以得到它,但你是对的,你找到的几个 VBA 命令并不能完全做到这一点。对于它的价值,使用 MacroRecorder 也无济于事 - 它不会跟踪您隐藏功能区:/
      • 您在图片中显示的命令列表中的几乎所有内容都使用与其 idMSO 相同的单词和格式(不带空格)。请参阅我的答案底部的链接,如果您愿意,可以获取完整列表以进行比较。
      【解决方案7】:

      要让此代码在 excel 2016 中工作,您需要在“ThisWorkbook”模式下使用以下代码。

      归功于 BigBen - 而不是我

      Private Sub Workbook_Open()
      application.CommandBars.ExecuteMso "HideRibbon"
      End Sub
      

      【讨论】:

        猜你喜欢
        • 2013-08-03
        • 1970-01-01
        • 2019-04-22
        • 2016-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-02
        • 1970-01-01
        相关资源
        最近更新 更多