Procedimientos "Función" y "Sub" en VBA

Funciones VBA integradas

Antes de comenzar a crear sus propias funciones de VBA, es bueno saber que Excel VBA tiene una rica colección de funciones integradas predefinidas que puede usar mientras escribe su código.

Se puede ver una lista de estas funciones en el editor de VBA:

  • Abra un libro de Excel e inicie el editor de VBA (haga clic para hacer esto Alt + F11) y luego presione F2.
  • Seleccione una biblioteca de la lista desplegable en la parte superior izquierda de la pantalla VBA.
  • Aparecerá una lista de clases y funciones de VBA integradas. Haga clic en el nombre de la función para mostrar su breve descripción en la parte inferior de la ventana. prensado F1 abrirá la página de ayuda en línea para esa función.

Además, se puede encontrar una lista completa de funciones VBA integradas con ejemplos en el Centro de desarrolladores de Visual Basic.

Procedimientos personalizados “Función” y “Sub” en VBA

En Excel Visual Basic, un conjunto de comandos que realizan una tarea específica se coloca en un procedimiento. Función (Función) o Sub (Subrutina). La principal diferencia entre los procedimientos Función и Sub es que el procedimiento Función devuelve resultado, procedimiento Sub - no.

Por lo tanto, si necesita realizar acciones y obtener algún resultado (por ejemplo, sumar varios números), generalmente se usa el procedimiento Función, y para simplemente realizar algunas acciones (por ejemplo, cambiar el formato de un grupo de celdas), debe seleccionar el procedimiento Sub.

Argumentos

Se pueden pasar varios datos a los procedimientos de VBA usando argumentos. La lista de argumentos se especifica al declarar un procedimiento. Por ejemplo, el procedimiento Sub en VBA agrega el entero dado (Integer) a cada celda en el rango seleccionado. Puede pasar este número al procedimiento usando un argumento, como este:

Sub AddToCells(i como entero) ... End Sub

Tenga en cuenta que tener argumentos para los procedimientos Función и Sub en VBA es opcional. Algunos procedimientos no requieren argumentos.

Argumentos opcionales

Los procedimientos de VBA pueden tener argumentos opcionales. Estos son argumentos que el usuario puede especificar si lo desea, y si se omiten, el procedimiento utiliza los valores predeterminados para ellos.

Volviendo al ejemplo anterior, para hacer que un argumento entero a una función sea opcional, se declararía así:

Sub AddToCells (i opcional como entero = 0)

En este caso, el argumento entero i el valor predeterminado será 0.

Puede haber varios argumentos opcionales en un procedimiento, todos los cuales se enumeran al final de la lista de argumentos.

Pasar argumentos por valor y por referencia

Los argumentos en VBA se pueden pasar a un procedimiento de dos maneras:

  • PorVal – pasar un argumento por valor. Esto significa que solo el valor (es decir, una copia del argumento) se pasa al procedimiento y, por lo tanto, cualquier cambio realizado en el argumento dentro del procedimiento se perderá cuando finalice el procedimiento.
  • Byref – pasar un argumento por referencia. Es decir, la dirección real de la ubicación del argumento en la memoria se pasa al procedimiento. Cualquier cambio realizado en un argumento dentro del procedimiento se guardará cuando finalice el procedimiento.

Usando palabras clave PorVal or Byref en la declaración del procedimiento, puede especificar cómo se pasa el argumento al procedimiento. Esto se muestra en los siguientes ejemplos:

Sub AddToCells(ByVal i As Integer) ... End Sub
En este caso, el argumento entero i pasado por valor. Después de salir del procedimiento Sub todo hecho con i los cambios se perderán.
Sub AddToCells(ByRef i As Integer) ... End Sub
En este caso, el argumento entero i pasado por referencia. Después de salir del procedimiento Sub todo hecho con i los cambios se almacenarán en la variable que se pasó al procedimiento Sub.

Recuerde que los argumentos en VBA se pasan por referencia de forma predeterminada. En otras palabras, si no se utilizan palabras clave PorVal or Byref, entonces el argumento se pasará por referencia.

Antes de continuar con los trámites Función и Sub con más detalle, será útil repasar las características y diferencias entre estos dos tipos de procedimientos. Las siguientes son breves discusiones de los procedimientos de VBA Función и Sub y se muestran ejemplos sencillos.

Procedimiento VBA «Función»

