1

Mac OS X、Excel 2011 VBA 问题:我正在尝试从 Excel 2011 宏运行 bash shell。该命令可以从 Mac OS X Lion 10.7.5 终端正确执行。它还可以从命令行使用 Applescript 正确执行:

osascript -e 'do shell script "/Users/MyFolder/Desktop/MyShell"'

我也可以将它作为 ./test.sh 执行,其中 test.sh 是一个可执行 (chmod +x test.sh) 文件,包括以下行

#!/bin/bash
osascript -e 'do shell script "/Users/MyFolder/Desktop/MyShell"'

在 Excel 中,我可以执行类似的test.sh 文件

#!/bin/bash
open /Applications/Calculator.app/

使用 Excel VBA 函数代码

Function TestShell() As Double

   Shell ActiveWorkbook.Path & ":test.sh"
   TestShell = 0

End Function

但是,当我将 test.sh 文件切换为具有所需内容(上面使用 osascript 的 Applescript 命令)时,它会失败。病态的另一个方面是,如果我删除 test.sh 文件,然后替换它,在第一次运行时,它通常会弹出一个窗口,上面写着“这是来自互联网的文件”。你还想运行它吗?在这种情况下,单击“确定”后,代码有时会运行,但无法正确执行,即使函数退出时没有错误也是如此。但是,总是,如果我再次尝试运行它,它会给我

Run-time Error '75'
Path/File Access Error

并且功能崩溃。

对于更多的上下文,“MyShell”脚本(不是它的真实名称)是为了从文件中获取参数而编写的,因为我在网上找到了有关 MacOS 上的 Excel 无法通过“Shell”运行带有输入参数的脚本的文档一个宏。我在写入参数输入文件时没有问题。只是很难让执行“MyShell”脚本的 test.sh 脚本执行。我不是普通的 VBA 程序员,但我浏览了尽可能多的网页,发现 PC 和 Mac OS X 之间存在很多差异,但我无法找到解决这个简单问题的方法。任何建议将不胜感激。

4

1 回答 1

1

好的。回答我自己的问题:要运行 shell 脚本,我需要创建一个 Applescript .app 文件,该文件可以满足我对 Applescript 实用程序的需要。因此,我将原始的 shell 脚本调用插入到 Applescript 实用程序中

do shell script "/Users/MyFolder/Desktop/MyShell"

将其编译为 MyShell.app,然后调用从 Excel 宏运行它的 shell 脚本 test.sh

Function TestShell() As Double

Shell ActiveWorkbook.Path & ":test.sh"
TestShell = 0

End Function

其中 test.sh 包含

#!/bin/bash
open /Users/MyFolder/Desktop/MyShell.app/

一种非常迂回的方式来完成我想要完成的工作,但我确实需要在 Mac OS X 上使用 Excel 来完成。最后(此处未显示),我能够通过编写参数来获取 shell 脚本的参数从 Excel 宏到文件。运行 MyShell.app。然后我将 shell 输出写入另一个文件,然后由 Excel 宏读取。

于 2013-05-31T01:04:47.253 回答