2012-11-23 50 views
6

Tôi gặp sự cố với macro vb excel của mình. Tôi cần nó để thực thi một tập tin thực thi trong cùng thư mục với sổ làm việc excel. Mã đôi khi hoạt động tốt. Tôi không biết whats gây ra lỗi. Đây là mã:Thực thi .bat tệp từ 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 

Nó ghi tệp lô, nhưng sau đó không thực thi. Chỉ một lần tôi nhận được cửa sổ lệnh để không đóng và nó nói rằng các tập tin code.bat không thể được tìm thấy. Vì vậy, lệnh changedir làm việc. Có thể chạy cmd.exe và chạy code.bat với đường dẫn tương đối mà không cần phải changeir?

+2

không chắc là tôi hiểu. Bạn có một sổ làm việc Excel mà bạn đang lưu dưới dạng tệp lô và sau đó cố gắng chạy tệp "Excel" dưới dạng .bat? – InContext

+0

Có phải chuỗi "&&" trong '" && code.bat "' có nghĩa là bất kỳ điều gì đặc biệt, hay đó thực sự là một phần của tên tệp? – RBarryYoung

Trả lời

7

Trước hết, khi bạn khởi động một trường hợp CMD bạn cần phải kèm theo toàn bộ lập luận CMD nếu bạn sử dụng bất kỳ loại hình khai thác (&):

CMD /K "command1 & command2" 

Và sau đó kèm theo sub-nội đối số, như thế này:

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

Vì vậy, bạn cần phải làm điều gì đó như thế này:

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

Thông báo tôi đã sử dụng "" "để thoát khỏi báo giá, nhưng tôi không biết cách thoát khỏi báo giá trong VBA.

PS: hãy nhớ cũng kèm theo mã .bat nếu bạn có dấu cách, nhưng CHỈ nếu bạn có dấu cách.

+2

Đó là dấu gạch chéo đen '\' hoặc sử dụng dấu nháy đơn để chứa các dấu ngoặc kép '' ' –

4

Tôi chắc rằng vấn đề là xuống dòng này

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

Bạn cần một không gian ở phía trước của && để tách nó ra khỏi lệnh cd và sau đó để tách nó ra khỏi code.bat.

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

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

đây, mà không sẽ mở ra trong thư mục/d cmd tài liệu. bởi/d nó sẽ mở ra trong d ổ đĩa, bạn có thể thay đổi điều này theo dễ dàng của bạn.

+0

Xin chào, cảm ơn bạn đã đóng góp cho trang web. Vì câu trả lời của bạn hơi ngắn [hướng dẫn cho câu trả lời hay] (http: //stackoverflow.com/help/how-to-answer) Bạn có thể mở rộng nó không? – starsplusplus

2

Một cách để chèn một trích dẫn (") thành một chuỗi là bằng cách sử dụng mã ký tự chức năng chuyển đổi Chr (34), 34 là giá trị ASCII cho ngoặc kép (")

Các vấn đề liên quan