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
我正在与多个用户共享一个 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