Excel no sólo
es famoso por poseer un gran número de funciones integradas que pueden servir
literalmente para resolver muchos problemas con los datos; por el contrario, también
lo es porque nos permite escribir nuestras propias funciones mediante el
entorno Visual Basic para Aplicaciones o VBA.
Cuando un
programador de esta aplicación decide escribir funciones que pueden usarse
desde la interfaz de usuario estamos hablando de UDFs o Funciones Definidas por
el Usuario.
Las UDFs al
igual que las funciones integradas pueden procesar los datos y devolver un
resultado; sin embargo, una diferencia con las UDFs respecto de las funciones
integradas, es que las primeras no muestran por default una ayuda al usuario
cuando este quiere utilizarlas mediante el cuadro de dialogo Insertar función.
Por ejemplo,
suponga que implementamos una función (UDF) para el tratamiento de cadenas alfanuméricas
con VBA en Excel; Una función con dos argumentos que extrae de cadenas de texto
que posiblemente tengan números, únicamente sus números y los separa con un carácter
separador de manera opcional.
UDF para
extraer los números de una cadena alfanumérica - Ver resolución
Public Function
NumerosSeparador(Cadena As String, Optional Separador As String = "")
As Variant
Dim
LargoCadena As Long
Dim i As
Long
Dim
Caracter As Variant
Dim
Resultado As Variant
Dim Marca
As Boolean
If Cadena =
"" Then
NumerosSeparador
= VBA.CVErr(xlErrNull)
Exit
Function
End If
LargoCadena
= VBA.Len(Cadena)
Marca =
False
For i = 1
To LargoCadena
Caracter =
VBA.Mid(Cadena, i, 1)
If
VBA.IsNumeric(Caracter) And Separador = "" Then
Resultado =
Resultado & Caracter
Else
If
VBA.IsNumeric(Caracter) Then
Resultado =
Resultado & Caracter
Marca =
True
ElseIf
Marca Then
Resultado =
Resultado & Separador
Marca =
False
End If
End If
Next i
If
VBA.IsEmpty(Resultado) Then
NumerosSeparador
= VBA.CVErr(xlErrNA)
ElseIf
Separador = "" Or Marca Then
NumerosSeparador
= Resultado
Else
NumerosSeparador
= VBA.Mid(Resultado, 1, VBA.Len(Resultado) - VBA.Len(Separador))
End If
End
Function
Si únicamente
se implementara esta función dentro de un módulo en VBA del Excel, con total
certeza no obtendremos la ayuda correspondiente en los cuadros de dialogo
Insertar función y Argumentos de función que las funciones tradicionales si
muestran (clic para ampliar).
Una manera efectiva
para solucionar este inconveniente es crear un Procedimiento Sub que cargue
mediante el método MacroOptions del objeto Application, todos los componentes descriptivos
de la UDF.
Procedimiento
Sub para cargar el componente descriptivo de la UDF
Sub
EjecutarAlAbrir()
Dim
NombreDeLaFuncion As String
Dim
DescripcionDeLaFuncion As String
Dim
CategoriaDeLaFuncion As Variant
Dim
DescripcionDeLosArgumentos(1 To 2) As String
NombreDeLaFuncion
= "NumerosSeparador"
DescripcionDeLaFuncion
= "Devuelve los números de una cadena " & _
"alfanumérica
con un carácter separador opcional."
CategoriaDeLaFuncion
= "Tratamiento de cadenas"
DescripcionDeLosArgumentos(1)
= "Referencia de celda que " & _
"contiene
una cadena alfanumérica."
DescripcionDeLosArgumentos(2)
= "Opcional. Carácter separador " & _
"por
el cual se dividirá el número resultante."
Application.MacroOptions
Macro:=NombreDeLaFuncion, _
Description:=DescripcionDeLaFuncion,
Category:=CategoriaDeLaFuncion, _
ArgumentDescriptions:=DescripcionDeLosArgumentos
End Sub
Cada componente
descriptivo de la UDF puede cargarse en una variable independiente dentro del método
MacroOptions; Incluso puede anclarse la función dentro de una categoría personalizada
o una categoría ya existente. Si se trata de una categoría personalizada sólo
deberá especificarse el nombre de la nueva categoría; en cambio si se trata de
una categoría existente deberá usarse un valor numérico de la siguiente tabla (clic para ampliar).
Ejecutar el
Procedimiento Sub hará que los componentes descriptivos se carguen en los
cuadros de dialogo correspondientes al momento de usar a la función en la
interfaz de usuario, sin embargo, si cierra y abre el libro de Excel nuevamente
estos componentes se perderán. La solución más recomendable es ejecutar el
Procedimiento Sub que carga a los componentes descriptivos cada que se abra el
libro de Excel; esto puedes lograrlo si llamas al procedimiento desde el evento
Open del objeto ThisWorkbook.
Ejecutar el
Procedimiento Sub al abrir el libro de Excel
Private Sub
Workbook_Open()
Call
Apertura.EjecutarAlAbrir
End Sub
Así, todo
quedará más entendible para un usuario final cuando quiera usar las UDFs que
usted haya programado para hacerle la vida más fácil.
• El método
que implementa la carga de los componentes descriptivos de una función (UDF) se
implementó por Sergio Alejandro Campos – EXCELeINFO.
ResponderBorrarThanks very nice blog! itunes login account
Un cordial saludo.
ResponderBorrarFavor indicar cual es el procedimiento cuando se tienen varias funciones en el mismo libro. Gracias
But inside the end, you will feel ridiculously very happy to own your dream house. canada mortgage calculator We recommend using different rates on mortgages rising, monthly obligations, and credit scenarios, as these have a large effect on simply how much you can afford. mortgage calculator canada
ResponderBorrarLos archivos ya no se pueden descargar :(
ResponderBorrar