Co to jest FileSystemObject (FSO) i jak go używać w VBA Excel?

Spisie treści:

Anonim

FileSystemObject służy do pracy z folderami i plikami połączonymi z systemem. Możemy go używać do uzyskiwania dostępu do plików, folderów, dysków i strumieni tekstowych. Może nie tylko uzyskiwać dostęp do plików, folderów i plików tekstowych, ale także tworzyć. Operacje te nie ograniczają się do dysku twardego systemu, ale do dowolnego urządzenia podłączonego do pliku. Oznacza to, że możesz uzyskać dostęp do pendrive'ów, cd-romów lub wirtualnie podłączonych dysków sieciowych.

Oto operacje, które możemy wykonać za pomocą FileSystemObject w VBA:

Do tworzenia, otwierania, czytania, pisania i usuwania plików tekstowych.

Do dodawania, zmieniania i usuwania folderów.

Aby przejść przez pliki i foldery.

Do kopiowania i przenoszenia plików lub folderów w inne miejsca.

Do sprawdzania, czy plik lub folder istnieje w lokalizacji, czy nie

Jak uzyskać dostęp do FileSystemObject w VBA?

Obiekt systemu plików jest częścią biblioteki Microsoft Scripting Runtime Library. Aby uzyskać dostęp do FileSystemObject, musimy połączyć się lub dodać odwołanie do Biblioteka Microsoft Scripting Runtime lub Scrrun.dll.

Uwaga: FileSystemObject nie obsługuje operacji na plikach binarnych, ponieważ Scrrun.dll obsługuje tworzenie i manipulowanie plikami przy użyciu obiektu TextStream.

Istnieją dwie metody tworzenia FileSystemObject w VBA:

1: Tworzenie obiektu FSO Za pomocą metody CreateObject:

Używając tej metody najpierw deklarujemy zmienny typ obiektu. Następnie ustaw referencję obiektu FSO do tej zmiennej za pomocą CreateObject:

Sub LearnFso() 'Tworzenie zmiennej obiektu Dim fso As Object 'Utwórz obiekt FileSystemObject przy użyciu zestawu metod tworzenia obiektu fso = CreateObject("Scripting.FileSystemObject") Debug.Print fso.GetBaseName("E:\MTR\Feb'18 MTR" ) Napis końcowy 

Ta metoda jest dynamiczna i możliwa do przeniesienia. Oznacza to, że jeśli udostępniasz kod innym systemom, ten kod będzie działał idealnie. Nie ma znaczenia, jaką masz wersję Microsoft Runtime Scripting.

Jedyną wadą jest to, że nie będziesz w stanie zobaczyć intellisense zapewnianego przez VBA. Będziesz musiał polegać na swojej wiedzy, aby korzystać ze wszystkich właściwości i metod FileSystemObject.

2: Tworzenie obiektu FSO przez dodanie odniesienia do skryptów Microsoft Runtime

Możesz bezpośrednio utworzyć FileSystemObject w języku VBA, używając słowa kluczowego new. W tym celu będziesz musiał dodać odniesienie do najnowszego środowiska Microsoft Scripting Runtime w swoim systemie.

Aby dodać referencję, przejdź do opcji referencje w menu narzędzi. Tutaj znajdź bibliotekę Microsoft Scripting Runtime. Sprawdź to i kliknij OK.

Teraz jesteś gotowy do tworzenia i używania obiektu FSO.

Sub LearnFso() Dim fso as new FileSystemObject Debug.Print fso.GetBaseName("E:\MTR\Feb'18 MTR") End Sub 

Lub

Sub LearnFso() Dim fso as FileSystemObject Set fso = New FileSystemObject Debug.Print fso.GetBaseName("E:\MTR\Feb'18 MTR") End Sub 

Oba będą działać dobrze.

Główną zaletą tej metody jest to, że będziesz mógł zobaczyć inteligencję VBA. VBA pokaże Ci wszystkie właściwości i metody obiektu fso. Poinformuje również, jakie zmienne przyjmie i jaką wartość zwróci.

