Sicuramente, anche se non rientra nella quotidianità del nostro lavoro su Excel, ogni tanto è utile sapere come ottenere un elenco dei files e delle cartelle che sono nei nostri dischi fissi o nei CD usando il suo VBA.
Vorrei mostrare un metodo che ci permettere di compiere questa operazione.
Intanto inizio col disegnare sul foglio una ComboBox ed alcuni pulsanti prelevati dalla barra Strumenti di controllo.
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | |||||
| 2 | |||||
| 3 |
Fatto questo lavoro sul foglio di lavoro possiamo recerci nel VBA (ALT +F11 oppure Dal menù Strumenti ---> Macro ---> Visual Basic Editor, ecc).
Facciamo iniziare il lavoro entrando nel modulo relativo a ThisWorkbook
In questo modulo provvediamo a scrivere la piccola routine che provvederà a riempire la ComboBox del Foglio:
In questa routine, facendo riferimento al FileSystemObject, abbiamo accesso, tra le altre cose, all'insieme Drives che contiene tutte le unità disco presenti nel nostro computer e che andremo di seguito a leggere col ciclo For Each ... Next mettendole nella ComboBox.
La cosa dovrebbe funzionare in questo modo.
Scelta una unità disco dalla ComboBox ci viene mostrato un elenco che mostra nella prima parte un elenco di cartelle e, subito dopo, l'elenco continua con altri files presenti nella radice della unità scelta.
Selezioniamo una delle cartelle elencate possiamo visualizzarne il relativo contenuto nella colonna susseguente.
Così fino a quando non decidiamo di porre termine all'operazione.
Una discriminante per sapere se abbiamo selezionato una cella che contiene il nome della cartella da andare ad esaminare è quella di leggerne il colore.
Infatti nel codice che andremo a vedere le celle che conterranno i nomi delle cartelle del disco fisso verranno colorate.
Nella scrittura del codice procedo in questo modo:
Le due funzioni potrebbere essere inglobate nel codice dei quattro oggetti, ma siccome verrebbe su del codice ripetitivo preferisco mettere queste istruzioni in funzioni esterne da richiamare quando necessario.
Anticipo che le due funzioni assolvono al compito di leggere le cartelle ed i files del disco rigido.
Alla ComboBox è assegnato il compito di elencare tutte le cartelle ed i files del disco ivi selezionato.
Nel modulo relativo al foglio dove è stata disegnata (nell'esempio il Foglio3) è necessario scrivere del codice che viene eseguito quando, dalla ConboBox, scegliamo una unità disco.
Con questa routine prima leggiamo le cartelle dell'unità scelta, poi i files eventualmente presenti.
Da notare è l'istruzione conclusiva:
ActiveCell.Activate
che toglie il focus dal comando usato e lo riporta alla cella rpecedentemente selezionata. Questa cosa non funziona con ActiveCell.Select.
Come intuibile, premendo questo pulsante dovremmo avere un elenco di tutte le cartelle relative alla cartella selezionata dall'elenco.
Dpo aver letto il contenuto della cella selezionata ed aver cancellato la porzione di foglio da eventuali dati precedentemente scritti (Range("A3").CurrentRegion.CurrentRegion.Offset(0, C).ClearContents) andiamo a cercare le cartelle eventualmente contenute nella cartella scelta
Stessa procedura di quella appena vista, solo che ora andremo a cercare i files della cartella scelta dall'elenco. Tuttavia ora mandiamo alla routine MostraFiles anche l'argomento Attrib che ha come valori vbArchive + vbReadOnly + vbHidden + vbSystem + vbNormal
Viste queste due routine legate ai pulsanti "Solo Cartelle" e "Soli Files" possiamo procedere velocemente alla routine legata al terzo pulsante: "Cartelle e Files".
E' giunto finalmente il momento di fare la conoscenza delle due Procedure con argomento che ho preparato separatamente per semplificare la scrittura del codice fin qui visto.
La prima: quella che legge le cartelle
A questa routine vengono passati questi argomenti:
Trovata la cartella la si scrive nella cella del foglio che, per essere distinta da eventuali nomi di files, viene anche colorata
Siccome stiamo cercando le sole cartelle la prima volta che usiamo la funzione Dir() specifichiamo due argomenti:
Nelle istruzioni che seguono, una volta scartati eventuali nomi rappresentati da "." o da ".." che rappresentano la directory corrente e quella di livello superiore, controlliamo che quel che abbiamo letto dal disco sia una cartella:
If (GetAttr(Cartella & MioNome) And vbDirectory) = vbDirectory Then....
La seconda: quella che legge i files
A questa routine vengono passati i seguenti argomenti:
La routine è più semplice di quella appena vista.
Infatti passandole come argomento gli attributi vbArchive + vbReadOnly + vbHidden + vbSystem + vbNormal dai quali viene escluso il vbDirectory, vengono automaticamente escluse dalla lettura le cartelle e quindi sono da escludere controlli più approfonditi.
Questo studio, potrebbe essere uno spunto per eseguire altri tipi di applicativi, come per esempio preparare una base per la stampa di copertine, oppure per avere un elenco di tutti i contenuti dei nostri CD.
Ma vediamo un altro esempio d'uso della funzione Dir().
Cercare un elenco di un determinato tipo di file come potrebbe essere la ricerca di tutti i files immagini, o .xls, o .doc o altro.
La routine è legata ad un pulsante preso dalla barra Strumenti di controllo posto in uno dei fogli della cartella di Excel.
Per questo lavoro è richiesto che nello stesso foglio dove abbiamo disegnato il pulsante:
Con questo penso di aver esaurito l'argomento che riguarda gli usi più comuni chce si possono fare con la funzione Dir().