Creare un elenco dei nomi dei files contenuti in una cartella.

Spesso avrei trovato utile poter avere un elenco di tutti i file contenuti in una cartella, ma Windows non consente una stampa di questo tipo. Questa necessità può scaturire dal voler conservare un elenco dei files presenti in una nostra cartella, sia per verificare eventuali discordanze future, oppure per tenere un elenco di file appartenenti ad una specifica categoria, per esempio alle immagini, e quindi con estensione .Jpg oppure .Bmp, ecc.ecc. Per questo motivo presento una routine che ha il compito di creare un elenco in formato testo (txt) che riporterà il nome dei files di una eventuale estensione, oppure tutti, contenuti all'interno di una cartella  o sottocartella del nostro hard-disk. Premetto che mi solo limitato a preimpostare il percorso dell'unità su cui cercare e scrivere, nell'unità C:\ - Volendo potrete modificare le istruzioni in modo che anzichè digitare solo il nome della cartella, possiate digitare un percorso completo, ampliando la possibilità di scrivere o reperire cartelle con relativi files, su qualunque unità del vostro computer. La routine si basa su quattro variabili ottenute con quattro InputBox. Le variabili memorizzano rispettivamente:

  • Il nome della cartella in cui salvare il file di testo che formerà l'elenco

  • Il nome con il quale salvare il file di testo

  • Il nome della cartella di cui vogliamo l'elenco dei files ivi contenuti

  • I nome del file di cui vogliamo registrare il nome, oppure una combinazione di caratteri jolli per avere l'elenco di tutti i file con una certa estensione ( *.xls - opp. *.jpg ecc.ecc.), oppure la combinazione  (*.* )per avere l'elenco di tutti i files e sottocartelle presenti.

Ho inserito un'istruzione che controlla se esiste la cartella di destinazione, in caso non esista, crea la cartella. Queste le istruzioni :

Sub Creaelenco()
On Error Resume Next
'chiedo in quale cartella voglio salvare il file di testo
Dim mival, mess, tito
mess = "" & vbCr & vbCr & _
"Scrivi in quale cartella" & vbCr & _
"salvare il file su C:\ " & vbCr & _
"NON scegliere sottocartelle SE" _
& " inesistenti !"
tito = "Inserisci Nome Cartella"
mival = InputBox(mess, tito)
' primo vettore che prende il nome della cartella dato tramite 'la inputbox
x = "C:\" + mival + "\"
'completo mival anteponendo l'unità C:\ e facendolo seguire dalla 'barra \ separatrice
If x = "C:\" + "" + "\" Then Exit Sub
'se non metto il nome nella inputbox e quindi mival è 'vuoto (""), esco dalla routine
'ora chiedo con quale nome salvare il file di testo attraverso una seconda inputbox
Dim mytesto, messa, titolo
messa = "Inserisci il nome per il file"
titolo = "" & vbCr & vbCr & _
"Ora scrivi il nome con cui salvare il file"
mytesto = InputBox(titolo, messa) + ".txt"
'con mytesto prendo il nome per salvare il file
If mytesto = "" + ".txt" Then Exit Sub
'se mytesto è vuoto, esco dalla routine

'inizia il dimensionamente per l'oggetto FileSystemObject
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
'sotto: eseguo il controllo per vedere se in nome contenuto in mival è già una cartella 'esistente
If fso.FolderExists(x) Then GoTo 10
'se la cartella esiste, passo a 10, e salto la creazione
Dim irisposta As Integer
'pongo la domanda se si vuol creare una nuova cartella nel caso 'non esista la cartella richiesta
irisposta = MsgBox("La cartella non esiste, vuoi crearla?", vbYesNo)
If irisposta = vbYes Then
' se la risposta sarà SI
Set f = fso.CreateFolder(x)
'allora creo la cartella (x è il nome cartella completo di path)
Else
'altrimenti, se rispondo NO
Exit Sub 
'esco dalla routine
End If
10:

'sotto: inizia l'istruzione per l'apertura di un file di testo
Open x + mytesto For Output As #1
'Crea un nuovo file di testo
'inizia la richiesta della cartella dove leggere i files per ottenere l'elenco loro nomi
Dim MyPath, MioFile
titolo = "Inserisci Cartella di provenienza"
messa = "" & vbCr & vbCr & _
"Ora scrivi di quale cartella vuoi creare" _
& " l'elenco dei files"
MyPath = "C:\" + InputBox(titolo, messa)
'MyPath sarà formato dal nome digitato nella inputbox, la terza,  con già anteposta l'unità C:\
If MyPath = "C:\" + "" Then Exit Sub
'se MyPath sarà vuoto ("") esco dalla routine

'ora richiedo l'estensione dei files di cui voglio l'elenco
messa = "Inserisci Nome file di provenienza"
titolo = "" & vbCr & vbCr & _
"Ora scrivi il nome del file o l'estensione." & vbCr & _
" Se vuoi tutti i file della cartella" _
& " puoi scrivere i caratteri jolli *.*"
MioFile = MyPath + "\" + InputBox(titolo, messa)
'con la quarta inputbox prendo 'l'estensione del file o tutti i file o un solo file
If MioFile = MyPath + "\" + "" Then Exit Sub
'se non fornisco l'estensione, esco dalla 'routine
MyName = Dir(MioFile, vbDirectory)
'inizia il ciclo che cerca tutti i file con l'estensione indicata all'interno della cartella voluta
Do While MyName <> ""
'fino a che la cartella è alla fine (vuota)
'Inserisce nel file txt il nomifiles della cartella specificata
Print #1, MyName; ""
MyName = Dir
Loop
MyError = CVErr(32767)
Close #1
'Chiude il file di testo
MsgBox "L'elenco File " & mytesto & " è stato completato"
Set fso = Nothing
Resume
End Sub

Come ho detto, è possibile modificare le istruzioni facendo in modo da poter cercare non solo sull'unità C:\, ma in qualunque unità del nostro computer, i file di cui vorremo un elenco, sarà sufficiente eliminare le preimpostazioni che determinano l'assegnazione dell'unità, avendo però l'accortezza di scrivere noi il percorso completo della cartella di provenienza dati. Facendo un esempio solo sulla provenienza, si può modificare la riga:

MyPath = "C:\" + InputBox(titolo, messa)

con

MyPath = InputBox(titolo, messa)

e nella finestra (inputbox) che ci porrà la domanda, scriveremo il percorso della cartella di cui fare l'elenco files, completo. per esempio

D:\Immagini

Spero di essere stato chiaro ma soprattutto di esservi stato d'aiuto. Buon lavoro.