Wat is FileSystemObject (FSO) en hoe te gebruiken in VBA Excel?

Inhoudsopgave:

Anonim

Het FileSystemObject wordt gebruikt om te werken met mappen en bestanden die met het systeem zijn verbonden. We kunnen het gebruiken om toegang te krijgen tot bestanden, mappen, stations en tekststromen. Het heeft niet alleen toegang tot bestanden, mappen en tekstbestanden, maar kan ook creëren. Deze bewerkingen zijn niet beperkt tot de harde schijf van het systeem, maar elk apparaat dat op het bestand is aangesloten. Het betekent dat je toegang hebt tot pen-drives, cd-roms of virtueel aangesloten netwerkdrives.

Dit zijn de bewerkingen die we kunnen doen met FileSystemObject in VBA:

Voor het maken, openen, lezen, schrijven en verwijderen van tekstbestanden.

Voor het toevoegen, wijzigen en verwijderen van mappen.

Door bestanden en mappen bladeren.

Voor het kopiëren en verplaatsen van bestanden of mappen naar andere plaatsen.

Om te controleren of een bestand of map op locatie bestaat of niet

Hoe toegang te krijgen tot FileSystemObject in VBA?

Het bestandssysteemobject maakt deel uit van Microsoft Scripting Runtime Library. Om toegang te krijgen tot een FileSystemObject moeten we verbinding maken met of een verwijzing toevoegen naar de Microsoft Scripting Runtime Library of Scrun.dll.

Opmerking: Het FileSystemObject ondersteunt de werking van binaire bestanden niet omdat Scrrun.dll het maken en manipuleren van bestanden met TextStream Object ondersteunt.

Er zijn twee methoden om FileSystemObject in VBA te maken:

1: FSO-object maken met de CreateObject-methode:

Met deze methode declareren we eerst een variabel objecttype. Stel vervolgens de referentie van het FSO-object in op die variabele met CreateObject:

Sub LearnFso() 'De objectvariabele maken Dim fso As Object 'Maak het FileSystemObject met behulp van Create Object Method Set fso = CreateObject("Scripting.FileSystemObject") Debug.Print fso.GetBaseName("E:\MTR\Feb'18 MTR" ) Einde sub 

Deze methode is dynamisch en overdraagbaar. Het betekent dat als je de code deelt met andere systemen, deze code prima zal werken. Het maakt niet uit welke versie van Microsoft Runtime Scripting-versie u heeft.

Het enige nadeel is dat je de intellisense van VBA niet kunt zien. U zult op uw kennis moeten vertrouwen om alle eigenschappen en methoden van FileSystemObject te gebruiken.

2: FSO-object maken door verwijzing naar Microsoft Runtime Scripting toe te voegen

U kunt rechtstreeks een FileSystemObject in VBA maken met het nieuwe trefwoord. Daarvoor moet u een verwijzing naar de nieuwste Microsoft Scripting Runtime in uw systeem toevoegen.

Om de referentie toe te voegen, gaat u naar de optie referenties in het menu Extra. Hier vindt u de Microsoft Scripting Runtime-dll. Vink het aan en klik op OK.

Nu bent u klaar om het FSO-object te maken en te gebruiken.

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

Of

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

Beide zullen prima werken.

Een groot voordeel van deze methode is dat je de intelligentie van VBA kunt zien. VBA toont u alle eigenschappen en methoden van het fso-object. Het zal ook vertellen wat voor soort variabelen het zal accepteren en wat voor soort waarde het zal retourneren.

Als u deze code met andere systemen deelt, moet u hen vertellen dat ze een verwijzing naar Scripting Runtime van tools moeten toevoegen, anders krijgen ze een compileerfout dat het door de gebruiker gedefinieerde type niet is gedefinieerd. Het is dus net als het importeren van andere programmeertalen.

Merk op dat FSO geen sleutelwoord is. U kunt het gebruiken als een variabelenaam. Het is gewoon een conventie om het bestandssysteemobject de naam fso te geven. Daarom verwarren sommige mensen het als een trefwoord.

Beide methoden voor het maken van FSO-objecten hebben hun voor- en nadelen die ik heb genoemd terwijl ik ze uitlegde. Dus gebruik volgens uw behoefte. In dit artikel zal ik de tweede methode gebruiken om FileSystemObject te maken.

Nu we weten hoe we een FileSystemObject in VBA moeten maken, laten we deze kennis gebruiken bij het uitvoeren van enkele zinvolle taken. Ik bedoel, laten we naar de voorbeelden springen.

Voorbeeld 1: Haal alle submappen op in een opgegeven map

Het eerste voorbeeld dat we gaan zien, is het verkrijgen van de namen van de submap uit een specifieke map.

