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

Fb-ButtonFb-knapp

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 textströmmar. Det kan inte bara komma åt filer, mappar och textfiler utan kan också skapa. Dessa operationer är inte begränsade till systemets hårddisk utan alla enheter som är anslutna till filen. Det betyder att du kan komma åt pennstationer, cd-ROM-skivor eller praktiskt taget anslutna nätverksenheter.

det här är de operationer vi kan gö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.

För 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 man tillgång till FileSystemObject i VBA?

filsystemobjektet är en del av Microsoft Scripting Runtime Library. För att komma åt ett Filsystemobject 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-objekt.

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

1: Skapa FSO-objekt med CreateObject-metoden:

med den här metoden förklarar vi först en variabel objekttyp. Ställ sedan in referensen för FSO-objekt till den variabeln med CreateObject:

Sub LearnFso() 'Creating the object variable Dim fso As Object 'Create the FileSystemObject using Create Object Method Set fso = CreateObject("Scripting.FileSystemObject") Debug.Print fso.GetBaseName("E:\MTR\Feb'18 MTR")End Sub

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

den enda nackdelen är att du inte kommer att kunna se intellisense som tillhandahålls av VBA. Du måste vara beroende av din kunskap för att 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 Filsystemobject i VBA med det nya sökordet. 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 Verktyg-menyn. 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 as FileSystemObject Set fso = New FileSystemObject Debug.Print fso.GetBaseName("E:\MTR\Feb'18 MTR") End Sub

båda fungerar bra.

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

om du delar den här koden till andra system måste du berätta för 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 den som ett variabelnamn. Det är bara en konvention att namnge filesystemobject som fso. Det är därför som vissa människor förvirrar att det är ett nyckelord.

båda metoderna för att skapa FSO-objekt har sina fördelar och nackdelar som jag har nämnt när jag förklarade dem. Så använd enligt ditt 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 man skapar ett Filsystemobject 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: Få alla undermappen i en viss mapp

det första exemplet vi ska se är att få en undermappnamn från en viss 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 of base folder 'Intializing the objects fdrpath = "D:\Downloads" 'Declaring the folder Set fso = New FileSystemObject 'Creating the fso object Set fdr = fso.GetFolder(fdrpath) 'Creating the folder object of given folder 'loop to get all the sub folders name in For Each subfdr In fdr.SubFolders Debug.Print subfdr.Name Next subfdrEnd Sub

När du kör ovanstående kod detta vad du får.

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

hur detta fungerade?

låt oss förstå i steg:

1: Decaring variabler som vi behöver

Dim fso som FileSystemObject ’variabel för FileSystemObject

Dim fdr som mapp’ variabel för basmappen

Dim subfdr som mapp ’ variabel för undermapparna

först förklarade vi all variabel som vi behöver i det här exemplet. Den första variabeln är naturligtvis FSO as file sytem-objektet. De två variablerna fdr och subfdr är av mapptyp. Vi använder FSO-objektet för att skapa ett filtypobjekt istället för att skapa direkt. Fdrpath är använd variabel används för att hålla sökvägen till basmappen som vi vill få alla undermappar.

2: initialisera objekten

fdrpath = ”D:\Downloads ”’ deklarera mappen

Set fso = nytt Filsystemobject ’skapa FSO-objektet

Set fdr = fso.GetFolder (fdrpath) ’skapa mappobjektet för given mapp

i det här steget initierade vi alla objekt som vi hade deklarerat utom subfdr. Observera att vi har intialiserat FDR-filvariabeln med fso objects 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 undermappar namn i mappobjektet

För varje subfdr i fdr.Undermappar

felsöka.Skriv ut subfdr.Name

nästa subfdr

Här har vi använt a för varje slinga för att slinga genom varje undermapp i FDR-filobjektet. Vi använde egenskapen undermappar för filobjektet till loop.

vi använder namnegenskapen för att få namnen på varje undermapp. Och det är gjort.

