我正在尝试从VBA中的函数返回字典。字典是解决此问题的最佳方法,因为我将返回一系列数组(其数量可以变化),并且每个数组都有一个自然名称(修改后的输入点)。代码如下。 VBA死在最后一行,我正在尝试返回值。我试过将函数定义为对象,什么也没有,失败也一样。将不胜感激任何想法。
请注意,永远不会从工作表中调用此函数。总体代码正在模拟衍生产品投资组合风险(因此,词典中的每个条目都是不完整的市场数据,以允许方案评估产生风险)。这个特殊的模型足够简单,不需要字典,但是一旦我转向更复杂的模型,没有字典就很难对市场数据进行分析。
感谢您的帮助,
Public Function curveRiskEngine(tenors, rates, ratetype, Optional interptype
= "linear", Optional biDirectional = True) As Object
If TypeName(tenors) = "Range" Then
tenors = ConvertRangeTo1DArray(tenors)
End If
If TypeName(rates) = "Range" Then
rates = ConvertRangeTo1DArray(rates)
End If
If TypeName(ratetype) = "Range" Then
ratetype = ConvertRangeTo1DArray(ratetype)
End If
bumpsize = 0.0001
basecurve = swapcurvebuilder(tenors, rates, ratetype, False, False,
interptype)
Dim RE As Scripting.Dictionary
Set RE = New Scripting.Dictionary
Dim UpBumps As Scripting.Dictionary
Set UpBumps = New Scripting.Dictionary
If biDirectional Then
Dim DownBumps As Scripting.Dictionary
Set DownBumps = New Scripting.Dictionary
End If
RE.Add "BaseCurve", basecurve
For i = 1 To UBound(tenors)
bmprates = rates
bmprates(i) = rates(i) + 0.0001
UpBumps.Add tenors(i), swapcurvebuilder(tenors, bmprates, ratetype,
False, True, interptype)
If biDirectional Then
bmprates(i) = rates(i) - 0.0001
DownBumps.Add tenors(i), swapcurvebuilder(tenors, bmprates, ratetype,
False, True, interptype)
End If
Next
RE.Add "UpBumps", UpBumps
If biDirectional Then
RE.Add "DownBumps", DownBumps
End If
curveRiskEngine = RE
End Function
答案 0 :(得分:0)
您要对对象(更复杂的数据类型)使用Set
。
虽然我不是VBA专家,但我怀疑这是因为您正在调用对象的set方法,而不是写入对象所占用的内存。