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.
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:
-
Macro: Es el nombre de la macro a llamar.
-
Archivo: Es el nombre del archivo que contiene la macro.
-
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.
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.
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