2010-07-22 69 views
3

我希望我的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

回答

1

@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