Subrutina de Excel VBA: cómo llamar a Sub en VBA con ejemplo

⚡ Resumen inteligente

Las subrutinas de Excel VBA agrupan bloques de código que realizan una tarea sin devolver ningún valor. Esta página abarca las reglas de nomenclatura, la sintaxis de las subrutinas, cómo llamar a una subrutina desde un botón de comando y en qué se diferencia una subrutina de una función.

  • 📦 Definición: Una subrutina realiza una tarea específica y no devuelve ningún valor al código que la llamó.
  • ♻️ Reutilización: Una subrutina puede ser llamada muchas veces desde cualquier parte del proyecto.
  • 🔤 Reglas de nomenclatura: Un nombre no contiene espacios, comienza con una letra o un guion bajo, y nunca es una palabra clave de VBA.
  • 🧾 Sintaxis: Private Sub name(ByVal arg As String) abre el bloque y End Sub lo cierra.
  • 🖱️ Vocación: El evento Click de un botón de comando llama a la subrutina y le pasa sus argumentos.
  • ▶ ️ Ejecutando directamente: La tecla F5, el cuadro de diálogo Macros o la palabra clave Call ejecutan una subrutina sin necesidad de pulsar un botón.
  • 🔁 Subfunción o función: Elija una función cuando deba devolver un valor; de lo contrario, elija una subrutina.

Subrutina Excel VBA

¿Qué es una subrutina en VBA?

A Subrutina en VBA es un fragmento de código que realiza una tarea específica descrita en el código pero no devuelve un resultado ni un valor. Las subrutinas se utilizan para dividir grandes fragmentos de código en pequeñas partes manejables. Las subrutinas se pueden recuperar varias veces desde cualquier parte del programa.

Supongamos que ha creado una interfaz de usuario con cuadros de texto para aceptar datos de entrada del usuario. Puede crear una subrutina que borre el contenido de los cuadros de texto. Una subrutina de llamada de VBA es adecuada en este tipo de escenario porque no desea devolver ningún resultado.

¿Por qué utilizar subrutinas?

  • Divida el código en código pequeño y manejable:Un programa informático promedio tiene miles y miles de líneas de código fuente, lo que genera complejidad. Las subrutinas ayudan a resolver este problema al dividir el programa en pequeños fragmentos de código manejables.
  • Code reutilizaciónDigamos que tienes un programa que necesita acceder a la base de datos; casi todas las ventanas del programa necesitarán interactuar con la base de datos. En lugar de escribir código independiente para estas ventanas, puedes crear una función que se encargue de todas las interacciones con la base de datos. Luego, puedes llamarla desde cualquier ventana que desees.
  • Las subrutinas y funciones se autodocumentan.. Digamos que tienes una función calcularPréstamoInterés y otra que dice conectarABase de Datos. Con solo mirar el nombre de la subrutina/función, el programador podrá saber qué hace el programa.

Antes de escribirlo, el compilador espera que el nombre siga un breve conjunto de reglas.

Reglas para nombrar subrutinas y funciones

Para utilizar subrutinas y funciones, hay un conjunto de reglas que hay que seguir.

  • El nombre de una subrutina o función de llamada de VBA no puede contener espacios
  • Un nombre de función o subllamada de Excel VBA debe comenzar con una letra o un guión bajo. No puede comenzar con un número o un carácter especial.
  • El nombre de una subrutina o función no puede ser una palabra clave. Una palabra clave es una palabra que tiene un significado especial en VBA. Palabras como Privado, Sub, Función y Fin, etc. son ejemplos de palabras clave. El compilador los usa para tareas específicas.

Una vez elegido un nombre válido, la declaración en sí sigue un patrón fijo.

Sintaxis de subrutina VBA

Deberá habilitar la pestaña Desarrollador en Excel para seguir este ejemplo. Si no sabe cómo habilitar la pestaña Desarrollador, lea el tutorial en Controles VBA en Excel

