Il mio script ciclico attraverso singoli file funziona bene, ma ora ho bisogno che guardi anche attraverso/per più directory. Sono bloccato ....Passa attraverso sottocartelle e file in una directory radice specificata dall'utente
L'ordine le cose devono accadere:
- viene richiesto all'utente di scegliere directory principale di ciò di cui hanno bisogno
- ho bisogno lo script per cercare eventuali cartelle in quella radice directory
- Se lo script ne trova uno, apre il primo (tutte le cartelle, quindi nessun filtro di ricerca specifico per le cartelle)
- Una volta aperto, il mio script eseguirà un ciclo di tutti i file nelle cartelle e farà ciò di cui ha bisogno do
- dopo che è finito chiude il file, chiude la directory e si sposta al prossimo, ecc ..
- loop fino a quando tutte le cartelle sono stati aperti/scansione
Questo è quello che ho, che non lo fa lavoro e so che è sbagliato:
MsgBox "Please choose the folder."
Application.DisplayAlerts = False
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = "\\blah\test\"
.AllowMultiSelect = False
If .Show <> -1 Then MsgBox "No folder selected! Exiting script.": Exit Sub
CSRootDir = .SelectedItems(1)
End With
folderPath = Dir(CSRootDir, "\*")
Do While Len(folderPath) > 0
Debug.Print folderPath
fileName = Dir(folderPath & "*.xls")
If folderPath <> "False" Then
Do While fileName <> ""
Application.ScreenUpdating = False
Set wbkCS = Workbooks.Open(folderPath & fileName)
--file loop scripts here
Loop 'back to the Do
Loop 'back to the Do
Codice finale. Passa in rassegna tutte le sottodirectory e i file in ogni sottodirectory.
Dim FSO As Object, fld As Object, Fil As Object
Dim fsoFile As Object
Dim fsoFol As Object
Dim fileName As String
MsgBox "Please choose the folder."
Application.DisplayAlerts = False
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = "\\blah\test\"
.AllowMultiSelect = False
If .Show <> -1 Then MsgBox "No folder selected! Exiting script.": Exit Sub
folderPath = .SelectedItems(1)
End With
If Right(folderPath, 1) <> "\" Then folderPath = folderPath + "\"
Set FSO = CreateObject("Scripting.FileSystemObject")
Set fld = FSO.getfolder(folderPath)
If FSO.folderExists(fld) Then
For Each fsoFol In FSO.getfolder(folderPath).subfolders
For Each fsoFile In fsoFol.Files
If Mid(fsoFile.Name, InStrRev(fsoFile.Name, ".") + 1) = "xls" Then
fileName = fsoFile.Name
Application.ScreenUpdating = False
Set wbkCS = Workbooks.Open(fsoFile.Path)
'My file handling code
End If
Next
Next
End If
Mi piacerebbe rimanere con 'Dir' anziché con' FSO' dato che accetta caratteri jolly che interrompono un lungo controllo del tipo di file per gestire file non Excel. Vedi http://stackoverflow.com/questions/9827715/get-list-of-subdirs-in-vba – brettdj