Hola,
Estoy desesperado. Las funciones definidas por el usuario (UDF) se pueden llamar desde una hoja, siempre que sean declaradas como 'Public functions' y estén definidas en un óodulo (no en el código de una hoja).
Pero si la UDF tiene variables que son defindas como variables tipo de usuario, simplemente dará error #VALOR!:
Por ejemplo, si en una celda tenemos la fórmula (con el código dentro de un módulo):
= fATanPoints(fXY2Point(1;2);fXY2Point(3;4))
Dará #VALOR!
En cambio, llamando a otra UDF como:
=fATanPointsXY(1;2;3;4)
Dará por respuesta = 0.553, correcto.
Public Type POINT X As Double Y As Double End Type Public Function fXY2Point(ByRef X As Double, ByRef Y As Double) As POINT Dim TestPoint As POINT With TestPoint .X = X .Y = Y End With fXY2Point = TestPoint End Function Public Function fATanPoints(ByRef Point1 As POINT, ByRef Point2 As POINT) As Double 'Devuelve la Atan de la línea entre dos puntos (no se han implementado control de errores)
fATanPoints = Atn(Point2.Y - Point1.Y) / (Point2.X - Point1.X) End Function Public Function fATanPointsXY(ByRef X1 As double, byref Y1 As double, byref X2 As double, byref Y2 As double) As Double 'Devuelve la Atan de la línea entre dos puntos (no se han implementado control de errores) fATanPointsXY = Atn(Y2 - Y1) / (X2 - X1) End Function
La pregunta es, ¿cómo puedo llamar a funciones UDF del tipo fATanPoints que tienen variables definidas por el usuario, de modo que se obtenga el mismo resultado?
En Excel 97 la función CALL() lo resolvía, pero ahora esa llamada ya no existe.
Gracias de antemano.
En el foro MrExcel me han respondido dándome una lección de VBA. Uso de punteros...
http://www.mrexcel.com/forum/excel-questions/737410-call-udf-function-has-user-defined-type-variables-parameters-worksheet.html#post3625398
Me he dejado descolocado. Espero que existan otras soluciones, porque punteros, no se ven demasiado por VBA y sabe Dios qué mundos tocaría explorar.
-----------------------------------------------------------------
www.TrazEX.com (soluciones sobre Excel)
gracias por compartir la solución
------
Ya sé Excel, pero necesito más.