Bruke FileSystemObject i Excel VBA

Bruke FileSystemObject (FSO) i Excel VBA

FileSystemObject (FSO) gir deg tilgang til en rekke funksjoner for tilgang til datamaskinens filsystem. Ved å bruke dette objektet kan du enkelt få tilgang til filer, mapper og stasjoner, og også lese og skrive til filer.

Mange av FSO -funksjonene kan skrives av deg i tradisjonell VBA, men vil kreve mer koding og ville være vanskeligere for en innkommende utvikler å vedlikeholde og forstå. FSO er et utprøvd API (Application Programming Interface) og er mer pålitelig enn din egen kode. Den er enkel å bruke og klar og tilgjengelig.

FSO fungerer etter internasjonale standarder og innstillinger du har på datamaskinen. Hvis du distribuerer Excel -applikasjonen din globalt, vil bruk av FSO ta seg av eventuelle forskjeller i innstillinger mellom land, som din egen kode ville ha problemer med å gjøre.

FSO lar deg gjøre nesten alt i VBA -kode som du kan gjøre i Windows File Explorer. Det gir deg fullstendig tilgang til Windows -filsystemet.

Opprette et FileSystemObject

FileSytemObject er ikke en del av Excel VBA. Du kan bruke FSO ved å opprette et objekt (sen binding) i VBA:

123 Sub CreateFSO ()Sett MyFSO = CreateObject ("Scripting.FileSystemObject")Slutt Sub

Alternativt kan du legge til en referanse i VBA for FSO -biblioteket. Dette kalles tidlig binding og det er raskere enn sen binding, siden objektet ikke trenger å opprettes når koden din kjøres.

For å legge til en referanse, må du trykke Alt-F11 for å gå inn i Visual Basic Editor (VBE), og deretter bruke 'Verktøy | Referanser' fra VBE-menyen. Dette viser et popup-vindu der du kan velge den relevante referansen (se nedenfor).

Rull nedover listen over tilgjengelige referanser til du kan se 'Microsoft Scripting Runtime'. Merk av i boksen og klikk på OK, og biblioteket er nå en del av søknaden din.

Plasseringen av DLL -biblioteksfilen er C: \ Windows \ SysWOW64 \ scrrun.dll

Hvis du distribuerer søknaden din til andre kolleger eller steder, er det viktig at de har denne filen på riktig sted på datamaskinen sin, ellers vil koden få en feil.

Det er verdt å sette en feilfelle på "WorkbookOpen" -hendelsen ved å bruke Dir -kommandoen for å kontrollere at filen finnes. Hvis den er fraværende, gi en advarsel og lukk Excel -filen.

Når referansen er lagt til, kan du bruke følgende kode for å lage FSO:

123 Sub TestFSO ()Dim MyFSO som nytt filsystemsystemSlutt Sub

Alle eksemplene i denne artikkelen vil bruke denne metoden for å lage FSO.

FSO har mange metoder og egenskaper tilgjengelig. Disse er delt inn her i seksjoner etter hva de kan gjøre.

Bruk av 'eksisterer' -metodene

Du kan bruke en FSO -metode for å kontrollere om det finnes en stasjon, en mappe eller en fil. Disse metodene er enkle å bruke og krever bare én parameter.

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

Disse utsagnene vil alle returnere 'True' forutsatt at datamaskinen din har en C: -stasjon, en mappe på den som heter 'Temp' og en fil i Temp -mappen som heter 'testfile.txt'

Tekststrengene i parameterne er ikke store og små bokstaver. Du kan ikke bruke jokertegn i noen av disse metodene.

Du kan heller ikke bruke nettadresser (Uniform Resource Locators) til å beskrive en mappe eller filplassering. FSO fungerer rent på Windows -operativsystemet og filsystemet derpå. For en ekstern serverplassering må du først kartlegge en stasjon til dette, og deretter bruke selve stasjonsbanen.

Bruke "Få" -metodene

