Questo file esiste?

In realtà scrivo questo articoletto per rispondere a una domanda relativa al (vecchissimo) tutorial “07 Tutorial magazzino immagini esterne gestite con VBA” .

Un codice può essere scritto in tanti modi. Quello che segue è più efficiente di quello mostrato nel tutorial e soprattutto si presta controllare l’effettiva presenza di più immagini prima di presentarle a video e a comportarsi di conseguenza.
Nell’esempio ne controlliamo DUE. Se non dovesse esistere una o nessuna di esse, verrebbe visualizzata semplicemente l’immagine alternativa nofoto.jpg.

La prima cosa da fare (se già non esiste nel progetto) è creare in VBA un modulo (menu Inserisci->Modulo), inserendo al suo interno una semplicissima funzione il cui compito è quello di verificare se un file (o una cartella) esiste, restituendo TRUE o FALSE a seconda che esista o meno. Il controllo viene effettuato semplicemente chiedendo a VBA la lunghezza del nome del file. Se fosse 0, significherebbe che semplicemente non esiste, ovvero che VBA non ha trovato quel file o quella cartella:

Public Function FileExists(ByVal path_ As String) As Boolean
    FileExists = (Len(Dir(path_)) > 0)
End Function

A questo punto non ci resta che scrivere il codice in VBA, legato a un qualunque evento, normalmente “su corrente” ma ovviamente si può sceglierne uno diverso, a seconda delle necessità. Se dovessimo legare l’evento alla pressione di un pulsante, ad esempio, utilizzeremo l’evento “su click” come nell’esempio che riporto più avanti.

Sulla maschera prenderanno posto due immagini (Immagine1 e Immagine2) e un pulsante (Comando0). La cartella in cui andremo a inserire il DB dovrà contenere al suo interno la sottocartella “attestati” dove prenderanno posto almeno 3 file: AA01.jpg, CI01.jpg e nofoto.jpg. Su queste basi il codice sarà il seguente:

Private Sub Comando0_Click()
Dim NoFoto, MyDir, NomeAttestato, NomeCI, AAfile, CIFile As String
'mettiamo in MyDir la cartella dove risiede il DB
'al cui interno avremo creato la cartella "Attestati"
MyDir = CurrentProject.Path
'NomeAttestato è il nome della foto attestato, senza estensione.
NomeAttestato = "AA01"
'NomeCI è il nome della foto CI, senza estensione.
NomeCI = "CI01"
'NoFoto è l'indirizzo completo dell'immagine alternativa
NoFoto = MyDir & "\Attestati\" & "nofoto.jpg"
'AAfile è l'indirizzo completo del file contenete l'attestato
AAfile = MyDir & "\Attestati\" & NomeAttestato & ".jpg"
'CIfile è l'indirizzo completo del file contenete la carta d'Identità
CIFile = MyDir & "\Attestati\" & NomeCI & ".jpg"
'controlla che il file attestato esista, altrimenti visualizza l'alternativa
'dal momento che la funzione restituisce o Vero o Falso, la IF viene eseguita solo se la funzione File Exists retituisce il valore TRUE
'altrimenti viene eseguita la Else
If FileExists(AAfile) Then
    Me.Immagine1.Picture = AAfile
Else
    Me.Immagine1.Picture = NoFoto
End If
'controlla che il file CI esista, altrimenti visualizza l'alternativa
If FileExists(CIFile) Then
    Me.Immagine2.Picture = CIFile
Else
    Me.Immagine2.Picture = NoFoto
End If

End Sub

Se avrete fatto tutto per bene, rinominando uno o entrambi i file (es. AA01modificato.jpg) vedrete che la routine visualizzerà quello esistente senza indugi e, al posto di quello che non esiste, l’immagine nofoto.jpg.

No thoughts on “Questo file esiste?”