我寫了一些VBA代碼,通過shell命令調用ftp.exe
。代碼運行時,shell命令不會執行。但是,如果我在調試模式下遍歷代碼,則它每次都有效。下面是代碼:運行shell命令的VBA只能在調試模式下工作
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
我想出的唯一可能的想法是,調用該命令的用戶權限不同,根據是否在調試模式或運行時出現的電話,但我不確定如何改變命令。
感謝您的建議。當我嘗試時,我找不到錯誤53文件。因此,我嘗試瞭如下變種: Shell「」&Environ(「WINDIR」)&「\ System32 \ ftp.exe -n -s:」&sFTPCmds&「」導致了同樣的問題面向,並且 Shell「'」&Environ(「WINDIR」)&「\ System32 \ ftp。exe -n -s:「&sFTPCmds&」'「這也產生了錯誤53文件not found。 –
我沒有這方面的經驗,但總的來說,如果某些東西在調試時有效,但不是代碼運行時,那麼這可能是一個時間問題,添加到「找不到文件」,讓我懷疑你創建的文本文件是否沒有完全準備好,並在執行Shell時從鎖定釋放?如果將一個無意義的for-loop在那裏通過高數來計算系統時間來處理文件? –
'Debug.Print' Shell命令並在PowerShell或命令提示符中運行該行注意路徑名稱中的空格需要引號括號 – Parfait