Search code examples
libreoffice-calclibreoffice-basic

Call built-in IRR function in macro


I am trying to call the IRR function from a LibreOffice basic macro, but get an

Illegal Argument Exception

Function Bla() 
  Dim oFunc as Object
  oFunc = createunoservice("com.sun.star.sheet.FunctionAccess")

  Dim args(1) as Variant
  args(0) = Array(3300, -1000, -2000)
  args(1) = 0.1

  Dim vResult as Variant    
  vResult = oFunc.callFunction("IRR", args)
  Print vResult
End Function

What is the correct way to call the function?


Solution

  • Apparently, such functions expect a two-dimensional array.

    Sub CallIRR() 
      Dim oFunc As Object
      oFunc = createUnoService("com.sun.star.sheet.FunctionAccess")
    
      Dim args(1) As Variant
      args(0) = Array(Array(3300, -1000, -2000))
      args(1) = 0.1
    
      Dim vResult As Variant    
      vResult = oFunc.callFunction("IRR", args)
      Print vResult
    End Sub
    

    To figure this out, I played around with the Java example at https://wiki.openoffice.org/wiki/Documentation/DevGuide/Spreadsheets/Function_Handling#Calculating_Function_Results.

    EDIT:

    A similar question is at How to use LibreOffice functions into Basic?