exempel 2: Hämta alla filvägar i en mapp och det är undermappar

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

Sub LearnFso()Dim fso As FileSystemObjectDim fdr As Folder ' Variable for the base folderDim subfdr As Folder ' Variable for the sub foldersDim fdrpath As String 'to store path of base folderDim fl As File 'to store file objectfdrpath = "D:\downloads"Set fso = New FileSystemObjectSet fdr = fso.GetFolder(fdrpath)'loop to get all the sub folders name inFor Each subfdr In fdr.SubFolders For Each fl In subfdr.Files 'to loop throgh each file Debug.Print fl.Path 'getting file name Next flNext subfdr'to get the files of main folderFor Each fl In fdr.Files Debug.Print fl.PathNext flEnd Sub

mappen.Files () metoden är den metod som returnerar filerna i en undermapp. fil.Path () – metoden returnerar den fullständiga adressen till filen.

Vi har var och en en inre slinga 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 slinga.

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 bolde – kodraderna nedan.

Sub LearnFso()Dim fso As FileSystemObjectDim fdr As Folder ' Variable for the base folderDim subfdr As Folder ' Variable for the sub foldersDim fdrpath As String 'to store path of base folderDim fl As File 'to store file objectDim fileList As TextStream 'A textstream objectfdrpath = "D:\downloads"Set fso = New FileSystemObjectSet fdr = fso.GetFolder(fdrpath)Set fileList = fso.CreateTextFile(fdrpath & "\File List in This Folder.csv", True, False)'loop to get all the sub folders name inFor Each subfdr In fdr.SubFolders For Each fl In subfdr.Files 'to loop through each file fileList.Write fl.Path & "," Next flNext subfdr'to get the files of main folderFor Each fl In fdr.Files fileList.Write fl.Path & ","Next fl fileList.CloseEnd Sub

Här har vi förklarat ett nytt objekt av FileStream-typ med namnet fileList

vi initierade filelistvariabeln med ett filestream-objekt med hjälp av raden nedan.

Ange fillista = fso.CreateTextFile (fdrpath & ” \fillista i den här mappen.csv”, sant, falskt)

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

i looparna ersätter vi felsökningen.Skriv ut med fillista.Skrivmetod för att skriva varje filväg i filen som skapats.

Så ja killar, så här kan du använda Filsystemobject. 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 i FSO-relaterad fråga, fråga mig i kommentarsektionen 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 toolbox, hur man hanterar användaringångar och slutligen hur man lagrar användaringångarna. 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. Det används med Microsoft Office-applikationer som MSExcel, MS-Word och MS-Access medan VBA-variabler är specifika nyckelord.

Excel VBA Variable Scope / på alla programmeringsspråk har vi variabla åtkomstspecifikationer som definierar varifrån en definierad variabel kan nås. Excel VBA är inget undantag. VBA har också omfattning specificerare.

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. Eventuella ändringar som gjorts i kopian av variabeln kommer att återspeglas i det ursprungliga argumentet.

Ta bort ark utan bekräftelsemanvisningar med VBA i Microsoft Excel / eftersom du tar bort ark med VBA vet du vad du gör. Du skulle vilja berätta för Excel att inte visa denna varning 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 arbetsboksobjekt. Och sedan initierade vi det med ett nytt arbetsboksobjekt. Fördelen med detta tillvägagångssätt är att du enkelt kan göra operationer på den här nya arbetsboken. Som att spara, stänga, ta bort, etc

visa ett meddelande på Excel VBA statusfältet| statusfältet i excel kan användas som en kodmonitor. När din VBA-kod är lång och du gö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 / den här koden 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 gör att du arbetar ännu snabbare på Excel.

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

COUNTIF i Excel 2016 / räkna värden med villkor som använder 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 instrumentpanelens väsentliga funktion. Detta hjälper dig att sammanfatta värden på specifika förhållanden.

Lämna en kommentar