Salve a tutti.
Ho necessità di elencare in una tabella tutte le sottocartelle contenute in una specifica cartella.
Scenario:
Uso office 365, sto creando un piccolo DB per gestire il mio negozio di vino.
Le cartelle in questione vengono create in automatico (con sintassi standard) da un'altra sub per immagazzinare vari file relativi al prodotto.
A volte succede che a seguito di correzioni/modifiche di alcuni dati (per esempio il nome del produttore - che è utilizzato nella sintassi del nome cartella vino) andrebbe modificato anche il nome della cartella del vino (potrebbero essere coinvolti più vini e quindi più cartelle).
L'idea quindi è di creare un elenco delle cartelle esistenti, poi usare il comando Replace per aggiornare il nome cartella e poi il comando Name per rinominare effettivamente la Cartella.
Ho recuperato su questo forum, e leggermente modificato per adattarlo al mio caso, il seguente codice:
================================================================
Option Compare Database
Option Explicit
Sub Cartelle()
On Error GoTo errorHandler
DBEngine(0)(0).Execute "delete * from tb_Cartelle", dbFailOnError
Dim strPath As String
Dim strFile As String
strPath = Form_m_Home!PercCart_Prodotti_m.Value
strFile = Dir(strPath, vbDirectory)
Do While strFile <> ""
If (GetAttr(strPath & strFile) And vbDirectory) = vbDirectory Then
If strFile <> "." And strFile <> ".." Then
DBEngine.BeginTrans
DBEngine(0)(0).Execute "insert into tb_Cartelle (Cartelle) values ('" & strFile & "')", dbFailOnError
DBEngine.CommitTrans
End If
End If
strFile = Dir
Loop
ext_errorLoadAccountHandler:
Exit Sub
errorHandler:
With Err
DBEngine.Rollback
MsgBox "ERR#" & .Number _
& vbNewLine & .Description _
, vbOKOnly Or vbCritical
End With
Resume ext_errorLoadAccountHandler
End Sub
================================================================
La sub in questione si avvia su evento "Su Caricamento" della maschera Home (che si avvia in automatico all'avvio del DB).
Però funziona solo in parte, mi estrae solo 2 delle 4 cartelle presenti e mi restituisce il seguente errore:

Cartelle presenti (a sx) e cartelle estratte (a dx) :

Non riesco a capire perchè il codice funziona solo in parte e si interrompe dando errore.
Qualcuno può darmi suggerimenti?
Spero di essermi spiegato e scusate per eventuali errori o mancanze (sono autodidatta alle prime armi....).
Grazie e cordiali saluti.
Enrico.