Excel 使用VBA自动化FTP上载
我正在尝试自动化以下过程:Excel 使用VBA自动化FTP上载,excel,vba,batch-file,ftp,Excel,Vba,Batch File,Ftp,我正在尝试自动化以下过程: 从数据库导入到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") &am
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
自动终止,您会注意到批处理文件随后会继续执行指令username
、password
等。这些指令不是批处理指令,而是ftp
,但批处理不会这么看
要解决此问题,请将所有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)
Dim FileNumber为整数
Dim retVal作为变体
FileNumber=FreeFile
'创建批处理文件
打开MY#U FILENAME以作为#FileNumber输出
打印#文件编号,“FTP-s 00.0.000.000”
关闭#文件编号
打开FTP#U指令以输出为#文件号
打印#文件号,“用户名”
打印#文件号,“密码”
打印#文件号,“ascii crlf”
打印#FileNumber,“put”myfile.txt;“‘位置’”
打印#文件编号,“退出”
关闭#文件编号
'运行批处理文件
retVal=Shell(我的文件名,vbNormalFocus)
我在你的帖子中看不到任何窗口,因此我删除了相关标签;请先阅读标签信息,然后再分配…嗨,aschipfl,上面的脚本创建了一个批处理文件,然后运行它。批处理文件的内容是:FTP 00.0.000.000、用户名、密码、ascii crlf、put myfile.txt;'位置',exit@aschipfl很明显,这篇文章是关于创建一个批处理文件的@samc如果您将MY_FILENAME
的声明添加到上面的代码段中,这会有所帮助。@Patrickhornez,实际上不是,它是关于为ftp.exe
创建脚本的,OP错误地将其与Windows混淆,而Windows无法工作;VBA脚本不应试图调用运行ftp.exe
的批处理文件,而应直接运行ftp.exe
,并通过其-s
选项将创建的脚本传递给它;尽管如此,我还是重新添加了标记批处理文件并添加了标记…感谢您对我的问题做出明确解释。只是为了确认你所知道的没有办法让它从1个文件运行?@samc不,我认为没有。您试图做的一切都不符合ftp
的cmd行paameters,因此您需要使用第二个文件。根据您的环境,您可能只需要创建一个instrutinsfile,然后调用Shell('ftp-s:')
而不是批处理文件。您不需要批处理文件。您所需要的只是一个ftp脚本文件,并让VBA直接运行ftp.exe,将脚本文件作为参数。@Squashman您是正确的,我找到了不使用批处理文件打开ftp的语法:Shell Environ(“WINDIR”)&“\System32\ftp.exe-n-s:”&