Nedalos : Vamos por partes. *** paso 1 **** En Excel abrí un libro nuevo (CTRL+U). Ingresá en Visual Basic (Alt-F11) Insertá un módulo (Insertar / modulo). Y volcá allí el siguiente código : Sub Mensaje() MsgBox "Esta Macro se ejecuta desde Excel (archivo MacrodesdeExcel)" End Sub Volvé a Excel , grabá el archivo como "c:\MacrodesdeExcel.xls" y cerralo. ******************* *** paso 2 **** En Excel abrí un libro nuevo (CTRL+U). Ingresá en Visual Basic (Alt-F11) En Herramientas / Referencias ... marcá "Microsoft Access 8.0 Object Library" (si no estuviera marcado) Insertá un módulo (Insertar / modulo). Y volcá allí el siguiente código : Sub EjecutoMacroAccess() Dim MiAccess As New Access.Application Dim Archivo As String On Error Resume Next Archivo = "C:\BaseAccess.MDB" MiAccess.OpenCurrentDatabase (Archivo) If Err > 0 Then MsgBox "Error : " & Err & Chr(10) & Error() End End If MiAccess.Run ("EjecutarMAcroExcel") If Err > 0 Then MsgBox "Error : " & Err & Chr(10) & Error() End If MiAccess.Quit Set MiAccess = Nothing End Sub Volvé a Excel , grabá el archivo como "c:\EjecutaMacroAccess.xls" y cerralo. ******************* *** paso 3 **** Ingresá en Access. Crea una nueva base de datos. Grabala como "C:\BaseAccess.MDB". Ingresa un nuevo módulo (Pestaña Modulo / ... Nuevo) En Herramientas / Referencias ... marcá "Microsoft Excel 8.0 Object Library" (si no estuviera marcado) Vuelca allí el siguiente código : Function feme() As Boolean feme = True EjecutarMAcroExcel End Function Sub EjecutarMAcroExcel() Dim MiExcel As New Excel.Application Dim archivo As String On Error Resume Next MsgBox "Estoy en Access - BaseAccess" archivo = "C:\MacrodesdeExcel.XLS" MiExcel.Visible = True MiExcel.Workbooks.Open (archivo) If Err > 0 Then MsgBox "Error : " & Err & Chr(10) & _ Error() & Chr(10) & "No encuentro archivo : " & archivo End End If MiExcel.Run ("mensaje") MiExcel.ActiveWindow.Close savechanges:=False MiExcel.Quit Set MiExcel = Nothing End Sub Graba y cierra el Access. ******************* *** paso 4 **** En excel abre el archivo "c:\EjecutaMacroAccess.xls" Ejecuta la macro : EjecutoMacroAccess Esta macro, abre una nueva instancia de access, ejecuta allí, mediante el método Run el procedimiento "EjecutarMAcroExcel", que a su vez, abre una instancia de Excel y ejecuta la macro del primer archivo (paso 1). También se puede crear en la base access una MACRO que ejecute (acción ejecutarCodigo) la función feme(), que en realidad llama al procedimiento. Los trucos aquí están en la utilización de Objetos Excel. Application y Access. Application . Y luego el método RUN para ejecutar una subrutina. Espero que sea lo que querías. Suerte. FJ
Muchas gracias por tu espléndida respuesta. La verdad es que finalmente logré realizarlo de otra forma que no recuerdo, pero aun así tu forma es mucho más elegante y eficaz. Mil gracias y un saludo