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.
Apri l'indice dell'articolo
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
Scrivi un commento