Imprimir página | Cerrar ventana

XIRR vba

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=85853
Fecha de impresión: 26/Marzo/2026 a las 19:25


Tema: XIRR vba
Publicado por: aglarequi
Asunto: XIRR vba
Fecha de publicación: 04/Marzo/2021 a las 09:30
No hay manera de que funciona esta función. Da un error que no se puede obtener la propiedad XiRR. ¿Alguna sabe decirme porque?

Public Function dblXIRR() As Double

'Dim objExcel As Object
Dim varImportes(2) As Double
Dim varDates(2) As Date
Dim datestring(2) As Date
Dim result As Double

Dim objExcel As New Excel.Application


varImportes(0) = 1000
varImportes(1) = -500
varImportes(2) = 1000

varDates(0) = DateSerial(2010, 1, 1)
varDates(1) = DateSerial(2010, 6, 1)
varDates(2) = DateSerial(2010, 12, 31)

datestring(0) = Format(varDates(0), "m/d/yyyy")
datestring(1) = Format(varDates(1), "m/d/yyyy")
datestring(2) = Format(varDates(2), "m/d/yyyy")

'result = objExcel.WorksheetFunction.Xirr(varImportes, datestring, 0.01)
result = Excel.Application.WorksheetFunction.Xirr(varImportes, datestring, 0.01)
'result = Application.Xirr(varImportes, datestring, 0.01)

MsgBox dblXIRR, , "XIRR Result"

objExcel.Quit
Set objExcel = Nothing
   
End Function



Respuestas:
Publicado por: aglarequi
Fecha de publicación: 04/Marzo/2021 a las 10:28
Se que el problema viene del formato de la fecha. No consigo la manera de que una variable de tipo fecha mantenga formato americano sino que cuando lo pasa a la función lo pasa con formato europeo. ¿Como se puede forzar esto?


Publicado por: Mihura
Fecha de publicación: 04/Marzo/2021 a las 10:52
Hola, bienvenido ...

Tienes un batiburrillo considerable de variables, variables no declaradas, ....

Veo que lanzas la función con la variable datestring pero la declaración es de aquella manera. La fecha en formato yanqui es un string, así que lo primero que tendrás que hacer es definir la variable que usas como tal ... y empezar a probar.




-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: lbauluz
Fecha de publicación: 04/Marzo/2021 a las 11:53
Mira a ver así


...
datestring(0) = Format(varDates(0), "m/d/yyyy")
datestring(1) = Format(varDates(1), "m/d/yyyy")
datestring(2) = Format(varDates(2), "m/d/yyyy")


' Cambio  aqui
objExcel.Workbooks.Open (objExcel.Application.LibraryPath & "\Analysis\atpvbaen.xla")

objExcel.Workbooks("atpvbaen.xla").RunAutoMacros (xlAutoOpen)
Result = objExcel.Application.Run("atpvbaen.xla!XIRR", varImportes, datestring)


MsgBox Result, , "XIRR Result"

...


Un saludo.

Luis


-------------
El Búho es un pajarraco


Publicado por: aglarequi
Fecha de publicación: 04/Marzo/2021 a las 12:26
Muchas gracias.Parece que esto con Office16 no funciona.


Publicado por: Mihura
Fecha de publicación: 04/Marzo/2021 a las 12:36
Yo sigo sin ver la variable datestring ...  (no veo que pueda ser problema de la versión de office).




-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: aglarequi
Fecha de publicación: 04/Marzo/2021 a las 12:38
Parece que lo he conseguido. Lo pongo por si a alguno le ocurre.

Option Compare Database

Public Function dblXIRR() As Double

Dim varImportes(2) As Double
Dim varDates(2) As Date
Dim datestring(2) As String
Dim result As Double

Dim objExcel As New Excel.Application


varImportes(0) = -1000
varImportes(1) = 500
varImportes(2) = 1000

varDates(0) = DateSerial(2010, 1, 15)
varDates(1) = DateSerial(2010, 2, 20)
varDates(2) = DateSerial(2010, 3, 1)

datestring(0) = Format(varDates(0), "MM/DD/YYYY")
datestring(1) = Format(varDates(1), "MM/DD/YYYY")
datestring(2) = Format(varDates(2), "MM/DD/YYYY")


result = objExcel.WorksheetFunction.Xirr(varImportes, datestring, 0.01)


Debug.Print result
'MsgBox result, , "XIRR Result"

objExcel.Quit
Set objExcel = Nothing
   
End Function



Imprimir página | Cerrar ventana