0

作成した R 関数を VBA で呼び出そうとしているときに問題が発生しました。この問題は 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 がユーザー定義関数を考慮に入れるように、VBA コード (または R コード) に何かを追加する必要がありますか?

4

1 に答える 1

0

回答ありがとうございます。

Rで関数「myfuntion」を実行すると機能するため、Rコードに問題があるとは思いません。

Rexcel を使用して R コードを実行しています。VBAコードは次のとおりです。

サブ Compute_BC()

Dim shell As Object Set 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").Value

レベル = BC.Range("B4").Value

spd1 = BC.Range("B13").Value

spd2 = BC.Range("C13").Value

spd3 = BC.Range("D13").Value

date_valo = BC.Range("B1").Value

swap_rate = BC.Range("B5").Value

path = """" & Cells.Range("RhomeDir") & """ """ & Cells.Range("MyRscript") & """" & " " & simul & " " & レベル & " " & spd1 & " " & spd2 & " " & spd3 & " " & date_valo & " " & swap_rate

errorCode = shell.Run(パス、スタイル、waitTillComplete)

サブ終了

Rmq: この VBA コードを単純な R ファイルでテストしたところ、うまくいきました。私のRファイルで、私が定義した関数への呼び出しがあるときに問題が発生します。

于 2016-08-18T08:52:09.767 に答える