El editor de VBA reconoce el procedimiento. Funcióncuando encuentra un grupo de comandos encerrados entre las siguientes declaraciones de apertura y cierre:

Función ... Fin Función

Como se mencionó anteriormente, el procedimiento Función en VBA (a diferencia de Sub) devuelve un valor. Las siguientes reglas se aplican a los valores devueltos:

  • El tipo de datos del valor devuelto debe declararse en el encabezado del procedimiento Función.
  • La variable que contiene el valor devuelto debe tener el mismo nombre que el procedimiento Función. Esta variable no necesita ser declarada por separado, ya que siempre existe como parte integral del procedimiento. Función.

Esto se ilustra bien en el siguiente ejemplo.

Ejemplo de función de VBA: realizar una operación matemática en 3 números

El siguiente es un ejemplo de un código de procedimiento VBA Función, que toma tres argumentos de tipo Doble (números de punto flotante de doble precisión). Como resultado, el procedimiento devuelve otro número de tipo Dobleigual a la suma de los dos primeros argumentos menos el tercer argumento:

Función SumMinus(dNum1 As Double, dNum2 As Double, dNum3 As Double) As Double SumMinus = dNum1 + dNum2 - dNum3 End Function

Este procedimiento VBA muy simple Función ilustra cómo se pasan los datos a un procedimiento a través de argumentos. Puede ver que el tipo de datos devuelto por el procedimiento se define como Doble (las palabras dicen como doble después de la lista de argumentos). Este ejemplo también muestra cómo el resultado del procedimiento Función almacenado en una variable con el mismo nombre que el nombre del procedimiento.

Llamar al procedimiento de VBA "Función"

Si el procedimiento simple anterior Función insertado en un módulo en el editor de Visual Basic, puede llamarse desde otros procedimientos de VBA o usarse en una hoja de cálculo en un libro de Excel.

Llamar al procedimiento VBA "Función" desde otro procedimiento

Procedimiento Función se puede llamar desde otro procedimiento de VBA simplemente asignando ese procedimiento a una variable. El siguiente ejemplo muestra una llamada a un procedimiento Suminus, que se definió anteriormente.

Sub main() Dim total as Double total = SumMinus(5, 4, 3) End Sub

Llame al procedimiento VBA "Función" desde una hoja de trabajo

procedimiento VBA Función se puede llamar desde una hoja de cálculo de Excel de la misma manera que cualquier otra función de Excel integrada. Por lo tanto, el procedimiento creado en el ejemplo anterior FunciónSuminus se puede llamar ingresando la siguiente expresión en una celda de la hoja de trabajo:

=SumMinus(10, 5, 2)

Procedimiento VBA «Sub»

El editor de VBA entiende que hay un procedimiento delante de él. Subcuando encuentra un grupo de comandos encerrados entre las siguientes declaraciones de apertura y cierre:

Sub... Fin sub

Procedimiento VBA "Sub": Ejemplo 1. Alineación central y cambio de tamaño de fuente en un rango seleccionado de celdas

Considere un ejemplo de un procedimiento VBA simple Sub, cuya tarea es cambiar el formato del rango de celdas seleccionado. Las celdas están centradas (tanto vertical como horizontalmente) y el tamaño de fuente se cambia al especificado por el usuario:

