Excel for Mac隐藏功能区

时间:2018-11-20 09:57:20

标签: excel vba macos applescript

我正在Excel for Mac(16.19修订版)上开发VBA程序。因为我需要在(笔记本电脑)屏幕上显示更多结果空间,所以我想在打开工作簿时隐藏功能区。

到目前为止,我所看到的所有解决方案都只能在Windows上运行,而不能在Mac上运行。我还尝试了Macscript通过Applescript做到这一点(见下文)。如果我从scripteditor运行此脚本,但该脚本未嵌入VBA,则效果很好。

tell application "System Events" to tell process "Microsoft Excel"
    set frontmost to true
    keystroke "r" using {command down, option down}
end tell

在VBA中,它看起来像这样:

Sub example()
Dim toggleRibbon As String
toggleRibbon = "tell application ""System Events"" to tell process ""Microsoft Excel""" & vbNewLine & _
                            "set frontmost to true" & vbNewLine & _
                            "keystroke ""r"" using {command down, option down}" & vbNewLine & _
                         "end tell"
Debug.Print toggleRibbon 'to check format (use of double quotes, etc.)
MacScript (toggleRibbon)
End Sub

执行此代码会在运行时显示错误5

有人可以解决我的问题吗?

2 个答案:

答案 0 :(得分:0)

根据Excel词典,命令应为“显示功能区”或“功能区扩展”。但是,尝试从应用程序文档,窗口,工作簿,基本窗口等获取这些属性,总是返回“缺失值”。我想Microsoft无法正确处理Applescript。

因此,另一种解决方法是模拟用户操作。脚本波纹管模拟了主菜单栏菜单5(“视图”)中项目4(“丝带”)的单击。当然,在进行该模拟之前,必须先激活Excel(最前面):

tell application "Microsoft Excel" to activate
tell application "System Events" to tell process "Microsoft Excel" to click menu item 4 of menu 5 of menu bar 1

此脚本是一个触发器:如果窗口中可见功能区,它将变为隐藏状态。如果功能区是隐藏的,它将变为可见。

如果要检查当前值而不是触发器,则需要获取菜单的选中标记(缺少值或✓) 可以通过以下方式完成:

tell application "System Events" to tell process "Microsoft Excel" to set X to (value of attribute "AXMenuItemMarkChar" of menu item 4 of menu 5 of menu bar 1) is "✓"

如果功能区可见,则X为真。

在Excel 2011上进行了测试。菜单位置在其他Excel版本上可能会有所不同。

答案 1 :(得分:0)

我有一个适用于版本 16.16.27(可能还有其他版本)的解决方案

您可以将此代码放入“本工作簿”模块中:

Private Sub Workbook_Open()

  Worksheets("Tabelle1").Activate

  ActiveWindow.Zoom = 120

  MsgBox "Currently there are " & ActiveWindow.VisibleRange.Rows.Count & " Rows visible. Please change the 34 in the code."

  If ActiveWindow.VisibleRange.Rows.Count < 34 Then
    
    Application.CommandBars.ExecuteMso "MinimizeRibbon"

  End If

End Sub

命令“Application.CommandBars.ExecuteMso“MinimizeRibbon”在可见时隐藏功能区,在不可见时显示。

因此有 if 语句。显示功能区时,可见的行数少于隐藏时的行数。

您可能需要根据收到的消息调整 34。之后随意删除 MsgBox 行...

希望能帮到你

最好的问候

乔纳斯