Если кто-то может помочь, мне нужны некоторые для правильного определения некоторых параметров вызова в проблеме с 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: переменная объекта или переменная блока не установлена». На всю жизнь мне не хватает структурной проблемы здесь. Поэтому в настоящее время я предполагаю, что параметры вызова не были правильно описаны. Я где-то читал, что это должны быть варианты. Может быть, это должны быть массивы или объекты диапазона. Спасибо.