Per provare questo codice aggiungi un pulsante ad un form e copia il testo seguente:
codice:
Option Explicit
Private Sub Command1_Click()
Dim e As New Collection
Dim v As Variant
'inizia la ricerca da c:\ e metti i risultati
'nella collection e
Call CercaTxt("C:\", e)
'stampa i risultati
Debug.Print "Trovati " & e.Count & " file"
For Each v In e
Debug.Print v
Next
End Sub
Private Sub CercaTxt(percorso As String, ByRef elenco As Collection)
'funzione ricorsiva!!!
Dim s As String
Dim path As String
Dim ddd As New Collection
Dim v As Variant
'controlla che il percorso termini sempre con \
path = percorso
If Right$(path, 1) <> "\" Then path = path & "\"
'cerca il primo file *.txt
s = Dir$(path & "*.txt")
'se lo trova inizia il ciclo
'e aggiunge il percorso completo alla collection
Do Until s = ""
elenco.Add path & s
s = Dir$
Loop
'cerca la prima sottocartella
s = Dir$(path, vbDirectory)
'se la trova inizia il ciclo
Do Until s = ""
If s <> "." And s <> ".." Then
If (GetAttr(path & s) And vbDirectory) = vbDirectory Then
'aggiunge la cartella ad una collection temporanea
ddd.Add s
End If
End If
s = Dir$
Loop
'ciclo sulle sottocartelle
For Each v In ddd
'chiamata ricorsiva
Call CercaTxt(path & v, elenco)
Next
'libera la memoria
Set ddd = Nothing
End Sub