Macro para transferir archivos a un sitio FTP
Recientemente tuve un caso donde luego de realizar unos cálulos automatizados en Excel, el resultado debía transferirse a un sitio FTP. El desafío entonces es si es posible crear una manera automatizada de transferir estos archivos al sitio remoto.
Encontré varios recursos en línea y gracias a ellos desarrollé la siguiente solución
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
Sub UploadFile() Dim strDirectoryList As String Dim lStr_Dir As String Dim lInt_FreeFile01 As Integer Dim lInt_FreeFile02 As Integer Dim nn As String On Error GoTo Err_Handler lStr_Dir = ThisWorkbook.Path lInt_FreeFile01 = FreeFile lInt_FreeFile02 = FreeFile nn = "ftpcom" strDirectoryList = lStr_Dir & "\" & nn '' Borrar archivo de cierre If Dir(strDirectoryList & ".out") <> "" Then Kill (strDirectoryList & ".out") '' Crear archivo de texto con instrucciones FTP Open strDirectoryList & ".txt" For Output As #lInt_FreeFile01 Print #lInt_FreeFile01, "!REM upload files" Print #lInt_FreeFile01, "open ftp.agiltools.com" Print #lInt_FreeFile01, "USER suusuarioaqui supasswordaqui" Print #lInt_FreeFile01, "binary" Print #lInt_FreeFile01, "!REM turn off interactive mode" Print #lInt_FreeFile01, "prompt" Print #lInt_FreeFile01, "mput """ & ThisWorkbook.Path & "\project.XML""" Print #lInt_FreeFile01, "bye" Close #lInt_FreeFile01 '' Crear archivo Batch Open strDirectoryList & ".bat" For Output As #lInt_FreeFile02 Print #lInt_FreeFile02, "ftp -n -s:""" & strDirectoryList & ".txt""" Print #lInt_FreeFile02, "Echo ""Complete"" > """ & strDirectoryList & ".out""" Close #lInt_FreeFile02 PathCrnt = ActiveWorkbook.Path Shell ("""" & PathCrnt & "\" & nn & ".bat""") 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 |
En síntesis es una macro que crea un archivo de texto con las instrucciones en sintaxis FTP, luego crea un archivo Batch que transfiere instrucciones MS-DOS siguiendo cada una de las líneas del archivo de texto. Al finalizar, crea un archivo con extensión .out donde se confirma la transferencia.
Nótese que es necesario cambiar el código para agregar el usuario y password correcto. En ocasiones el sitio FTP no requiere password pues la conexión es anónima. Si este es el caso, simplemente remueva esas dos líneas del código.
El siguiente video muestra el programa en ejecución.