无法将VBA词典返回到另一个函数

时间:2018-06-21 16:18:26

标签: excel-vba dictionary return-value vba excel

我正在尝试从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

1 个答案:

答案 0 :(得分:0)

您要对对象(更复杂的数据类型)使用Set

虽然我不是VBA专家,但我怀疑这是因为您正在调用对象的set方法,而不是写入对象所占用的内存。