MS-DOS là môi trường hoàn toàn khác VBA. Tuy nhiên có những việc chúng ta không thể làm bằng VBA thì MS-DOS lại làm được.
Tôi ví dụ, công ty bạn có 2000 nhân viên. Bạn cần tạo ra 2000 folder, mỗi folder ứng với 1 nhân viên, thiết định quyền full control cho nhân viên đó.
Trong trường hợp này, ta sẽ kết hợp VBA và MS-DOS.
VBA tạo ra được 2000 folder, sau đó VBA gọi MS-DOS để chạy thiết định quyền full control.
Trên đây là ví dụ tôi đã làm trong thực tế. Bây giờ chúng ta vào nội dung bài dịch.
Liên qua tới chủ đề này, chúng ta có hai vấn đề cần quan tâm. Một là, làm thế nào để khởi động được MS-DOS từ VBA. Chúng ta không thể dùng Shell được.
Vấn đề thứ hai là, làm thế nào để lấy được kết quả đang hiển thị trên MS-DOS.
Hai vấn đề trên sẽ được giải quyết bằng WSH(Windows Scripting Host) . Phương thức Exec của WshScriptExec Object của WSH có thể khởi động được MS-DOS.
Hơn thế nữa, nó còn giúp ta lấy được kết quả hiển thị trên màn hình DOS.
Đoạn code dưới đây sẽ hiển thị toàn bộ file có trong ổ C:
(Còn nữa)
Tôi ví dụ, công ty bạn có 2000 nhân viên. Bạn cần tạo ra 2000 folder, mỗi folder ứng với 1 nhân viên, thiết định quyền full control cho nhân viên đó.
Trong trường hợp này, ta sẽ kết hợp VBA và MS-DOS.
VBA tạo ra được 2000 folder, sau đó VBA gọi MS-DOS để chạy thiết định quyền full control.
Trên đây là ví dụ tôi đã làm trong thực tế. Bây giờ chúng ta vào nội dung bài dịch.
Liên qua tới chủ đề này, chúng ta có hai vấn đề cần quan tâm. Một là, làm thế nào để khởi động được MS-DOS từ VBA. Chúng ta không thể dùng Shell được.
Vấn đề thứ hai là, làm thế nào để lấy được kết quả đang hiển thị trên MS-DOS.
Hai vấn đề trên sẽ được giải quyết bằng WSH(Windows Scripting Host) . Phương thức Exec của WshScriptExec Object của WSH có thể khởi động được MS-DOS.
Hơn thế nữa, nó còn giúp ta lấy được kết quả hiển thị trên màn hình DOS.
Đoạn code dưới đây sẽ hiển thị toàn bộ file có trong ổ C:
Mã:
Sub Sample1()
Dim WSH, wExec, sCmd As String, Result As String
Set WSH = CreateObject("WScript.Shell") ''(1)
sCmd = "dir C:\" ''(2)
Set wExec = WSH.Exec("%ComSpec% /c " & sCmd) ''(3)
Do While wExec.Status = 0 ''(4)
DoEvents
Loop
Result = wExec.StdOut.ReadAll ''(5)
MsgBox Result
Set wExec = Nothing
Set WSH = Nothing
End Sub
Bạn cần đăng nhập để thấy đính kèm
(Còn nữa)