Vad är FileSystemObject (FSO) och hur använder jag det i VBA Excel?

Innehållsförteckning:

Anonim

FileSystemObject används för att arbeta med mappar och filer som är anslutna till systemet. Vi kan använda den för att komma åt filer, mappar, enheter och textflöden. Det kan inte bara komma åt filer, mappar och textfiler utan kan också skapa. Dessa åtgärder är inte begränsade till systemets hårddisk utan till alla enheter som är anslutna till filen. Det betyder att du kan komma åt penn -enheter, cd -rom eller praktiskt taget anslutna nätverksenheter.

Detta är de operationer vi kan utföra med FileSystemObject i VBA:

För att skapa, öppna, läsa, skriva och ta bort textfiler.

För att lägga till, ändra och ta bort mappar.

Att Iterera genom filer och mappar.

För att kopiera och flytta filer eller mappar till andra platser.

För att kontrollera om en fil eller mapp finns på plats eller inte

Hur får jag åtkomst till FileSystemObject i VBA?

Filsystemobjektet är en del av Microsoft Scripting Runtime Library. För att komma åt ett FileSystemObject måste vi ansluta eller lägga till en referens till Microsoft Scripting Runtime Library eller Scrrun.dll.

Obs! FileSystemObject stöder inte drift av binära filer eftersom Scrrun.dll stöder skapande och manipulation av filer med TextStream Object.

Det finns två metoder för att skapa FileSystemObject i VBA:

1: Skapa FSO -objekt med CreateObject -metod:

Med denna metod deklarerar vi först en variabel objekttyp. Ställ sedan in referensen för FSO -objektet till den variabeln med CreateObject:

Sub LearnFso () 'Skapa objektvariabeln Dim fso som objekt' Skapa FileSystemObject med hjälp av Create Object Method Set fso = CreateObject ("Scripting.FileSystemObject") Debug.Print fso.GetBaseName ("E: \ MTR \ Feb'18 MTR" ) Avsluta Sub 

Denna metod är dynamisk och överförbar. Det betyder att om du delar koden med andra system kommer den här koden att fungera perfekt. Det spelar ingen roll vilken version av Microsoft Runtime Scripting -version du har.

Den enda nackdelen är att du inte kommer att kunna se intellisensen från VBA. Du måste vara beroende av din kunskap för att kunna använda alla egenskaper och metoder för FileSystemObject.

2: Skapa FSO -objekt genom att lägga till referens till Microsoft Runtime Scripting

Du kan direkt skapa ett FileSystemObject i VBA med det nya nyckelordet. För det måste du lägga till en referens till den senaste Microsoft Scripting Runtime i ditt system.

För att lägga till referensen, gå till alternativet referenser i verktygsmenyn. Här hittar du Microsoft Scripting Runtime dll. Kontrollera det och klicka på OK.

Nu är du redo att skapa och använda FSO -objektet.

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

Eller

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

Båda kommer att fungera bra.

En stor fördel med denna metod är att du kommer att kunna se intelligensen hos VBA. VBA visar dig alla egenskaper och metoder för fso -objekt. Den kommer också att berätta vilken typ av variabler den kommer att acceptera och vilken typ av värde den kommer att returnera.

Om du delar denna kod med andra system måste du be dem att lägga till referens till Scripting Runtime från verktyg annars får de ett kompileringsfel som den användardefinierade typen inte är definierad. Så det är som att importera andra programmeringsspråk.

Observera att FSO inte är ett nyckelord. Du kan använda det som ett variabelnamn. Det är bara en konvention att namnge filsystemobjekt som fso. Det är därför som vissa förvirrar att det är ett sökord.

Båda metoderna för att skapa FSO -objekt har sina fördelar och nackdelar som jag har nämnt när jag förklarar dem. Så använd enligt dina behov. I den här artikeln kommer jag att använda den andra metoden för att skapa FileSystemObject.

Nu när vi vet hur vi skapar ett FileSystemObject i VBA, låt oss använda denna kunskap för att göra några meningsfulla uppgifter. Jag menar, låt oss hoppa till exemplen.

Exempel 1: Hämta hela undermappen i en specifik mapp

Det första exemplet vi kommer att se är att få en undermappnamn från en specifik mapp.

