2010-10-12 267 views
1

我在這裏使用ShellAndWait http://www.cpearson.com/excel/ShellAndWait.aspx,並且我一直得到1返回(這意味着該命令在Windows中不起作用)。但是,當我將我的cmdLine粘貼到開始,運行框它運行良好。有任何想法嗎?我爲此使用Excel VBA,這裏是我的代碼,我打電話給ShellAndWait 我做錯了什麼?ShellAndWait不能正常工作

非常感謝你

Sub test() 

Dim cmdLine As String 

cmdLine = "C:\Documents and Settings\natalie.rynda\My Documents\Marta\Calling Files\_SFTP\Minacs.bat" 

ShellAndWait cmdLine, 1000, vbHide, PromptUser 

If ShellAndWait(cmdLine, 1000, vbHide, PromptUser) = 0 Then 
MsgBox "yes!!!!!!" 
ElseIf ShellAndWait(cmdLine, 1000, vbHide, PromptUser) = 1 Then 
MsgBox "1" 
ElseIf ShellAndWait(cmdLine, 1000, vbHide, PromptUser) = 2 Then 
MsgBox "2" 
ElseIf ShellAndWait(cmdLine, 1000, vbHide, PromptUser) = 3 Then 
MsgBox "3" 
ElseIf ShellAndWait(cmdLine, 1000, vbHide, PromptUser) = 4 Then 
MsgBox "4" 
ElseIf ShellAndWait(cmdLine, 1000, vbHide, PromptUser) = 5 Then 
MsgBox "5" 
ElseIf ShellAndWait(cmdLine, 1000, vbHide, PromptUser) = 6 Then 
MsgBox "6" 
End If 

End Sub 
+0

您需要查看ShellAndWait打開的命令窗口中發生了什麼 - 將vbNormalFocus替換爲vbHide。找到並解決問題後,可以切換回vbHide。 – HansUp 2010-10-12 22:48:17

+0

它閃爍得太快,我不明白它說什麼。另外,如果它給出了一個錯誤,那麼爲什麼ShellAndWait說它是成功的?並且謝謝 – lalachka 2010-10-12 22:56:57

+0

我無法捕捉到這條消息,但這是關於某些命令無法識別的問題。我迷路了,如果我通過雙擊運行Minacs.bat它一切正常。另外,爲什麼它從ShellAndWait給我成功? – lalachka 2010-10-12 23:14:04

回答

2

輸入PAUSE作爲Minacs.bat中的最後一行,以保持命令窗口打開,直到您按下一個鍵。這應該讓你有機會看到發生了什麼。

你也應該修改你的VBA代碼。它至少調用兩次相同的ShellAndWait命令...一次在If塊之前,然後再次啓動If塊。它可以繼續嘗試,直到遇到與ShellAndWait的返回值匹配的If/ElseIf條件。

將代碼更改爲僅執行一次ShellAndWait,並將返回值存儲在變量中。然後你可以在Select Case塊中評估變量。

Sub test() 
Dim cmdLine As String 
Dim strMsg As String 
Dim lngResult As Long 

cmdLine = "C:\TEMP\Minacs.bat" 

'lngResult = ShellAndWait(cmdLine, 100000, vbHide, AbandonWait) ' 
lngResult = ShellAndWait(cmdLine, 100000, vbNormalFocus, AbandonWait) 

Select Case lngResult 
Case 0 
    'does some stuff here, like send an email, omitted ' 
Case 1 
    strMsg = "The file hasn't been uploaded." & vbCrLf & _ 
     "Wait operation failed due to a Windows error." 
Case 2 
    strMsg = "The file hasn't been uploaded." & vbCrLf & _ 
     "The operation timed out." 
Case 3 
    strMsg = "The file hasn't been uploaded." & vbCrLf & _ 
     "An invalid value was passed to the procedure." 
Case 4 
    strMsg = "The file hasn't been uploaded." & vbCrLf & _ 
     "The system abandoned the wait." 
Case 5, 6 
    strMsg = "The file hasn't been uploaded." & vbCrLf & _ 
     "The user abandoned the wait." 
Case Else 
    strMsg = "WTF?!!!" 
End Select 

If Len(strMsg) > 0 Then 
    MsgBox strMsg 
End If 
End Sub 
+0

非常感謝你,我知道我把它叫了兩次,我想也許我把它放在了錯誤的地方,我被卡住了,我準備嘗試最愚蠢的事情。嘗試暫停現在,並感謝您的修改,瞭解了一堆,將使用你的 – lalachka 2010-10-13 16:32:38

+0

)))))))))))))))))))))我愛的WTF)))))) ))))))))))) – lalachka 2010-10-13 16:37:00

+0

'psftp'不被識別爲內部或外部命令,可操作程序或批處理文件。 這怎麼可能?爲什麼它通過雙擊工作? psftp.exe是在相同的c:\ temp文件夾中 – lalachka 2010-10-13 16:39:36

0

沒關係,我只是想嘗試不同的文件夾,C:\ TEMP和它的工作,所以它的東西與我的文件夾,將繼續測試,看看究竟是什麼

編輯

它仍然沒有工作。現在它正在通過並返回0,即Success,但文件不會發布到SFTP站點。這裏是確切的代碼我使用

Dim cmdLine As String 

CMDLINE = 「C:\ TEMP \ Minacs.bat」

ShellAndWait CMDLINE,100000,vbHide,AbandonWait

If ShellAndWait(cmdLine, 100000, vbHide, AbandonWait) = 0 Then 


'does some stuff here, like send an email, omitted 


ElseIf ShellAndWait(cmdLine, 100000, vbHide, AbandonWait) = 1 Then 
MsgBox "The file hasn't been uploaded." & vbCrLf & "Wait operation failed due to a Windows error." 
ElseIf ShellAndWait(cmdLine, 100000, vbHide, AbandonWait) = 2 Then 
MsgBox "The file hasn't been uploaded." & vbCrLf & "The operation timed out." 
ElseIf ShellAndWait(cmdLine, 100000, vbHide, AbandonWait) = 3 Then 
MsgBox "The file hasn't been uploaded." & vbCrLf & "An invalid value was passed to the procedure." 
ElseIf ShellAndWait(cmdLine, 100000, vbHide, AbandonWait) = 4 Then 
MsgBox "The file hasn't been uploaded." & vbCrLf & "The system abandoned the wait." 
ElseIf ShellAndWait(cmdLine, 100000, vbHide, AbandonWait) = 5 Or ShellAndWait(cmdLine, 10000, vbHide, AbandonWait) = 6 Then 
MsgBox "The file hasn't been uploaded." & vbCrLf & "The user abandoned the wait." 
End If 
1

您可以添加

batchlog.txt

允許快速閃爍在屏幕上捕捉到一個文件中的結果。