FSO har mange metoder for å få informasjon om filen og banen, enten dele banen og filen, eller få fil- eller mappeinformasjon, for eksempel dato opprettet eller dato endret.

GetAbsolutePathname

Dette vil gi en fullstendig bane fra roten til den angitte stasjonen.

Syntaks er:

GetAbsolutePathName (pathspec)

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

Dette vil returnere strengen 'C: \ Users \ Richard \ Documents'. Dette er fordi banen er spesifisert som C: etterfulgt av tre prikker. Hver prikk betyr et neste nivå i mappestrukturen.

GetBaseName

Dette returnerer navnet på en spesifisert fil eller mappe.

Syntaks er:

GetBaseName(sti)

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

Denne koden returnerer "testfil". Metoden returnerer den siste delen i banenavnet. Hvis det er en fil, returnerer den ikke filtillegget.

Hvis banen ikke blir funnet, blir en tom streng returnert.

GetDrive

Dette lar deg bruke kode for å få tilgang til stasjonsinformasjon, basert på stasjonsbokstaven som er angitt.

Syntaks er:

GetDrive (drivespec)

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

Denne metoden returnerer et stasjonsobjekt basert på angitt stasjon. Du kan bruke dette objektet til å få tilgang til informasjon om stasjonen, for eksempel ledig plass.

Lei av å søke etter eksempler på VBA -kode? Prøv AutoMacro!

GetDriveName

Denne metoden vil skille ut stasjonsnavnet fra en sti / filnavn.

Syntaks er:

GetDriveName (sti)

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

Dette vil returnere 'C:'

GetExtensionName

Dette vil gi filtillegget tilbake i den angitte banen.

Syntaks er:

GetExtensionName (sti)

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

Dette vil returnere 'txt'.

Hvis ingen fil er spesifisert, blir en tom streng returnert.

GetFile

Denne metoden returnerer et filobjekt som inneholder forskjellig informasjon om selve filen.

Syntaks er:

GetFile (filespec)

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

Dette vil returnere datoen og klokkeslettet da den angitte filen ble opprettet. Hvis ingen fil er spesifisert eller filen ikke eksisterer, får du en "fil ikke funnet" -feil.

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

Dette vil returnere 'testfile.txt'.

GetFolder

Dette oppretter et mappeobjekt for basismappen i den angitte banen. Banen må bare inneholde mappenavn. Ingen filnavn må inkluderes, ellers vil det oppstå en feil.

Syntaks er:

GetFolder (mappespec)

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

Mappeobjektet har forskjellig informasjon i det som kan nås. I dette tilfellet returnerer den datoen da mappen ble opprettet.

Du kan også bruke denne metoden til å hente alle filnavnene i en gitt mappe:

12345678 Sub FileNames ()Dim MyFSO As New FileSystemObject, Pth As String, Fo As Folder, Fn As FilePth = "C: \ temp"Sett Fo = MyFSO.GetFolder (Pth)For hver Fn i Fo.FilesMsgBox Fn.NameNeste FnSlutt Sub

Denne koden vil gjenta gjennom ‘Temp’ -mappen og vise hvert filnavn som blir funnet.

GetParentFolderName

Denne metoden vil returnere mappenavnet på neste nivå opp i mappehierarkiet.

Syntaks er:

GetParentFolderName (sti)

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

Dette vil returnere 'Brukere', siden dette er 'overordnet' for mappen 'richard'.

VBA -programmering | Kodegenerator fungerer for deg!

Bruke "Opprett" -metodene

Med FSO kan du opprette en ny mappe og bane og opprette en tekstfil.

Lag mappe

Du kan angi et nytt mappebane navn som skal opprettes. En fare for dette er at hvis mappen allerede eksisterer, vil det oppstå en feil. Du kan bruke metoden 'FolderExists' for å sikre at dette ikke vil skje.

Syntaks er:

Lag mappe(mappenavn)

