Scusate se mi intrometto
Non ho tempo per elaborare una "soluzione", pero' vi lascio il componente che dovrebbe risolvere, e cioe' questa Funzione che dovrebbe popolare la matrice di tutti i file "immagine" presente nella directory di partenza e tutte le sue subdir. Il codice, da inserire in testa al modulo vba che contiene la Sub prova:
- Codice: Seleziona tutto
Dim myFso As Object, ccAll As Long 'RIGOROSAMENTE IN TESTA AL MODULO
Function RecurDir(ByVal ccDir As String, myExt As Variant, ByRef cStore As Variant) As String
Dim myItm
'
If myFso Is Nothing Then Set myFso = CreateObject("Scripting.FileSystemObject")
If myFso Is Nothing Then Beep
DoEvents
On Error GoTo Mahh
For Each myItm In myFso.GetFolder(ccDir).Files
ccAll = ccAll + 1
mysplit = Split(" " & myItm, ".", , vbTextCompare)
If Not IsError(Application.Match(mysplit(UBound(mysplit)), myExt, 0)) Then
myind = UBound(cStore)
ReDim Preserve cStore(1 To myind + 1)
cStore(myind) = myItm
End If
Mahh:
Resume Bohh
Bohh:
Next myItm
For Each myItm In myFso.GetFolder(ccDir).SubFolders
Call RecurDir(myItm, myExt, cStore)
Next myItm
End Function
La function va richiamata all'inizio della Sub prova, con queste istruzioni:
- Codice: Seleziona tutto
Dim FArr() As String
ReDim FArr(1 To 1)
allpics = Array("jpg", "png", "gif") '<<< Altri formati? '***
StrDir=" C:\PERCORSO\Documents" '<<< Il Percorso iniziale
Call RecurDir(StrDir, allpics, FArr)
La RecurDir compilera' la matrice FArr con tutti i files che hanno una extension pari a quelle dichiarate in "allpics".
Il restante codice della Sub prova dovra' lavorare uno per uno sui file contenuti in FArr; dovrebbe essere sufficiente qualcosa come
- Codice: Seleziona tutto
For I=1 to ubound(FArr)
If len(fArr(i)>0 then
'qui le istruzioni prima inserite nel Do While /Loop
End If
Next I
Attenzione, che scandire tutto il disco potrebbe richiedere "il suo tempo", quindi meglio partire con una directory dal contenuto modesto
Provate, e se vi arenate spiegate dove e come...