Använda FileSystemObject i Excel VBA

Använda FileSystemObject (FSO) i Excel VBA

FileSystemObject (FSO) ger dig tillgång till en rad funktioner för åtkomst till din dators filsystem. Med hjälp av detta objekt kan du enkelt komma åt filer, mappar och enheter, och även läsa och skriva till filer.

Många av FSO -funktionerna kan skrivas av dig i traditionell VBA, men skulle kräva mer kodning och skulle vara svårare för en inkommande utvecklare att underhålla och förstå. FSO är ett beprövat API (Application Programming Interface) och är mer tillförlitligt än din egen kod. Den är lätt att använda och klar och tillgänglig.

FSO arbetar med internationella standarder och inställningar som du har på din dator. Om du distribuerar din Excel -applikation globalt kommer FSO att ta hand om eventuella skillnader i inställningar mellan länder, vilket din egen kod skulle ha problem med att göra.

FSO låter dig göra nästan allt i VBA -kod som du kan göra i Windows File Explorer. Det ger dig fullständig åtkomst till Windows filsystem.

Skapa ett FileSystemObject

FileSytemObject är inte en del av Excel VBA. Du kan använda FSO genom att skapa ett objekt (sen bindning) i VBA:

123 Sub CreateFSO ()Ange MyFSO = CreateObject ("Scripting.FileSystemObject")Avsluta Sub

Alternativt kan du lägga till en referens till VBA för FSO -biblioteket. Detta kallas tidig bindning och det är snabbare än sen bindning, eftersom objektet inte behöver skapas när din kod körs.

För att lägga till en referens måste du trycka på Alt-F11 för att öppna Visual Basic Editor (VBE) och sedan använda 'Verktyg | Referenser' från VBE-menyn. Detta visar ett popup-fönster där du kan välja den relevanta referensen (se nedan).

Rulla ner listan med tillgängliga referenser tills du kan se "Microsoft Scripting Runtime". Markera rutan och klicka på OK, och biblioteket är nu en del av din applikation.

Platsen för DLL -biblioteksfilen är C: \ Windows \ SysWOW64 \ scrrun.dll

Om du distribuerar din ansökan till andra kollegor eller platser är det viktigt att de har den här filen på rätt plats på sin dator, annars kommer din kod att bli fel.

Det är värt att sätta en felfälla på händelsen ‘WorkbookOpen’ med hjälp av kommandot Dir för att kontrollera att filen finns. Om det inte finns, ge ett varningsmeddelande och stäng Excel -filen.

När referensen har lagts till kan du använda följande kod för att skapa FSO:

123 SubtestFSO ()Dim MyFSO som nytt filsystemsystemAvsluta Sub

Alla exemplen i den här artikeln kommer att använda denna metod för att skapa FSO.

FSO har många metoder och egenskaper tillgängliga. Dessa är här indelade i sektioner efter vad de kan göra.

Använda "existerar" -metoderna

Du kan använda en FSO -metod för att kontrollera om det finns en enhet, en mapp eller en fil. Dessa metoder är enkla att använda och kräver bara en parameter.

