Función VBA: llamada, valor de retorno y parámetros

Este tutorial le enseñará a crear y usar funciones con y sin parámetros en VBA

VBA contiene una gran cantidad de funciones integradas para que las use, pero también puede escribir las suyas propias. Cuando escribe código en VBA, puede escribirlo en un subprocedimiento o en un procedimiento de función. Un procedimiento de función puede devolver un valor a su código. Esto es extremadamente útil si desea que VBA realice una tarea para devolver un resultado. Las funciones de VBA también se pueden llamar desde dentro de Excel, al igual que las funciones integradas de Excel de Excel.

Crear una función sin argumentos

Para crear una función, debe definir la función dándole un nombre. La función se puede definir como un tipo de datos que indica el tipo de datos que desea que devuelva la función.

Es posible que desee crear una función que devuelva un valor estático cada vez que se llama, un poco como una constante.

123 Función GetValue () como enteroGetValue = 50Función final

Si ejecutara la función, la función siempre devolvería el valor de 50.

También puede crear funciones que se refieran a objetos en VBA, pero debe usar la palabra clave Establecer para devolver el valor de la función.

123 Función GetRange () como rangoEstablecer GetRange = Range ("A1: G4")Función final

Si tuviera que usar la función anterior en su código VBA, la función siempre devolvería el rango de celdas A1 a G4 en cualquier hoja en la que esté trabajando.

Llamar a una función desde un subprocedimiento

Una vez que crea una función, puede llamarla desde cualquier otro lugar de su código utilizando un Sub Procedimiento para llamar a la función.

Siempre se devolvería el valor de 50.

También puede llamar a la función GetRange desde un Sub Procedimiento.

En el ejemplo anterior, el Subprocedimiento llama a la función GetRange para poner en negrita las celdas del objeto de rango.

Creando funciones

Argumento único

También puede asignar un parámetro o parámetros a su función. Estos parámetros pueden denominarse Argumentos.

123 Función ConvertKilosToPounds (dblKilo as Double) como DoubleConvertKiloToPounds = dblKilo * 2.2Función final

A continuación, podemos llamar a la función anterior desde un Subprocedimiento para calcular cuántas libras tiene una cantidad específica de kilos.

Una función puede ser llamada desde múltiples procedimientos dentro de su código VBA si es necesario. Esto es muy útil porque evita que tenga que escribir el mismo código una y otra vez. También le permite dividir procedimientos largos en pequeñas funciones manejables.

En el ejemplo anterior, tenemos 2 procedimientos: cada uno de ellos usa la Función para calcular el valor en libras de los kilos que se les pasan en el dblKilo Argumento de la función.

Múltiples argumentos

Puede crear una función con varios argumentos y pasar los valores a la función mediante un subprocedimiento.

123 Función CalculateDayDiff (Date1 como Date, Date2 como Date) como DoubleCalculateDayDiff = Date2-Date1Función final

Luego podemos llamar a la función para calcular la cantidad de días entre 2 fechas.

Argumentos opcionales

También puede pasar argumentos opcionales a una función. En otras palabras, a veces es posible que necesite el argumento y, a veces, es posible que no, dependiendo del código con el que esté utilizando la función.

123456 Función CalculateDayDiff (Date1 como Date, Date2 opcional como Date) como Double'verifique la segunda fecha y si no está allí, haga que Date2 sea igual a la fecha de hoy.Si Date2 = 0 entonces Date2 = Date'calcular la diferenciaCalculateDayDiff = Fecha2-Fecha1Función final

Valor de argumento predeterminado

También puede establecer el valor predeterminado de los argumentos opcionales cuando está creando la función, de modo que si el usuario omite el argumento, se utilizará en su lugar el valor que ha establecido como predeterminado.

1234 Función CalculateDayDiff (Date1 como Date, Date2 opcional como Date = "06/02/2020") como Double'calcular la diferenciaCalculateDayDiff = Date2-Date1Función final

ByVal y ByRef

Cuando pasa valores a una función, puede usar el ByVal o ByRef palabras clave. Si omite alguno de estos, el ByRef se utiliza por defecto.

ByVal significa que está pasando una copia de la variable a la función, mientras que ByRef significa que se refiere al valor original de la variable. Cuando pasa una copia de la variable (ByVal), el valor original de la variable es NO cambiado, pero cuando hace referencia a la variable, la función cambia el valor original de la variable.

