2015-10-16 113 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」將切換有問題的設置。 –