首页 > 解决方案 > 如何在运行 Big Sur 的 Mac mini 上从 Excel 365 VBA 调用 AppleScriptTask?

问题描述

我正在尝试在 Excel 365 宏中从 VBA 运行 AppleScript,但我不断得到:

运行时错误“5”:无效的过程调用或参数

我的 /Library/Application Scripts/com.microsoft.Excel 文件夹中有这个名为“PythonCommand.scpt”的脚本:

on PythonCommandHandler(pythonScript)
    --do shell script "/usr/local/bin/Python3" & pythonScript
    return "Handler ended!  " & pythonScript
end PythonCommandHandler

我注释掉了“做”声明,所以我应该简单地取回我发送的内容。我在脚本编辑器中通过添加一行来调用该函数来测试它,它工作得很好。我的 VBA 宏中有这段代码:

Dim result      As String
Dim strPyScript As String
strPyScript = "xxxx"
result = AppleScriptTask("/Library/Application Scripts/com.microsoft.Excel/PythonCommand.scpt", "PythonCommandHandler", strPyScript)

当我运行它时,我收到错误“5”。
我尝试将第一个参数更改为“PythonCommand.scpt”而不是整个路径,但得到了同样的错误。我尝试将最后一个参数作为带引号的字符串而不是使用变量并得到相同的结果。我看过这篇文章: 如何在 OSX 上从 Excel 365 VBA 启动外部 python 进程? 并从那里开始我的编码(这个例子的第一个参数没有路径)。然后我读了这个: 来自微软的https://docs.microsoft.com/en-us/office/vba/office-mac/applescripttask,它专门用于使用 AppleScriptTask 命令。它更清楚地列出了过程,但基本相同。我也看了这个帖子: 如何从 mac excel 2016 简单地运行一个 applescript 任务,该任务与 我在这里找到的 Ron deBruin 文章的链接断开: https ://macexcel.com/examples/setupinfo/applescripttask/index.html 这很清楚,更容易阅读,但说的基本相同。通过使脚本成为应用程序并将其作为超链接调用来解决链接断开的帖子。我试过了,它可以工作,但这种方法有几个缺点:不能将参数传递给脚本,不能从脚本中取回任何东西,并且控制不会等待脚本在执行下一行之前结束VBA 代码。我真的想让 AppleScriptTask 命令工作。我觉得我一定错过了什么。如果其他人让这个工作,我一定做错了什么。我尝试打开在工具参考中可以找到的所有参考,但这并没有改变任何东西,我仍然收到错误“5”:消息。如果可以的话,请在这里帮助我。我非常感谢您提供的任何帮助。谢谢菲尔

标签: excelvba

解决方案


菲尔,

我使用的代码是:

res = AppleScriptTask("selectFile.scpt", "GetFile", args)

注意我不需要将完整路径放入 scpt 文件。我认为这是因为它是沙盒的,所以 vba 知道它在哪里。

顺便说一句,我将 scpt 文件放在此文件夹中:${HOME}/Library/Containers/com.microsoft.Excel/Data/Library/Application Scripts/com.microsoft.Excel

您指定的文件夹不是用户文件夹,而是系统文件夹。


推荐阅读