Sub LearnFso () 'decaring variables that we will need Dim fso As FileSystemObject' Variable for the FileSystemObject Dim fdr As Folder 'Variable for the base folder Dim subfdr As Folder' Variable for the sub folders Dim fdrpath As String 'to store path path mapp 'Intialisering av objekten fdrpath = "D: \ Downloads"' Deklarera mappen Set fso = New FileSystemObject 'Skapa fso -objektet Set fdr = fso.GetFolder (fdrpath)' Skapa mappobjektet för given mappslinga för att få alla undermapparnamn i För varje subfdr I fdr.SubFolders Debug.Print subfdr.Name Nästa subfdr End Sub 

När du kör ovanstående kod får du det här.

Ja! Det är min nedladdningsmapp. Koncentrera dig inte på det.

Hur fungerade detta?

Låt oss förstå i steg:

1: Dekarerande variabler som vi kommer att behöva

Dim fso Som FileSystemObject 'variabel för FileSystemObject

Dim fdr som mappvariabel för basmappen

Dim subfdr som mappvariabel för undermapparna

Först deklarerade vi alla variabler som vi kommer att behöva i detta exempel. Den första variabeln är naturligtvis fso som filsystemobjekt. De två variablerna fdr och subfdr är av mapptyp. Vi kommer att använda fso -objektet för att skapa ett filtypsobjekt istället för att skapa direkt. De fdrpath är användningsvariabel används för att hålla sökvägen till basmappen som vi vill få alla undermappar till.

2: Intialisering av objekten

fdrpath = "D: \ Downloads" 'Deklarerar mappen

Set fso = New FileSystemObject 'Skapa fso -objektet

Ställ in fdr = fso.GetFolder (fdrpath) 'Skapa mappobjekt för given mapp

I detta steg initierade vi alla objekt som vi hade deklarerat förutom subfdr. Observera att vi har initialiserat fdr -filvariabeln med hjälp av fso -objekten metod getFolder.

Metoden GetFolder () för FileSystemObject tar sökvägen till en mapp eller katalog som sträng och returnerar filtypobjekt.

3: loop för att få alla undermapparnamn i mappobjektet

För varje subfdr I fdr.SubFolders

Debug.Print subfdr.Name

Nästa subfdr

Här har vi använt a för varje loop för att gå igenom varje undermapp i fdr -filobjektet. Vi använde egenskapen SubFolders för filobjektet för att loopa.

Vi använder namnet egenskap för att få namnen på varje undermapp. Och det är gjort.

Exempel 2: Hämta alla filvägar i en mapp och dess undermappar

För att få alla sökvägar eller fullt kvalificerade namn på alla filer i en mapp och dess undermapp måste vi lägga till några fler rader i exempel 1 -kod.

Sub LearnFso () Dim fso As FileSystemObject Dim fdr As Folder 'Variable for the base folder Dim subfdr As Folder' Variable for the sub folders Dim fdrpath As String 'to store path of base folder Dim fl As File' to store file object fdrpath = "D: \ downloads" Set fso = New FileSystemObject Set fdr = fso.GetFolder (fdrpath) 'loop för att få alla undermapparnamn i För varje subfdr In fdr.SubFolders för varje fl In subfdr.Files' för att gå igenom varje fil Debug.Print fl.Path 'får filnamn Nästa fl Nästa subfdr' för att hämta filerna i huvudmappen För varje fl In fdr.Files Debug.Print fl.Path Nästa fl Slut Sub 

Metoden Folder.Files () är metoden som returnerar filerna i en undermapp. Metoden File.Path () returnerar filens fullständiga adress.

Vi har alla en inre loop för att iterera genom alla filer i undermappen i huvudmappen och dess.

För att få filerna i huvudmappen använder vi en annan loop.

Exempel 3: Spara filnamnen i en CSV -fil.

I föregående exempel lärde vi oss hur man skriver ut filvägarna för specifika mappar i det omedelbara fönstret. I det här exemplet lär vi oss hur du sparar dessa sökvägar i en CSV -fil. För att göra det behöver vi bara lägga till några rader i koden. Se boldekodslinjerna nedan.