Jeśli udostępnisz ten kod innym systemom, będziesz musiał powiedzieć im, aby dodały odwołanie do środowiska wykonawczego skryptów z narzędzi, w przeciwnym razie otrzymają błąd kompilacji, że typ zdefiniowany przez użytkownika nie jest zdefiniowany. Przypomina to więc importowanie innych języków programowania.

Zauważ, że FSO nie jest słowem kluczowym. Możesz go użyć jako nazwy zmiennej. Jest to po prostu konwencja nazywania obiektu systemu plików fso. Dlatego niektórzy mylą to jako słowo kluczowe.

Obie metody tworzenia obiektów FSO mają swoje zalety i wady, o których wspomniałem przy ich wyjaśnianiu. Więc używaj zgodnie z potrzebami. W tym artykule wykorzystam drugą metodę tworzenia FileSystemObject.

Teraz, gdy wiemy, jak stworzyć FileSystemObject w VBA, wykorzystajmy tę wiedzę do wykonania kilku znaczących zadań. Przejdźmy do przykładów.

Przykład 1: Pobierz cały podfolder z określonego folderu

Pierwszym przykładem, który zobaczymy, jest pobranie nazw podfolderów z określonego folderu.

Sub LearnFso() ' usuwamy zmienne, których będziemy potrzebować Dim fso As FileSystemObject ' Zmienna dla FileSystemObject Dim fdr As Folder ' Zmienna dla folderu podstawowego Dim subfdr As Folder ' Zmienna dla podfolderów Dim fdrpath As String 'do przechowywania ścieżki bazy folder 'Inicjowanie obiektów fdrpath = "D:\Downloads" 'Deklarowanie folderu Set fso = New FileSystemObject 'Tworzenie obiektu fso Set fdr = fso.GetFolder(fdrpath) 'Tworzenie obiektu folderu danego folderu 'pętla, aby uzyskać wszystkie nazwa podfolderów w For Each subfdr In fdr.SubFolders Debug.Print subfdr.Name Następny subfdr End Sub 

Po uruchomieniu powyższego kodu otrzymasz to.

Tak! To mój folder pobierania. Nie koncentruj się na tym.

Jak to działało?

Rozumiemy w krokach:

1: Decaring zmiennych, których będziemy potrzebować

Dim fso As FileSystemObject ' Zmienna dla FileSystemObject

Dim fdr As Folder ' Zmienna dla folderu bazowego

Dim subfdr As Folder ' Zmienna dla podfolderów

Najpierw zadeklarowaliśmy wszystkie zmienne, których będziemy potrzebować w tym przykładzie. Pierwszą zmienną jest oczywiście fso jako obiekt systemu plików. Dwie zmienne fdr i subfdr są typu folderów. Użyjemy obiektu fso do utworzenia obiektu typu plik zamiast tworzyć bezpośrednio. ten fdrpath ta zmienna jest używana do przechowywania ścieżki folderu podstawowego, z którego chcemy pobrać wszystkie podfoldery.

2: Inicjalizacja obiektów

fdrpath = "D:\Pobrane" 'Deklarowanie folderu

Set fso = New FileSystemObject 'Tworzenie obiektu fso

Set fdr = fso.GetFolder(fdrpath) 'Tworzenie obiektu folderu podanego folderu

W tym kroku zainicjalizowaliśmy wszystkie zadeklarowane przez nas obiekty z wyjątkiem subfdr. Zauważ, że zainicjalizowaliśmy zmienną pliku fdr za pomocą metody obiektów fso getFolder.

Metoda GetFolder() obiektu FileSystemObject pobiera ścieżkę folderu lub katalogu jako ciąg i zwraca obiekt typu pliku.

3: pętla, aby uzyskać wszystkie nazwy podfolderów w obiekcie folderu

Dla każdego subfdr w fdr.SubFolders

