VBA 缩小 Excel 中的功能区。

9
我希望您能用VBA来最小化Excel 2013中的功能区。我不想切换功能区,也不想隐藏所有内容,包括“文件”、“插入”等。我尝试了几种不同的方法,但都无法满足我的要求。
这会隐藏所有内容:
Application.ExecuteExcel4Macro "Show.ToolBar(""Ribbon"",False)

这个切换:

CommandBars.ExecuteMso "MinimizeRibbon"

这也可以切换:

SendKeys "^{F1}"

我该如何简单地强制我的功能区最小化?


1
为什么要让用户感到困惑?让用户决定是否显示功能区。 - adrianm
2
用户没有决定权在哪里说?点击一个按钮,运行一个宏,决策完成。 - Kyle Weller
Workbook_Open()事件中使用Application.DisplayFullScreen = True怎么样? - user2140173
谢谢@mehow,但这与我的第一个示例做的事情相同,我不想隐藏所有内容。 - Kyle Weller
4个回答

9

测量功能区高度,切换它,再次测量,如果更高,则重新切换。最好设置Application.ScreenUpdating = false。

ht1 = Application.CommandBars("Ribbon").Height
SendKeys "^{F1}", False
DoEvents
ht2 = Application.CommandBars("Ribbon").Height
If ht2 > ht1 Then SendKeys "^{F1}", False

我讨厌人们质疑你想做什么的原因。我有一个专制应用程序,需要对与Excel的交互拥有100%的控制权。


7

不确定您什么时候尝试调用此功能,但如果功能区已打开,则可以使用此方法最小化功能区。

If Application.CommandBars("Ribbon").Height >= 150 Then
    SendKeys "^{F1}"
End If

打开 Ribbon 的最小尺寸似乎是 150,因此只有在其打开时才会切换。


1
谢谢,这很棒,但我注意到我的功能区在展开时的高度为147,在关闭时为61。因此,我将我的阈值设置为100。 - Kyle Weller
2
如果从用户窗体启动,SendKeys会失败,因为工作表没有焦点,所以在发送键之前要么使用Appactivate,要么使用CommandBars代码。 - Patrick Lepelletier
1
这很棒,但请注意微软一直在改进!相对较新的触摸模式下,折叠/展开的功能区从101/197变为104/226,而在功能区下方的快速访问工具栏(QAT)则从65/161变为68/197。至少在我的电脑上是这样的! - Jamie Garroch - MVP

0

前提条件是没有其他人更改设置(如果每个人都按照我建议的做,那就太好了),如果在关闭之前重新切换到缩小功能区选项,它将始终存在于打开状态,因此可以进行最小化。只需确保在退出此选项之前手动隐藏功能区,然后它将始续在打开时隐藏。

Private Sub Workbook_Open()

Application.DisplayFormulaBar = False
Application.CommandBars.ExecuteMso "MinimizeRibbon"

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Application.DisplayFormulaBar = True
Application.CommandBars.ExecuteMso "MinimizeRibbon"

End Sub

-3

如果您希望在打开工作簿时完全隐藏它,请将以下代码添加到工作簿代码中:

Private Sub Workbook_Open()
    Application.ExecuteExcel4Macro "show.toolbar(""Ribbon"",False)"
End Sub

似乎原帖作者已经尝试过这个方法,但并不满意结果。 - user2140173

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