从VBA运行用户定义的R函数

时间:2016-08-17 15:55:09

标签: r vba excel-vba rexcel excel

我试图在VBA中调用我创建的R函数时遇到问题。问题不是来自VBA和R之间的连接,但是当我的R代码必须调用我自己的函数时,程序就会停止。为了更清楚,这里是R代码:

args = commandArgs(trailingOnly=T)
sink('Y:/Documents/BC10.txt', append=F, type = "output",split=TRUE)
source("Y:/Documents/myfunction.R")
cat('TEST !!')
simul = args[1]
level = args[2]
spd1 = args[3]
spd2 = args[4]
spd3 = args[5]
date_valo = toString(args[6])
swap_rate = args[7]
l1 = 0
u1 = 0.03
rho2 = 0.5
cat('\nparameters are: ', simul,  level, spd1 , spd2, spd3, date_valo, swap_rate)

PV_eq=PV_eq=myfunction(l1,u1,spd1,rho2,simul,level, date_valo, swap_rate)
cat(PV_eq)
sink()

当我运行我的VBA代码时,程序在文本文件“BC10.txt”中显示参数时表现良好,但它不显示PV_eq。所以,我认为该程序无法调用我的用户定义函数“myfunction”。

有没有人知道我遇到的问题?也许,我必须在我的VBA代码(或R代码)中添加一些内容,以便VBA考虑用户定义的函数?

1 个答案:

答案 0 :(得分:0)

感谢您的回答。

我不认为问题来自我的R代码,因为当我运行函数" myfuntion"在R中,它有效。

我正在使用Rexcel来执行我的R代码。这是VBA代码:

Sub Compute_BC()

Dim shell As Object     设置shell = VBA.CreateObject(" WScript.Shell")     Dim waitTillComplete As Boolean:waitTillComplete = True     Dim style As Integer:style = 1     Dim errorCode As Integer     Dim path As String

Dim simul, level As Variant
Dim spd1, spd2, spd3, swap_rate As Variant
Dim date_valo As String

simul = BC.Range(" B6")。值

level = BC.Range(" B4")。值

spd1 = BC.Range(" B13")。值

spd2 = BC.Range(" C13")。值

spd3 = BC.Range(" D13")。值

date_valo = BC.Range(" B1")。值

swap_rate = BC.Range(" B5")。值

path ="""" &安培; Cells.Range(" RhomeDir")& """ """ &安培; Cells.Range(" MyRscript")& """" &安培; " " &安培; simul& " " &安培;水平& " " &安培; spd1& " " &安培; spd2& " " &安培; spd3& " " &安培; date_valo& " " &安培; swap_rate

errorCode = shell.Run(path,style,waitTillComplete)

End Sub

Rmq:我用一个简单的R文件测试了这个VBA代码,并且它有效。问题出现在我的R文件中,有一个我定义的函数的调用。