Sub LearnFso () Dim fso As FileSystemObject Dim fdr As Folder 'Variable for the base folder Dim subfdr As Folder' Variable for the sub folders Dim fdrpath As String 'to store path of base folder Dim fl As File' to store file object Dim fileList Som TextStream 'Ett textströmobjekt 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 för att få alla undermapparnamn i För varje subfdr I fdr.SubFolders för varje fl In subfdr.Files' för att gå igenom varje fil fileList.Write fl.Path & "," Next fl Next subfdr 'för att få filer i huvudmappen För varje fl In fdr.Files fileList.Write fl.Path & "," Next fl fileList.Close End Sub 

Här har vi deklarerat ett nytt objekt av FileStream -typ med namnet fileList

Vi initierade fillistvariabeln med ett filestream -objekt med hjälp av raden nedan.

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

Vi använder metoden CreateTextFile för FSO för att skapa ett FileStream -objekt. Det skapar en textfil. Denna metod accepterar namnet på en fil med en fullständig sökväg. Den första variabeln gör det. Vi använder .csv -tillägget för att skapa en csv -fil. Den andra variabeln används för att tillåta överskrivning. Det tredje argumentet är Falskt att förklara att det inte är en binär fil.

I looparna ersätter vi debug.print med filelist.Write -metoden för att skriva varje filsökväg i den skapade filen.

Så ja killar, så här kan du använda FileSystemObject. FSO kan användas för många fler saker som vi kommer att diskutera i de kommande artiklarna. Om du har några tvivel om den här artikeln med FSO -relaterad fråga, fråga mig i kommentarsfältet nedan.

Komma igång med Excel VBA UserForms| Jag kommer att förklara hur man skapar ett formulär i excel, hur man använder VBA -verktygslåda, hur man hanterar användarinmatningar och slutligen hur man lagrar användarinmatningarna. Vi kommer att gå igenom dessa ämnen med ett exempel och steg för steg -guide.

VBA -variabler i Excel| VBA står för Visual Basic for Applications. Det är ett programmeringsspråk från Microsoft. Den används med Microsoft Office-applikationer som MSExcel, MS-Word och MS-Access medan VBA-variabler är specifika nyckelord.

Excel VBA variabelt omfång| På alla programmeringsspråk har vi variabelåtkomstspecificerare som definierar varifrån en definierad variabel kan nås. Excel VBA är inget undantag. VBA har också omfångsspecifikatorer.

ByRef och ByVal -argument | När ett argument skickas som ett ByRef -argument till en annan sub eller funktion skickas referensen till den faktiska variabeln. Alla ändringar som görs i kopian av variabeln återspeglas i det ursprungliga argumentet.

Ta bort blad utan bekräftelsefrågor med VBA i Microsoft Excel | Eftersom du raderar blad med VBA vet du vad du gör. Du vill berätta för Excel att inte visa den här varningen och ta bort det jävla arket.

Lägg till och spara ny arbetsbok med VBA i Microsoft Excel 2016| I den här koden skapade vi först en referens till ett arbetsbokobjekt. Och sedan initierade vi det med ett nytt arbetsbokobjekt. Fördelen med detta tillvägagångssätt är att du enkelt kan utföra den nya arbetsboken. Som att spara, stänga, radera osv

Visa ett meddelande i Excel VBA -statusfältet| Statusfältet i excel kan användas som kodmonitor. När din VBA -kod är lång och du utför flera uppgifter med VBA, inaktiverar du ofta skärmuppdateringen så att du inte ser att skärmen flimrar.

Stäng av varningsmeddelanden med VBA i Microsoft Excel 2016| Denna kod inaktiverar inte bara VBA -varningar utan ökar också kodens tidseffektivitet. Låt oss se hur.

Populära artiklar:

50 Excel -genvägar för att öka din produktivitet | Bli snabbare på din uppgift. Dessa 50 genvägar får dig att arbeta ännu snabbare med Excel.

VLOOKUP -funktionen i Excel | Detta är en av de mest använda och populära Excel -funktionerna som används för att leta upp värde från olika intervall och ark.

COUNTIF i Excel 2016 | Räkna värden med förhållanden med denna fantastiska funktion. Du behöver inte filtrera dina data för att räkna specifika värden. Countif -funktionen är avgörande för att förbereda din instrumentpanel.

Hur man använder SUMIF -funktionen i Excel | Detta är en annan viktig instrumentpanel. Detta hjälper dig att summera värden på specifika förhållanden.