从Access运行外部脚本

问题描述:

我希望我的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 2010-07-22 10:31:15

+0

谢谢。我对使用低级的kernel32代码有点不情愿,但也许我应该试试看。那么从外部程序/脚本中将消息还给主叫Access代码呢? – waanders 2010-07-22 13:10:52

+0

我的意思是PHV的建议,机智在返回设置为true:http://msdn.microsoft.com/en-us/library/d5fk67ky(VS.85).aspx – Fionnuala 2010-07-22 13:40:08

@Remou链接到的OpenProcess和WaitForSingleObject组合可能是您做这件事的最佳选择。你应该看看this,这是一个很棒的shell和wait模块。

对于从脚本中返回消息,您可能会混淆redirecting the scripts input and output。这不是因为心脏不好。作为替代方案,我会redirect the output of the script to a text file,然后在文件退出后读入。

+0

@Remou意味着第二个选项,CreateObject(“WScript.Shell”)。运行代码。这只是一个句子的代码,在cpearson.com上的Shell和Wait代码大约有250个句子。我不懒惰,但... ;-) – waanders 2010-07-22 14:12:03

+0

>马克:谢谢,我会考虑不同的选项 – waanders 2010-07-22 14:14:43

+0

我试图运行代码@ http://www.cpearson.com/excel/ShellAndWait.aspx 。但我认为这是专为Excel编写的VBA。我正在使用Access VBA,它开始抱怨XlEnableCancelKey('Type not defined') – waanders 2010-08-03 13:29:07