Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado

¿Qué es Call en VBA y como se usa?

| 16 comentarios

Call en VBA nos permite ejecutar una macro desde otra macro, es decir invocar la macro desde otro procedimiento (Sub o Function) como si fuera un procedimiento cualquiera.

Al utilizar Call para llamar a tal procedimiento  requerirá que los argumentos estén encerrados en paréntesis, si este procedimiento no tuviera argumentos no se colocaran.

Ejemplo del modo de uso, tenemos dos procedimientos diferentes pero que cumplen la misma función, Proc1 uno no recibe parámetros mientras que Proc2 si recibe parámetros.

Sub Proc1()

MsgBox "Hola mundo"

End Sub

Sub Proc2(mensaje As String)

MsgBox mensaje

End Sub

En el caso del Proc1

Si se desea llamar el procedimiento con Call se realizara de la siguiente forma:

Sub principal1()

Call Proc1

End Sub

Si se obviara Call simplemente se llamaría de la siguiente forma:

Sub principal2()

Proc1

End Sub

En el caso del Proc2

Si se desea llamar el procedimiento con Call se realizara de la siguiente forma ya que requiere de un argumento y este deberá estar entre paréntesis.

Sub principal3()

Call Proc2("Hola mundo")

End Sub

Si se obviara Call simplemente se llamaría de la siguiente forma y en este caso no se colocarían los paréntesis simplemente el argumento:

Sub principal4()

Proc2 "Hola mundo"

End Sub

Para todas las formas de llamar en estos casos el resultado será una ventana con el mensaje: hola mundo

 Documento:  ¿Qué es Call en VBA y como se usa?

En el archivo de Excel anexado se podrá probar los diferentes procedimientos cuando se acceda al VB de la pestaña programador, ubicándose en el macro que desea ejecutar y presionando F5

Nota: No es requerido usar Call cuando se llama a un procedimiento ya que no hace nada adicional que otras formas de métodos de llamado; esta a quedado es del antiguo VB en donde siempre debía haber una keyword antes de una sentencia algo que ya no sucede ahora.En pocas palabras podríamos escribir simplemente el nombre de la macro y obviar la palabra Call, salvo que el proceso use 2 o más  parámetros en cuyo caso es obligatorio el uso de call.

Elaborado por: Walther Eduardo Reque Olano

16 comentarios

  1. Los procedimientos que tienen parámetros no aparecen en la lista de macros para poder ejecutarse, y tampoco se pueden ejecutar presionando F5 en el entorno VBA. Esto es porque estas macros requieren un parametro que se debe pasar cuando son invocados, asi como en : Call Proc2("Hola mundo")

  2. Uno de los tantos usos que se le puede dar a call

    Private Sub WorkSheet_Change(ByVal Target As Range)
    Select Case Target.Address
    Case "$A$16"
    Select Case Target
    Case "Custom Color 1": Call CustomColorInput1
    Case "Custom Color 2": Call CustomColorInput1
    Case "Custom Color 3": Call CustomColorInput1
    Case "Custom Color 4": Call CustomColorInput1
    Case Else:
    End Select
    Case "$A$17"
    Select Case Target
    Case "Custom Color 1": Call CustomColorInput2
    Case "Custom Color 2": Call CustomColorInput2
    Case "Custom Color 3": Call CustomColorInput2
    Case "Custom Color 4": Call CustomColorInput2
    Case Else:
    End Select
    Case "$A$18"

  3. En el caso de Proc2()
    no es necesario usar
    dim mensaje as string por que ya se coloco entre parentesis?

    LB.

    • En este caso no sería necesario poner dim mensaje as string, funciona colocando:

      Sub proceso2(mensaje)
      MsgBox mensaje
      End sub

      Pero siempre es recomendable declarar tus variables para que tomen el tipo de dato que desees.

    • asi no es no se necesita ya que ese el tipo de dato que se ha definido como parametro

  4. La función Call es muy útil cuando se tienen procedimientos que deben ejecutarse en distintos momentos y varias veces. Cuando esto sucede resulta más adecuado "llamar" a una función o a otra macro para realizar las actividades y luego continuar con el código principal.
    Por ejemplo
    Dim A as Public
    Dim B as Public
    Dim Suma as Public
    Sub Calculo()

    A=inputbox("Ingrese valor A")
    B=Inputbox("Ingrese valor B")

    Call Sumar

    messagebox.show "Suma"
    ------------
    Sub Sumar()
    Suma=A+B

  5. Otra utilidad que se le puede a Call es la de consolidar las macros que uno haya escrito o grabado para que se ejecuten con una sola indicación. Ejemplo:

    Previamente se escribieron o grabaron las macros: Macro1 y Macro2

    Sub Macro3()

    'Ejecuta las macros 1 y 2
    Call Macro1
    Call Macro2

    End Sub

  6. Opino que es recomendable utilizar Call porque así la macro se hace más legible y fácil de interpretar cuando se estan haciendo las llamadas a los procedimientos, sobre todo si el código de la macro es muy extenso.

  7. Muchas gracias, entiendo que es una manera de no repetir un código anterior para la misma tarea y además poder realizar varias macros en una sola.

    Saludos cordiales.

  8. Si deseo llamar una sub funcion publica desde otro libro? Es decir tengo una macro en el libro1 y deseo que una vez activada la macro de libro1 active tambien la macro del libro 2. Debo utilizar el CALL o que debo hacer?
    Muchas gracias de antemano por su respuesta

    • Hola Luis

      El uso de Call es necesario cuando hay varios parámetros de por medio ... si necesita invocar a una macro de otro libro .. una alternativa sería obteniendo el código respectivo por medio del grabador de macros.

      Saludos

    • Si la función es pública si se puede llamar la función desde otro libro.
      Estas funciones personalizadas están disponibles para todas las hojas en el libro que contiene la función personalizada. Sin embargo, si intenta llamar a una función personalizada desde fuera del libro que contiene el código, primero se debe hacer una referencia al libro que contiene la función personalizada por medio de CALL.

  9. Tenía entendido que se usa call, para llamar solo a un procedimiento, dentro del módulo principal, si es que los módulos son de tercer nivel.
    El punto es que creí que se usa call para llamar únicamente a un procedimiento.
    Ayuda v':

    • La mejor forma de explorar el funcionamiento es realizar pruebas, cuestionarse sobre los conceptos que se requieran revisar por medio de las pruebas que consideres necesarias.

      Examina por ejemplo
      Sub test2()
      Call abc
      End Sub

      Function abc()

      MsgBox "ABX"
      abc = "ABC"
      End Function

      Saludos

  10. Hola, estoy tratando de usar la instrucción Call o incluso dar el nombre de la rutina sin necesidad de usar Call, pero me saca error y no me reconoce la llamada a la rutina. No se por qué no funciona. estoy usando un Excel 2010

    Gracias por ayudar

  11. excelente foro

Deja una respuesta

Los campos requeridos estan marcados con *.