excel - 使用 VBA 自动进行 FTP 上传

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

最佳答案

问题在于批处理文件首先以交互模式打开ftp并且没有接收到任何输入。如果 ftp 自行终止,您会注意到批处理文件会继续执行指令用户名密码等。并不是对 Batch 的指令,而是对 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)

关于excel - 使用 VBA 自动进行 FTP 上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53499190/

相关文章:

sql - 在给定特定条件 SQL 的情况下,仅对不同的值求和

vba - 如何使用 VBA 将数据验证添加到单元格

batch-file - 计算机不遵守 powercfg GUID 命令行指令

windows - 使用 cmd 删除文件名前缀

vba - Excel VBA - 两个值之间的总和

VBA - 如果单元格为空白,则忽略 strBody 的一部分?

vba - 生成所有 2^n 个子集的列表

VBA Word : Difference between Font. TextColor 和 Font.ColorIndex?

windows - 如何在 windows 批处理文件或 linux shell 脚本中传递超过 10 个参数