2015-10-16 115 views
0

我有一个特定的VBA代码,即FTPs文件到某个位置。FTP代码无法在客户端PC上工作

Function SendFtpFile_F(csvPath As Variant) As Boolean 
    Dim rc As Integer 
    Dim iFreeFile As Integer 
    Dim sFTPUserID As String 
    Dim sFTPPassWord As String 
    Dim sWorkingDirectory As String 
    Dim sFileToSend As String 

    Const FTP_BATCH_FILE_NAME = "myFtpFile.ftp" 
    Const INCREASED_BUFFER_SIZE = 20480 

    fsheetname = ActiveSheet.Name 

     Select Case fsheetname 

     Case "Price Change" 

     flocation = "price_change" 

    Case "New SKU" 

    flocation = "new_sku" 

    Case "SKU Change" 

     flocation = "sku_change" 

     Case "Discontinuation" 

     flocation = "sku_deletion" 

    End Select 


    SendFtpFile_F = False 

    'csvPath = "C:\Users\10613527\Desktop\test\" 
    csvPath = csvPath + "\" 
    sWorkingDirectory = csvPath 

    sFileToSend = Namex 

    On Error GoTo FtpNECAFile_EH 

    'Kill FTP process file if it exists 
    If Dir(sWorkingDirectory & FTP_BATCH_FILE_NAME) <> "" Then 
     Kill sWorkingDirectory & FTP_BATCH_FILE_NAME 
    End If 

    'Create FTP process file 
    iFreeFile = FreeFile 
    Open sWorkingDirectory & FTP_BATCH_FILE_NAME For Output As #iFreeFile 
    Print #iFreeFile, "open " & FTP_ADDRESS 
    Print #iFreeFile, FTP_USERID 
    Print #iFreeFile, FTP_PASSWORD 
    Print #iFreeFile, "ASCII" 
    Print #iFreeFile, "CD " & flocation 
    Print #iFreeFile, "put """ & sWorkingDirectory & sFileToSend & """" 
    Print #iFreeFile, "bye" 
    Close #iFreeFile 

    'Shell command the FTP file to the server 
    Shell "ftp -i -w:20480 -s:" & sWorkingDirectory & FTP_BATCH_FILE_NAME 

    SendFtpFile_F = True 

    GoTo FtpNECAFile_EX 

    FtpNECAFile_EH: 
     MsgBox "Err", Err.Name 

    FtpNECAFile_EX: 

    Exit Function 


    End Function 

此代码完全适用于我的机器,但FTP部分在我的客户机器中不起作用。

观察:当我不打印“再见”命令,然后在我的电脑上运行该代码,我可以看到一个命令行弹出显示成功转让,但同样没有在我的客户端PC发生。 cmd窗口甚至没有打开,我注意到FTP的批处理文件写得完全没有问题。请帮忙。

+0

尝试设置ftp.exe的完整路径。添加诸如'> c:\ temp \ error.log'之类的东西可能会存储ftp.exe打印的任何错误消息以供以后查看。 – Marged

+0

@Marged它写入文件,创建它,我不知道如果我通过“设置完整路径”得到你的意思谢谢 – Anarach

+0

@Anarach,Windows FTP.exe文件存在的完整路径。几年前,我发生过这种情况,我们的计算机上安装了第三方ftp程序,当我的代码执行时,它首先从第三方程序中找到了ftp.exe,因为它在PATH变量中更高。 – Squashman

回答

0

文件正在工作,看起来批处理文件应该与输出文件位于同一位置,并且在输出位置应该没有其他文件。

例如,您无法将文件保存在桌面上,如果目标目录中有大量文件,则shell扩展无法读取它。

修复:在桌面上创建另一个文件夹并保存文件,然后执行FTP成功。

-2

如果是我,我想我会在ftp文件本身中切换PASV命令,看看客户端的防火墙是否阻止了这部分的DATA部分。

+0

谢谢你的答案,不知道该怎么做..你能帮我吗 – Anarach

+0

在Windows中没有'PASV'命令FTP + OP声称FTP不是甚至开始。 –

+0

对于谁投了我这将是很好,如果你不会这样做的工作解决方案。您想在FTP的MS-DOS版本中使用的命令是:“quote pasv”。 “报价”是你如何发送命令到服务器进行更改,“pasv”将切换有问题的设置。 –