如何在Access-to-Excel自动化中正确指定ATP 2.0 XIRR函数调用

如果有人可以帮助,我需要一些正确定义Access 2003中的某些调用参数到Excel 2003 VBA问题。 我试图在Access中使用ATP 2.0 Type Library中的XIRR函数。 我在Access项目中引用了ATP 2.0types库。 下面是一个表单后面的相关VBA代码(带有一点伪代码):

Dim aCF as Variant 'this variant will hold the cash flows Dim aDates as Variant 'this variant will hold the dates Dim oATP2 As ATP2.OCATP Set oATP2 = New ATP2.OCATP 'used in the Form_Open event to instantiate the object 

在这个模型中,我总是有五个现金stream量来处理:上一个季度的价值stream出,三个月的净收入和当前的季度terminal价值。 (如果涉及更多的元素,我肯定会使用循环结构。)在用户定义的子程序中,我重新调用变体,加载数组并调用XIRR:

 GetAssetReturn_X() REDIM aDates(4) 'base 0 aDates(0) = DateSerial(Year(wDBBaseDate), Month(wDBBaseDate) - 2, 1) - 1 'eg 3-31- 2010 aDates(1) = DateSerial(Year(wDBBaseDate), Month(wDBBaseDate) - 1, 1) - 1 'eg 4-30-2010 aDates(2) = DateSerial(Year(wDBBaseDate), Month(wDBBaseDate), 1) - 1 'eg 5-31-2010 aDates(3) = wDBBaseDate 'eg 6-30-2010 aDates(4) = wDBBaseDate 'eg 6-30-2010 REDIM aCF(4) 'base 0 'from a recordset... aCF(0) = -rs.Fields(2) 'pprd cash flow aCF(1) = rs.Fields(3) 'net collection cprd - 2 aCF(2) = rs.Fields(4) 'net collection cprd - 1 aCF(3) = rs.Fields(5) 'net collection cprd aCF(4) = rs.Fields(6) 'cprd cash flow GetAssetReturn_X = oATP2.XIRR(aCF, aDates) End Sub 

自动感应function起作用; 当我input“oATP2”。 我得到一个可用的函数列表。 所以我认为这个对象实际上是正确实例化的。 也许不会。 然而,每当我运行代码,我得到臭名昭着的运行时错误“91:对象variables或块variables未设置”。 对于我的生活,我错过了这里的结构性问题。 所以我现在假设调用参数没有被正确描述。 我在某处读到这些必须是变体。 也许这些需要是数组或者范围对象。 谢谢。

我添加到您的代码Set oATP2 = New ATP2.OCATP但我得到429错误。 你终于可以使用ATP2库吗? 作为替代解决scheme,此代码在MS访问中运行,但速度太慢:

 Function tasa1(A, B) Set AnalysisApp = CreateObject("Excel.Application") Set AnalysisWkb = AnalysisApp.Workbooks.Open("C:\Archivos de programa\Microsoft Office\OFFICE11\Macros\Análisis\atpvbaen.xla") AnalysisWkb.RunAutoMacros xlAutoOpen tasa1 = AnalysisApp.Application.Run(AnalysisWkb.Name & "!XIRR", A, B, 0.1) * 100 End Function