我正在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
有人可以解决我的问题吗?
答案 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 行...
希望能帮到你
最好的问候
乔纳斯