2010-10-12 269 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

允许快速闪烁在屏幕上捕捉到一个文件中的结果。