VBA a přenos na/z FTP Vyřešeno

Programy pro práci v kanceláři (Word, Excel, Access…=>Office)

Moderátor: Mods_senior

Azuzula
Level 3
Level 3
Příspěvky: 452
Registrován: leden 12
Bydliště: Země, bohužel...
Pohlaví: Žena
Stav:
Offline
Kontakt:

VBA a přenos na/z FTP

Příspěvekod Azuzula » 27 kvě 2012 21:59

Ahoj,
měla bych otázku na přenos souborů na a z FTP pomocí VBA. Našla jsem x maker a 2 z nich zprovoznila, ale co mě trápí je to, že přenesený soubor (je jedno jakým směrem) se sice vytvoří ale byl nulové délky, takže nepoužitelný. A teď je tady otázka: co to způsobilo?

Mám WinXP SP3, Excel 2010 a FTP mám na ftp.sweb.cz (je to od seznam.cz)

A to makro je následující:

Kód: Vybrat vše

Sub PublishFile()
Dim strDirectoryList As String
Dim lStr_Dir As String
Dim lInt_FreeFile01 As Integer
Dim lInt_FreeFile02 As Integer

On Error GoTo Err_Handler
    lStr_Dir = ThisWorkbook.Path
    lInt_FreeFile01 = FreeFile
    lInt_FreeFile02 = FreeFile

    '' ANW  07-Feb-2003 :
    strDirectoryList = lStr_Dir & "\Prenos"

    '' Delete completion file
    If Dir(strDirectoryList & ".out") <> "" Then Kill (strDirectoryList & ".out")

    '' Create text file with FTP commands
    Open strDirectoryList & ".txt" For Output As #lInt_FreeFile01
    Print #lInt_FreeFile01, "open ftp.sweb.cz"
    Print #lInt_FreeFile01, "uživatel"
    Print #lInt_FreeFile01, "heslo"
    Print #lInt_FreeFile01, "cd /složka"
    Print #lInt_FreeFile01, "binary"
   
    Print #lInt_FreeFile01, "send " & ThisWorkbook.Path & "\pic.jpg /pic.jpg" 'pro odeslání
    'Print #lInt_FreeFile01, "recv \pic.jpg " & ThisWorkbook.Path & "\pic.jpg" 'pro stažení
   
    Print #lInt_FreeFile01, "bye"
    Close #lInt_FreeFile01

    '' Create Batch program
    Open strDirectoryList & ".bat" For Output As #lInt_FreeFile02
    Print #lInt_FreeFile02, "ftp -s:" & strDirectoryList & ".txt"

    Print #lInt_FreeFile02, "Echo ""Complete"" > " & strDirectoryList & ".out"
    Close #lInt_FreeFile02

    '' Invoke Directory List generator
    Shell (strDirectoryList & ".bat") ', vbHide '', vbMinimizedNoFocus
    'Wait for completion
    Do While Dir(strDirectoryList & ".out") = ""
        DoEvents
    Loop

    Application.Wait (Now + TimeValue("0:00:03"))

    '' Clean up files
    If Dir(strDirectoryList & ".bat") <> "" Then Kill (strDirectoryList & ".bat")
    If Dir(strDirectoryList & ".out") <> "" Then Kill (strDirectoryList & ".out")
    If Dir(strDirectoryList & ".txt") <> "" Then Kill (strDirectoryList & ".txt")

bye:

Exit Sub

Err_Handler:
    MsgBox "Error : " & Err.Number & vbCrLf & "Description : " & Err.Description, vbCritical
    Resume bye

End Sub

To druhé makro je hodně podobné, používá také ftp.exe obsažené ve win.
Budu vděčná za každou radu.
Pokud je to vše.
Vše co znám z VBA jsem se naučila tady na fóru, na Office.lasakovi, david-zbiral.cz a hlavně hledáním na googlu.
SZ není poradna, na pokládání dotazů je tu fórum. Děkuji.

Reklama
Azuzula
Level 3
Level 3
Příspěvky: 452
Registrován: leden 12
Bydliště: Země, bohužel...
Pohlaví: Žena
Stav:
Offline
Kontakt:

Re: VBA a přenos na/z FTP  Vyřešeno

Příspěvekod Azuzula » 29 kvě 2012 20:40

No, tak jsem se nakonec dostala od FTP.exe k NcFTP a s většími potížemi, s menším nasměrováním se mi to podařilo zprovoznit :-) Tak kdyby to ještě někdo náhodou hledal tak dokončím vlákno.

Makro nakonec vypadá úplně jinak. To předchozí vytváří konfigurační soubor (.txt), batch soubor (.bat) a kontrolní výstupní soubor (.out). Kdyby FTP.exe fungovalo jak má a nebyl to jen krám co se dá použít jen když má člověk veřejnou IP, tak je to OK.
Ale protože to je více-méně šmejd, nakonec jsem to vyřešila s NcFTP a vygenerovaným batch souborem.

Kód: Vybrat vše

Sub ftp_stahni()
Dim cesta As String, sesit As String, soubor As String
Dim bat_freefile As Integer

cesta = ThisWorkbook.Path
sesit = ThisWorkbook.Name
soubor = cesta & "\prenos"
bat_freefile = FreeFile

'zápis .bat souboru
Open soubor & ".bat" For Output As #bat_freefile
Print #bat_freefile, "ncftpget -u login -p heslo ftp.adresa.cz " & cesta & "\ " & "/slozka/na/ftp/" & sesit 'cesty jsou nejdříve kam a potom odkud
Close #bat_freefile

Shell (soubor & ".bat") 'spouští přenos
Application.Wait (Now + TimeValue("0:00:01"))
If Dir(soubor & ".bat") <> "" Then Kill (soubor & ".bat") 'maže .bat soubor
End Sub
Sub ftp_uloz()
Dim cesta As String, sesit As String, soubor As String
Dim bat_freefile As Integer

cesta = ThisWorkbook.Path
sesit = ThisWorkbook.Name
soubor = cesta & "\prenos"
bat_freefile = FreeFile

'zápis .bat souboru
Open soubor & ".bat" For Output As #bat_freefile
Print #bat_freefile, "ncftpput -u login -p heslo ftp.adresa.cz /slozka/na/ftp/ " & cesta & "\" & sesit 'cesty jsou nejdříve kam a potom odkud
Close #bat_freefile

Shell (soubor & ".bat") 'spouští přenos
ActiveWindow.WindowState = xlMinimized
Application.Wait (Now + TimeValue("0:00:01"))
If Dir(soubor & ".bat") <> "" Then Kill (soubor & ".bat") 'maže .bat soubor
End Sub

řešení a syntaxe pro ovládání NcFTP je zde: viewtopic.php?f=8&t=87034
Pokud je to vše.
Vše co znám z VBA jsem se naučila tady na fóru, na Office.lasakovi, david-zbiral.cz a hlavně hledáním na googlu.
SZ není poradna, na pokládání dotazů je tu fórum. Děkuji.


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek

Zpět na “Kancelářské balíky”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 7 hostů