Con il tempo nel computer si accumulano molti file di tipo diverso. Si desidera raccogliere i nomi di tutti i file di un certo tipo e crearne così un elenco. Le relative informazioni dovrebbero essere lette in una tabella o un database. Un programma in Vba permette di scrivere direttamente in Excel i contenuti di una data cartella, raccogliendo i dati richiesti in un foglio di calcolo
Aprire una nuova cartella di lavoro di Excel ed eseguire Strumenti/Macro/Macro. Fornire un nome per la macro, per esempio “Ricerca”, e poi fare clic su Crea. Nell’editor Vba si inserirà poi il seguente codice
Dim z, SubCartella As Variant
Sub Ricerca()
Dim Drive,Files As String
z = 2
’Svuota zona
[a1:d4000] = “”
Drive= “C:\”
Drive= InputBox(“Cartella dove effettuare 6
6 la ricerca:”, “Drive & Cartella”, “C:\”)
If Drive= “” Then Exit Sub
SubCartella= MsgBox(“Includere 6
6 le sottocartelle?”, vbYesNo, “SubCartella”)
Files= “*.*”
Files= InputBox(“File da ricercare:”,6
6 “TipoFile”, “*.*”)
If Files= “” Then Exit Sub
TrovaFile Drive, Files
End Sub
Sub TrovaFile(Drive, Files)
Dim temp, wdhlg, NomeFile As String
On Error Resume Next
If Right(Drive, 1) <> “\” Then Drive= Drive + “\”
temp = Dir(Drive & Files)
Do While Len(temp)
NomeFile = Drive & temp
Application.StatusBar = NomeFile
Cells(z, 1).Select
Cells(z, 1) = Drive & temp
Cells(z, 2) = FileLen(Drive & temp)
Cells(z, 3) = FileDateTime(Drive & temp)
Cells(z, 4) = temp
z = z + 1
temp = Dir()
Loop
temp = Dir(Drive, vbDirectory)
If SubCartella = vbNo Then temp=””
Do While Len(temp)
If (temp <> “.”) And (temp <> “..”) Then
If (GetAttr(Drive & temp) 6
6 And vbDirectory) = vbDirectory Then
TrovaFile Drive & temp, Files
z = z – 1
wdhlg = Dir(Drive, vbDirectory)
z = z + 1
Do While wdhlg <> temp
wdhlg = Dir()
Loop
End If
End If
temp = Dir()
Loop
On Error GoTo 0
Application.StatusBar = False
End Sub
Il programma contiene due subroutine, Cerca e Cercafile. Prima vengono dichiarate per entrambe le variabili “z” e “SubCartella”, alle quali viene assegnato il valore nella prima routine. Esse definiscono la riga della tabella che in seguito conterrà i file. L’istruzione successiva cancella l’intera area della tabella. Poi viene creata una piccola finestra di dialogo che chiede di fornire alcune impostazioni: il nome della cartella, se devono essere incluse le sottodirectory, e quali file vanno elencati. I valori predefiniti compaiono come valori di default, modificabili. Se non si immette alcun dato la procedura termina. Diversamente viene attivata la subroutine Cercafile e viene dato inizio alla ricerca diretta. Il sottoprogramma aggiunge se necessario la barra inversa (\) alla fine del percorso e legge poi i contenuti della cartella nella variabile “temp”. Ogni volta viene incrementato il contatore z.
Fino a che la variabile “temp” riceve nuovi dati, le istruzioni successive le trasferiscono nella corrispondente riga della tabella. L’istruzione “temp=Dir(drive,vbDirectory)” esegue la ricerca entro le sottocartelle. Se si vogliono tralasciare le sottodirectory il programma le elimina dall’elenco. Fin quando non arriva alle directory di sistema “.” e “..” il programma prosegue la ricerca dei file. Questo processo si ripete per tutte le sottodirectory, fino a che tutti i file sono stati inclusi nella tabella.