2012-11-23 36 views
6

Mam problem z makrem programu excel vba. Potrzebuję go do wykonania pliku wsadowego, który jest w tym samym folderze co skoroszyt programu excel. Kod czasami działa dobrze. Nie wiem, co powoduje błąd. Oto kod:Wykonaj plik .bat z programu 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 

Zapisuje plik wsadowy, ale go nie wykonuje. Tylko raz, gdy okno poleceń nie zamknęło się i powiedział, że nie można znaleźć pliku code.bat. Polecenie changeir zadziałało. Czy można uruchomić cmd.exe i uruchomić plik code.bat ze względną ścieżką bez konieczności zmiany?

+2

nie bardzo rozumiem. Masz skoroszyt programu Excel, który zapisujesz jako plik wsadowy, a następnie próbujesz uruchomić plik "Excel" jako plik .bat? – InContext

+0

Czy ciąg znaków "&&" w "&& code.bat" ma znaczyć coś specjalnego, czy jest to rzeczywiście część nazwy pliku? – RBarryYoung

Odpowiedz

7

Przede wszystkim, po uruchomieniu instancji CMD trzeba ująć całą CMD argument, jeśli użyć dowolnego rodzaju operatorów (&):

CMD /K "command1 & command2" 

A potem załączyć sub-wewnętrzny argumenty, na przykład:

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

Więc trzeba zrobić coś takiego:

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

Uwaga Użyłem "" ", aby uciec od cytatu, ale nie znam sposobu na uniknięcie cytatu w VBA.

PS: pamiętaj, aby również dołączyć code.bat, jeśli masz spacje, ale TYLKO jeśli masz spacje.

+2

Jest to albo czarny znak "\", albo pojedyncze cudzysłowy, które zawierają podwójne cudzysłowy. "" –

4

Jestem całkiem pewien, że problem jest w dół do tej linii

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

Musisz przestrzeń w przedniej części && aby oddzielić go od komendy cd i po to, aby oddzielić go od code.bat.

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

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

tutaj, nie otworzy się w folderze/d cmd dokumentu. przez/d otworzy się na dysku, możesz to zmienić, jak na swój łatwy.

+0

Witam, dziękuję za przyczynienie się do witryny. W tej formie Twoja odpowiedź jest trochę krótka od naszych [wytycznych dotyczących dobrych odpowiedzi] (http: //stackoverflow.com/help/how-to-answer). Czy mógłbyś w ogóle go rozwinąć? – starsplusplus

2

Jednym ze sposobów, aby wstawić cudzysłów („) na ciąg znaków jest za pomocą kodu znaków funkcji konwersji Chr (34), 34 jest wartość ASCII dla cudzysłów (”)

Powiązane problemy