Brug af FileSystemObject i Excel VBA

Brug af FileSystemObject (FSO) i Excel VBA

FileSystemObject (FSO) giver dig adgang til en lang række funktioner til adgang til din computers filsystem. Ved hjælp af dette objekt kan du nemt få adgang til filer, mapper og drev og også læse og skrive til filer.

Mange af FSO -funktionerne kunne blive skrevet af dig i traditionel VBA, men ville kræve mere kodning og ville være vanskeligere for en indkommende udvikler at vedligeholde og forstå. FSO er en afprøvet API (Application Programming Interface) og er mere pålidelig end din egen kode. Den er let at bruge og klar og tilgængelig.

FSO arbejder efter internationale standarder og indstillinger, som du har på din computer. Hvis du distribuerer din Excel -applikation globalt, vil brug af FSO tage sig af eventuelle forskelle i indstillinger mellem lande, som din egen kode ville have problemer med at gøre.

FSO giver dig mulighed for at gøre næsten alt i VBA -kode, som du kunne gøre i Windows File Explorer. Det giver dig fuldstændig adgang til Windows -filsystemet.

Oprettelse af et FileSystemObject

FileSytemObject er ikke en del af Excel VBA. Du kan bruge FSO ved at oprette et objekt (sen binding) i VBA:

123 Sub CreateFSO ()Indstil MyFSO = CreateObject ("Scripting.FileSystemObject")Afslut Sub

Alternativt kan du tilføje en reference til VBA til FSO -biblioteket. Dette kaldes tidlig binding, og det er hurtigere end sen binding, da objektet ikke skal oprettes, når din kode køres.

For at tilføje en reference skal du trykke på Alt-F11 for at åbne Visual Basic Editor (VBE) og derefter bruge 'Værktøjer | Referencer' fra VBE-menuen. Dette viser et pop op-vindue, hvor du kan vælge den relevante reference (se nedenfor).

Rul ned på listen over tilgængelige referencer, indtil du kan se 'Microsoft Scripting Runtime'. Marker feltet, og klik på OK, og biblioteket er nu en del af din applikation.

Placeringen af ​​DLL -biblioteksfilen er C: \ Windows \ SysWOW64 \ scrrun.dll

Hvis du distribuerer din applikation til andre kolleger eller lokationer, er det vigtigt, at de har denne fil på den korrekte placering på deres computer, ellers vil din kode tage fejl.

Det er værd at sætte en fejlfælde på 'WorkbookOpen' -hændelsen ved hjælp af kommandoen Dir for at kontrollere, at filen findes. Hvis den ikke findes, skal du give en advarsel og lukke Excel -filen.

Når referencen er tilføjet, kan du bruge følgende kode til at oprette FSO:

123 Sub TestFSO ()Dim MyFSO som nyt filsystemsystemAfslut Sub

Alle eksemplerne i denne artikel vil bruge denne metode til at oprette FSO.

FSO har mange metoder og egenskaber til rådighed. Disse er her opdelt i sektioner efter, hvad de kan gøre.

Brug af 'Eksisterer' -metoderne

Du kan bruge en FSO -metode til at kontrollere, om der findes et drev, en mappe eller en fil. Disse metoder er lette at bruge og kræver kun én parameter.

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

Disse udsagn vil alle returnere 'Sandt' forudsat at din computer har et C: -drev, en mappe på den kaldet 'Temp' og en fil i Temp -mappen kaldet 'testfile.txt'

Tekststrenge i parametrene er ikke store og små bogstaver. Du kan ikke bruge jokertegn i nogen af ​​disse metoder.

Du kan heller ikke bruge webadresser (Uniform Resource Locators) til at beskrive en mappe eller filplacering. FSO fungerer udelukkende på Windows -operativsystemet og filsystemet derpå. For en ekstern serverplacering skal du først kortlægge et drev til dette og derefter bruge selve drevstien.

Brug af 'Få' -metoderne

FSO har mange metoder til at få oplysninger om filen og stien, enten ved at opdele stien og filen eller få fil- eller mappeoplysninger, f.eks. Dato oprettet eller dato ændret.

GetAbsolutePathname

Dette vil give en komplet sti fra roden af ​​det angivne drev.

Syntaks er:

GetAbsolutePathName (pathspec)

12345 Sub AbsolutePath ()Dim MyFSO som nyt filsystemsystem, Pth som strengPth = "c: …"MsgBox MyFSO.GetAbsolutePathName (Pth)Afslut Sub

