2010-07-22 5 views
3

Я хочу, чтобы приложение My Access запускало внешнюю программу (в данном случае R-скрипт) после нажатия пользователем кнопки. Я использую этот код:Запуск внешнего скрипта из Access

Dim RetVal 
RetVal = Shell("""C:\Program Files\R\R-2.10.1\bin\R.exe"" CMD BATCH --no-environ --silent --no-restore --no-save ""c:\test.R"" ""c:\test-result.txt""", vbHide) 
MsgBox RetVal 

Это прекрасно работает, но код VBA продолжает работать, пока выполняется мой скрипт. Как я могу сделать Access ожидающим завершения сценария? Есть ли какие-либо предложения о том, как вернуть сообщение об ошибке сценария в Access?

+0

Может заинтересовать: http://www.tek-tips.com/viewthread.cfm?qid=1152885 – Fionnuala

+0

Спасибо. Я немного неохотно об использовании низкоуровневого кода kernel32, но, возможно, я должен попробовать. А как насчет возврата сообщения от внешней программы/скрипта к вызывающему коду доступа? – waanders

+0

Я имел в виду предложение PHV, где значение wit on return равно true: http://msdn.microsoft.com/en-us/library/d5fk67ky(VS.85).aspx – Fionnuala

ответ

1

Комбинация OpenProcess и WaitForSingleObject, с которой ссылаются @Remou, вероятно, будет вашим лучшим выбором для этого. Вы должны взглянуть на this, это хороший модуль для оболочки и ожидания.

Для возврата сообщения из сценария вы можете обходиться с помощью redirecting the scripts input and output. Это не для слабонервных. В качестве альтернативы я бы redirect the output of the script to a text file, затем читал в этом файле после его выхода.

+0

@Remou означает второй вариант - CreateObject («WScript.Shell»). Выполнить код. Это всего лишь 1 предложение кода, код Shell и Wait на cpearson.com около 250 предложений. Я не ленив, но ... ;-) – waanders

+0

> Отметьте: Спасибо, я рассмотрю различные варианты – waanders

+0

Я пытался запустить код @ http://www.cpearson.com/excel/ShellAndWait.aspx , Но я думаю, что VBA написан специально для Excel. Я использую Access VBA, и он начинает жаловаться на XlEnableCancelKey («Тип не определен») – waanders

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