在Excel 2013中,如何使用VBA自动隐藏功能区?

10
如何在Excel 2013中使用VBA自动隐藏功能区?我想达到的效果与在Excel菜单右上角标有蓝色箭头图标,然后点击标有橙色的第一个选项所得到的效果完全相同。

enter image description here

我可以帮忙翻译。以下是需要翻译的内容:

我也对 VBA 切换回第三个选项“显示选项卡和命令”很感兴趣。对我来说,重要的是保留 Excel 菜单中的上箭头图标(用蓝色标注)。

我已尝试本主题中提供的提示:在 Excel 中最小化功能区,但我的结果不尽如人意。

尝试 1

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

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

尝试2

CommandBars.ExecuteMso "MinimizeRibbon"

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

尝试三

SendKeys "^{F1}"

尝试根本没有起作用。此外,它应该模仿尝试2,所以即使那样也不能满足我。
7个回答

14

我没有看到其他人提出这个问题... 这不是一种解决方法,而是我认为你正在寻找的实际idMSO。这段代码使我的Excel窗口看起来像第一个选项对于自动隐藏功能区所做的那样,所有东西都消失了。

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

输入图像描述

运行以下代码:

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

将使您的窗口看起来像这样,在最大化的窗口大小下(就像手动按下自动隐藏功能区按钮时会发生的情况):

输入图像描述

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

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

或者,为了达到相同的效果,您可以将此代码放入模块中:

Sub Auto_Open()
    CommandBars.ExecuteMso "HideRibbon"
End Sub
如果您想将窗口恢复到正常状态,则需要再次运行完全相同的代码。换句话说,以下代码在运行时不会有任何视觉变化,因为idMSO“HideRibbon”是一个toggleButton:
Sub HideTheRibbon()
    CommandBars.ExecuteMso "HideRibbon"
    CommandBars.ExecuteMso "HideRibbon"
End Sub

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


我很高兴你想出了这个解决方案。简单而且有效 :-) - Przemyslaw Remin
很棒的解决方案。 - Lucas Soares
结果证明(至少在Excel 2016中),如果代码不是在模块中使用,则需要使用“Application.CommandBars.ExecuteMso”HideRibbon"来隐藏功能区。 - Pᴇʜ

8

这是我用于演示的内容

ActiveWindow.DisplayGridlines = False

ActiveWindow.DisplayHeadings = False

Application.DisplayFormulaBar = False

Application.DisplayFullScreen = True 这是我用来隐藏菜单栏的方法


1
与被接受的答案 https://dev59.com/uFkT5IYBdhLWcg3wAK5E#39310260 不同,DisplayFullScreen参数可以在不改变真正的MainWindow的情况下工作。这个答案对我来说更加合适。在Office 16中与Excel一起使用。 - Nasenbaer

5

也许您需要做一些更复杂的事情:

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

因此有两个步骤:

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

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

这是一个有点大的变通方法,但您将获得想要的结果。


在链接中有足够的信息。但是还是要明确一下 - 这里 -> http://www.rondebruin.nl/win/s2/win012.htm。想法是确保每次调用“CommandBars.ExecuteMso MinimizeRibbon”时,都会调用一些附加的宏(步骤2),隐藏或显示所有选项卡。De Bruin先生讲解得非常清楚。希望能帮到你 :) - Vityata
1
你的回答对于构建自定义功能区非常有用,可能会达到目标。虽然提供的链接清楚地解释了功能区的构建,但我很高兴Tyeler提到了一个简单的解决方案。如果Tyeler没有透露他的解决方案,赏金将属于你。谢谢。 - Przemyslaw Remin

4

我在Workbook_Open事件中调用这个宏来检查功能区是否隐藏,如果没有隐藏,则会隐藏功能区(实际上,我将其放在另一个子程序中,在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

这样就不会出现当工作簿打开时隐藏了功能区,然后用户手动显示功能区,从而导致关闭时显示状态反转并实际上隐藏功能区的情况。打开时,功能区将再次显示。这将确保每次打开和关闭工作簿时都保持相同的状态。


3

试着尝试这个:

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

不要这样做。第一个子程序导致尝试2的结果,第二个子程序导致尝试1的结果。我对它们都不满意。 - Przemyslaw Remin

1
要使这段代码在Excel 2016中工作,您需要在"ThisWorkbook"模式中添加以下代码。
功劳归于BigBen - 不是我。
Private Sub Workbook_Open()
application.CommandBars.ExecuteMso "HideRibbon"
End Sub

1

首先,进入Excel选项,然后进入“快速访问工具栏”。

从那里搜索“隐藏功能区”,并添加到工具栏。添加到QAT之后,您可以使用ALT+#快速调用它(在我的电脑上,它是第8个选项,所以ALT+8将自动隐藏)。

enter image description here

然后只需添加一个子程序,执行SendKeys ALT然后8:

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

End Sub

注意:我知道使用ActiveSheet.Activate是愚蠢的,我只是为了测试宏而添加了它。根据调用方式,您可以删除/注释掉该行。 %等同于ALT,技术上,我必须先按0再按8,因此有两行代码。

1
谢谢你的想法。由于Excel命令中有这样一个本地的“按钮”,难道不能在不使用发送键的情况下调用它吗?你的想法是个好技巧,但是在其他用户的计算机上无法通过发送键来完成 - 除非他们修改他们的快速操作工具栏。 - Przemyslaw Remin
1
@PrzemyslawRemin - 嗯,你提到其他用户的观点很有道理。我相信有某种方法可以解决这个问题,但你说的没错,你找到的几个VBA命令并不能完全解决它。另外,使用MacroRecorder也没有帮助 - 它无法跟踪你隐藏功能区:/ - BruceWayne
你所展示的命令列表中几乎所有的命令都使用与其idMSO相同的单词和格式(不带空格)。如果需要,可以参考我回答底部的链接获取完整的列表进行比较。 - Tyeler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接