AQUÍ en la sintaxis,

Private Sub mySubRoutine(ByVal arg1 As String, ByVal arg2 As String)
    'do something
End Sub

Explicación de la sintaxis

Code Acción:
  • "Subprivada mySubRoutine(...)"
  • Aquí la palabra clave "Sub" se utiliza para declarar una subrutina llamada "mySubRoutine" e iniciar el cuerpo de la subrutina.
  • La palabra clave Private se utiliza para especificar el alcance de la subrutina.
  • “ByVal arg1 como cadena, ByVal arg2 como cadena”:
  • Declara dos parámetros de tipo de datos de cadena llamados arg1 y arg2
  • “Fin Sub”
  • “End Sub” se utiliza para finalizar el cuerpo de la subrutina.

La siguiente subrutina acepta el nombre y apellido y los muestra en un cuadro de mensaje.

Ahora vamos a programar y ejecutar este Sub Procedimiento. Veamos esto.

Cómo llamar a Sub en VBA

A continuación se muestra un proceso paso a paso sobre cómo llamar a Sub en VBA:

  1. Diseñe la interfaz de usuario y establezca las propiedades de los controles de usuario.
  2. Agregar la subrutina
  3. Escriba el código de evento de clic para el botón de comando que llama a la subrutina
  4. Prueba la aplicación

Paso 1) Interfaz de usuario

Diseñe la interfaz de usuario como se muestra en la imagen a continuación.

Cómo llamar a Sub en VBA

Establezca las siguientes propiedades. Las propiedades que estamos configurando:

S / N Control Propiedad Valor
1 Botón de comando1 Nombre btnDisplayNombre completo
2 Leyenda Subrutina de nombre completo

Su interfaz ahora debería tener el siguiente aspecto.

Cómo llamar a Sub en VBA

Paso 2) Agregar subrutina

  1. Presione Alt + F11 para abrir la ventana de código
  2. Agregue la siguiente subrutina
Private Sub displayFullName(ByVal firstName As String, ByVal lastName As String)
    MsgBox firstName & " " & lastName
End Sub

AQUÍ en el código,

Code Acciones
  • “Subvisualización privadaNombre completo(…)”
  • Declara una subrutina privada displayFullName que acepta dos parámetros de cadena.
  • “ByVal nombre como cadena, ByVal apellido como cadena”
  • Declara dos variables de parámetro firstName y lastName
  • msgBox nombre Apellido"
  • llama al mensajeBox Función incorporada para mostrar un cuadro de mensaje. Luego pasa las variables 'firstName' y 'lastName' como parámetros.
  • El signo "&" se utiliza para concatenar las dos variables y agregar un espacio vacío entre ellas.

Paso 3) Llamando a la subrutina

Llamar a la subrutina desde el evento de clic del botón de comando.

  • Haz clic con el botón derecho en el botón de comando, como se muestra en la imagen a continuación. Selecciona Ver. Code.
  • Se abrirá el editor de código.

Cómo llamar a Sub en VBA

Agregue el siguiente código en el editor de código para el evento de clic del botón de comando btnDisplayFullName.

Private Sub btnDisplayFullName_Click()
    displayFullName "John", "Doe"
End Sub

Su ventana de código ahora debería verse de la siguiente manera

Cómo llamar a Sub en VBA

Guarde los cambios y cierre la ventana del código.

Paso 4) Probando el código

En la barra de herramientas del desarrollador, desactive el modo de diseño. Como se muestra abajo.

Cómo llamar a Sub en VBA

Paso 5) Haga clic en el botón de comando 'Subrutina de nombre completo'.

Obtendrás los siguientes resultados

Cómo llamar a Sub en VBA

Descargue el archivo Excel anterior. Code

Un botón es práctico, pero no es la única forma de iniciar una subrutina, y durante el desarrollo rara vez es la más rápida.

Cómo ejecutar una subrutina sin un botón

