'Crea un módulo nuevo y pega este código. Nombre: basEjecutarAplicacionExternaConEspera Option Compare Database Option Explicit Private Const SYNCHRONIZE = &H100000 Private Const INFINITE = &HFFFF Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _ ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, _ ByVal dwMilliseconds As Long) As Long Sub Demomc_EjecutarProgramaEjecutable() Dim strRutaAplicación As String Dim strRutaOrigen As String Dim strRutaDestino As String 'EJEMPLOS. 'Abrir la calculadora ' strRutaAplicación = "C:\WINDOWS\CALC.EXE" 'Copiar una base de datos de access abierta a otro lugar para poder _ comprimirla posteriormente. En caso de estar abierta, no se puede manipular. ' strRutaAplicación = "C:\WINDOWS\COMMAND\XCOPY32.EXE " & _ "C:\Archiv~1\Micros~1\Office\Ejemplos\Pedidos.mdb " & "C:\Temp" 'Comprimir un archivo con el WinZip (Ver más en /referencias/McZipV****.mdb) ' strRutaAplicación = "C:\Archiv~1\WinZip\Winzip32.exe" ' strRutaOrigen = "C:\Temp\Pedidos.mdb" ' strRutaDestino = "C:\Temp\Pedidos.zip" ' strRutaAplicación = strRutaAplicación & " -min -a -ex " & strRutaDestino _ & " " & strRutaOrigen If mc_EjecutarProgramaEjecutable(strRutaAplicación, vbHide, True) = False Then MsgBox "Ejecución completada" Else MsgBox "Error indefinico en la ejecución de la aplicación" End If End Sub Public Function mc_EjecutarProgramaEjecutable(strRutaPrograma As String, _ intModo As Integer, blnEspera As Boolean) As Boolean 'Última actualización: 08/03/2002 'Versión original de: Access Lab, www.abarcode.net / http://www.abarcode.net/tomasb/ 'Esta función, utiliza la función Shell para ejecutar un programa ejecutable. 'Devuelve un valor true/false dependiendo si se ha ejecutado con éxito. 'La sintaxis del Procedimiento consta de estos argumentos: 'Parte Descripción '------------------------------------------------------------------------------------------- 'strRutaPrograma: Requerido. Nombre del programa a ejecutar y de cualquier argumento o _ conmutador de comando o de línea de comando requeridos; _ puede incluir directorio o carpeta y unidad de disco. 'intModo: Requerido. Correspondiente al estilo de la ventana en la cual se va a _ ejecutar el programa. _ VALORES _ Constante Valor Descripción _ --------------------------------- _ vbHide 0 Se oculta Windows y se pasa el foco a la ventana oculta. _ VbNormalFocus 1 Windows recupera el foco y vuelve a su posición y tamaño _ original. _ VbMinimizedFocus 2 Windows se muestra como un icono con foco. _ VbMaximizedFocus 3 Windows se maximiza con foco. _ VbNormalNoFocus 4 Windows vuelve al tamaño y posición más recientes. La _ ventana activa actual permanece activa. _ VbMinimizedNoFocus 6 Windows se muestra como un icono. La ventana activa actual _ permanece activa. 'blnEspera: Requerido. Valor boolean que indica si el código que llama a la _ función mc_EjecutarProgramaEjecutable queda en espera hasta que _ termine la ejecución de la aplicación externa. _ VALORES _ Constante Descripción _ --------------------------------- _ True Espera hasta finalización. _ False El código continua. On Error GoTo Err_mcEjecutarProgramaEjecutable Dim hMod As Long Dim phnd As Long 'Ejecutar el programa con la función Shell, esta nos devuelve un valor que indica el _ Identificador de la tarea del programa si se ha ejecutado con éxito, en caso _ contrario devuelve cero. hMod = Shell(strRutaPrograma, intModo) If hMod <> 0 Then 'Esperar hasta que termine de ejecutar la tarea encomendada. phnd = OpenProcess(SYNCHRONIZE, 0, hMod) If phnd <> 0 Then If blnEspera Then 'Con esta función API siguiente, se mantiene el código parado mientras se _ está ejecutando el programa. Call WaitForSingleObject(phnd, INFINITE) Call CloseHandle(phnd) End If End If Else MsgBox "Error indefinido al utilizar el archivo ejecutable " & _ Left$(strRutaPrograma, InStr(strRutaPrograma & " ", " ")) _ , vbExclamation + vbOKOnly, "Función mc_EjecutarProgramaEjecutable" mc_EjecutarProgramaEjecutable = True End If Salida: Exit Function Err_mcEjecutarProgramaEjecutable: Select Case Err.Number Case 53 'No se encontro el archivo. MsgBox "No se encontró el archivo ejecutable " & _ Left$(strRutaPrograma, InStr(strRutaPrograma & " ", " ")) _ , vbCritical + vbOKOnly, "Función mc_EjecutarProgramaEjecutable" Case Else 'Cazar todos aquellos errores inesperados. MsgBox Err.Number & " " & Err.Description End Select mc_EjecutarProgramaEjecutable = True Resume Salida 'Salida a otro procedimiento. End Function