【问题标题】:Excel for mac hide ribbonExcel for mac 隐藏功能区
【发布时间】:2019-04-22 17:51:08
【问题描述】:

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

到目前为止,我看到的所有解决方案都只能在 Windows 上运行,而不能在 Mac 上运行。我还尝试通过 Applescript 来使用 Macscript(见下文)。如果我从 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

谁能解决我的问题?

【问题讨论】:

  • 对这个东西不是很熟悉,但是你的命令是Applescript而不是VBA,所以我猜VBA不会理解它。如果您在此处查找包含单词osascript 的答案,您将看到您可以使用osascript 运行Applescript。现在,在 VBA 中,您可以调用 Shell(),因此您应该能够执行 Shell(XXX),其中 XXXosascript 命令或包含 osascript 命令的 bash 脚本,其中包含您已经使用的 Applescript 内容有。相当相似的例子在这里stackoverflow.com/a/2198403/2836621
  • 在 VBA for Mac 中,您可以使用 Macscript("string") 命令运行 Applescript。 “字符串”必须包含 Applescript(包括换行符)。这是我已经尝试过的。
  • 也许在您的问题下单击edit,如果您尝试过,请添加。可能是您没有正确转义双引号 - 因此请将其添加到您的问题中。
  • Tnx Mark,我已经嵌入了我尝试过的 VBA 示例

标签: excel vba macos applescript


【解决方案1】:

根据 Excel 字典,命令应该是“显示功能区”或“扩展功能区”。但是,尝试从应用程序文档、窗口、工作簿、基本窗口中获取这些属性……总是返回“缺失值”。我猜微软没有为 Applescript 正确处理。

因此,另一种解决方法是模拟用户操作。下面的脚本模拟了单击主菜单栏的菜单 5(“视图”)的第 4 项(="Ribbon")。当然,在模拟之前必须激活 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 版本的菜单位置可能不同。

【讨论】:

    【解决方案2】:

    我有一个适用于版本 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 行...

    希望能帮到你

    最好的问候

    乔纳斯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      相关资源
      最近更新 更多