Hướng dẫn này sẽ trình bày cách sử dụng hàm VBA Shell.
Chúng ta có thể sử dụng VBA Vỏ bọc hàm để gọi một chương trình thực thi, riêng biệt từ bên trong một chương trình VBA. Ví dụ, nếu chúng ta cần mở Notepad từ Excel, chúng ta có thể sử dụng hàm VBA Shell để làm như vậy. Nếu lệnh gọi Shell thành công, nó sẽ trả về giá trị Windows TaskID của chương trình mà nó đã gọi. Nếu lệnh gọi Shell không thành công, nó sẽ trả về số không.
Vỏ bọc có hai tham số đầu vào: bắt buộc tên đường dẫn cho chương trình để gọi và một tùy chọn kiểu cửa sổ giá trị kiểm soát kiểu của cửa sổ nơi chương trình sẽ chạy. Các tên đường dẫn giá trị có thể bao gồm đường dẫn / thư mục chương trình và các đối số.
Gọi Shell
Mã này có thể tạo thành một phần của macro để chạy Sổ tay bằng cách sử dụng Cuộc gọi VBA lệnh để gọi Vỏ bọc hàm số.
1 | Gọi Shell ("notepad", vbNormalFocus) |
Ví dụ:
Shell Chờ
Chúng ta có thể sử dụng VBA Đợi đã lệnh trì hoãn việc gọi Vỏ bọc lệnh trong một khoảng thời gian cụ thể.
12 | Application.Wait (Now + TimeValue ("00:00:05"))Gọi Shell ("notepad", vbNormalFocus) |
Do đó, 5 giây sẽ trôi qua trước khi lệnh Shell được gọi.
Trả lại lỗi từ hàm Shell
Nếu chúng tôi gặp lỗi trong mã của mình khi gọi Vỏ bọc và lỗi sẽ được trả về và mã của chúng tôi sẽ chuyển sang chế độ gỡ lỗi.
Ví dụ: trong macro này, chúng tôi đã viết sai chính tả "ghi chú".
1 | Gọi Shell ("ghi chú", vbNormalFocus) |
Kết quả của việc chạy macro này sẽ là:
Lập trình VBA | Code Generator làm việc cho bạn!
Mở một tệp hiện có bằng Shell
Nếu chúng tôi có một tệp cụ thể mà chúng tôi muốn mở bằng Vỏ bọc , chúng tôi có thể bao gồm tên tệp trong mã của chúng tôi.
1 | Gọi Shell ("Notepad.exe C: \ demo \ shell_test.txt", vbNormalFocus) |
Nếu chúng tôi viết sai chính tả tên tệp, tệp sẽ không được tìm thấy và một hộp thông báo sẽ xuất hiện hỏi chúng tôi có muốn tạo tệp mới hay không.
Các tham số được sử dụng bởi hàm Shell
Các Vỏ bọc hàm có 2 tham số - tên của chương trình sẽ gọi và kiểu cửa sổ mà chương trình sẽ sử dụng. Chúng tôi đã sử dụng vbNormalFocus trong các ví dụ trên có nghĩa là khi chương trình (trong trường hợp này là Notepad) được mở, nó có tiêu điểm và nó sẽ mở ở vị trí và kích thước mặc định trên PC.
Các Vỏ bọc cung cấp năm tùy chọn khác:
vbHide Ẩn cửa sổ và đặt tiêu điểm vào cửa sổ đó
vbMinimizedFocus Hiển thị cửa sổ dưới dạng biểu tượng có tiêu điểm
vbMaximizedFocus Mở chương trình trong cửa sổ được phóng to có tiêu điểm
vbNormalNoFocus Khôi phục cửa sổ ở vị trí và kích thước gần đây nhất của nó
vbMinimizedNoFocus Hiển thị cửa sổ dưới dạng biểu tượng và cửa sổ hiện đang hoạt động vẫn hoạt động
Trả lại ID tiến trình từ lệnh Shell
Khi chúng tôi chạy Vỏ bọc Lệnh, nó trả về Process hoặc Task ID. Chúng tôi có thể lưu trữ ID quy trình trong một biến và sử dụng ID quy trình đó để chạy một lệnh khác - ví dụ: TaskKill để đóng tệp Notepad.
123456 | Sub TestPIDLàm mờ ProcessID dưới dạng số nguyênprocessID = Shell ("notepad", vbNormalFocus)Gọi Shell ("Taskkill / F / PID" + CStr (processID))MsgBox ("Notepad ProcessID =" + CStr (processID))Kết thúc Sub |
Trong dòng đầu tiên, NotePad được mở và ID quy trình được Windows gán một giá trị. Chúng tôi lưu trữ giá trị này trong biến ProcessID. Sau đó, chúng tôi sử dụng TaskKill để buộc Notepad đóng phiên bản NotePad mà chúng tôi vừa mở. Các /NS chuyển đổi lực lượng Sổ tay kết thúc, và / PID chuyển đổi nói với TaskKill để tìm Notepad Xử lý ID giá trị. Hàm CStr chuyển đổi ProcessID sang định dạng chuỗi mà Shell và MsgBox trên dòng tiếp theo, cả hai đều cần.
Bạn mệt mỏi với việc tìm kiếm ví dụ về mã VBA? Hãy thử AutoMacro!
Lập trình VBA | Code Generator làm việc cho bạn!
Gọi các chương trình khác bằng Shell
Shell sẽ mở bất kỳ chương trình Windows nào khác. Ví dụ: mã này gọi Excelvà mở tệp Excel ‘example_workbook.xlsx’:
1 | Gọi Shell ("Excel" "C: \ DEMO \ example_workbook.xlsx" "", vbNormalFocus) |
Điều này cho thấy tệp đã mở:
ShellExecute và ShellExecuteEx so với Shell Command
Không gian lập trình Windows cung cấp ShellExecute và ShellExecuteEx chức năng gọi các chương trình bên ngoài từ mã phần mềm. So với hàm VBA Shell, các hàm Windows này linh hoạt hơn, nhưng VBA không hỗ trợ chúng và do đó bài viết này không đề cập đến chúng.