Debug.Print subfdr.Name

Następny subfdr

Tutaj użyliśmy pętli for each, aby przejść przez każdy podfolder w obiekcie pliku fdr. Do pętli użyliśmy właściwości SubFolders obiektu pliku.

Używamy właściwości name, aby uzyskać nazwy każdego podfolderu. I gotowe.

Przykład 2: Pobierz wszystkie ścieżki plików w folderze i jego podfolderach

Aby uzyskać wszystkie ścieżki lub w pełni kwalifikowane nazwy wszystkich plików w folderze i jego podfolderze, musimy dodać kilka dodatkowych wierszy w kodzie przykładu 1.

Sub LearnFso() Dim fso As FileSystemObject Dim fdr As Folder ' Zmienna dla folderu podstawowego Dim subfdr As Folder ' Zmienna dla podfolderów Dim fdrpath As String 'do przechowywania ścieżki folderu podstawowego Dim fl As File 'do przechowywania obiektu pliku fdrpath = "D:\downloads" Set fso = New FileSystemObject Set fdr = fso.GetFolder(fdrpath) 'pętla, aby uzyskać wszystkie nazwy podfolderów w For Each subfdr In fdr.SubFolders For Each fl In subfdr.Files 'do pętli przez każdy plik Debug.Print fl.Path 'pobieranie nazwy pliku Next fl Next subfdr 'aby pobrać pliki głównego folderu For Each fl In fdr.Files Debug.Print fl.Path Next fl End Sub 

Metoda Folder.Files() to metoda zwracająca pliki w podfolderze. Metoda File.Path() zwraca pełny adres pliku.

Każdy z nas ma wewnętrzną pętlę do iteracji wszystkich plików w podfolderze głównego folderu i jego.

Aby pobrać pliki głównego folderu, używamy kolejnej pętli.

Przykład 3: Zapisz nazwy plików w pliku CSV.

W poprzednim przykładzie nauczyliśmy się drukować ścieżki plików określonych folderów w bezpośrednim oknie. W tym przykładzie dowiemy się, jak zapisać te ścieżki w pliku CSV. Aby to zrobić, wystarczy dodać kilka linijek do kodu. Zobacz pogrubione linie kodu poniżej.

Sub LearnFso() Dim fso As FileSystemObject Dim fdr As Folder ' Zmienna dla folderu podstawowego Dim subfdr As Folder ' Zmienna dla podfolderów Dim fdrpath As String ' do przechowywania ścieżki folderu podstawowego Dim fl As File ' do przechowywania obiektu pliku Dim fileList As TextStream 'Obiekt strumienia tekstu fdrpath = "D:\downloads" Set fso = New FileSystemObject Set fdr = fso.GetFolder(fdrpath) Set fileList = fso.CreateTextFile(fdrpath & "\Lista plików w tym folderze.csv", True, False) 'pętla, aby uzyskać wszystkie nazwy podfolderów w For Each subfdr In fdr.SubFolders For Each fl In subfdr.Files 'aby przejść przez każdy plik fileList.Write fl.Path & "," Next fl Next subfdr 'aby uzyskać pliki folderu głównego Dla każdego fl In fdr.Files fileList.Write fl.Path & "," Następny fl fileList.Close End Sub 

Tutaj zadeklarowaliśmy nowy obiekt typu FileStream o nazwie Lista plików

Zainicjowaliśmy zmienną filelist z obiektem filestream, korzystając z poniższej linii.

Set fileList = fso.CreateTextFile(fdrpath & "\Lista plików w tym folderze.csv", True, False)

Używamy metody CreateTextFile FSO do tworzenia obiektu FileStream. Tworzy plik tekstowy. Ta metoda akceptuje nazwę pliku z pełną ścieżką. Robi to pierwsza zmienna. Używamy rozszerzenia .csv do tworzenia pliku csv. Druga zmienna służy do nadpisywania. Trzeci argument to False oznaczający, że nie jest to plik binarny.

