2016-11-10 34 views
-1

我试图从Access 2016命令按钮执行R脚本。该脚本读入文件并根据文件中的值生成一个图。 它工作得很好,当我从Windows 10从命令行运行,如下所示:从Access 2016命令按钮执行R脚本问题

C:\Program Files\R\R-3.3.2\bin>Rscript --vanilla H:\R\analyze.R H:\R\LCH_22.vcf 

我想从一个按钮在Access 2016

这里执行将R脚本是一个VBA脚本,我中号使用:

Dim file_path As String 

file_path = "H:\R\LCH_22.vcf" 

Dim RetVal 
RetVal = shell("""C:\Program Files\R\R-3.3.2\bin\Rscript.exe"" --vanilla ""H:\R\analyze.R"" ""H:\R\LCH_22.vcf""", vbHide) 

MsgBox RetVal 

的脚本执行,但产生一个空白的曲线图。它具有所有的轴和标签,但是所有的数据都丢失了。我不知道为什么会发生这种情况。

跟进我把它换成vbHidevbNormalFocus,并能生成数据的阴谋...是啊!但是,我不明白为什么用一个变量代入Shell命令不起作用。有人可以请解释如何正确完成这一点?我将从Access中的表单读取文件名,并且这部分代码必须是动态的(请参阅下面的示例)。

Dim file_path 
file_path = "C:\R\DNA.vcf" 
Dim RetVal 
RetVal = shell("""C:\Program Files\R\R-3.3.2\bin\Rscript.exe"" --vanilla ""C:\R\analyze.R"" "" & file_path & """, vbNormalFocus) 

非常感谢您的帮助提前。

回答

1

只需多加一个引号对周围file_path

Dim file_path As String 
Dim RetVal As Integer 

file_path = "C:\R\DNA.vcf" 

RetVal = shell("""C:\Program Files\R\R-3.3.2\bin\Rscript.exe"" --vanilla "_ 
       & """C:\R\analyze.R"" """ & file_path & """", vbNormalFocus)