我正在尝试自动化以下过程:
- 数据从数据库导入到 Microsoft Excel (
myfile.xls
) 并进行格式化。 - 文件另存为
myfile.txt
。 - 通过
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/