1234 Función GetValue (ByRef intA As Integer) As IntegerintA = intA * 4GetValue = intAFunción final

En la función anterior, el ByRef podría omitirse y la función funcionaría de la misma manera.

1234 Función GetValue (intA As Integer) As IntegerintA = intA * 4GetValue = intAFunción final

Para llamar a esta función, podemos ejecutar un subprocedimiento.

123456789 Sub TestValues ​​()Dim intVal como entero'rellenar la variable con el valor 10intVal = 10'ejecuta la función GetValue y muestra el valor en la ventana inmediataDebug.Print GetValue (intVal)'muestra el valor de la variable intVal en la ventana inmediataDebug.Print intValEnd Sub

Tenga en cuenta que las ventanas de depuración muestran el valor 40 en ambas ocasiones. Cuando pasa la variable IntVal a la función, el valor de 10 se pasa a la función y se multiplica por 4. El uso de la palabra clave ByRef (u omitiéndola por completo) ENMENDARÁ el valor de la variable IntVal. Esto se muestra cuando muestra primero el resultado de la función en la ventana inmediata (40), y luego el valor de la variable IntVal en la ventana de depuración (también 40).

Si NO queremos cambiar el valor de la variable original, tenemos que usar ByVal en la función.

1234 Función GetValue (ByVal intA As Integer) As IntegerintA = intA * 4GetValue = intAFunción final

Ahora bien, si llamamos a la función desde un subprocedimiento, el valor de la variable IntVal permanecerá en 10.

Función de salida

Si crea una función que prueba una determinada condición, y una vez que se determina que la condición es verdadera, desea devolver el valor de la función, es posible que deba agregar una declaración de función de salida en su función para salir de la función antes ha ejecutado todo el código en esa función.

12345678910111213 Función FindNumber (strSearch como cadena) como enteroDim i como entero'recorre cada letra de la cadenaPara i = 1 a Len (strSearch)'si la letra es numérica, devuelve el valor a la funciónSi IsNumeric (Mid (strSearch, i, 1)) EntoncesFindNumber = Mid (strSearch, i, 1)'luego salga de la funciónFunción de salidaTerminara sipróximoFindNumber = 0Función final

La función anterior recorrerá la cadena que se proporciona hasta que encuentre un número y luego devolverá ese número de la cadena. Solo encontrará el primer número de la cadena, ya que luego lo hará. Salida la función.

La función anterior puede ser llamada por una rutina secundaria como la que se muestra a continuación.

1234567 Sub CheckForNumber ()Dim NumIs como entero'pasar una cadena de texto a la función de número de búsquedaNumIs = FindNumber ("Piso superior, 8 Oak Lane, Texas")'muestra el resultado en la ventana inmediataDebug.Print NumIsEnd Sub

Usar una función desde dentro de una hoja de Excel

Además de llamar a una función desde su código VBA mediante un subprocedimiento, también puede llamar a la función desde su hoja de Excel. Las funciones que ha creado deben aparecer de forma predeterminada en su lista de funciones en la sección Definida por el usuario de la lista de funciones.

Clickea en el fx para mostrar el cuadro de diálogo Insertar función.

Seleccione Usuario definido de la lista de categorías

Seleccione la función que necesita de las disponibles Funciones definidas por el usuario (UDF).

Alternativamente, cuando comience a escribir su función en Excel, la función debería aparecer en la lista desplegable de funciones.

Si no desea que la función esté disponible dentro de una hoja de Excel, debe poner la palabra Privada delante de la palabra Función cuando cree la función en su código VBA.

123 Función privada CalculateDayDiff (Date1 como Date, Date2 como Date) como DoubleCalculateDayDiff = Fecha2-Fecha1Función final

Ahora no aparecerá en la lista desplegable que muestra las funciones de Excel disponibles.

Curiosamente, sin embargo, aún puede usar la función, ¡simplemente no aparecerá en la lista cuando la busque!

Si ha declarado el segundo argumento como Opcional, puede omitirlo dentro de la hoja de Excel, así como dentro del código VBA.

También puede usar la función a que ha creado sin argumentos en su hoja de Excel.

Va a ayudar al desarrollo del sitio, compartir la página con sus amigos

wave wave wave wave wave