从 Access 运行外部脚本

Posted

技术标签:

【中文标题】从 Access 运行外部脚本【英文标题】:Running an external script from Access 【发布时间】:2010-07-22 10:19:16 【问题描述】:

我希望我的 Access 应用程序在用户单击按钮后运行外部程序(在本例中为 R 脚本)。我使用此代码:

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?

【问题讨论】:

可能感兴趣:tek-tips.com/viewthread.cfm?qid=1152885 谢谢。我对使用低级 kernel32 代码有点不情愿,但也许我应该试一试。那么将来自外部程序/脚本的消息返回给调用访问代码呢? 我的意思是 PHV 的建议,其中 wit on return 设置为 true:msdn.microsoft.com/en-us/library/d5fk67ky(VS.85).aspx 也许您可以将输出重定向到可以读取的文件? microsoft.com/resources/documentation/windows/xp/all/proddocs/… 再次感谢。是的,重定向到一个文件并读取该文件将是最好的(唯一的?)方式。我想知道是否有类似 API 的方式。所以。 【参考方案1】:

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

要从脚本返回消息,您可以使用redirecting the scripts input and output。这不适合胆小的人。作为替代方案,我会redirect the output of the script to a text file,然后在它退出后读入该文件。

【讨论】:

@Remou 表示第二个选项,即 CreateObject("WScript.Shell").Run 代码。这只是 1 句代码,cpearson.com 上的 Shell And Wait 代码大约 250 句。我并不懒惰,但是... ;-) >马克:谢谢,我会考虑不同的选择 我试图运行代码@@cpearson.com/excel/ShellAndWait.aspx。但我认为它是专门为 Excel 编写的 VBA。我正在使用 Access VBA,它开始抱怨 XlEnableCancelKey ('Type not defined') @waanders,好点,我应该仔细阅读一下,你是对的,里面有很多 excel 特定的常量。这是一个没有所有花里胡哨(和 Excel 的东西)的“愚蠢”版本:mvps.org/access/api/api0004.htm 谢谢。不幸的是,这个 ShellWait 例程没有返回一个值来指示进程是否成功完成。我得改一下

以上是关于从 Access 运行外部脚本的主要内容,如果未能解决你的问题,请参考以下文章

从脚本自动填充 Access 数据库

access中无法导入excel外部数据

从 Access 前端执行 SQL 数据库备份

如何从 Oracle DB 查询外部 MS Access DB?

来自外部应用程序的 Access 数据库中日期字段的月份名称(C#)

Access使用外部数据源的方法?