Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel for mac隐藏功能区_Excel_Vba_Macos_Applescript - Fatal编程技术网

Excel for mac隐藏功能区

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

我正在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


有人能解决我的问题吗?

根据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