Pubblicato il 4 Luglio 2020 da Maurizio Matetich

Devo esportare un file verso una cartella presente in un sito web. Bella domanda ?

Si può utilizzare un programma come FileZilla per spostare manualmente un file dal nostro computer verso una cartella online.

Ma se voglio creare un sistema di esportazione automatico? In realtà utilizzando Access e VBA l’operazione è abbastanza semplice.

In pratica creo una funzione che permette di esportare il file e poi richiamo questa funzione.

La funzione, che chiamo EsportaVersoWeb, scrive in un file di testo i parametri per accedere alla cartella online e per trasferire il file. Il file di testo con i parametri si chiama Comandi.txt

Poi chiamerò un file .bat per effettuare l’operazione di trasferimento.

La funzione VBA per preparare i comandi necessari al trasferimento ftp

Ecco le istruzioni della funzione (le righe in corsivo sono dei commenti) :

Public Function EsportaVersoWeb(FileDaInviare As String) As Boolean
Dim file, stPercorso As String

Close #1
Open “C:\gestione\cmd\Comandi.txt” For Output As #1
‘server ftp = ftp.nomesito.com
Print #1, “open ftp.nomesito.com”
‘utente ftp = nome@nomesito.com
Print #1, “nome@nomesito.com”
‘password dell’utente ftp
Print #1, “passwordftp”
‘per il trasferimento posso scegliere tra la modalità binary oppure ascii
Print #1, “binary”
‘entro nella cartella web di destinazione
Print #1, “cd public_html”
Print #1, “cd wp-content”
Print #1, “cd files”

file = FileDaInviare

Print #1, “send ” & Chr(34) & file & Chr(34)
Print #1, “Close”
Print #1, “Quit”

Close #1

Eseguiamo i comandi

Dopo aver creato il file di testo con i comandi necessari per il trasferimento via ftp, procediamo con il trasferimento stesso. Queste righe sono sempre presenti nella funzione EsportaVersoWeb

stPercorso = Chr$(34) & “C:\gestione\cmd\Comandi.bat” & Chr$(34)
EsecuzioneProgramma (stPercorso)
AttendiSecondi (5)

‘se voglio, al termine, posso cancellare file C:\gestione\cmd\Comandi.txt
Kill “C:\gestione\cmd\Comandi.txt”

EsportaVersoWeb= True
End Function

La funzione per eseguire il programma

Sub EsecuzioneProgramma(NomeProgramma As String)
‘permette di eseguire qualsiasi programma e attenderne la conclusione
On Error GoTo Err_EsecuzioneProgramma

ExecCmd NomeProgramma

Exit_Err_EsecuzioneProgramma:
Exit Sub

Err_EsecuzioneProgramma:
MsgBox Err.Description
Resume Exit_Err_EsecuzioneProgramma

End Sub

Attendere alcuni secondi

Public Function AttendiSecondi(s As Integer)
‘permette di attendere s secondi
Dim PauseTime, start, Finish, TotalTime

PauseTime = s ‘ Imposta la durata.
start = Timer ‘ Imposta l’ora di inizio.
Do While Timer < start + PauseTime
‘DoEvents ‘ Passa il controllo ad altri processi.
Loop

End Function

Eseguiamo il trasferimento via ftp di un file CSV

‘invio del file csv via ftp
Dim EsportazioneOK As Boolean
Dim NomeFileCsv, Percorso ,  NomeFile  As String

Percorso=”c:\elenco file\”
NomeFile=”prova-invio”

NomeFileCsv = Percorso & NomeFile & “.csv”
EsportazioneOK = EsportaVersoWeb(CStr(NomeFileCsv))

AttendiSecondi (5)

Conclusione

Per eseguire il trasferimento via ftp di un file utilizziamo una funzione che scrive le istruzioni necessarie all’interno di un file di testo.

Poi il file di testo viene richiamato da un file batch con estensione .bat

Tutte le variabili utilizzate possono essere definite come variabili pubbliche

ad esempio

Public Const NomeFile= “nome-file-da-inviare”

in questo modo diventa facile modificare i percorsi e i nomi dei file.

Se devo inviare più di un file allora posso copiare i nomi dei file dentro una tabella e poi con un ciclo posso scrivere tutti i nomi dei file dentro al file comandi.txt