Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 使用VBA自动化FTP上载_Excel_Vba_Batch File_Ftp - Fatal编程技术网

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

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

  • 从数据库导入到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
    自动终止,您会注意到批处理文件随后会继续执行指令
    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:”&