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.
|