Sub Format_Centered_And_Sized(Opcional iFontSize As Integer = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub

Este procedimiento Sub realiza acciones pero no devuelve un resultado.

Este ejemplo también usa un argumento opcional Tamaño de fuente. Si el argumento Tamaño de fuente no pasó a trámite Sub, entonces su valor predeterminado es 10. Sin embargo, si el argumento Tamaño de fuente pasado a procedimiento Sub, el rango de celdas seleccionado se establecerá en el tamaño de fuente especificado por el usuario.

Subprocedimiento de VBA: ejemplo 2: alineación central y fuente en negrita en el rango de celdas seleccionado

El siguiente procedimiento es similar al que acabamos de analizar, pero esta vez, en lugar de cambiar el tamaño, aplica un estilo de fuente en negrita al rango de celdas seleccionado. Este es un procedimiento de ejemplo. Sub, que no acepta argumentos:

Sub Format_Centered_And_Bold() Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Bold = True End Sub

Llamar al procedimiento "Sub" en Excel VBA

Llame al procedimiento de VBA "Sub" desde otro procedimiento

Para llamar a un procedimiento de VBA Sub de otro procedimiento de VBA, debe escribir la palabra clave Llamar, nombre del procedimiento Sub y además entre paréntesis están los argumentos del procedimiento. Esto se muestra en el siguiente ejemplo:

Sub main () Llamada Format_Centered_And_Sized (20) End Sub

Si el procedimiento Formato_Centrado_Y_Tamaño tiene más de un argumento, deben estar separados por comas. Como esto:

Sub main () Llamada Format_Centered_And_Sized (arg1, arg2, ...) End Sub

Llame al procedimiento de VBA "Sub" desde la hoja de trabajo

Procedimiento Sub no se puede ingresar directamente en una celda de hoja de Excel, como se puede hacer con un procedimiento Funciónporque el procedimiento Sub no devuelve un valor. Sin embargo, los procedimientos Sub, que no tienen argumentos y se declaran como Público (como se muestra a continuación) estará disponible para los usuarios de la hoja de trabajo. Por lo tanto, si los procedimientos simples discutidos anteriormente Sub insertado en un módulo en el Editor de Visual Basic, el procedimiento Formato_centrado_y_negrita estará disponible para su uso en una hoja de cálculo de Excel, y el procedimiento Formato_Centrado_Y_Tamaño – no estará disponible porque tiene argumentos.

Aquí hay una manera fácil de ejecutar (o ejecutar) un procedimiento Sub, accesible desde la hoja de trabajo:

  • Prensa Alt + F8 (presione la tecla otro y mientras lo mantiene presionado, presione la tecla F8).
  • En la lista de macros que aparece, seleccione la que desea ejecutar.
  • Prensa Ejecutar (correr)

Para realizar un trámite Sub rápida y fácilmente, puede asignarle un atajo de teclado. Para esto:

  • Prensa Alt + F8.
  • En la lista de macros que aparece, selecciona la que quieras asignarle un atajo de teclado.
  • Prensa parámetros (Opciones) y en el cuadro de diálogo que aparece, ingrese el atajo de teclado.
  • Prensa OK y cerrar el cuadro de diálogo Macro (Macro).

Atención: Cuando asigne un atajo de teclado a una macro, asegúrese de que no se use como estándar en Excel (por ejemplo, Ctrl + C). Si selecciona un método abreviado de teclado ya existente, se reasignará a la macro y, como resultado, el usuario puede iniciar la macro por accidente.

Alcance del procedimiento de VBA

La Parte 2 de este tutorial analizó el alcance de las variables y las constantes y el papel de las palabras clave. Público и Privado. Estas palabras clave también se pueden utilizar con los procedimientos de VBA:

Public Sub AddToCells(i As Integer) ... End Sub
Si la declaración del procedimiento está precedida por la palabra clave Público, entonces el procedimiento estará disponible para todos los módulos en ese proyecto de VBA.
Private Sub AddToCells (i como entero) ... End Sub
Si la declaración del procedimiento está precedida por la palabra clave Privado, entonces este procedimiento estará disponible solo para el módulo actual. No se puede llamar desde cualquier otro módulo o desde un libro de Excel.

Recuerda que si antes de declarar un procedimiento VBA Función or Sub no se inserta la palabra clave, se establece la propiedad predeterminada para el procedimiento Público (es decir, estará disponible en todas partes en este proyecto de VBA). Esto contrasta con las declaraciones de variables, que por defecto son Privado.

Salida anticipada de los procedimientos de VBA "Función" y "Sub"

Si necesita terminar la ejecución de un procedimiento de VBA Función or Sub, sin esperar su final natural, entonces para esto hay operadores Función de salida и Exit Sub. El uso de estos operadores se muestra a continuación usando un procedimiento simple como ejemplo. FunciónObjeto que espera recibir un argumento positivo para realizar más operaciones. Si se pasa un valor no positivo al procedimiento, no se pueden realizar más operaciones, por lo que se debe mostrar un mensaje de error al usuario y el procedimiento debe salir de inmediato:

Función VAT_Amount(sVAT_Rate As Single) Como Single VAT_Amount = 0 If sVAT_Rate <= 0 Then MsgBox "Se esperaba un valor positivo de sVAT_Rate pero se recibió" & sVAT_Rate Exit Function End If ... End Function

Tenga en cuenta que antes de completar el procedimiento Función - Importe del IVA, se inserta una función VBA integrada en el código MsgBox, que muestra una ventana emergente de advertencia para el usuario.

Deje un comentario