Как правильно указать вызов функции XTPR ATP 2.0 в автоматизации Access-to-Excel - PullRequest
1 голос
/ 10 сентября 2010

Если кто-то может помочь, мне нужны некоторые для правильного определения некоторых параметров вызова в проблеме с Access 2003 to Excel 2003 VBA. Я пытаюсь использовать функцию XIRR в библиотеке типов ATP 2.0 из Access. Я ссылался на библиотеку типов ATP 2.0 в моем проекте Access. Вот соответствующий код 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

В этой модели у меня всегда есть пять денежных потоков, с которыми нужно работать: значение предыдущего квартала как отток, три месяца чистых сборов и текущее значение терминала за квартал. (Если бы было задействовано больше элементов, я бы, конечно, использовал бы структуру цикла.) В пользовательской подпрограмме я перенаправляю варианты, загружаю массивы и вызываю XIRR:

GetAssetReturn_X()
    REDIM aDates(4) 'base 0
    aDates(0) = DateSerial(Year(wDBBaseDate), Month(wDBBaseDate) - 2, 1) - 1 'e.g. 3-31- 2010
    aDates(1) = DateSerial(Year(wDBBaseDate), Month(wDBBaseDate) - 1, 1) - 1 'e.g. 4-30-2010
    aDates(2) = DateSerial(Year(wDBBaseDate), Month(wDBBaseDate), 1) - 1 'e.g. 5-31-2010
    aDates(3) = wDBBaseDate 'e.g. 6-30-2010
    aDates(4) = wDBBaseDate 'e.g. 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

Функция автосенсора работает; когда я набираю "oATP2." и я получаю список доступных функций в точке. Таким образом, я предполагаю, что объект действительно правильно создан. Возможно, нет. Однако всякий раз, когда я запускаю код, я получаю печально известную ошибку времени выполнения «91: переменная объекта или переменная блока не установлена». На всю жизнь мне не хватает структурной проблемы здесь. Поэтому в настоящее время я предполагаю, что параметры вызова не были правильно описаны. Я где-то читал, что это должны быть варианты. Может быть, это должны быть массивы или объекты диапазона. Спасибо.

1 Ответ

0 голосов
/ 17 февраля 2011

Я добавил к вашему коду Set oATP2 = New ATP2.OCATP, но получаю ошибку 429.Вы наконец смогли использовать библиотеку ATP2?в качестве альтернативного решения этот код работает в MS access, но он слишком медленный:

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
...