Ejecutar archivo *.bat

20/12/2004 - 17:19 por rodmac | Informe spam
creadoSaludos

Tengo una serie de archivos de datos que concateno con un archivo *.bat, en
un archivo conocido y en forma de texto. Como podria ejecutar este archivo
desde un macro para que automaticamente se concatenen y abra el archivo
creado?

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
21/12/2004 - 06:33 | Informe spam
hola, rodmac !

... serie de archivos ... que concateno con un ... *.bat, en ... un archivo ... de texto.
... ejecutar este archivo ... para que ... se concatenen y abra el archivo creado?



para ejecutar un *.bat, una forma pudiera ser el comando 'Shell' [p.e.]
Shell "C:\Ruta y\Carpeta donde esta\El archivo.bat"

nota: la 'siguiente' linea en la macro, pudiera necesitar un 'retardo/monitoreo' del proceso del *.bat
ANTES de 'proceder' a la apertura del archivo de texto [finalmente] concatenado

¿comentas?
saludos,
hector.
Respuesta Responder a este mensaje
#2 rodmac
21/12/2004 - 15:39 | Informe spam
Hector tienes razon, la generacion del archivo tarda unos pocos segundos que
haran que el macro falle y me devuelva un error. Hay alguna instruccion que
sea un temporizador o que espere hasta la creacion del archivo nuevo? la
generacion del archivo es de 5 seg aproximadamente.

Muchas gracias por tu ayuda.

Rodmac

"Héctor Miguel" escribió:

hola, rodmac !

> ... serie de archivos ... que concateno con un ... *.bat, en ... un archivo ... de texto.
> ... ejecutar este archivo ... para que ... se concatenen y abra el archivo creado?

para ejecutar un *.bat, una forma pudiera ser el comando 'Shell' [p.e.]
Shell "C:\Ruta y\Carpeta donde esta\El archivo.bat"

nota: la 'siguiente' linea en la macro, pudiera necesitar un 'retardo/monitoreo' del proceso del *.bat
ANTES de 'proceder' a la apertura del archivo de texto [finalmente] concatenado

¿comentas?
saludos,
hector.



Respuesta Responder a este mensaje
#3 rodmac
21/12/2004 - 18:17 | Informe spam
Hector:

En la ayuda de vb encontre el metodo wait que se ajusta muy bien a la
funcion que proporcionaste, te envio el texto.

Muchas gracias por tu ayuda

Ejemplo del método Wait

Este ejemplo hace una pausa en una macro en ejecución hasta las 18:23 de la
fecha actual.

Application.Wait "18:23:00"

Este ejemplo realiza una pausa en una macro en ejecución durante
aproximadamente 10 segundos.

newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now()) + 10
waitTime = TimeSerial(newHour, newMinute, newSecond)
Application.Wait waitTime


rodmac


"rodmac" escribió:

Hector tienes razon, la generacion del archivo tarda unos pocos segundos que
haran que el macro falle y me devuelva un error. Hay alguna instruccion que
sea un temporizador o que espere hasta la creacion del archivo nuevo? la
generacion del archivo es de 5 seg aproximadamente.

Muchas gracias por tu ayuda.

Rodmac

"Héctor Miguel" escribió:

> hola, rodmac !
>
> > ... serie de archivos ... que concateno con un ... *.bat, en ... un archivo ... de texto.
> > ... ejecutar este archivo ... para que ... se concatenen y abra el archivo creado?
>
> para ejecutar un *.bat, una forma pudiera ser el comando 'Shell' [p.e.]
> Shell "C:\Ruta y\Carpeta donde esta\El archivo.bat"
>
> nota: la 'siguiente' linea en la macro, pudiera necesitar un 'retardo/monitoreo' del proceso del *.bat
> ANTES de 'proceder' a la apertura del archivo de texto [finalmente] concatenado
>
> ¿comentas?
> saludos,
> hector.
>
>
>
Respuesta Responder a este mensaje
#4 Manuel Romero
21/12/2004 - 20:00 | Informe spam
Este codigo lo baje de www.vb-helper.com y lo modifique un poco para
hacerlo compatible con Excel
Para las declaraciones de las APIs y los valores de las constantes ve a
www.mentalis.org/apilist