Dette returnerer en streng 'C: \ Users \ Richard \ Documents'. Dette skyldes, at stien er angivet som C: efterfulgt af tre prikker. Hver prik angiver et næste niveau i mappestrukturen.

GetBaseName

Dette returnerer navnet på en bestemt fil eller mappe.

Syntaks er:

GetBaseName(sti)

12345 Sub BaseName ()Dim MyFSO som nyt filsystemsystem, Pth som strengPth = "C: \ temp \ testfile.txt"MsgBox MyFSO.GetBaseName (Pth)Afslut Sub

Denne kode returnerer 'testfil'. Metoden returnerer det sidste afsnit i stinavnet. Hvis det er en fil, returnerer den ikke filsuffikset.

Hvis stien ikke kan findes, returneres en tom streng.

GetDrive

Dette giver dig mulighed for at bruge kode til at få adgang til drevinformation baseret på det angivne drevbogstav.

Syntaks er:

GetDrive (drivespec)

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

Denne metode returnerer et drevobjekt baseret på det angivne drev. Du kan bruge dette objekt til at få adgang til oplysninger om drevet, f.eks. Ledig plads.

Træt af at søge efter eksempler på VBA -kode? Prøv AutoMacro!

GetDriveName

Denne metode adskiller drevnavnet fra en sti / filnavnstreng.

Syntaks er:

GetDriveName (sti)

12345 Sub -drevnavn ()Dim MyFSO som nyt filsystemsystem, Pth som strengPth = "C: \ temp \ testfile.txt"MsgBox MyFSO.GetDriveName (Pth)Afslut Sub

Dette returnerer 'C:'

GetExtensionName

Dette returnerer filsuffikset på den angivne sti.

Syntaks er:

GetExtensionName (sti)

12345 Sub ExtensionName ()Dim MyFSO som nyt filsystemsystem, Pth som strengPth = "C: \ temp \ testfile.txt"MsgBox MyFSO.GetExtensionName (Pth)Afslut Sub

Dette vil returnere 'txt'.

Hvis der ikke er angivet en fil, returneres en tom streng.

GetFile

Denne metode returnerer et filobjekt, som indeholder forskellige oplysninger om selve filen.

Syntaks er:

GetFile (filespec)

123456 Sub FileInfo ()Dim MyFSO som nyt filSystemObject, Pth som streng, Fn som filPth = "C: \ temp \ testfile.txt"Indstil Fn = MyFSO.GetFile (Pth)MsgBox Fn.DateCreatedAfslut Sub

Dette returnerer dato og klokkeslæt, da den angivne fil blev oprettet. Hvis der ikke er angivet en fil, eller filen ikke findes, får du en 'fil ikke fundet' fejl.

12345 Subfilnavn ()Dim MyFSO som nyt filsystemsystem, Pth som strengPth = "C: \ temp \ testfile.txt"MsgBox MyFSO.GetFileName (Pth)Afslut Sub

Dette returnerer 'testfile.txt'.

GetFolder

Dette opretter et mappeobjekt for basismappen i den angivne sti. Stien må kun indeholde mappenavne. Ingen filnavne skal medtages, ellers opstår der en fejl.

Syntaks er:

GetFolder (mappespec)

123456 UndermappeInfo ()Dim MyFSO Som New FileSystemObject, Pth As String, Fo As FolderPth = "C: \ temp"Sæt Fo = MyFSO.GetFolder (Pth)MsgBox Fo.DateCreatedAfslut Sub

Mappeobjektet har forskellige oplysninger i sig, som kan tilgås. I dette tilfælde returnerer den datoen, da mappen blev oprettet.

Du kan også bruge denne metode til at hente alle filnavne i en given mappe:

12345678 Underfilnavne ()Dim MyFSO som ny filSystemObject, Pth som streng, Fo som mappe, Fn som filPth = "C: \ temp"Sæt Fo = MyFSO.GetFolder (Pth)For hver Fn I Fo.FilesMsgBox Fn.NameNæste FnAfslut Sub

Denne kode gentager sig gennem mappen ‘Temp’ og viser hvert filnavn, der findes.

GetParentFolderName

Denne metode returnerer mappenavnet i det næste niveau op i mappehierarkiet.

Syntaks er:

GetParentFolderName (sti)

12345 Undermappenavn ()Dim MyFSO Som New FileSystemObject, Pth As String, Fo As FolderPth = "C: \ brugere \ richard"MsgBox MyFSO.GetParentFolderName (Pth)Afslut Sub

Dette vil returnere 'Brugere', da dette er 'forælder' for mappen 'richard'.

