Wyświetl listę plików w folderze za pomocą VBA w programie Microsoft Excel

Anonim

W tym artykule utworzymy makro, aby wyświetlić wszystkie pliki w folderze.

Po uruchomieniu makra zostanie wyświetlona nazwa pliku wraz ze ścieżką pliku, zaczynając od komórki A17.

Wyjaśnienie logiczne

W tym artykule stworzyliśmy dwa makra, „subfolder_files” i „pobieranie_listy_plików_w_folderze”.
Makro „subfolder_files” pobiera ścieżkę folderu i wartość logiczną jako dane wejściowe i zwraca nazwę pliku w folderze.

„Getting_filelist_in_folder” służy do wywoływania makra „subfolder_files”. Podaje wartość ścieżki folderu do makra, z wartością logiczną ustawioną na „prawda”. Ponadto, gdy wymagane są nazwy plików w podfolderach, przypisujemy wartość logiczną „prawda”.

Wyjaśnienie kodu

folder_path = Arkusz1.Pole tekstowe1.Wartość
Powyższy kod służy do wyodrębnienia wartości ciągu z pola tekstowego.

Wywołaj pliki podfolderów (ścieżka_folderu, prawda)
Powyższy kod służy do wywołania makra „subfolder_files”. Przypisuje ścieżkę folderu i ustawia właściwość „include_subfolder” na true.

Ustaw fso = CreateObject("scripting.filesystemobject")
Powyższy kod służy do tworzenia obiektu systemu plików.

Ustaw podfolder1 = fso.getfolder(ścieżka_folderu)
Powyższy kod służy do tworzenia obiektu zdefiniowanego folderu.

Dla każdego folderu1 W podfolderze1.podfoldery
Wywołaj subfolder_files (folder1, prawda)
Następny
Powyższy kod służy do przeglądania wszystkich podfolderów w folderze głównym.

Dir(ścieżka do folderu1 i "*.xlsx")
Powyższy kod służy do uzyskania nazwy pliku programu Excel.

Podczas gdy nazwa pliku „”
liczba1 = liczba1 + 1
ReDim Zachowaj tablicę plików (1 do zliczenia1)
filearray(liczba1) = nazwa pliku
nazwa pliku = Dir()
Wend

Powyższy kod służy do tworzenia tablicy, która składa się ze wszystkich nazw plików znajdujących się w folderze.

Dla i = 1 To UBound(filearray)
Komórki (lastrow, 1). Wartość = ścieżka do folderu1 i tablica plików (i)
lastrow = lastrow + 1
Następny

Powyższy kod służy do przypisywania nazwy pliku w tablicy do skoroszytu.

Proszę postępować zgodnie z poniższym kodem!

 Option Explicit Sub subfolder_files(folderpath1 As Variant, Optional include_subfolder As Boolean) 'Sprawdzanie, czy uwzględniać podfolder, czy nie If include_subfolder Then 'Deklaracja zmiennych Dim filename, filearray() As String Dim lastrow, count1, i As Integer 'Sprawdzanie, czy ścieżka folderu zawiera odwrotny ukośnik jako ostatni znak If Right(folderpath1, 1) "\" Then folderpath1 =folderpath1 & "\" End If 'Pobieranie nazwy pierwszego pliku w zdefiniowanej ścieżce folderu filename = Dir(folderpath1 & "*.xlsx") ' Pobieranie numeru wiersza ostatniej komórki lastrow = ActiveCell.SpecialCells(xlCellTypeLastCell).Row + 1 count1 = 0 'Przechodzenie w pętlę przez wszystkie pliki w folderze While filename „” count1 = count1 + 1 ReDim Zachowaj filearray(1 To count1) filearray( count1) = nazwa pliku filename = Dir() Wend On Error GoTo last 'Dodawanie nazwy pliku do skoroszytu For i = 1 To UBound(filearray) Cells(lastrow, 1). Value = folderpath1 & filearray(i) lastrow = lastrow + 1 Next Zakończ, jeśli ostatni: Zakończ Sub sub pobieranie_listy_plików_w_folderze () 'Deklarowanie zmiennych Dim ścieżka_folderu As String Dim fso As Object, folder1, podfolder1 jako obiekt 'Pobieranie ścieżki folderu ścieżka_folderu = Arkusz1.TextBox1.Value 'Sprawdzanie, czy ścieżka folderu zawiera ukośnik odwrotny jako ostatni znak If Right(ścieżka_folderu, 1)" \" Then folder_path = folder_path & "\" End If 'Wywoływanie makra subfolder_files Call subfolder_files(folder_path, True) 'Tworzenie obiektu obiektu systemu plików Set fso = CreateObject("scripting.filesystemobject") Set subfolder1 = fso.getfolder(folder_path) 'Pętla przez każdy podfolder Dla każdego folderu1 W podfolderze1.subfolders Wywołaj podfolder_files(folder1, True) Następny Koniec Sub 

Jeśli podobał Ci się ten blog, podziel się nim ze znajomymi na Facebooku. Możesz również śledzić nas na Twitterze i Facebooku.

Chcielibyśmy usłyszeć od Ciebie, daj nam znać, jak możemy poprawić naszą pracę i uczynić ją lepszą dla Ciebie. Napisz do nas na stronie e-mail