1234567 Sub CreateNewFolder ()Dim MyFSO As New FileSystemObject, Pth As StringPth = "C: \ temp \ MyFolder"Hvis MyFSO.FolderExists (Pth) = False ThenMyFSO.CreateFolder (Pth)Slutt omSlutt Sub

Denne koden vil opprette en ny mappe kalt 'MyFolder' under den eksisterende banen 'C: \ temp'.

CreateTextFile

Denne metoden lar deg lage en enkel tekstfil og skrive direkte inn i den.

Syntaks er:

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

1234567 Sub CreateTextFile ()Dim MyFSO As New FileSystemObject, Pth As StringPth = "C: \ temp \ Myfile.txt"Sett Fn = MyFSO.CreateTextFile (Pth, True)Fn.Write "Legg til min egen tekst her" & vbLf & "Dette er den andre linjen"Fn. LukkSlutt Sub

Denne koden oppretter en tekstfil som heter 'Myfile.txt' i 'Temp' -mappen i 'C:' -stasjonen og skriver deretter to tekstlinjer til den.

Vær oppmerksom på at et linjeformet tegn er koblet inn i strengen som skrives.

Hvis banen du skriver til ikke eksisterer, vil det oppstå en feil. Du kan bruke metoden 'FolderExists' for å sjekke dette før du oppretter filen.

Det er en valgfri parameter for å overskrive den eksisterende filen om nødvendig - dette kan være True eller False. Standarden er True.

Bruk av ‘kopieringsmetodene’

Du kan bruke disse metodene til å kopiere en fil eller en mappe til et annet sted.

VBA -programmering | Kodegenerator fungerer for deg!

Kopier fil

Denne metoden vil kopiere en fil fra en mappeplassering til en annen. Vær oppmerksom på at kopien mislykkes hvis destinasjonsstedet har skrivebeskyttet attributt.

Syntaks er:

Kopier fil kilde, mål, [ overskrive ]

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

Denne koden vil lage en kopi av alle tekst (txt) filene ved ‘C: \ temp’ til ‘C: \ temp \ myfolder \’, og overskrive filen der det er nødvendig. Standardinnstillingen for Overwrite er True.

Du kan bruke et jokertegn (*) for filnavnene, men du kan ikke bruke et spørsmålstegn (?) Jokertegn for å representere enkelttegn.

CopyFolder

Du kan bruke denne metoden til å kopiere en hel mappe fra ett sted til et annet.

Syntaks er:

CopyFolder kilde, mål, [ overskrive ]

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

Denne koden kopierer alle mappene og filene under 'C: \ temp' til 'C: \ users \ richard'. Den nye mappen som opprettes vil være 'C: \ users \ richard \ myfolder' ettersom 'C: \ temp' hadde en mappe i den kalt 'myfolder'.

Det er fire mulige utfall når du bruker denne metoden:

  • Hvis destinasjonen ikke eksisterer, blir kildemappen og innholdet kopiert.
  • Hvis destinasjonen allerede eksisterer, oppstår det en feil.
  • Hvis målet er en mappe, blir kildemappen og innholdet kopiert. Det vil oppstå en feil hvis Overskriv er satt til Falsk og det allerede er en kopi av en fil i destinasjonen.
  • Hvis destinasjonen er angitt til skrivebeskyttet, vil det oppstå en feil hvis overskriving er satt til falsk.

Denne metoden stopper ved den første feilen den støter på. Det er ingen tilbakeføring av handlinger som har lyktes før feilen oppstår.

Bruke "Flytt" -metodene

Disse metodene kan brukes til å flytte filer eller mapper til andre steder. Dette er det samme som å klippe fra ett sted og lime inn på et annet sted. Vær oppmerksom på at hvis filen som skal flyttes er åpen, mislykkes flyttingsmetoden med en feil.

MoveFile

Denne metoden brukes til å flytte en bestemt fil til et annet sted. Jokertegn er tillatt i den siste banekomponenten i kilden.

Syntaks er:

MoveFile kilde, mål

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