VBA -programmering | Kodegenerator virker for dig!

Brug af ‘Opret’ metoder

Med FSO kan du oprette en ny mappe og sti og oprette en tekstfil.

Opret mappe

Du kan angive et nyt mappesti, der skal oprettes. En fare ved dette er, at hvis mappen allerede findes, vil der opstå en fejl. Du kan bruge metoden 'FolderExists' for at sikre, at dette ikke sker.

Syntaks er:

Opret mappe(mappenavn)

1234567 Sub CreateNewFolder ()Dim MyFSO som nyt filsystemsystem, Pth som strengPth = "C: \ temp \ MyFolder"Hvis MyFSO.FolderExists (Pth) = Falsk SåMyFSO.CreateFolder (Pth)Afslut HvisAfslut Sub

Denne kode vil oprette en ny mappe kaldet 'MyFolder' under den eksisterende sti 'C: \ temp'.

CreateTextFile

Denne metode giver dig mulighed for at oprette en enkel tekstfil og skrive direkte ind i den.

Syntaks er:

CreateTextFile (filnavn, [ overskrive, [ unicode ]])

1234567 Sub CreateTextFile ()Dim MyFSO som nyt filsystemsystem, Pth som strengPth = "C: \ temp \ Myfile.txt"Indstil Fn = MyFSO.CreateTextFile (Pth, True)Fn.Write "Tilføj min egen tekst her" & vbLf & "Dette er den anden linje"Fn. TætAfslut Sub

Denne kode opretter en tekstfil kaldet 'Myfile.txt' i mappen 'Temp' på 'C:' -drevet og skriver derefter to tekstlinjer til den.

Bemærk, at et linjetilførselstegn er forbundet til den streng, der skrives.

Hvis den sti, du skriver til, ikke findes, vil der opstå en fejl. Du kan bruge metoden 'FolderExists' til at kontrollere dette, før du opretter filen.

Der er en valgfri parameter til at overskrive den eksisterende fil, hvis det kræves - dette kan være sandt eller falsk. Standard er True.

Brug af 'Kopier' -metoderne

Du kan bruge disse metoder til at kopiere en fil eller en mappe til et andet sted.

VBA -programmering | Kodegenerator virker for dig!

CopyFile

Denne metode kopierer en fil fra en mappeplacering til en anden. Bemærk, at kopien mislykkes, hvis destinationsplaceringen har skrivebeskyttet attribut.

Syntaks er:

CopyFile kilde, bestemmelsessted, [ overskrive ]

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

Denne kode vil lave en kopi af alle tekst (txt) filerne ved 'C: \ temp' til 'C: \ temp \ myfolder \', og overskrive filen, hvis det er nødvendigt. Standardindstillingen for Overskriv er sand.

Du kan bruge en stjerne (*) jokertegn til filnavne, men du kan ikke bruge et spørgsmålstegn (?) Jokertegn til at repræsentere enkelte tegn.

CopyFolder

Du kan bruge denne metode til at kopiere en hel mappe fra et sted til et andet.

Syntaks er:

CopyFolder kilde, bestemmelsessted, [ overskrive ]

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

Denne kode kopierer alle mapper og filer under 'C: \ temp' til 'C: \ users \ richard'. Den nye mappe, der oprettes, vil være 'C: \ users \ richard \ myfolder', da 'C: \ temp' havde en mappe i den kaldet 'myfolder'.

Der er fire mulige resultater ved brug af denne metode:

  • Hvis destinationen ikke findes, kopieres kildemappen og indholdet.
  • Hvis destinationen allerede findes, opstår der en fejl.
  • Hvis destinationen er en mappe, vil kildemappen og dens indhold blive kopieret. Der opstår en fejl, hvis Overskriv er indstillet til Falsk, og der allerede er en kopi af en fil i destinationen.
  • Hvis destinationen er angivet til skrivebeskyttet, opstår der en fejl, hvis overskrivning er indstillet til falsk.

Denne metode stopper ved den første fejl, den støder på. Der er ingen tilbageførsel af handlinger, der er lykkedes, før fejlen opstår.

Brug af ‘Flyt’ -metoderne

Disse metoder kan bruges til at flytte filer eller mapper til andre steder. Dette er det samme som at skære fra et sted og indsætte et andet sted. Bemærk, at hvis den fil, der skal flyttes, er åben, så flytter metoden med en fejl.

MoveFile

Denne metode bruges til at flytte en bestemt fil til et andet sted. Jokertegn er tilladt i kildeens sidste stikomponent.

Syntaks er:

MoveFile kilde, bestemmelsessted

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

Denne kode flytter alle de filer, der findes på 'C: \ temp' til 'C: \ temp \ myfolder'.

Kilde- og destinationsmapperne skal eksistere, da destinationsmappen ikke automatisk oprettes.

Denne metode stopper ved den første fejl, den støder på. Der er ingen tilbageførsel af handlinger, der er lykkedes, før fejlen opstår.

VBA -programmering | Kodegenerator virker for dig!

MoveFolder

Denne metode flytter en bestemt mappe fra et sted til et andet.

Syntaks er:

MoveFolder (kilde, bestemmelsessted)

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

Denne kode flytter mappen 'myfolder' og indholdet til mappen 'mydestination'. 'Myfolder' slettes effektivt, og 'mydestination' oprettes sammen med indholdet fra 'myfolder'.

Hvis destinationsmappen allerede findes, opstår der en fejl.

Brug af 'Slet' metoder

Disse metoder bruges til at slette filer eller mapper. De skal bruges med forsigtighed, da der ikke er nogen tilbagekaldelse eller fortrydelsesmetoder, hvis noget går galt.

Slet fil

Dette sletter individuelle filer eller en gruppe filer ved hjælp af jokertegn.

Syntaks er:

Slet fil filespec, [ kraft ]

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

Denne kode sletter alle filerne i mappen 'C: \ temp'

Parameteren Force er valgfri og er indstillet til True eller False. Hvis den er indstillet til True, slettes skrivebeskyttede filer. Standarden er Falsk.

Slet mappe

Denne metode sletter en bestemt mappe og dens indhold.

Syntaks er:

Slet mappe mappespec, [ kraft ]

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

Denne kode vil slette mappen 'MyDestination' og alle filerne i den pågældende mappe. Mappen 'temp' forbliver.

Parameteren Force er valgfri og er indstillet til True eller False. Hvis den er indstillet til True, slettes skrivebeskyttede mapper. Standarden er Falsk.

Jokertegn kan bruges i den sidste komponent af stien. Hvis mappen ikke findes, vil der opstå en fejl.

Denne metode stopper ved den første fejl, den støder på. Der er ingen tilbageførsel af handlinger, der er lykkedes, før fejlen opstår.

VBA -programmering | Kodegenerator virker for dig!

Andre metoder i FSO

OpenAsTextStream.

Denne metode åbner en bestemt fil som et tekststrømobjekt og gør det muligt at læse eller skrive den til. Fordelen ved denne metode er, at den kan åbne enhver filtype og udtrække den tilgængelige tekst.

Syntaks er:

OpenAsTextStream ([ iomode, [ format ]])

Parameteren 'iomode' tillader skrivebeskyttet (1), læse/skrive (2) og tilføje (8). Læse/skrive -parameteren overskriver filen.

Parameteren ‘format’ er sat til -2 for systemstandard, -1 for at åbne filen som Unicode og 0 for at åbne filen som ASCII (American Standard Code for Information Interchange).

1234567891011 Sub TextStream ()Dim MyFSO som nyt filsystemsystemIndstil f = MyFSO.GetFile ("C: \ temp \ myfile.txt")Indstil ts = f.OpenAsTextStream (2)ts. Skriv "Min nye tekst"ts.LukIndstil ts = f.OpenAsTextStream (1)s = ts.ReadLineMsgBox sts.LukAfslut Sub

Denne kode får en eksisterende tekstfil og opretter den som et objekt ved hjælp af metoden 'GetFile'. Det åbner derefter tekststrømmen som læs / skriv (2) og skriver en tekstlinje. Filen lukkes derefter og åbnes igen som læst (1), og der læses en linje fra den, som derefter vises som en meddelelsesboks.

Bemærk, at læselinjen skal placeres i en variabel, før den kan vises i en meddelelsesboks.

BuildPath

Denne metode tilføjer en mappe eller et filnavn til slutningen af ​​en eksisterende mappesti. Dette opretter kun en tekststreng og opretter faktisk ikke den nye mappe.

Syntaks er:

BuildPath (sti, navn)

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

Dette viser 'C: \ temp \ ANewFolder'. Men hvis du rent faktisk vil bruge denne mappe, skal du bruge metoden 'CreateFolder'.

OpenTextFile

Denne metode tillader filer at blive åbnet og læst fra eller skrevet til i henhold til indstillede parametre. Det fungerer på samme måde som OpenAsTextStream -metoden.

Syntaks er:

OpenTextFile (filnavn, [ iomode, [ skab, [ format ]]])

