ShellAndWait не работает - PullRequest
       5

ShellAndWait не работает

1 голос
/ 13 октября 2010

Я использую ShellAndWait отсюда http://www.cpearson.com/excel/ShellAndWait.aspx, и я продолжаю возвращать 1 (что означает, что команда не работает в Windows). Но когда я вставляю свой cmdLine в Start, Run box, он работает нормально. Есть идеи? Я использую Excel VBA для этого, и вот мой код, который я вызываю 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

Ответы [ 3 ]

2 голосов
/ 13 октября 2010

Введите PAUSE в качестве последней строки в Minacs.bat, чтобы окно команды оставалось открытым, пока вы не нажмете клавишу.Это должно дать вам шанс увидеть, что происходит.

Вам также следует пересмотреть свой код VBA.Он вызывает одну и ту же команду ShellAndWait как минимум дважды ... один раз перед блоком If, а затем снова, чтобы запустить блок If.И он может продолжать попытки, пока не достигнет условия If/ElseIf, которое соответствует возвращаемому значению из ShellAndWait.

Измените код для выполнения 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
1 голос
/ 15 июля 2011

Вы можете добавить

batchlog.txt

, чтобы результат, который быстро мигает на экране, был записан в файл.

0 голосов
/ 13 октября 2010

не берите в голову, я просто подумал попробовать другую папку, C: \ temp, и она сработала, так что это что-то с моей папкой, буду продолжать тестирование, чтобы увидеть, что именно

EDIT

Это все еще не работает. теперь он проходит и возвращает 0, что является успехом, но файл не размещен на сайте 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...