123456 Sub CheckExistance ()Dim MyFSO som nytt filsystemsystemMsgBox MyFSO.DriveExists ("C:")MsgBox MyFSO.FolderExists ("C: \ temp \")MsgBox MyFSO.FileExists ("C: \ temp \ testfile.txt")Avsluta Sub

Dessa uttalanden kommer alla att returnera 'True' förutsatt att din dator har en C: -enhet, en mapp som heter 'Temp' och en fil i Temp -mappen som heter 'testfile.txt'

Textsträngarna i parametrarna är inte skiftlägeskänsliga. Du kan inte använda jokertecken i någon av dessa metoder.

Du kan inte heller använda webbadresser (Uniform Resource Locators) för att beskriva en mapp eller filplats. FSO fungerar enbart på Windows -operativsystemet och filsystemet därpå. För en extern serverplats måste du först och främst mappa en enhet till detta och sedan använda själva sökvägen.

Använda "Get" -metoderna

FSO har många metoder för att få information om filen och sökvägen, antingen dela vägen och filen eller få fil- eller mappinformation, till exempel datum skapat eller datum ändrat.

GetAbsolutePathname

Detta ger en fullständig sökväg från roten till den angivna enheten.

Syntax är:

GetAbsolutePathName (pathspec)

12345 Sub AbsolutePath ()Dim MyFSO As New FileSystemObject, Pth As StringPth = "c: …"MsgBox MyFSO.GetAbsolutePathName (Pth)Avsluta Sub

Detta returnerar strängen 'C: \ Users \ Richard \ Documents'. Detta beror på att sökvägen har angetts som C: följt av tre punkter. Varje punkt betyder en nästa nivå i mappstrukturen.

GetBaseName

Detta returnerar namnet på en angiven fil eller mapp.

Syntax är:

GetBaseName(väg)

12345 Sub BaseName ()Dim MyFSO As New FileSystemObject, Pth As StringPth = "C: \ temp \ testfile.txt"MsgBox MyFSO.GetBaseName (Pth)Avsluta Sub

Denna kod returnerar "testfil". Metoden returnerar det sista avsnittet i sökvägsnamnet. Om det är en fil returnerar den inte filändelsen.

Om sökvägen inte kan hittas returneras en tom sträng.

GetDrive

Detta gör att du kan använda kod för att komma åt enhetsinformation, baserat på den angivna enhetsbokstaven.

Syntax är:

GetDrive (drivespec)

123456 Sub DriveInfo ()Dim MyFSO As New FileSystemObject, Pth As String, Dr As DrivePth = "C:"Ange Dr = MyFSO.GetDrive (Pth)MsgBox Dr.FreeSpaceAvsluta Sub

Denna metod returnerar ett enhetsobjekt baserat på den angivna enheten. Du kan använda detta objekt för att komma åt information om enheten, till exempel ledigt utrymme.

Trött på att söka efter exempel på VBA -kod? Prova AutoMacro!

GetDriveName

Denna metod kommer att skilja ut enhetsnamnet från en sökväg / filnamnssträng.

Syntax är:

GetDriveName (väg)

12345 Sub DriveName ()Dim MyFSO As New FileSystemObject, Pth As StringPth = "C: \ temp \ testfile.txt"MsgBox MyFSO.GetDriveName (Pth)Avsluta Sub

Detta kommer att returnera 'C:'

GetExtensionName

Detta returnerar filtillägget i den angivna sökvägen.

Syntax är:

GetExtensionName (väg)

12345 Sub ExtensionName ()Dim MyFSO As New FileSystemObject, Pth As StringPth = "C: \ temp \ testfile.txt"MsgBox MyFSO.GetExtensionName (Pth)Avsluta Sub

Detta kommer att returnera 'txt'.

Om ingen fil har angetts kommer en tom sträng att returneras.

Få fil

Denna metod returnerar ett filobjekt som innehåller olika information om själva filen.

Syntax är:

Få fil (filespec)

123456 Sub FileInfo ()Dim MyFSO As New FileSystemObject, Pth As String, Fn As FilePth = "C: \ temp \ testfile.txt"Ange Fn = MyFSO.GetFile (Pth)MsgBox Fn.DateCreatedAvsluta Sub

Detta returnerar datum och tid då den angivna filen skapades. Om ingen fil har angetts eller filen inte finns får du ett "fil hittades inte" -fel.

12345 Subfilnamn ()Dim MyFSO As New FileSystemObject, Pth As StringPth = "C: \ temp \ testfile.txt"MsgBox MyFSO.GetFileName (Pth)Avsluta Sub

Detta returnerar 'testfile.txt'.

GetFolder

Detta skapar ett mappobjekt för basmappen i den angivna sökvägen. Sökvägen får bara innehålla mappnamn. Inga filnamn måste inkluderas annars uppstår ett fel.

Syntax är:

GetFolder (mappspec)

123456 Sub FolderInfo ()Dim MyFSO As New FileSystemObject, Pth As String, Fo As FolderPth = "C: \ temp"Ange Fo = MyFSO.GetFolder (Pth)MsgBox Fo.DateCreatedAvsluta Sub

Mappobjektet har olika information i sig som kan nås. I det här fallet returnerar det datum då mappen skapades.

Du kan också använda den här metoden för att hämta alla filnamn i en given mapp:

12345678 Subfilnamn ()Dim MyFSO As New FileSystemObject, Pth As String, Fo As Folder, Fn As FilePth = "C: \ temp"Ange Fo = MyFSO.GetFolder (Pth)För varje Fn i Fo.FilesMsgBox Fn.NameNästa FnAvsluta Sub

Denna kod kommer att iterera genom "Temp" -mappen och visa varje filnamn som hittats.

GetParentFolderName

Denna metod returnerar mappnamnet i nästa nivå uppåt i mapphierarkin.

Syntax är:

GetParentFolderName (väg)

12345 Undermappnamn ()Dim MyFSO As New FileSystemObject, Pth As String, Fo As FolderPth = "C: \ users \ richard"MsgBox MyFSO.GetParentFolderName (Pth)Avsluta Sub

Detta returnerar "Användare" eftersom detta är "överordnad" för mappen "richard".

VBA -programmering | Kodgenerator fungerar för dig!

Använda "Skapa" -metoderna

Med FSO kan du skapa en ny mapp och sökväg och skapa en textfil.

Skapa mapp

Du kan ange ett nytt mappvägsnamn som ska skapas. En fara med detta är att om mappen redan finns kommer ett fel att uppstå. Du kan använda metoden 'FolderExists' för att säkerställa att detta inte kommer att hända.

Syntax är:

Skapa mapp(mapp namn)

1234567 Sub CreateNewFolder ()Dim MyFSO As New FileSystemObject, Pth As StringPth = "C: \ temp \ MyFolder"Om MyFSO.FolderExists (Pth) = Falskt DåMyFSO.CreateFolder (Pth)Avsluta omAvsluta Sub

Denna kod skapar en ny mapp som heter 'MyFolder' under den befintliga sökvägen 'C: \ temp'.

CreateTextFile

Denna metod gör att du kan skapa en enkel textfil och skriva direkt i den.

Syntax är:

CreateTextFile (filnamn, [ skriva över, [ unicode ]])

1234567 Sub CreateTextFile ()Dim MyFSO As New FileSystemObject, Pth As StringPth = "C: \ temp \ Myfile.txt"Ange Fn = MyFSO.CreateTextFile (Pth, True)Fn.Write "Lägg till min egen text här" & vbLf & "Detta är den andra raden"Fn. NäraAvsluta Sub

Denna kod skapar en textfil som heter "Myfile.txt" i "Temp" -mappen på "C:" -enheten och skriver sedan två textrader till den.

Observera att ett radmatningstecken är sammanfogat i strängen som skrivs.

Om sökvägen som du skriver till inte existerar, uppstår ett fel. Du kan använda metoden "FolderExists" för att kontrollera detta innan du skapar filen.

Det finns en valfri parameter för att skriva över den befintliga filen om det behövs - det kan vara sant eller falskt. Standard är True.

Använda "kopieringsmetoderna"

Du kan använda dessa metoder för att kopiera en fil eller en mapp till en annan plats.

VBA -programmering | Kodgenerator fungerar för dig!

Kopiera fil

Denna metod kommer att kopiera en fil från en mappplats till en annan. Observera att kopian misslyckas om målplatsen har skrivskyddad attribut.

Syntax är:

Kopiera fil källa, destination, [ skriva över ]

1234 Sub CopyFile ()Dim MyFSO som nytt filsystemsystemMyFSO.CopyFile "C: \ temp \*. Txt", "C: \ temp \ myfolder \", TrueAvsluta Sub

Denna kod kommer att göra en kopia av alla text (txt) filer vid ‘C: \ temp’ till ‘C: \ temp \ myfolder \’, och skriva över filen vid behov. Standardinställningen för Overwrite är True.

Du kan använda ett asterisk (*) jokertecken för filnamnen, men du kan inte använda ett frågetecken (?) Jokertecken för att representera enskilda tecken.

Kopiera mapp

Du kan använda den här metoden för att kopiera en hel mapp från en plats till en annan.

Syntax är:

Kopiera mapp källa, destination, [ skriva över ]

1234 Sub CopyFolder ()Dim MyFSO som nytt filsystemsystemMyFSO.CopyFolder "C: \ temp \*", "C: \ users \ richard \"Avsluta Sub

Denna kod kopierar alla mappar och filer under 'C: \ temp' till 'C: \ users \ richard'. Den nya mappen som skapas kommer att vara 'C: \ users \ richard \ myfolder' eftersom 'C: \ temp' hade en mapp i den som heter 'myfolder'.

Det finns fyra möjliga resultat när du använder den här metoden:

  • Om destinationen inte finns kopieras källmappen och innehållet.
  • Om destinationen redan finns uppstår ett fel.
  • Om destinationen är en mapp, kommer källmappen och dess innehåll att kopieras. Ett fel uppstår om Overwrite är inställd på False och det redan finns en kopia av en fil i destinationen.
  • Om destinationen är inställd på skrivskyddad uppstår ett fel om skrivning är inställd på falsk.

Denna metod stannar vid det första felet som den stöter på. Det finns ingen återställning av åtgärder som har lyckats innan felet inträffar.

Använda "Flytta" -metoderna

Dessa metoder kan användas för att flytta filer eller mappar till andra platser. Detta är detsamma som att klippa från en plats och klistra in på en annan plats. Observera att om filen som ska flyttas är öppen misslyckas flyttmetoden med ett fel.

MoveFile

Denna metod används för att flytta en specifik fil till en annan plats. Jokertecken är tillåtna i källens sista sökkomponent.

Syntax är:

MoveFile källa, destination

1234 Sub MoveAFile ()Dim MyFSO som nytt filsystemsystemMyFSO.MoveFile "C: \ temp \*", "C: \ temp \ myfolder"Avsluta Sub

Denna kod flyttar alla filer som finns vid 'C: \ temp' till 'C: \ temp \ myfolder'.

Käll- och målmapparna måste finnas, eftersom målmappen inte skapas automatiskt.

Denna metod stannar vid det första felet som den stöter på. Det finns ingen återställning av åtgärder som har lyckats innan felet inträffar.

VBA -programmering | Kodgenerator fungerar för dig!

MoveFolder

Denna metod flyttar en specifik mapp från en plats till en annan.

Syntax är:

MoveFolder (källa, destination)

1234 Sub MoveAFolder ()Dim MyFSO som nytt filsystemsystemMyFSO.MoveFolder "C: \ temp \ myfolder", "C: \ temp \ mydestination"Avsluta Sub

Denna kod flyttar mappen "min mapp" och innehållet till mappen "mydestination". "Min mapp" raderas effektivt och "mydestination" skapas, tillsammans med innehållet från "min mapp".

Om målmappen redan finns uppstår ett fel.

Använda "Ta bort" -metoderna

Dessa metoder används för att radera filer eller mappar. De måste användas med försiktighet eftersom det inte finns någon återställning eller ångra metoder om något går fel.

Radera fil

Detta raderar enskilda filer eller en grupp filer med jokertecken.

Syntax är:

Radera fil filespec, [ tvinga ]

1234 Sub DeleteFiles ()Dim MyFSO som nytt filsystemsystemMyFSO.DeleteFile "C: \ temp \*"Avsluta Sub

Denna kod raderar alla filer i mappen 'C: \ temp'

Parametern Force är valfri och är inställd på True eller False. Om den är inställd på True raderas skrivskyddade filer. Standard är falskt.

Ta bort mapp

Denna metod tar bort en angiven mapp och dess innehåll.

Syntax är:

Ta bort mapp mappspec, [ tvinga ]

1234 Sub DeleteFolders ()Dim MyFSO som nytt filsystemsystemMyFSO.DeleteFolder "C: \ temp \ MyDestination"Avsluta Sub

Denna kod raderar mappen 'MyDestination' och alla filer i den mappen. Mappen 'temp' förblir.

Parametern Force är valfri och är inställd på True eller False. Om den är inställd på True raderas skrivskyddade mappar. Standard är falskt.

Jokertecken kan användas i den sista komponenten av sökvägen. Om mappen inte hittas uppstår ett fel.

Denna metod stannar vid det första felet som den stöter på. Det finns ingen återställning av åtgärder som har lyckats innan felet inträffar.

VBA -programmering | Kodgenerator fungerar för dig!

Andra metoder i FSO

OpenAsTextStream.

Denna metod öppnar en specificerad fil som ett Text Stream -objekt och gör att den kan läsas eller skrivas till. Fördelen med denna metod är att den kan öppna vilken filtyp som helst och extrahera tillgänglig text.

Syntax är:

OpenAsTextStream ([ iomode, [ formatera ]])

Parametern 'iomode' tillåter skrivskyddad (1), läsning/skrivning (2) och tillägg (8). Läs/skriv -parametern skriver över filen.

Parametern ‘format’ är inställd på -2 för systemstandard, -1 för att öppna filen som Unicode och 0 för att öppna filen som ASCII (American Standard Code for Information Interchange).

1234567891011 Sub TextStream ()Dim MyFSO som nytt filsystemsystemAnge f = MyFSO.GetFile ("C: \ temp \ myfile.txt")Ange ts = f.OpenAsTextStream (2)ts.Skriv "Min nya text"ts.StängAnge ts = f.OpenAsTextStream (1)s = ts.ReadLineMsgBox sts.StängAvsluta Sub

Denna kod får en befintlig textfil och skapar den som ett objekt med metoden ‘GetFile’. Det öppnar sedan textströmmen som läs / skriv (2) och skriver en textrad. Filen stängs sedan och öppnas igen som läst (1) och en rad läses från den, som sedan visas som en meddelanderuta.

Observera att läseraden måste placeras i en variabel innan den kan visas i en meddelanderuta.

BuildPath

Denna metod lägger till en mapp eller ett filnamn i slutet av en befintlig mappväg. Detta skapar bara en textsträng och skapar faktiskt inte den nya mappen.

Syntax är:

BuildPath (väg, namn)

12345 Sub BuildPth ()Dim MyFSO som nytt filsystemsystemnp = MyFSO.BuildPath ("C: \ temp", "ANewFolder")MsgBox npAvsluta Sub

Detta kommer att visa 'C: \ temp \ ANewFolder'. Men om du verkligen vill använda den här mappen måste du använda metoden 'CreateFolder'.

OpenTextFile

Denna metod gör att filer kan öppnas och läsas från eller skrivas till enligt inställda parametrar. Det fungerar på ett liknande sätt som OpenAsTextStream -metoden.

Syntax är:

OpenTextFile (filnamn, [ iomode, [ skapa, [ formatera ]]])

Parametern 'iomode' tillåter ForReading, ForWriting och ForAppending. Parametern ForWriting skriver över filen.

Parametern ‘skapa’ är ett booleskt värde. True betyder att en ny fil skapas om det angivna filnamnet inte finns. Falskt betyder att ingen fil skapas om filnamnet inte hittas. Standard är falskt.

Parametern ‘format’ kan ställas in på TristateFalse, TristateMixed, TristateTrue och TristateUseDefault beroende på om filen är ASCII eller Unicode.

1234567 Sub OpenTxtFile ()Dim MyFSO som nytt filsystemsystemAnge ts = MyFSO.OpenTextFile ("C: \ temp \ myfile.txt", ForReading, False, TristateUseDefault)s = ts.ReadLineMsgBox sts.StängAvsluta Sub

Denna kod kommer att läsa en rad från textfilen 'myfile.txt'.

En fördel som OpenTextFile -metoden har gentemot OpenAsTextStreamMethod är att den har nedgångar för parametrarna, som är mer meningsfulla än att försöka komma ihåg lämpliga numeriska värden för de olika parameteralternativen.

VBA -programmering | Kodgenerator fungerar för dig!

FSO: s egenskaper

Enheter

Den här egenskapen har en samling tillgängliga enheter på din dator.

1234567 Sub Drv ()Dim MyFSO som nytt filsystemsystem, d som enhetAnge Dr = MyFSO.DrivesFör varje d i Dr.MsgBox d.DriveLetterNästa dAvsluta Sub

Denna kod returnerar varje enhetsbokstav som finns på din dator.

namn

Detta returnerar namnet på en angiven fil eller mapp.

123456789 Sub NameExample ()Dim MyFSO som nytt filsystemsystemAnge f = MyFSO.GetFile ("C: \ temp \ myfile.txt")i = f.Name & "on Drive" & UCase (f.Drive) & vbCrLfi = i & "Skapad:" & f.DateCreated & vbCrLfi = i & "Senast åtkomlig:" & f.DateLastAccessed & vbCrLfi = i & "Senast ändrad:" & f.DateLastModifiedMsgBox iAvsluta Sub

Denna kod kommer att ge namnet på filen och information om den med egenskapen Drive.

Väg

Egenskapen Path kommer att skilja sökvägen från en filspecifikation.

123456789 Sub PathExample ()Dim MyFSO som nytt filsystemsystemAnge f = MyFSO.GetFile ("C: \ temp \ myfile.txt")i = f.Path & f.Name & "on Drive" & UCase (f.Drive) & vbCrLfi = i & "Skapad:" & f.DateCreated & vbCrLfi = i & "Senast åtkomlig:" & f.DateLastAccessed & vbCrLfi = i & "Senast ändrad:" & f.DateLastModifiedMsgBox iAvsluta Sub

Detta exempel fungerar på samma sätt som namnexemplet, förutom att det nu tillhandahåller sökvägen för filen.

VBA -programmering | Kodgenerator fungerar för dig!

Storlek

Egenskapen Storlek ger storleken på en mapp eller fil.

12345 Sub FSize ()Dim MyFSO som nytt filsystemsystemAnge f = MyFSO.GetFolder ("C: \ temp \")MsgBox f.SizeAvsluta Sub

Denna kod ovan returnerar storleken på mappen 'C: \ temp \'.

12345 Sub FSize ()Dim MyFSO som nytt filsystemsystemAnge f = MyFSO.GetFile ("C: \ temp \ myfile.txt")MsgBox f.SizeAvsluta Sub

Denna kod ovan returnerar storleken på filen 'myfile.txt'.

Typ

Typegenskapen returnerar texten för fil- eller mapptypen.

12345 Sub FType ()Dim MyFSO som nytt filsystemsystemAnge f = MyFSO.GetFolder ("C: \ temp \")MsgBox f.TypAvsluta Sub

Denna kod ovan returnerar texten "Filmapp".

12345 Sub FType ()Dim MyFSO som nytt filsystemsystemAnge f = MyFSO.GetFile ("C: \ temp \ myfile.txt")MsgBox f.TypAvsluta Sub

Denna kod ovan returnerar texten "Textdokument".

Observera användningen av "GetFolder" och "GetFile" i varje exempel.

Du kommer att bidra till utvecklingen av webbplatsen, dela sidan med dina vänner

wave wave wave wave wave