Sub LearnFso() ' decaring variabelen die we nodig hebben Dim fso As FileSystemObject ' Variabele voor de FileSystemObject Dim fdr As Folder ' Variabele voor de basismap Dim subfdr As Folder ' Variabele voor de submappen Dim fdrpath As String 'om het pad van de basis op te slaan map 'De objecten initialiseren fdrpath = "D:\Downloads" 'De map declareren Set fso = New FileSystemObject 'Het fso-object maken Set fdr = fso.GetFolder(fdrpath) 'Het mapobject van de gegeven map maken 'loop om alle naam van submappen in For Each subfdr In fdr.SubFolders Debug.Print subfdr.Name Volgende subfdr End Sub 

Wanneer u de bovenstaande code uitvoert, krijgt u dit.

Ja! Dat is mijn downloadmap. Concentreer je daar niet op.

Hoe dit werkte?

Laten we het in stappen begrijpen:

1: Decaring-variabelen die we nodig hebben

Dim fso As FileSystemObject ' Variabele voor het FileSystemObject

Dim fdr As Folder ' Variabele voor de basismap

Dim subfdr As Folder ' Variabele voor de submappen

Eerst hebben we alle variabelen gedeclareerd die we in dit voorbeeld nodig hebben. De eerste variabele is natuurlijk de fso als bestandssysteemobject. De twee variabelen fdr en subfdr zijn van het maptype. We zullen het fso-object gebruiken om een ​​bestandstype-object te maken in plaats van rechtstreeks te maken. De fdrpath is use variabele wordt gebruikt om het pad van de basismap vast te houden waarvan we alle submappen willen krijgen.

2: De objecten initialiseren

fdrpath = "D:\Downloads" 'De map declareren'

Stel fso = Nieuw FileSystemObject 'Het fso-object maken'

Set fdr = fso.GetFolder(fdrpath) 'Het mapobject van een bepaalde map maken

In deze stap hebben we alle objecten geïnitialiseerd die we hadden gedeclareerd, behalve subfdr. Merk op dat we de fdr-bestandsvariabele hebben geïnitialiseerd met behulp van de methode getFolder van fso objects.

De methode GetFolder() van FileSystemObject neemt het pad van een map of directory als tekenreeks en retourneert het bestandstype-object.

3: loop om de naam van alle submappen in het mapobject te krijgen

Voor elke subfdr In fdr.Submappen

Debug.Print subfdr.Name

Volgende submap

Hier hebben we een voor elke lus gebruikt om door elke submap in het fdr-bestandsobject te lopen. We hebben de eigenschap SubFolders van het bestandsobject gebruikt om te herhalen.

We gebruiken de eigenschap name om de namen van elke submap te krijgen. En het is gedaan.

Voorbeeld 2: Krijg alle bestandspaden in een map en zijn submappen

Om alle paden of volledig gekwalificeerde namen van alle bestanden in een map en zijn submap te krijgen, moeten we nog een paar regels toevoegen in voorbeeld 1-code.

Sub LearnFso() Dim fso As FileSystemObject Dim fdr As Folder ' Variabele voor de basismap Dim subfdr As Folder ' Variabele voor de submappen Dim fdrpath As String 'om pad van basismap op te slaan Dim fl As File 'om bestandsobject op te slaan fdrpath = "D:\downloads" Set fso = New FileSystemObject Set fdr = fso.GetFolder(fdrpath) 'loop om alle submappennaam in For Each subfdr In fdr.SubFolders For Each fl In subfdr.Files te krijgen om door elk bestand te lussen Debug.Print fl.Path 'bestandsnaam ophalen Next fl Next subfdr 'om de bestanden van de hoofdmap op te halen Voor elke fl In fdr.Files Debug.Print fl.Path Next fl End Sub 

De methode Folder.Files() is de methode die de bestanden in een submap retourneert. De methode File.Path() retourneert het volledige adres van het bestand.

We hebben allemaal een innerlijke lus om door alle bestanden in de submap van de hoofdmap en zijn.

Om de bestanden van de hoofdmap te krijgen, gebruiken we een andere lus.

Voorbeeld 3: Sla de bestandsnamen op in een CSV-bestand.

In het vorige voorbeeld hebben we geleerd hoe de bestandspaden van specifieke mappen in het directe venster kunnen worden afgedrukt. In dit voorbeeld leren we hoe u die paden opslaat in een CSV-bestand. Om dit te doen, hoeven we alleen maar een paar regels aan de code toe te voegen. Zie de vetgedrukte coderegels hieronder.

Sub LearnFso() Dim fso As FileSystemObject Dim fdr As Folder ' Variabele voor de basismap Dim subfdr As Folder ' Variabele voor de submappen Dim fdrpath As String 'om het pad van de basismap op te slaan Dim fl As File 'om het bestandsobject op te slaan Dim fileList As TextStream 'A textstream object fdrpath = "D:\downloads" Set fso = New FileSystemObject Set fdr = fso.GetFolder(fdrpath) Set fileList = fso.CreateTextFile(fdrpath & "\File List in This Folder.csv", True, False) 'loop om de naam van alle submappen in For Each subfdr In fdr.SubFolders For Each fl In subfdr.Files 'om door elk bestand fileList.Write fl.Path & "," Next fl Next subfdr 'om de bestanden van hoofdmap For Each fl In fdr.Files fileList.Write fl.Path & "," Next fl fileList.Close End Sub 

