【问题标题】:How is AppleScriptTask called from Excel 365 VBA on Mac mini running Big Sur?如何在运行 Big Sur 的 Mac mini 上从 Excel 365 VBA 调用 AppleScriptTask?
【发布时间】:2021-06-15 22:05:12
【问题描述】:

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

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

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    菲尔,

    我使用的代码是:

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

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

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

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

    【讨论】:

    • 对不起,我应该说我在运行 Big Sur 的 Macbook Pro 上使用 Excel365。我使用的 scpt 文件夹可能特定于 Excel365。
    • 感谢您回复 VaughanR! ${HOME} 我假设你的意思是我的“Macintosh HD/Users/minime”文件夹。我看了看那里,找到了一个“Containers”文件夹,但没有 com.microsoft.Excel 文件夹,所以我尝试创建它并收到一条消息,指出该名称已经存在。我可以看到其他隐藏的文件夹和文件,知道为什么我看不到这个吗?如果我看不到它,我无法深入到子文件夹以将脚本移动到那里。
    • 我做了一些研究,然后使用了 Option 键和 Go,然后输入了 com.microsoft.Excel 并且它起作用了,所以我能够深入到您提到的文件夹并且我的脚本已经在那里!这个文件夹是否可以通过别名或其他方式获得?也许我在上面所做的其他尝试之一导致脚本在这里。无论如何,我再次尝试并得到了相同的结果:错误 5。但得到它的时间比平时要长。我将对此进行更多研究。听到有人真的有这个工作真是令人鼓舞!
    • 成功了!!延迟是由我在脚本中的错误引起的(处理程序的名称与 AppleScriptTask 命令中的名称不匹配)。所以看起来我可能会因为 VBA 命令中的问题或脚本本身的问题而收到此错误。无论哪种方式,您都帮助我完成了这项工作!谢谢!
    • VaughanR,我在我的 mini 上注意到,您在评论中声明的路径中的一个文件夹似乎有一个可能令人困惑的别名:您拥有的位置"...Containers/com .microsoft.Excel/Data/..." "com.microsoft.Excel" 被称为 "Microsoft Excel"。当我在 Go 命令中输入 com... 时,它实际上更改为这个名称。名为“Microsoft Excel”的文件夹确实显示在我的路径中。很奇怪。我可以忍受这个。发生了其他事情,我无法解释,只能假设我真的疯了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 2021-05-16
    • 2022-09-28
    • 2021-03-31
    • 2021-04-10
    • 2015-11-10
    相关资源
    最近更新 更多