Denne koden flytter alle filene som er funnet på 'C: \ temp' til 'C: \ temp \ myfolder'.

Kilde- og destinasjonsmappene må eksistere, ettersom destinasjonsmappen ikke blir opprettet automatisk.

Denne metoden stopper ved den første feilen den støter på. Det er ingen tilbakeføring av handlinger som har lyktes før feilen oppstår.

VBA -programmering | Kodegenerator fungerer for deg!

MoveFolder

Denne metoden flytter en bestemt mappe fra ett sted til et annet.

Syntaks er:

MoveFolder (kilde, mål)

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

Denne koden flytter mappen "min mappe" og innholdet til mappen "min destinasjon". ‘Myfolder’ slettes effektivt og ‘mydestination’ opprettes, sammen med innholdet fra ‘myfolder’.

Hvis målmappen allerede eksisterer, oppstår det en feil.

Bruk "Slett" -metodene

Disse metodene brukes til å slette filer eller mapper. De må brukes med forsiktighet, siden det ikke er noen tilbakeslag eller angre metoder hvis noe går galt.

Slett fil

Dette sletter individuelle filer eller en gruppe filer ved hjelp av jokertegn.

Syntaks er:

Slett fil filespec, [ makt ]

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

Denne koden sletter alle filene i mappen 'C: \ temp'

Force -parameteren er valgfri og er satt til True eller False. Hvis den er satt til True, blir skrivebeskyttede filer slettet. Standarden er False.

Slett mappe

Denne metoden sletter en spesifisert mappe og innholdet.

Syntaks er:

Slett mappe mappespes, [ makt ]

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

Denne koden sletter mappen "MyDestination" og alle filene i den mappen. Mappen 'temp' forblir.

Force -parameteren er valgfri og er satt til True eller False. Hvis den er satt til True, blir skrivebeskyttede mapper slettet. Standarden er False.

Jokertegn kan brukes i den siste komponenten av banen. Hvis mappen ikke blir funnet, vil det oppstå en feil.

Denne metoden stopper ved den første feilen den støter på. Det er ingen tilbakeføring av handlinger som har lyktes før feilen oppstår.

VBA -programmering | Kodegenerator fungerer for deg!

Andre metoder i FSO

OpenAsTextStream.

Denne metoden åpner en spesifisert fil som et tekststrømobjekt og lar den leses eller skrives til. Fordelen med denne metoden er at den kan åpne hvilken som helst filtype og trekke ut tilgjengelig tekst.

Syntaks er:

OpenAsTextStream ([ iomode, [ format ]])

Parameteren iomode tillater skrivebeskyttet (1), lese/skrive (2) og legge til (8). Les/skriv -parameteren overskriver filen.

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

1234567891011 Sub TextStream ()Dim MyFSO som nytt filsystemobjektSett f = MyFSO.GetFile ("C: \ temp \ myfile.txt")Sett ts = f.OpenAsTextStream (2)ts.Skriv "Min nye tekst"ts.LukkSett ts = f.OpenAsTextStream (1)s = ts.ReadLineMsgBox sts.LukkSlutt Sub

Denne koden får en eksisterende tekstfil og lager den som et objekt ved hjelp av "GetFile" -metoden. Den åpner deretter tekststrømmen som les / skriv (2) og skriver en tekstlinje. Filen lukkes deretter og åpnes på nytt som lest (1), og en linje leses fra den, som deretter vises som en meldingsboks.

Vær oppmerksom på at leselinjen må plasseres i en variabel før den kan vises i en meldingsboks.

BuildPath

Denne metoden vil legge til en mappe eller filnavn på slutten av en eksisterende mappebane. Dette oppretter bare en tekststreng og oppretter faktisk ikke den nye mappen.

Syntaks er:

BuildPath (sti, Navn)

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

Dette vil vise 'C: \ temp \ ANewFolder'. Men hvis du faktisk vil bruke denne mappen, må du bruke metoden 'CreateFolder'.

OpenTextFile

