Excel for mac隐藏功能区
我正在Excel for Mac(版本16.19)上开发一个VBA程序。因为我需要(笔记本电脑)屏幕上更多的空间来显示结果,所以我想在打开工作簿时隐藏功能区 到目前为止,我看到的所有解决方案都只在Windows上有效,而在Mac上不起作用。我还尝试了Macscript通过Applescript来实现这一点(见下文)。如果我从scripteditor运行该脚本,但不嵌入VBA,则该脚本工作正常Excel for mac隐藏功能区,excel,vba,macos,applescript,Excel,Vba,Macos,Applescript,我正在Excel for Mac(版本16.19)上开发一个VBA程序。因为我需要(笔记本电脑)屏幕上更多的空间来显示结果,所以我想在打开工作簿时隐藏功能区 到目前为止,我看到的所有解决方案都只在Windows上有效,而在Mac上不起作用。我还尝试了Macscript通过Applescript来实现这一点(见下文)。如果我从scripteditor运行该脚本,但不嵌入VBA,则该脚本工作正常 tell application "System Events" to tell process "Mi
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
有人能解决我的问题吗?根据Excel字典,命令应该是“显示功能区”或“功能区展开”。但是,试图从应用程序文档、窗口、工作簿、基本窗口……获取这些属性时,总是返回“缺少值”。我想微软对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
此脚本是一个触发器:如果窗口的ribbon可见,它将隐藏。如果功能区被隐藏,它将变为可见
如果要检查当前值,则需要获得菜单的复选标记(缺少值或✓)
这可以通过以下方式完成:
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版本上,菜单位置可能不同。我有一个解决方案,可以与版本16.16.27(可能还有其他版本)一起使用 您可以将此代码放在“此工作簿”模块中:
Private子工作簿\u Open()
工作表(“表1”)。激活
ActiveWindow.Zoom=120
MsgBox“当前有”&ActiveWindow.VisibleRange.Rows.Count&“行可见。请更改代码中的34。”
如果ActiveWindow.VisibleRange.Rows.Count小于34,则
Application.commandbar.ExecuteMso“MinimizeRibbon”
如果结束
端接头
命令“Application.commandbar.ExecuteMso”MinimizeRibbon在功能区可见时隐藏功能区,在不可见时显示
因此就有了if语句。当功能区显示时,可见的行比隐藏的行少
您可能需要根据收到的消息调整34。之后可以随意删除MsgBox行
我希望我能帮忙
致意
Jonas不太熟悉这个东西,但是你的命令是Applescript而不是VBA,所以我猜VBA不会理解它。如果你在这里查找包含单词
osascript
的答案,你会发现你可以使用osascript
运行Applescript。现在,在VBA中你可以调用Shell()
因此您应该能够执行Shell(XXX)
其中XXX
是osascript
命令或bash
脚本,其中包含osascript
命令和您已有的Applescript内容。在VBA for Mac中,您可以使用Macscript(“字符串”)运行Applescript命令。“字符串”必须包含Applescript(包括换行符)。这是我已经尝试过的。如果您尝试了,可以单击问题下方的edit
,并将其添加到问题中。可能是因为您没有正确地转义双引号,所以请将其添加到问题中。Tnx Mark,我已经嵌入了我尝试过的VBA示例
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