Mientras aún estás escribiendo código, agregar un control a la hoja solo para probar una subrutina es una pérdida de tiempo. VBA ofrece otras cuatro maneras de ejecutar una, y cada una se adapta a un momento diferente del ciclo de desarrollo.

  • Pulsa F5 en el editor: Coloca el cursor en cualquier parte dentro de la subrutina y pulsa F5. Se ejecutará inmediatamente. Esto solo funciona cuando la subrutina no recibe argumentos, ya que VBA no tiene valores que proporcionar.
  • Avance con F8: La misma ejecución, línea por línea, para que puedas observar cómo cambia cada variable en la ventana de Variables locales. Úsala cuando un resultado sea incorrecto y necesites saber dónde está el error.
  • Utilice el cuadro de diálogo Macros: En la pestaña Desarrollador, haga clic en Macros, seleccione el nombre y haga clic en Ejecutar. Solo las subrutinas públicas sin argumentos aparecen en esta lista, por lo que una subrutina auxiliar generalmente se declara como privada.
  • Llámalo desde otro sub: Este es el método que se utiliza para cualquier subrutina que acepte argumentos, y en el que se basa el botón de comando de arriba.

La última opción tiene dos formas aceptadas. Escribir el nombre seguido de los argumentos sin formato funciona, al igual que la palabra clave Call explícita, pero la regla de los corchetes difiere entre ellas.

Sub RunTheGreeting()
    ' Form 1: no Call keyword, no brackets
    displayFullName "John", "Doe"

    ' Form 2: Call keyword, brackets required
    Call displayFullName("Jane", "Roe")
End Sub

Ambas líneas hacen exactamente lo mismo. Mezclar las dos formas, escribiendo corchetes sin la palabra clave Call, es la causa más común del error de compilación "Expected: =" cuando una subrutina toma más de un argumento.

Diferencia entre una subrutina y una función en VBA

Sub y Function son los dos tipos de procedimientos en VBA, y los principiantes suelen elegir el incorrecto. La pregunta clave es sencilla: ¿el código que realiza la llamada necesita un valor de retorno?

Elemento Sub Función
Devuelve un valor No Sí, asignado al nombre de la función
Declarado con Sub... End Sub Función … Fin de la función
Llamado Una declaración en su propia línea Parte de una expresión, por ejemplo x = myFunc(2)
Se puede utilizar en una celda de la hoja de cálculo. No Sí, como una función definida por el usuario.
Uso típico Formatear una hoja, borrar entradas, mostrar un mensaje Calcular un total, convertir un valor, buscar datos

Utilice una subrutina cuando el código actúe sobre el libro de trabajo y una Función VBA cuando el código produce una respuesta que otra cosa consume.

Preguntas Frecuentes

Una subrutina privada solo puede ser llamada desde dentro del módulo que la declara. Una subrutina pública es visible para todos los módulos del proyecto y es el único tipo que aparece en el cuadro de diálogo Macros.

ByVal pasa una copia, por lo que la subrutina no puede modificar la variable que la llama. ByRef pasa la variable directamente, por lo que cualquier cambio es visible para quien la llama. ByRef es la opción predeterminada cuando no se especifica ninguna palabra clave.

Utilice la instrucción Exit Sub. Esta detiene el procedimiento en ese punto y devuelve el control a quien lo llamó, lo cual resulta útil para salir anticipadamente cuando falla una prueba de validación.

Sí. Pega la macro y un asistente de IA agrupará las líneas relacionadas, sugerirá un nombre descriptivo para cada nueva subrutina y reescribirá el código original como una breve secuencia de llamadas. Prueba el resultado en una copia del libro de trabajo.

Sí. Indíquele el texto del error y la línea de llamada, y un asistente de IA identificará las causas, como el uso de corchetes sin la palabra clave Call, un número incorrecto de argumentos o un tipo de datos incompatible, y luego le proporcionará la línea corregida.

Resumir este post con: