Ich schrieb einige VBA-Code, der ftp.exe
über Shell-Befehl aufruft. Wenn der Code ausgeführt wird, wird der Shell-Befehl nicht ausgeführt. Wenn ich jedoch den Code im Debug-Modus durchtrete, funktioniert es jedes Mal. Hier ist der Code:VBA, Shell-Befehl ausgeführt wird funktioniert nur im Debug-Modus
Sub FTPFile(sSrc As String)
Dim sHost As String
Dim sUser As String
Dim sPass As String
Dim sDest As String
Dim sFTPCmds As String
Dim strConnect As String
'Build up the necessary parameters
sHost = "<redacted>"
sUser = "<redacted>"
sPass = "<redacted>"
sDest = "\"
'Write the FTP commands to a text file
iFNum = FreeFile
sFTPCmds = "<path redacted>" & "FTPCmd.tmp"
Open sFTPCmds For Output As #iFNum
Print #iFNum, "op " & sHost
Print #iFNum, "user " & sUser & " " & sPass
Print #iFNum, "cd " & sDest
Print #iFNum, "put " & sSrc
Print #iFNum, "bye"
Close #iFNum
Shell Environ("WINDIR") & "\System32\ftp.exe -n -s:" & sFTPCmds
End Sub
Die einzig mögliche Idee kam ich mit, dass die Benutzerberechtigungen, die diesen Befehl aufrufen, basierend auf unterscheiden, ob der Anruf erfolgt im Debug-Modus oder Laufen, aber ich bin nicht sicher, wie das zu ändern Befehl.
Danke für den Vorschlag. Als ich das versuchte, habe ich Fehler 53 Datei nicht gefunden. Also habe ich dann versucht, Variationen davon wie: Shell "" & Environ ("WINDIR") & "\ System32 \ ftp.exe -n -s:" & sFTPCMDS & "", was zu dem gleichen Problem führte, das ich habe Verkleidung und Shell "'" & Environ ("WINDIR") & "\ System32 \ ftp.exe -n -s: "& sFTPCMds &" '"was auch einen Fehler ergab 53 Datei nicht gefunden. –
Ich habe keine Erfahrung damit, aber im Allgemeinen, wenn etwas beim Debuggen funktioniert, aber nicht wenn der Code läuft, dann Es könnte ein Timing-Problem sein. Wenn Sie das zu "file not found" hinzufügen, frage ich mich, ob die von Ihnen erstellte Textdatei nicht komplett fertig ist und von der Sperrung beim Ausführen der Shell freigegeben wird. Was passiert, wenn Sie eine sinnlose Schleife einfügen in dort, die bis zu einer hohen Zahl zählt, um dem System Zeit zu geben, um die Datei zu verarbeiten? –
'Debug.Print' den Shell-Befehl und führen Sie die Zeile in PowerShell oder Eingabeaufforderung. Notizfelder in Pfadnamen erfordern Zitat Gehäuse. – Parfait