【问题标题】:Automate FTP upload with VBA使用 VBA 自动上传 FTP
【发布时间】:2019-04-29 03:57:57
【问题描述】:

我正在尝试自动化以下过程:

  1. 将数据从数据库导入 Microsoft Excel (myfile.xls) 并进行格式化。
  2. 文件另存为myfile.txt
  3. 通过FTP 上传到服务器。

我已经上传了FTP,但我遇到了在VBA 脚本中创建的批处理文件的问题。

我目前的脚本如下:

Dim MY_FILENAME As String
MY_FILENAME = "C:\user\sam\test" & "filename" & Format(CStr(Now), "yyyy_mm_dd_hh_mm") & ".BAT"


Dim FileNumber As Integer
Dim retVal As Variant

FileNumber = FreeFile

'create batch file
Open MY_FILENAME For Output As #FileNumber
Print #FileNumber, "FTP 00.0.000.000"
Print #FileNumber, "username"
Print #FileNumber, "password"
Print #FileNumber, "ascii crlf"
Print #FileNumber, "put  " myfile.txt; "  'location'"
Print #FileNumber, "exit"
Close #FileNumber

'run batch file
retVal = Shell(MY_FILENAME, vbNormalFocus)

当我运行此脚本时,它会打开与服务器关联的 IP,但无法输入登录凭据。谁能告诉我哪里出错了?

【问题讨论】:

  • 我在你的帖子中看不到任何Windows batch-file,所以我删除了相关标签;请在分配之前阅读标签信息...
  • 嗨 aschipfl,上面的脚本创建了一个批处理文件,然后运行它。批处理文件内容为:FTP 00.0.000.000,用户名,密码,ascii crlf,put myfile.txt; '位置',退出
  • @aschipfl 很明显这篇文章是关于创建批处理文件的!!!
  • @samc 如果您将MY_FILENAME 的声明添加到上面的sn-p 中会有所帮助。
  • @PatrickHonorez,实际上不是,它是关于为ftp.exe 创建一个脚本,OP 错误地将其与 Windows batch-file 混合在一起,这无法正常工作; VBA 脚本应该直接运行ftp.exe 并通过其-s 选项将创建的脚本传递给它,而不是尝试调用运行ftp.exe 的批处理文件;不过我重新添加了标签批处理文件并添加了ftp标签...

标签: excel vba batch-file ftp


【解决方案1】:

问题是批处理文件首先以交互模式打开ftp 并且没有收到任何输入。如果ftp 会自行终止,您会注意到您的批处理文件然后继续执行指令usernamepassword 等。这些不是对批处理的指令而是对ftp 的指令,但是这不是 Batch 的看法。

要解决这个问题,请将所有 ftp 指令保存到第二个文件中,然后以第二个文件作为输入参数批量调用 ftp

Dim FileNumber As Integer
Dim retVal As Variant
FileNumber = FreeFile

'create batch file
Open MY_FILENAME For Output As #FileNumber
Print #FileNumber, "FTP -s<your-filename-here> 00.0.000.000"
Close #FileNumber

Open FTP_INSTRUCTIONS For Output As #FileNumber
Print #FileNumber, "username"
Print #FileNumber, "password"
Print #FileNumber, "ascii crlf"
Print #FileNumber, "put  " myfile.txt; "  'location'"
Print #FileNumber, "exit"
Close #FileNumber

'run batch file
retVal = Shell(MY_FILENAME, vbNormalFocus)

【讨论】:

  • 感谢您对我的问题的清晰解释。只是为了确认您不知道可以从 1 个文件中运行它吗?
  • @samc 不,我认为没有。您所做的一切都不适合ftp 的命令行参数,因此您需要使用第二个文件。根据您的环境,您可能只能创建 1 个指令文件,然后调用 Shell('ftp -s:&lt;filename&gt;') 而不是批处理文件。
  • 您不需要批处理文件。您只需要一个 ftp 脚本文件,并让 VBA 直接运行 ftp.exe,并将脚本文件作为参数。
  • @Squashman 你是对的,我找到了不使用批处理文件打开 FTP 的语法:Shell Environ("WINDIR") & "\System32\ftp.exe -n -s:" &
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-13
  • 2012-08-06
  • 2012-06-17
  • 2011-12-05
  • 2016-02-28
  • 2013-07-01
  • 2014-09-11
相关资源
最近更新 更多