jueves, 11 de febrero de 2016

UDF y Validación de datos.

Planteaba un lector a través de un comentario la siguiente cuestión:
¿Se puede hacer validación de datos con una función de usurario?.
Cuando intento utilizar una UDF para validación de datos me da un error:
'No se puede encontrar uno de los rangos especificados'.
¿A qué puede deber?


El asunto es que a pesar que una UDF (función personalizada con programación VBA por el usuario) es plenamente operativa en otras funcionalidades (formato condicional, por ejemplo), parece ser que existen restricciones en cuanto al uso de UDF dentro de las validaciones de datos.

Una solución consiste en crear un Nombre definido donde incluir la UDF, para luego incorporar el Nombre definido en la validación de datos (no devuelve el error comentado, pero no es 100% fiable).

Otra opción más segura, pero menos limpia, es construir la Validación sobre la función personalizada insertada en una celda auxiliar...


Para ejemplificar este caso, insertamos la siguiente Function dentro de la ventana de código de un Módulo estándar desde el editor de VB:

Function validar(ref As Range) As Boolean
If ref.Value <> "" Then
    validar = True
Else
    validar = False
End If
End Function



Si ahora intentamos agregar esta función a una Validación de datos obtendríamos el error:

UDF y Validación de datos.



Prefiero optar por la opción fiable, por tanto, nn nuestra hoja añadiremos en la celda auxiliar D2 la función personalizada:
=Validar(B2)
Y seleccionando la celda a validar C2 configuraremos la Validación de datos personalizada con la fórmula:
=D2=VERDADERO

UDF y Validación de datos.



Podremos probar ahora y comprobar, como apoyándonos en la celda auxiliar que contiene la UDF, la restricción de la Validación de datos se verifica...

Como recomendación general diría que evitemos siempre que sea posible (y casi siempre lo es) las UDF si tenemos que emplear la herramienta de Validación de datos, empleando las funciones lógicas habituales (Y, O, NO, etc).

No hay comentarios:

Publicar un comentario en la entrada