2012-02-22 10 views
7

Cuando voy a la ubicación de mi archivo por lotes y lo abro, el archivo por lotes funciona. Mi archivo por lotes es simplemente:Ejecutar un archivo por lotes en un directorio determinado usando VBA

cd .\data 
dir/b/o:n > names.txt 

Como se puede ver, estoy en mi directorio actual y se mueve hacia abajo a los "datos" directorio secundario y hacer frente a todos los nombres y la creación de un archivo llamado names.txt.

Cuando digo

shell "location of file" 

se abre el archivo por lotes, pero el directorio que está fijado en C:\my documents es, por lo que mis órdenes no funcionarán porque no puede encontrar el subdirectorio. Quiero que sea un archivo por lotes dinámico y, por lo tanto, debo escribir algo en VBA que abra el archivo por lotes en su directorio actual o algo similar.

¿Cómo puedo hacer esto?

+0

Por razones de legibilidad, por favor, haga un esfuerzo para formatear y deletrear correctamente sus preguntas. Lo arreglé por ti esta vez. Tenga en cuenta que el código se puede 'formatear como código' utilizando el botón' {} '. –

+0

Lo siento, nuevo en el sitio. – Jason

Respuesta

1

C: \ Mis documentos es probablemente el directorio donde se encuentra la hoja de cálculo. Si se agrega

ChDir "C:\TheFolderWhereYourBatchIs" 

antes de lanzar su comando de Shell y que debe trabajar ...

Como alternativa, puede cambiar su archivo por lotes para utilizar un directorio absoluta en lugar de una relación.

+0

http://stackoverflow.com/questions/9442467/calling-batch-file-in-vba-not-working-properly], esta es una mejor descripción del problema. gracias por la respuesta sin embargo. – Jason

6

Lo siguiente debería darle el efecto que busca.

Mi código de prueba es:

Option Explicit 
Sub TryShell() 

    Dim PathCrnt As String 

    PathCrnt = ActiveWorkbook.Path 
    Call Shell(PathCrnt & "\TryShell.bat " & PathCrnt) 

End Sub 

Mi archivo por lotes de prueba se denomina TryShell.bat y contiene:

cd %1 
dir *.* >TryShell.txt 

he puesto mi archivo por lotes en la misma carpeta que el libro que contiene mi macro.

La declaración PathCrnt = ActiveWorkbook.Path establece PathCrnt al nombre del directorio que contiene el libro activo. Puede establecer PathCrnt en el directorio que necesite.

Cuando llamo a Shell, he agregado PathCrnt como parámetro.

En mi archivo por lotes, configuré el directorio actual en %1, que es el primer parámetro.

El comando dir funciona como deseo porque el directorio actual es mi directorio y no el predeterminado del sistema.

Espero que esto esté claro.

+0

todavía el mismo problema. Creo que sería más fácil si alguien conoce un comando en DOS que llamaría a la ubicación actual del archivo (donde sea), almacene esa ubicación como una variable, luego cambie el directorio con el nombre de la variable {cd variable_name}.esto obtendría la ubicación correcta y luego podría ejecutar mi archivo por lotes. – Jason

+0

No entiendo "todavía el mismo problema". Si la macro conoce la ubicación del archivo por lotes, puede llamar al archivo por lotes correctamente y puede pasar la ubicación como parámetro. He usado 'ActiveWorkbook.Path' como mi carpeta de prueba porque era conveniente para mí, pero podrías cambiarlo por otra cosa. Si la macro no conoce la ubicación del archivo por lotes, ¿cómo puede haber un comando DOS que lo encuentre? –

+0

Ha cambiado algo que no conozco o aún no ha agregado todos los detalles. –

Cuestiones relacionadas