Ejecutar macros de otro archivo de Excel y pasar argumentos a Procedimientos

En este artículo vamos a ver dos temas interesantes, el primero es Cómo ejecutar macros de otro archivo de Excel y Cómo pasar argumentos a Procedimientos de vba.

Tip: Artículo de referencia Ejecutar macros de otro archivo de Excel con Run y Call.

Cómo lo hacemos

He preparado dos archivos, Archivo1.xlsm y Archivo2.xlsm. En el 2 está la macro MacroArchivo2 que será llamada desde el archivo1.

image

Figura 1. Del archivo1 mandamos llamar macro del archivo2.

Archivo1, mandar llamar macro

Como les comentaba, en el Archivo1 tenemos una macro que llamará a una macro del Archivo2. Para abarcar otro tema interesante de vba, decidí armar un Procedimiento (Llamado Sub en vba) al cual le vamos a pasar 3 argumentos.

Pasar argumentos a Procedimientos en vba

Nuestro procedimiento se llamará LlamarMacroArchivo2 y tendrá los siguiente parámetros:

  1. Macro: Es el nombre de la macro a llamar.
  2. Archivo: Es el nombre del archivo que contiene la macro.
  3. Tipo: Definimos si la macro es normal (1) o es llamada desde un botón del Ribbon (2).

Tip: Si la macro que deseamos llamar tiene la estructura Macro(control As IRibbonControl), entonces el parámetro Tipo deberá ser 2.

El código para llamar al Procedimiento LlamarMacroArchivo2 con argumentos es :

Call LlamarMacroArchivo2("MacroArchivo2", "Archivo2.xlsm", 2)

Y el código el procedimiento LlamarMacroArchivo2 es:

Sub LlamarMacroArchivo2(Macro, Archivo, Tipo)
'
'Declaramos variables
Dim Libro As Workbook
Dim obj As Object
    '

    'En caso de no encontrar el archivo
    On Error Resume Next
    '
    Set Libro = Workbooks(Archivo)
    On Error GoTo 0
    '
    If Libro Is Nothing Then
        MsgBox "El archivo debe estar abierto", vbExclamation, "EXCELeINFO"
    Else
        On Error GoTo ErrorHandler

        'Se analiza la macro a llamar
        Select Case Tipo
        Case Is = 1
            Application.Run "'" & Libro.Name & "'!" & Macro
            'En caso que la macro sea Macro(control as IRibbonControl)
        Case Is = 2
            Application.Run "'" & Libro.Name & "'!" & Macro, obj
        End Select
        '
    End If
    '
    Exit Sub
    '
ErrorHandler:
    MsgBox "Ha ocurrido un erro: " & Err.Description, vbExclamation
    '
End Sub

Archivo2, macro que será llamada

Al presionar el botón Llamar macro de Archivo2, se ejecutará la macro del Archivo2 llamada MacroArchivo2.

image

Figura 2. Mandar llamar macro del otro archivo de Excel.

En caso de que el Archivo2 no se encuentre abierto, se mostrará un mensaje indicando que el archivo debe estar abierto.

image

Figura 3. Mensaje al detectar que el Archivo2 no está abierto.

El siguiente código estará alojado en el Archivo2:

'Esta macro se manda llamar desde Archivo1
Sub MacroArchivo2(control As IRibbonControl)
'
Dim HoraActual As Date
    '
    HoraActual = Time
    '
    Select Case HoraActual
        '
    Case "00:00" To "05:59:59"
        MsgBox "Buenas noches", vbInformation, "EXCELeINFO"
        '
    Case "06:00" To "11:59:59"
        MsgBox "Buenos días", vbInformation, "EXCELeINFO"
        '
    Case "12:00" To "18:59:59"
        MsgBox "Buenas tardes", vbInformation, "EXCELeINFO"
        '
    Case "19:00" To "23:59:59"
        MsgBox "Buenas noches", vbInformation, "EXCELeINFO"
        '
    End Select
    '
End Sub

Anexos

:: Descargar archivos Mandar llamar macros de otro archivo de Excel.rar

You may also like...