OpenProcess http://www.mentalis.org/apilist/OpenProcess.shtml
WaitForSingleObject
http://www.mentalis.org/apilist/Wai...ject.shtml
CloseHandle http://www.mentalis.org/apilist/CloseHandle.shtml

' Start the indicated program and wait for it
' to finish, hiding while we wait.
Private Sub ShellAndWait(ByVal program_name As String)
Dim process_id As Long
Dim process_handle As Long

' Start the program.
On Error GoTo ShellError
process_id = Shell(program_name)
On Error GoTo 0

' Wait for the program to finish.
' Get the process handle.
process_handle = OpenProcess(SYNCHRONIZE, 0, process_id)
If process_handle <> 0 Then
WaitForSingleObject process_handle, INFINITE
CloseHandle process_handle
End If
Exit Sub
ShellError:
End Sub

"rodmac" escribió en el mensaje
news:
Hector tienes razon, la generacion del archivo tarda unos pocos segundos


que
haran que el macro falle y me devuelva un error. Hay alguna instruccion


que
sea un temporizador o que espere hasta la creacion del archivo nuevo? la
generacion del archivo es de 5 seg aproximadamente.

Muchas gracias por tu ayuda.

Rodmac

"Héctor Miguel" escribió:

> hola, rodmac !
>
> > ... serie de archivos ... que concateno con un ... *.bat, en ... un


archivo ... de texto.
> > ... ejecutar este archivo ... para que ... se concatenen y abra el


archivo creado?
>
> para ejecutar un *.bat, una forma pudiera ser el comando 'Shell' [p.e.]
> Shell "C:\Ruta y\Carpeta donde esta\El archivo.bat"
>
> nota: la 'siguiente' linea en la macro, pudiera necesitar un


'retardo/monitoreo' del proceso del *.bat
> ANTES de 'proceder' a la apertura del archivo de texto


[finalmente] concatenado
>
> ¿comentas?
> saludos,
> hector.
>
>
>
Respuesta Responder a este mensaje
#5 Héctor Miguel
22/12/2004 - 06:37 | Informe spam
hola, rodmac !

... encontre el metodo wait que se ajusta muy bien a la funcion que proporcionaste [...]



- es una buena forma de 'obligar' a una 'suspension de actividades' a la aplicacion [incluidas las macros]
[solo toma nota de los comentarios que tiene la ayuda de vba acerca del uso de 'Wait']
- otra seria usar llmadas a las API's [tal como te lo menciona Manuel Romero en mensaje posterior]
- una tercera y sencilla por 'barata' [sin llamadas a las API's y 'crecimiento' de codigo] pudiera ser la siguiente...
1° en el archivo .bat...
a) haz que el primer comando en el archivo .bat sea crear/copiar un archivo 'temporal'
[p.e. copy archivo1.xyz EnProceso.tmp]
b) en el mismo .bat lo borras ->despues<- y luego de haber 'concatenado' [el resto de los archivos]
[p.e. del EnProceso.tmp]
2° en la macro...
a) 'cambiate' al directorio donde se habra de ejecutar la concatenacion [solo para mayor 'seguridad']
b) despues del comando 'Shell', desarrolla un bucle que 'espere' hasta que sea 'borrado' el temporal

saludos,
hector.
ejemplo de las lineas en la macro ==Sub Concatena_Espera_Abre()
Dim EnProceso As String
ChDir "C:\Ruta y carpetas\donde estan los archivos"
Shell "ElArchivo.bat"
Do
EnProceso = Dir("EnCurso.tmp") ' o el nombre que le hubieras dado en el *.bat '
Loop Until EnProceso = ""
Workbooks.Open "ElArchivoConcatenado.txt"
End Sub
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida