【问题标题】:Wait for each R script to end before running next R script called by VBA code等待每个 R 脚本结束,然后再运行由 VBA 代码调用的下一个 R 脚本
【发布时间】:2014-04-18 13:10:44
【问题描述】:

我有一份带有 Excel 前端的报告(继承文件)。有多个按钮调用 VBA 代码,然后调用 SQL 查询、存储过程或 R 脚本文件(以 rcmd 批处理/shell 的形式,传递一些参数等)

R 脚本一个接一个地从 VBA 调用。所有这些都需要一些未指定的时间来完成。

VBA 中有应用程序/等待时间来“确保”在启动下一步之前完成 R 脚本。

并不总是有效(取决于数据大小等)。

有没有办法将 / 代码放在 R 脚本的末尾以通知 VBA 是时候继续了?

或者让 VBA 检查特定的 R 脚本是否仍在运行?

【问题讨论】:

  • 为什么不从 VBA 调用 R 脚本?
  • 您好,目前是从 VBA 调用的。但是当你一个接一个地调用更多的脚本(并且它们都需要一些未指定的时间来完成)时,你如何确保它?目前使用 VBA 中的等待时间,当脚本由于某种原因运行时间较长时,有时会失败。例如: call Rscript 1 --runs 可能需要 4-5 分钟 call Rscript2 Rscript2 应该只在第一个完成后运行,有没有办法以自动化的方式确保?谢谢你也对不起我的英语,不是我的母语。
  • 您可以等待每个脚本完成。见excel vba wait for shell command to complete
  • 看起来很有帮助/有用我会测试它,谢谢你!

标签: r excel vba


【解决方案1】:

基于@z 反馈和Wait for Shell to finish, then format cells - synchronously execute a command 线程。

您可以将方法WScript.Shell 对象与Run 方法与waitOnReturn 选项集一起使用:

请看Excel函数代码示例:

Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
Dim waitOnReturn As Boolean: waitOnReturn = True
Dim windowStyle As Integer: windowStyle = 1

wsh.Run Chr(34) & "C:\Program Files\R\R-3.5.0\bin\rscript" & Chr(34) & " " & Chr(34) & "C:\Users\demo_user\test.R" & Chr(34), windowStyle, waitOnReturn

test.R 内容:

rnorm(10000)

【讨论】:

    猜你喜欢
    • 2019-09-22
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 2018-11-28
    相关资源
    最近更新 更多