Hier hebben we een nieuw object van het FileStream-type gedeclareerd met de naam bestandslijst

We hebben de variabele filelist geïnitialiseerd met een filestream-object met behulp van de onderstaande regel.

Set fileList = fso.CreateTextFile(fdrpath & "\File List in This Folder.csv", True, False)

We gebruiken de methode CreateTextFile van FSO om een ​​FileStream-object te maken. Het maakt een tekstbestand aan. Deze methode accepteert de naam van een bestand met een volledig pad. De eerste variabele doet dit. We gebruiken de extensie .csv om een ​​csv-bestand te maken. De tweede variabele wordt gebruikt om overschrijven mogelijk te maken. Het derde argument is False om te verklaren dat het geen binair bestand is.

In de loops vervangen we de debug.print door de methode filelist.Write om elk bestandspad in het gemaakte bestand te schrijven.

Dus ja jongens, dit is hoe je het FileSystemObject kunt gebruiken. De FSO kan voor veel meer dingen worden gebruikt, die we in de komende artikelen zullen bespreken. Als je twijfels hebt over dit artikel van FSO-gerelateerde zoekopdrachten, vraag het me dan in de commentaarsectie hieronder.

Aan de slag met Excel VBA UserForms| Ik zal uitleggen hoe je een formulier in Excel maakt, hoe je de VBA-toolbox gebruikt, hoe je met gebruikersinvoer omgaat en tot slot hoe je de gebruikersinvoer opslaat. We zullen deze onderwerpen doornemen aan de hand van een voorbeeld en een stapsgewijze handleiding.

VBA-variabelen in Excel| VBA staat voor Visual Basic for Applications. Het is een programmeertaal van Microsoft. Het wordt gebruikt met Microsoft Office-toepassingen zoals MSExcel, MS-Word en MS-Access, terwijl VBA-variabelen specifieke trefwoorden zijn.

Excel VBA-variabel bereik| In alle programmeertalen hebben we variabele toegangsspecificaties die definiëren van waaruit toegang tot een gedefinieerde variabele kan worden verkregen. Excel VBA is geen uitzondering. VBA heeft ook scope-specificaties.

ByRef en ByVal-argumenten | Wanneer een argument als ByRef-argument wordt doorgegeven aan een andere sub of functie, wordt de referentie van de werkelijke variabele verzonden. Alle wijzigingen die in de kopie van de variabele zijn aangebracht, worden weerspiegeld in het oorspronkelijke argument.

Bladen verwijderen zonder bevestigingsvragen met VBA in Microsoft Excel | Aangezien u bladen verwijdert met VBA, weet u wat u doet. U wilt Excel vertellen deze waarschuwing niet te tonen en dat verdomde blad te verwijderen.

Nieuwe werkmap toevoegen en opslaan met VBA in Microsoft Excel 2016| In deze code hebben we eerst een verwijzing naar een werkmapobject gemaakt. En toen hebben we het geïnitialiseerd met een nieuw werkmapobject. Het voordeel van deze aanpak is dat u eenvoudig bewerkingen op deze nieuwe werkmap kunt uitvoeren. Zoals opslaan, sluiten, verwijderen, etc

Geef een bericht weer op de Excel VBA-statusbalk| De statusbalk in Excel kan worden gebruikt als codemonitor. Wanneer uw VBA-code lang is en u verschillende taken uitvoert met VBA, schakelt u vaak de schermupdate uit zodat u dat scherm niet ziet flikkeren.

Schakel waarschuwingsberichten uit met VBA in Microsoft Excel 2016| Deze code schakelt niet alleen VBA-waarschuwingen uit, maar verhoogt ook de tijdefficiëntie van de code. Laten we eens kijken hoe.

Populaire artikels:

50 Excel-snelkoppelingen om uw productiviteit te verhogen | Word sneller in uw taak. Met deze 50 sneltoetsen werk je nog sneller in Excel.

De VERT.ZOEKEN-functie in Excel | Dit is een van de meest gebruikte en populaire functies van Excel die wordt gebruikt om waarde op te zoeken uit verschillende bereiken en bladen.

AANTAL.ALS in Excel 2016 | Tel waarden met voorwaarden met behulp van deze geweldige functie. U hoeft uw gegevens niet te filteren om specifieke waarden te tellen. Countif-functie is essentieel om uw dashboard voor te bereiden.

Hoe de SUMIF-functie in Excel te gebruiken? | Dit is een andere essentiële functie van het dashboard. Dit helpt u bij het optellen van waarden voor specifieke voorwaarden.