在 Mac M1 上通过 VBA 与第三方应用程序通信时出现问题
Problem communicating with 3rd party apps via VBA on Mac M1
我已经为 Microsoft Word 创建了一个 VBA 加载项。 Windows 和 Mac 版本。该加载项与第 3 方应用程序通信。
这多年来一直运作良好。我现在正在努力使这项工作适用于基于 M1 的 mac 的 Mac 版本(也许也与 Big Sur 相关)。
通信部分通过 dylib 编写的 i c,通过 stdin 和 stdout 进行。
其次一些功能使用AppleScriptTask。
这两种方法我都不行。
AppleScriptTask 总是return错误:
Run-time error '5'
Invalid procedure call or argument
VBA-代码:
s = AppleScriptTask("WMscript.scpt","Test","")
我尝试了 .scpt、.scptd 和 .applescript 脚本。
新创建的脚本文件也很简单 test.script:
on Test(paramS)
tell application "Finder"
activate
end tell
end Test
api 在其他应用程序中工作,但在 VBA 中使用时我无法在其中打开第 3 方应用程序。
我将这些特殊文件夹用于所有第 3 方文件以规避两种方法的沙盒:
/Library/Application support/Microsoft/Office365/User Content/Add-ins/
~/Library/Application Scripts/com.microsoft.word/
~/Library/containers/com.microsoft.word/Data/
我还尝试了 GrantAccessToMultipleFiles(FileArray) 函数。它总是 returns 'True' 无论数组中发送了哪些文件名。它从不提示用户。
运行:
M1Mac
大苏尔 11.6 (M1)
Microsoft Word Mac 16.54 (21101001)
不确定以下内容是否对您有所帮助。
如果您的第三方应用程序来自未知开发者,则会进入 GateKeeper 隔离区。在调用您的 VBA 脚本之前尝试删除隔离,运行 在脚本之后。
set theApp to application id "Avidemux.org" -- EDIT here the bundle ID
set quotedPath to quoted form of (POSIX path of (path to theApp))
do shell script "xattr -rd com.apple.quarantine " & ¬
quotedPath with administrator privileges
您可以将上述代码包含在 VBA 脚本的开头。
ApplceScriptTask 问题与脚本文件的路径不正确有关:
不正确:~/Library/Application Scripts/com.microsoft.word/
正确:~/Library/Application Scripts/com.microsoft.Word/
必须是大写的 W。
我已经为 Microsoft Word 创建了一个 VBA 加载项。 Windows 和 Mac 版本。该加载项与第 3 方应用程序通信。
这多年来一直运作良好。我现在正在努力使这项工作适用于基于 M1 的 mac 的 Mac 版本(也许也与 Big Sur 相关)。
通信部分通过 dylib 编写的 i c,通过 stdin 和 stdout 进行。
其次一些功能使用AppleScriptTask。
这两种方法我都不行。
AppleScriptTask 总是return错误:
Run-time error '5'
Invalid procedure call or argument
VBA-代码:
s = AppleScriptTask("WMscript.scpt","Test","")
我尝试了 .scpt、.scptd 和 .applescript 脚本。
新创建的脚本文件也很简单 test.script:
on Test(paramS)
tell application "Finder"
activate
end tell
end Test
api 在其他应用程序中工作,但在 VBA 中使用时我无法在其中打开第 3 方应用程序。
我将这些特殊文件夹用于所有第 3 方文件以规避两种方法的沙盒:
/Library/Application support/Microsoft/Office365/User Content/Add-ins/
~/Library/Application Scripts/com.microsoft.word/
~/Library/containers/com.microsoft.word/Data/
我还尝试了 GrantAccessToMultipleFiles(FileArray) 函数。它总是 returns 'True' 无论数组中发送了哪些文件名。它从不提示用户。
运行:
M1Mac
大苏尔 11.6 (M1)
Microsoft Word Mac 16.54 (21101001)
不确定以下内容是否对您有所帮助。
如果您的第三方应用程序来自未知开发者,则会进入 GateKeeper 隔离区。在调用您的 VBA 脚本之前尝试删除隔离,运行 在脚本之后。
set theApp to application id "Avidemux.org" -- EDIT here the bundle ID
set quotedPath to quoted form of (POSIX path of (path to theApp))
do shell script "xattr -rd com.apple.quarantine " & ¬
quotedPath with administrator privileges
您可以将上述代码包含在 VBA 脚本的开头。
ApplceScriptTask 问题与脚本文件的路径不正确有关: 不正确:~/Library/Application Scripts/com.microsoft.word/ 正确:~/Library/Application Scripts/com.microsoft.Word/
必须是大写的 W。