【求助】請問一個關於SHELL的問題



贊助商連結


cinta3344
2004-03-11, 11:46 PM
請問各位先進:
如果我在VBA以SHELL來執行了一段DOS命令,要如何才能知道指令執行是否成功(例如ping另一台主機,成功則顯示成功,反之找不到主機則顯示失敗)?我試過抓取回傳值,但每次回傳的VALUE都不一樣,真是困擾啊∼

贊助商連結


leonchou
2004-03-12, 02:49 AM
若執行成功,Shell的回傳值應該是該動作的Task ID (或稱process ID),
這ID是一個識別碼,供其他VBA指令辨識用的,例如 AppActivate。
而所謂的執行成功與失敗,指的是Shell本身,而非所執行的程式或指令。
以本例來說,Shell確實執行了ping.exe就傳回Task ID,不管ping執行的結果如何。

至於要如何偵測 ping 的結果,我也不會... :p

leonchou
2004-03-12, 06:40 PM
看這個能否給你一點靈感... :D
http://www.pczone.com.tw/showthread.php?t=117234

leonchou
2004-03-13, 01:13 AM
這是一位大師級高手教我的,Win2K+Office2K測試OK~
不在於程序碼有多艱深,而是巧思與靈感。
(真恍然大悟, 為何就沒想到導出文字檔呢? >"< )


Sub Ping()
Shell "cmd /c ping www.pczone.com.tw > C:\test\ping.txt"
Application.Wait (Now + Timevalue("0:00:02"))
On Error Resume Next
Open "C:\test\ping.txt" For Input As #1
Do While Not EOF(1)
Line Input #1, TextLine
i = i + 1
Cells(i, 1) = TextLine
P = InStr(TextLine, "Destination")
P1 = InStr(TextLine, "Request")
If P <> 0 Or P1 <> 0 Then
MsgBox "測試失敗"
GoSub Line
End If
Loop
MsgBox "測試成功"
Line:
Close #1
End Sub

若結果不正確,Application.Wait秒數試著加多一點。

cinta3344
2004-04-22, 12:41 AM
非常感謝LEO兄的指導,導專案繁忙
不知不覺就太久沒來了∼
Shell是個相當不負責任的小子,只負責丟卻不負責收回:(