Denne metoden lar filer åpnes og leses fra eller skrives til i henhold til angitte parametere. Det fungerer på lignende måte som OpenAsTextStream -metoden.

Syntaks er:

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

Parameteren iomode tillater ForReading, ForWriting og ForAppending. ForWriting -parameteren overskriver filen.

"Opprett" -parameteren er en boolsk verdi. True betyr at en ny fil vil bli opprettet hvis det angitte filnavnet ikke eksisterer. Falsk betyr at ingen fil vil bli opprettet hvis filnavnet ikke blir funnet. Standarden er False.

Parameteren ‘format’ kan settes til TristateFalse, TristateMixed, TristateTrue og TristateUseDefault avhengig av om filen er ASCII eller Unicode.

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

Denne koden vil lese en linje fra tekstfilen 'myfile.txt'.

En fordel OpenTextFile -metoden har i forhold til OpenAsTextStreamMethod er at den har nedtrekk for parametrene, som er mer meningsfulle enn å prøve å huske de riktige numeriske verdiene for de forskjellige parameteralternativene.

VBA -programmering | Kodegenerator fungerer for deg!

Egenskaper for FSO

Stasjoner

Denne egenskapen har en samling tilgjengelige stasjoner på datamaskinen din.

1234567 Sub Drv ()Dim MyFSO As New FileSystemObject, d As DriveSett Dr = MyFSO.DrivesFor hver d i Dr.MsgBox d.DriveLetterNeste dSlutt Sub

Denne koden returnerer hver stasjonsbokstav som er tilgjengelig på datamaskinen din.

Navn

Dette returnerer navnet på en spesifisert fil eller mappe.

123456789 Sub NameExample ()Dim MyFSO som nytt filsystemsystemSett f = MyFSO.GetFile ("C: \ temp \ myfile.txt")i = f.Name & "on Drive" & UCase (f.Drive) & vbCrLfi = i & "Opprettet:" & f.DateCreated & vbCrLfi = i & "Sist åpnet:" & f.DateLastAccessed & vbCrLfi = i & "Sist endret:" & f.DateLastModifiedMsgBox iSlutt Sub

Denne koden vil gi navnet på filen og informasjon om den ved hjelp av Drive -egenskapen.

Sti

Sti -egenskapen vil skille banen fra en filspesifikasjon.

123456789 Sub PathExample ()Dim MyFSO som nytt filsystemsystemSett f = MyFSO.GetFile ("C: \ temp \ myfile.txt")i = f.Path & f.Name & "on Drive" & UCase (f.Drive) & vbCrLfi = i & "Opprettet:" & f.DateCreated & vbCrLfi = i & "Sist åpnet:" & f.DateLastAccessed & vbCrLfi = i & "Sist endret:" & f.DateLastModifiedMsgBox iSlutt Sub

Dette eksemplet fungerer på samme måte som eksempelet Navn, bortsett fra at det nå gir banen til filen.

VBA -programmering | Kodegenerator fungerer for deg!

Størrelse

Egenskapen Size vil vise størrelsen på en mappe eller fil.

12345 Sub FSize ()Dim MyFSO som nytt filsystemsystemSett f = MyFSO.GetFolder ("C: \ temp \")MsgBox f. StørrelseSlutt Sub

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

12345 Sub FSize ()Dim MyFSO som nytt filsystemsystemSett f = MyFSO.GetFile ("C: \ temp \ myfile.txt")MsgBox f. StørrelseSlutt Sub

Denne koden ovenfor vil returnere størrelsen på filen 'myfile.txt'.

Type

Typeegenskapen returnerer teksten for filen eller mappetypen.

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

Denne koden ovenfor returnerer teksten "Filmappe".

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

Denne koden ovenfor returnerer teksten "Tekstdokument".

Legg merke til bruken av 'GetFolder' og 'GetFile' i hvert eksempel.

Du vil bidra til utvikling av området, dele siden med vennene dine

wave wave wave wave wave