Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Excel VBA运行WinSCP脚本?_Vba_Excel_Winscp - Fatal编程技术网

如何使用Excel VBA运行WinSCP脚本?

如何使用Excel VBA运行WinSCP脚本?,vba,excel,winscp,Vba,Excel,Winscp,我编写了一个WinSCP脚本,将本地文件上载到SFTP站点。脚本保存到.txt中: WinSCP.com open sftp://username:password@address cd /export/home/Desktop/Temp put C:\Users\Dekstop\JPMC\a.xlsx close exit 然后我查看并将此代码写入Excel VBA: Sub RunWinScp() Call Shell("C:\Program Files (x86)\WinSCP\WinS

我编写了一个WinSCP脚本,将本地文件上载到SFTP站点。脚本保存到.txt中:

WinSCP.com
open sftp://username:password@address
cd /export/home/Desktop/Temp
put C:\Users\Dekstop\JPMC\a.xlsx
close
exit
然后我查看并将此代码写入Excel VBA:

Sub RunWinScp()
Call Shell("C:\Program Files (x86)\WinSCP\WinSCP.com /ini=nul/script=C:\Users\Desktop\WinSCPGetNew.txt")
End Sub
但当我试着运行它时,什么也没发生。没有错误,但文件传输也不正确。有人能帮忙吗

非常感谢

  • 您需要用双引号将
    winscp.com
    的路径括起来,因为它包含空格
  • /ini=nul
    /script=…
  • 删除
    WinSCPGetNew.txt
    脚本开头的
    winscp.com
    。winscp中没有
    winscp.com
    命令。您已经通过VBA中的
    Shell
    函数运行了
    WinSCP.com
    。这实际上已经包含在您链接到自己的问题中:
虽然您最好使用指定WinSCP命令行上的命令,以避免需要单独的命令文件:

Call Shell( _
    """C:\Program Files (x86)\WinSCP\WinSCP.com"" " + _
    "/ini=nul " + _
    "/command " + _
    """open sftp://username:password@example.com/"" " + _
    """cd /export/home/Desktop/Temp"" " + _
    """put C:\users\Desktop\JPMC\a.xlsx"" " + _
    """close"" " + _
    """exit""")

您可能只需要在命令行参数之间留出一个空格:
/ini=nul/script=
。谢谢您的建议。试图放置一个空间,但仍然不起作用。还有其他想法吗?你确定
C:\Users\Desktop\JPMC\a.xlsx
是有效路径吗?看起来应该是
C:\Users\JPMC\Desktop\a.xlsx
(假设JPMC是您的用户名)是的,我仔细检查了路径是否正确。JPMC是文件夹名。我在这篇文章中删除了我的用户名。你可能想看看:谢谢你的反馈。我按照你的建议更改了项目符号2和3。对于bullet 1,我试图通过编写:Call Shell(“”“C:\Program Files(x86)\WinSCP\WinSCP.com/ini=nul/script=C:\Users\Desktop\WinSCPGetNew.txt“”)将所有内容括在双引号中,但VBA将这一行突出显示为红色。有什么想法吗?你引用的话太多了。你的语法是错误的。引号必须仅围绕路径!使用我在回复中发布的代码。谢谢你的帮助。我从txt文件中删除了winscp.com,添加了空格,并复制了两个代码,但仍然没有一个能正常工作…仍然没有错误消息,但没有输出。我感觉我离答案很近,但就是找不到它…好吧,你实际上缺少了
-hostkey
开关,这也包含在。如果删除
/ini=nul
开关,则依赖于本地主机密钥大小写。因此,如果您将xlsx文件传输到另一台计算机,则您的代码将无法工作。您可以为自己准备(包括
-hostkey
)。
Call Shell( _
    """C:\Program Files (x86)\WinSCP\WinSCP.com"" " + _
    "/ini=nul " + _
    "/command " + _
    """open sftp://username:password@example.com/"" " + _
    """cd /export/home/Desktop/Temp"" " + _
    """put C:\users\Desktop\JPMC\a.xlsx"" " + _
    """close"" " + _
    """exit""")