W pętlach zastępujemy debug.print metodą filelist.Write, aby zapisać każdą ścieżkę pliku w utworzonym pliku.

Więc tak, tak możesz użyć FileSystemObject. FSO może służyć do wielu innych rzeczy, które omówimy w kolejnych artykułach. Jeśli masz jakiekolwiek wątpliwości dotyczące tego artykułu zapytania związanego z FSO, zapytaj mnie w sekcji komentarzy poniżej.

Pierwsze kroki z formularzami użytkownika Excel VBA| Wyjaśnię, jak stworzyć formularz w Excelu, jak korzystać z przybornika VBA, jak obsługiwać dane wejściowe użytkownika i wreszcie jak przechowywać dane wejściowe użytkownika. Przejrzymy te tematy na jednym przykładzie i przewodniku krok po kroku.

Zmienne VBA w Excelu| VBA oznacza Visual Basic for Applications. Jest to język programowania firmy Microsoft. Jest używany z aplikacjami Microsoft Office, takimi jak MSExcel, MS-Word i MS-Access, podczas gdy zmienne VBA są specyficznymi słowami kluczowymi.

Zakres zmiennych Excel VBA| We wszystkich językach programowania mamy specyfikatory dostępu do zmiennych, które definiują, skąd można uzyskać dostęp do zdefiniowanej zmiennej. Excel VBA nie jest wyjątkiem. VBA również ma specyfikatory zakresu.

Argumenty ByRef i ByVal | Gdy argument jest przekazywany jako argument ByRef do innej podrzędnej lub funkcji, wysyłane jest odwołanie do rzeczywistej zmiennej. Wszelkie zmiany wprowadzone w kopii zmiennej zostaną odzwierciedlone w oryginalnym argumencie.

Usuń arkusze bez monitów o potwierdzenie za pomocą VBA w programie Microsoft Excel | Ponieważ usuwasz arkusze za pomocą VBA, wiesz, co robisz. Chcesz powiedzieć programowi Excel, aby nie wyświetlał tego ostrzeżenia i usuwał ten cholerny arkusz.

Dodaj i zapisz nowy skoroszyt za pomocą VBA w programie Microsoft Excel 2016| W tym kodzie najpierw utworzyliśmy odwołanie do obiektu skoroszytu. A następnie zainicjalizowaliśmy go nowym obiektem skoroszytu. Zaletą tego podejścia jest to, że możesz łatwo wykonywać operacje na tym nowym skoroszycie. Jak zapisywanie, zamykanie, usuwanie itp.

Wyświetl komunikat na pasku stanu Excel VBA| Pasek stanu w programie Excel może być używany jako monitor kodu. Gdy twój kod VBA jest długi i wykonujesz kilka zadań za pomocą VBA, często wyłączasz aktualizację ekranu, aby nie widzieć migotania ekranu.

Wyłącz komunikaty ostrzegawcze za pomocą VBA w programie Microsoft Excel 2016| Ten kod nie tylko wyłącza alerty VBA, ale także zwiększa wydajność czasową kodu. Zobaczmy jak.

Popularne artykuły:

50 skrótów Excela, które zwiększą Twoją produktywność | Przyspiesz swoje zadanie. Te 50 skrótów przyspieszy pracę w programie Excel.

Funkcja WYSZUKAJ.PIONOWO w programie Excel | Jest to jedna z najczęściej używanych i popularnych funkcji programu Excel, która służy do wyszukiwania wartości z różnych zakresów i arkuszy.

LICZ.JEŻELI w Excelu 2016 | Policz wartości z warunkami za pomocą tej niesamowitej funkcji. Nie musisz filtrować danych, aby zliczyć określone wartości. Funkcja Countif jest niezbędna do przygotowania deski rozdzielczej.

Jak korzystać z funkcji SUMIF w programie Excel? | To kolejna ważna funkcja deski rozdzielczej. Pomaga to zsumować wartości w określonych warunkach.