首页 > 解决方案 > 使用 VBA 自动上传 FTP

问题描述

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

  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,但无法输入登录凭据。谁能告诉我哪里出错了?

标签: excelvbabatch-fileftp

解决方案


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

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

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)

推荐阅读