Return FTP 使用从 VBA 执行的 WinSCP 批处理脚本上传的状态?

Return the status of an FTP upload using WinSCP batch scripting executed from VBA?

我正在与多个用户共享一个 Excel 工作簿,这些用户正在执行一个执行以下 WinSCP 批处理脚本的宏:

"C:\Program Files (x86)\WinSCP\WinSCP.com" ^
  /command ^
    "open ftp://user:pass@ftp.website.org/" ^
    "cd /incoming/data" ^
    "put ""%~dp0file.txt""" ^
    "exit"

set WINSCP_RESULT=%ERRORLEVEL%
if %WINSCP_RESULT% equ 0 (
  echo Success
) else (
  echo Error
)

exit /b %WINSCP_RESULT%

脚本从VBA执行如下:

Call Shell("C:\Users\" & Environ("username") & "\Sharepoint - Library Folder\FTP\ftpupload.bat")

执行时,命令window出现1-2秒然后消失。有没有办法让它保留 Success/Error 结果,或者更好的方法是将它传回 VBA 这样我就可以在 Ok-Window?[=15 中显示结果=]

注意:我想避免在 VBA 中注册 WinSCP COM,因为此工作簿正被多人使用,我需要尽可能少地保持它的简单性。

您的批处理文件已经 returns 退出代码指示 error/success。

因此,您只需捕获代码并采取相应行动即可。
为此,请参阅 Is it possible to return error code to VBA from batch file?

Set oSHELL = VBA.CreateObject("WScript.Shell")
Dim exitCode As Integer
exitCode = oSHELL.Run("""C:\Users\" & Environ("username") & "\Sharepoint - Library Folder\FTP\ftpupload.bat""", 0, True)
If exitCode <> 0 Then
    MsgBox "Failed", vbOKOnly, "Failure"
Else
    MsgBox "Succeeded", vbOKOnly, "Success"
End If