Función personalizada (UDF) volátil con Visual Basic para Aplicaciones

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

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

Para entenderlo mejor veamos un sencillo ejemplo

1. Abra Excel y luego ingrese al Editor de Visual Basic para Aplicaciones (Alt + F11).

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

En el 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.

Public Function NombreCompleto(CeldaInicio As Range) As String
   Dim i As Integer
   Dim Cadena As String
   If CeldaInicio.Count > 1 Then
      NombreCompleto = "Debe seleccionar una sola celda."
   Else
      For i = 0 To 3
         If CeldaInicio.Offset(0, i).Value <> "" Then
            Cadena = Cadena & CeldaInicio.Offset(0, i).Value & " "
         End If
      Next i
      NombreCompleto = Cadena
   End If
End Function

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


Nota: aprecie que esta función personalizada opera casi del mismo modo que la función CONCATENAR de Excel. Sin embargo, la función NombreCompleto sólo necesita un argumento para operar, el cual como puedes apreciar es la celda que contiene el primer nombre.

Esta función toma el contenido de las tres celdas siguientes ubicadas justo a la derecha de la celda que se pasa como argumento de la función, para sumar su contenido y retornar una cadena completa separada por espacios respectivamente.

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

Para comprender el concepto cambie el primer nombre ubicado en la celda A2 por el nombre: Oscar y presione Intro.


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

4. Ahora cambie el primer apellido ubicado en la celda C2 por el apellido: Leal y presione Intro.


Nota: aprecie como la función NombreCompleto no se recalcula.

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

5. Actualice el código escrito dentro de la función personalizada para convertirla en una función volátil y guarde los cambios. El nuevo procedimiento quedará así:

Public Function NombreCompleto(CeldaInicio As Range) As String
   Dim i As Integer
   Dim Cadena As String
   Application.Volatile (True)
   If CeldaInicio.Count > 1 Then
      NombreCompleto = "Debe seleccionar una sola celda."
   Else
      For i = 0 To 3
         If CeldaInicio.Offset(0, i).Value <> "" Then
            Cadena = Cadena & CeldaInicio.Offset(0, i).Value & " "
         End If
      Next i
      NombreCompleto = Cadena
   End If
End Function

6. Cierre y abra el libro de Excel donde creó la UDF y cambie el segundo apellido ubicado en la celda D2 por el apellido: 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 clic dentro de dicha celda y posteriormente presionar Intro; La modificación del código sólo tiene efecto en las funciones que se escriben en nuevas celdas.

¡Adelante! Ya puede cambiar el contenido de cualquier celda; sean estas las que estén involucradas directamente dentro de los argumentos de la función o fuera de ellos; la función se actualizará con los nuevos datos.


No hay comentarios.:

Publicar un comentario