2012-11-23 121 views
6

Ho problemi con la macro excel vba. Ne ho bisogno per eseguire un file batch che si trova nella stessa cartella della cartella di lavoro di Excel. Il codice funziona bene a volte. Non so che cosa abbia causato l'errore. Ecco il codice:Esegui file .bat da Excel VBA Macro

Sub writebatch() 
    Sheets("code").Select 
    Application.DisplayAlerts = False 
    ActiveWorkbook.SaveAs FileName:=ThisWorkbook.path & "\code.bat", 
    FileFormat:=xlTextPrinter, CreateBackup:=False 
    Application.DisplayAlerts = True 
    ThisWorkbook.Saved = True 
    Shell "cmd.exe /k cd " & ThisWorkbook.path & "&&code.bat" 
    Application.Quit 
End Sub 

Scrive il file batch, ma non lo esegue. Solo una volta ho ottenuto la finestra di comando per non chiudere e ha detto che il file code.bat non è stato trovato. Quindi il comando changedir ha funzionato. È possibile eseguire cmd.exe ed eseguire il code.bat con il percorso relativo senza doverti modificare?

+2

non sicuro di aver capito. Hai una cartella di lavoro di Excel che stai salvando come file batch e poi stai cercando di eseguire il file "Excel" come .bat? – InContext

+0

La stringa "&&" in "" && code.bat "' dovrebbe significare qualcosa di speciale o è davvero parte del nome del file? – RBarryYoung

risposta

7

Prima di tutto, quando si avvia l'istanza di CMD è necessario racchiudere l'intero argomento CMD se si utilizza qualsiasi tipo di operatori (&):

CMD /K "command1 & command2" 

E poi racchiudere il sub-interno argomenti, come questo:

CMD /K "command "path with spaces" & command" 

quindi è necessario fare qualcosa di simile:

Shell "cmd.exe /k ""cd " & """ & ThisWorkbook.path & """ & " && code.bat""" 

Avviso Ho usato "" "per uscire da una citazione, ma non conosco il modo di sfuggire a una citazione in VBA.

PS: ricordarsi di includere anche lo code.bat se si dispone di spazi, ma SOLO se si dispone di spazi.

+2

È "black" o usa virgolette singole per contenere le virgolette "" " –

4

Sono piuttosto sicuro che il problema è giù per questa linea

Shell "cmd.exe /k cd " & ThisWorkbook.path & "&&code.bat" 

Hai bisogno di uno spazio di fronte alla && per separarlo dal comando cd e dopo la separazione dal code.bat.

Shell "cmd.exe /k cd " & ThisWorkbook.path & " && code.bat" 
2

Shell "cmd.exe/k cd/d" & ThisWorkbook.path & "& & code.bat"

qui, senza cartella documenti/d cmd viene aperto in. da/d si aprirà in d drive, è possibile modificare questo come per il vostro facile.

+0

Ciao, grazie per aver contribuito al sito. Così com'è la tua risposta è un po 'meno delle nostre [linee guida per le buone risposte] (http: //stackoverflow.com/help/how-to-answer). Sareste in grado di espanderlo del tutto? – starsplusplus

2

Un modo per inserire una citazione (") in una stringa è quello di utilizzare il codice di carattere funzione di conversione Chr (34), 34 è il valore ASCII per virgolette (")