Parameteren 'iomode' tillader ForReading, ForWriting og ForAppending. Parameteren ForWriting overskriver filen.

‘Opret’ parameteren er en boolsk værdi. True betyder, at der oprettes en ny fil, hvis det angivne filnavn ikke findes. Falsk betyder, at der ikke vil blive oprettet en fil, hvis filnavnet ikke findes. Standarden er Falsk.

Parameteren ‘format’ kan indstilles til TristateFalse, TristateMixed, TristateTrue og TristateUseDefault afhængigt af om filen er ASCII eller Unicode.

1234567 Sub OpenTxtFile ()Dim MyFSO som nyt filsystemsystemIndstil ts = MyFSO.OpenTextFile ("C: \ temp \ myfile.txt", ForReading, False, TristateUseDefault)s = ts.ReadLineMsgBox sts.LukAfslut Sub

Denne kode læser en linje fra tekstfilen 'myfile.txt'.

En fordel, som OpenTextFile -metoden har i forhold til OpenAsTextStreamMethod, er, at den har drop -down for parametrene, som er mere meningsfulde end at forsøge at huske de relevante numeriske værdier for de forskellige parameterindstillinger.

VBA -programmering | Kodegenerator virker for dig!

FSO's egenskaber

Drev

Denne ejendom indeholder en samling af tilgængelige drev på din computer.

1234567 Sub Drv ()Dim MyFSO som nyt filsystemsystem, d som drevIndstil Dr = MyFSO.DrivesFor hver d I Dr.MsgBox d.DriveLetterNæste dAfslut Sub

Denne kode returnerer hvert drevbogstav, der er tilgængeligt på din computer.

Navn

Dette returnerer navnet på en bestemt fil eller mappe.

123456789 Sub NameExample ()Dim MyFSO som nyt filsystemsystemIndstil f = MyFSO.GetFile ("C: \ temp \ myfile.txt")i = f.Name & "on Drive" & UCase (f.Drive) & vbCrLfi = i & "Oprettet:" & f.DateCreated & vbCrLfi = i & "Sidst tilgået:" & f.DateLastAccessed & vbCrLfi = i & "Sidst ændret:" & f.DateLastModifiedMsgBox iAfslut Sub

Denne kode giver navnet på filen og oplysninger om den ved hjælp af egenskaben Drive.

Sti

Egenskaben Sti adskiller stien fra en filspecifikation.

123456789 Sub PathExample ()Dim MyFSO som nyt filsystemsystemIndstil f = MyFSO.GetFile ("C: \ temp \ myfile.txt")i = f.Path & f.Name & "on Drive" & UCase (f.Drive) & vbCrLfi = i & "Oprettet:" & f.DateCreated & vbCrLfi = i & "Sidst tilgået:" & f.DateLastAccessed & vbCrLfi = i & "Sidst ændret:" & f.DateLastModifiedMsgBox iAfslut Sub

Dette eksempel fungerer på samme måde som navneeksemplet, bortset fra at det nu giver stien til filen.

VBA -programmering | Kodegenerator virker for dig!

Størrelse

Egenskaben Size angiver størrelsen på en mappe eller en fil.

12345 Understørrelse ()Dim MyFSO som nyt filsystemsystemIndstil f = MyFSO.GetFolder ("C: \ temp \")MsgBox f. StørrelseAfslut Sub

Denne kode ovenfor returnerer størrelsen på mappen 'C: \ temp \'.

12345 Understørrelse ()Dim MyFSO som nyt filsystemsystemIndstil f = MyFSO.GetFile ("C: \ temp \ myfile.txt")MsgBox f. StørrelseAfslut Sub

Denne kode ovenfor returnerer størrelsen på filen 'myfile.txt'.

Type

Typeegenskaben returnerer teksten til filen eller mappetypen.

12345 Sub FType ()Dim MyFSO som nyt filsystemsystemIndstil f = MyFSO.GetFolder ("C: \ temp \")MsgBox f.TypeAfslut Sub

Denne kode ovenfor returnerer teksten 'Filmappe'.

12345 Sub FType ()Dim MyFSO som nyt filsystemsystemIndstil f = MyFSO.GetFile ("C: \ temp \ myfile.txt")MsgBox f.TypeAfslut Sub

Denne kode ovenfor returnerer teksten 'Tekstdokument'.

Bemærk brugen af ​​'GetFolder' og 'GetFile' i hvert eksempel.

Du vil bidrage til udviklingen af ​​hjemmesiden, at dele siden med dine venner

wave wave wave wave wave