2013-05-13 3 views
0

Mac OS X, Excel 2011 VBA Вопрос: Я пытаюсь запустить оболочку bash из макроса Excel 2011. Команда выполняется правильно с терминала Mac OS X Lion 10.7.5. Он также выполняет правильно используя Applescript из командной строки:Запуск Applescript из Excel 2011 VBA

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

Я также могу выполнить его как ./test.sh, где test.sh является исполняемым (CHMOD + х 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 на требуемый контент (команда Applescript, которая использует osascript выше), он терпит неудачу. Еще один аспект патологии заключается в том, что если я удалю файл test.sh, а затем заменим его, то при первом запуске он часто выкладывает окно с надписью «Это файл из Интернета. Вы все еще хотите запустить его? ». В этом случае после нажатия кнопки «ОК» код иногда запускается, но не выполняется корректно, даже если функция выходит без ошибок. Но, неизменно, если я попытаюсь запустить его снова, это дает мне

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

и функция аварий.

Для немного другого контекста сценарий «MyShell» (а не его настоящее имя) был написан для принятия аргументов из файла, поскольку я нашел документацию в Интернете, что Excel в MacOS не смог запустить скрипт с входными аргументами через «Оболочка» в макросе. У меня не было проблемы с записью в файл ввода аргументов. Просто трудно получить скрипт test.sh, который выполняет сценарий «MyShell» для выполнения. Я не обычный программист VBA, но я просмотрел столько веб-страниц, сколько мог, и нашел много различий между ПК и Mac OS X, но я не смог найти решение этой простой проблемы. Любые предложения будут высоко ценится.

ответ

0

OK. Отвечая на мой собственный вопрос: для запуска скрипта оболочки мне нужно было сделать файл Applescript .app, который сделал то, что мне нужно, из утилиты Applescript. Итак, я вставил свой первоначальный вызов сценария оболочки в утилиту AppleScript

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

скомпилирован как MyShell.app, то называется test.sh сценарий оболочки, который бежал ее из макроса Excel с

Function TestShell() As Double 

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

End Function 

где test.sh содержали

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

довольно окольный способ получить то, что я хотел сделать, чтобы получить сделано, но мне действительно нужно, чтобы сделать это с Excel на Mac OS X. в конце концов (не показан здесь), ясмог получить параметры сценария оболочки, записав их из макроса Excel в файл. Запустите MyShell.app. Затем я получил вывод оболочки, написанный в другой файл, который затем был прочитан макросом Excel.

Смежные вопросы