Elenca i file in una cartella utilizzando VBA in Microsoft Excel
In questo articolo, creeremo una macro per elencare tutti i file all’interno della cartella.
Quando si esegue la macro, il nome del file e il percorso del file verranno visualizzati a partire dalla cella A17.
Spiegazione logica
In questo articolo abbiamo creato due macro, “subfolder_files” e “getting_filelist_in_folder”.
La macro “subfolder_files” prende il percorso della cartella e il valore booleano come input e restituisce il nome del file all’interno della cartella.
“Get_filelist_in_folder” viene utilizzato per chiamare la macro “subfolder_files”. Fornisce il valore del percorso della cartella alla macro, con il valore booleano impostato su “true”. Inoltre, quando sono richiesti nomi di file all’interno delle sottocartelle, viene assegnato il valore booleano “true”.
Spiegazione del codice
folder_path = Sheet1.TextBox1.Value Il codice precedente viene utilizzato per estrarre il valore della stringa dalla casella di testo.
Chiama subfolder_files (folder_path, True)
Il codice precedente viene utilizzato per chiamare la macro “subfolder_files”. Assegna il percorso della cartella e imposta la proprietà “include_subfolder” su true.
Imposta fso = CreateObject (“scripting.filesystemobject”)
Il codice sopra viene utilizzato per creare l’oggetto del file system.
Imposta sottocartella1 = fso.getfolder (percorso_cartella)
Il codice precedente viene utilizzato per creare l’oggetto della cartella definita.
For Each folder1 In subfolder1.subfolders Chiama subfolder_files (folder1, True)
Avanti Il codice precedente viene utilizzato per esaminare tutte le sottocartelle, all’interno della cartella principale.
Dir (percorso cartella1 & “* .xlsx”)
Il codice sopra viene utilizzato per ottenere il nome del file Excel.
Mentre nomefile <> “”
count1 = count1 + 1 ReDim Preserve filearray (1 To count1)
filearray (count1) = filename filename = Dir ()
Wend Il codice sopra viene utilizzato per creare un array, che consiste di tutti i nomi di file presenti all’interno della cartella.
Per i = 1 a UBound (filearray)
Celle (lastrow, 1) .Value = folderpath1 & filearray (i)
lastrow = lastrow + 1 Next Il codice precedente viene utilizzato per assegnare il nome del file all’interno dell’array alla cartella di lavoro.
Segui di seguito per il codice
Option Explicit Sub subfolder_files(folderpath1 As Variant, Optional include_subfolder As Boolean) 'Checking whether to include subfolder or not If include_subfolder Then 'Declaring variables Dim filename, filearray() As String Dim lastrow, count1, i As Integer 'Checking whether folder path contain backslash as last character If Right(folderpath1, 1) <> "\" Then folderpath1 = folderpath1 & "\" End If 'Getting the filename of the first file in the defined folder path filename = Dir(folderpath1 & "*.xlsx") 'Getting the row number of last cell lastrow = ActiveCell.SpecialCells(xlCellTypeLastCell).Row + 1 count1 = 0 'Looping through all the files in the folder While filename <> "" count1 = count1 + 1 ReDim Preserve filearray(1 To count1) filearray(count1) = filename filename = Dir() Wend On Error GoTo last 'Adding file name to workbook For i = 1 To UBound(filearray) Cells(lastrow, 1).Value = folderpath1 & filearray(i) lastrow = lastrow + 1 Next End If last: End Sub Sub getting_filelist_in_folder() 'Declaring variables Dim folder_path As String Dim fso As Object, folder1, subfolder1 As Object 'Getting path of the folder folder_path = Sheet1.TextBox1.Value 'Checking whether folder path contain backslash as last character If Right(folder_path, 1) <> "\" Then folder_path = folder_path & "\" End If 'Calling subfolder_files macro Call subfolder_files(folder_path, True) 'Creating object of File system object Set fso = CreateObject("scripting.filesystemobject") Set subfolder1 = fso.getfolder(folder_path) 'Looping through each subfolder For Each folder1 In subfolder1.subfolders Call subfolder_files(folder1, True) Next End Sub
Se ti è piaciuto questo blog, condividilo con i tuoi amici su Facebook e Facebook.
Ci piacerebbe sentire la tua opinione, facci sapere come possiamo migliorare il nostro lavoro e renderlo migliore per te. Scrivici a [email protected]