martes, 17 de febrero de 2015

Funciones personalizadas (UDF) volátiles con VBA

Sin duda, todas las Funciones Definidas por el Usuario (UDF) escritas mediante el lenguaje VBA son por defecto No Volátiles.
Esto quiere decir que la función solo se recalcula cuando alguno de sus argumentos cambia.

Por tanto, una función volátil podría definirse como aquella función que se calcula cada vez que se produce una modificación en cualquier celda de la hoja de un libro de Excel donde este escrita.

Para entenderlo mejor veamos un sencillo ejemplo.


1. Abra el Excel y luego ingrese al Editor de Visual Basic.

2. Haga Click en el menú Insertar para crear un Módulo.

En ese módulo recién insertado, creará una función pública llamada NombreCompleto, la cual retornará en una sola celda el nombre de una persona que inicialmente se encuentra en cuatro celdas independientes.

3. Ingrese las siguientes líneas de código dentro dicha función.















4. Ahora puede utilizar esta función dentro de una celda de cualquier hoja de Excel como si se trátese de cualquier otra función de la interfaz de usuario.











Note, como esta función personalizada opera casi del mismo modo que la función CONCATENAR de Excel.
Sin embargo, la presente función (NombreCompleto) solo necesita un argumento para operar, el cual como se aprecia es la celda que contiene el inicio del nombre.

Por tanto, esta función toma el contenido de las tres celdas siguientes ubicadas justo a la derecha de la celda pasada como argumento de la función, para sumar su contenido y retornar una cadena completa.

5. Esto es lo que se conoce como una función personalizada No Volátil. Es decir, la función solo se recalcula si alguno de su(s) argumento(s) cambia o se modifica.

Para observar el concepto cambie el primer nombre (Celda A2) por la cadena “Oscar” y presione Intro.











Fíjese como la función se recalcula al modificar o cambiar su único argumento.

6. Ahora cambie el primer apellido (Celda C2) por la cadena “Leal” y presione Intro.











Note como la función (NombreCompleto) no se recalcula...

Esto ocurre ya que todas las funciones definidas por el usuario son No Volátiles por defecto.
Es decir, si las celdas que se modifican o cambian no hacen parte de los argumentos de la función, estas últimas nunca se recalcularán.

7. Actualice el código escrito dentro de la función personalizada llamada (NombreCompleto) para convertirla en una función (UDF) Volátil.
















Guarde los cambios y cierre el libro de Excel.

8. Abra nuevamente el libro de Excel y cambie por ejemplo el segundo apellido (Celda D2) por la cadena “Novoa” y observe el resultado.











Nota: Para evaluar la función (NombreCompleto) como volátil dentro de la celda, usted debe refrescar la función dando Click dentro de la celda y luego presione Intro.

La modificación del código solo surge efecto en las funciones que se escriben con posterioridad a la modificación del mismo.

¡Adelante!

Ya puede cambiar el contenido de cualquier celda, ya sea las que estén involucradas indirectamente dentro de la función o fuera de ella y la función se actualizará con los nuevos datos.

Para obtener los archivos de Excel por favor haga Click en el enlace y sáltese la publicidad.

Función personalizada (UDF) No Volátil con VBA.xlsm, Click Aquí.

Función personalizada (UDF) Volátil con VBA.xlsm, Click Aquí.


Gracias por su atención.