Uporaba FileSystemObject v Excelu VBA

Uporaba FileSystemObject (FSO) v Excelu VBA

FileSystemObject (FSO) vam omogoča dostop do številnih funkcij za dostop do datotečnega sistema vašega računalnika. S tem predmetom lahko preprosto dostopate do datotek, map in pogonov ter tudi berete in pišete v datoteke.

Mnoge funkcije FSO bi lahko napisali v tradicionalnem VBA, vendar bi zahtevali več kodiranja, prihajajoči razvijalec pa bi jih težje vzdrževal in razumel. FSO je preizkušen API (vmesnik za programiranje aplikacij) in je bolj zanesljiv kot vaša koda. Je enostaven za uporabo, pripravljen in na voljo.

FSO deluje v skladu z mednarodnimi standardi in nastavitvami, ki jih imate v računalniku. Če svojo aplikacijo Excel distribuirate po vsem svetu, bo uporaba sistema FSO poskrbela za vse razlike v nastavitvah med državami, kar bi vaša koda imela težave.

FSO vam bo omogočil, da v kodi VBA naredite skoraj vse, kar lahko storite v Raziskovalcu datotek Windows. Omogoča popoln dostop do datotečnega sistema Windows.

Ustvarjanje FileSystemObject

FileSytemObject ni del Excelovega VBA. FSO lahko uporabite tako, da ustvarite objekt (pozna vezava) v VBA:

123 Sub CreateFSO ()Nastavi MyFSO = CreateObject ("Scripting.FileSystemObject")End Sub

Druga možnost je, da v knjižnico FSO dodate referenco v VBA. To se imenuje zgodnja vezava in je hitrejša od pozne vezave, saj predmeta ni treba ustvariti med izvajanjem kode.

Če želite dodati sklic, pritisnite Alt-F11, da vstopite v urejevalnik Visual Basic (VBE), nato pa v meniju VBE uporabite »Orodja | Reference«. To bo prikazalo pojavno okno, v katerem lahko izberete ustrezno referenco (glejte spodaj).

Pomaknite se navzdol po seznamu razpoložljivih referenc, dokler ne vidite »Microsoft Scripting Runtime«. Potrdite polje in kliknite V redu, knjižnica je zdaj del vaše aplikacije.

Datoteka knjižnice DLL se nahaja na lokaciji C: \ Windows \ SysWOW64 \ scrrun.dll

Če svojo aplikacijo distribuirate drugim sodelavcem ali lokacijam, je nujno, da imajo to datoteko na pravilnem mestu v svojem računalniku, sicer bo prišlo do napake v kodi.

V dogodek 'WorkbookOpen' je vredno vnesti past za napake z ukazom Dir, da preverite, ali datoteka obstaja. Če ni, pošljite opozorilno sporočilo in zaprite datoteko Excel.

Ko je referenca dodana, lahko za ustvarjanje FSO uporabite naslednjo kodo:

123 Pod TestFSO ()Zatemni MyFSO kot nov FileSystemObjectEnd Sub

Vsi primeri v tem članku bodo uporabili to metodologijo za ustvarjanje FSO.

FSO ima na voljo veliko metod in lastnosti. Ti so tukaj razdeljeni na odseke glede na to, kaj zmorejo.

Z uporabo metod "Obstaja"

Z metodo FSO lahko preverite, ali obstaja pogon, mapa ali datoteka. Te metode so enostavne za uporabo in zahtevajo le en parameter.

123456 Sub CheckExistance ()Zatemni MyFSO kot nov FileSystemObjectMsgBox MyFSO.DriveExists ("C:")MsgBox MyFSO.FolderExists ("C: \ temp \")MsgBox MyFSO.FileExists ("C: \ temp \ testfile.txt")End Sub

Vse te izjave bodo vrnile vrednost »True« ob predpostavki, da ima vaš računalnik pogon C: mapo, imenovano »Temp«, in datoteko v mapi Temp, imenovano »testfile.txt«

Besedilni nizi v parametrih ne razlikujejo med velikimi in malimi črkami. Pri nobeni od teh metod ne morete uporabiti nadomestnih znakov.

Za opis mape ali lokacije datoteke tudi ne morete uporabiti URL -jev (enotnih lokatorjev virov). FSO deluje izključno v operacijskem sistemu Windows in datotečnem sistemu v njem. Za lokacijo zunanjega strežnika morate najprej preslikati pogon na to in nato uporabiti samo pot pogona.

Z uporabo metod »Pridobite«

FSO ima številne načine za pridobivanje informacij o datoteki in poti, tako da razdeli pot in datoteko ali pridobi podatke o datoteki ali mapi, na primer datum ustvarjanja ali datum spremembe.

GetAbsolutePathname

To bo zagotovilo popolno pot od korena podanega pogona.

Sintaksa je:

GetAbsolutePathName (pathspec)

12345 Sub AbsolutePath ()Zatemni MyFSO kot nov FileSystemObject, Pth kot nizPth = "c: …"MsgBox MyFSO.GetAbsolutePathName (Pth)End Sub

To bo vrnilo niz "C: \ Users \ Richard \ Documents". To je zato, ker je bila pot podana kot C: sledijo tri pike. Vsaka pika pomeni naslednjo stopnjo v strukturi map.

GetBaseName

To vrne ime določene datoteke ali mape.

Sintaksa je:

GetBaseName(pot)

12345 Sub BaseName ()Zatemni MyFSO kot nov FileSystemObject, Pth kot nizPth = "C: \ temp \ testfile.txt"MsgBox MyFSO.GetBaseName (Pth)End Sub

Ta koda bo vrnila "testfile". Metoda vrne zadnji odsek v imenu poti. Če gre za datoteko, potem ne vrne pripone datoteke.

Če poti ni mogoče najti, se vrne prazen niz.

GetDrive

To vam omogoča uporabo kode za dostop do informacij o pogonu glede na podano črko pogona.

Sintaksa je:

GetDrive (driverspec)

123456 Sub DriveInfo ()Zatemni MyFSO kot nov FileSystemObject, Pth kot niz, Dr kot pogonPth = "C:"Nastavi Dr = MyFSO.GetDrive (Pth)MsgBox Dr.FreeSpaceEnd Sub

Ta metoda vrne objekt pogona na podlagi podanega pogona. S tem predmetom lahko dostopate do informacij o pogonu, na primer prostega prostora.

Utrujen od iskanja primerov kode VBA? Preizkusite AutoMacro!

GetDriveName

Ta metoda bo ločila ime pogona od niza poti / imena datoteke.

Sintaksa je:

GetDriveName (pot)

12345 Sub DriveName ()Zatemni MyFSO kot nov FileSystemObject, Pth kot nizPth = "C: \ temp \ testfile.txt"MsgBox MyFSO.GetDriveName (Pth)End Sub

To bo vrnilo "C:"

GetExtensionName

S tem se vrne pripona datoteke na podani poti.

Sintaksa je:

GetExtensionName (pot)

12345 Sub ExtensionName ()Zatemni MyFSO kot nov FileSystemObject, Pth kot nizPth = "C: \ temp \ testfile.txt"MsgBox MyFSO.GetExtensionName (Pth)End Sub

To bo vrnilo "txt".

Če ni podana nobena datoteka, se vrne prazen niz.

GetFile

Ta metoda vrne datotečni objekt, ki vsebuje različne podatke o sami datoteki.

Sintaksa je:

GetFile (filespec)

123456 Sub FileInfo ()Zatemni MyFSO kot nov FileSystemObject, Pth kot niz, Fn kot datotekoPth = "C: \ temp \ testfile.txt"Nastavite Fn = MyFSO.GetFile (Pth)MsgBox Fn.DateCreatedEnd Sub

To vrne datum in čas, ko je bila določena datoteka ustvarjena. Če datoteka ni določena ali datoteka ne obstaja, se prikaže napaka »datoteke ni mogoče najti«.

12345 Sub FileName ()Zatemni MyFSO kot nov FileSystemObject, Pth kot nizPth = "C: \ temp \ testfile.txt"MsgBox MyFSO.GetFileName (Pth)End Sub

To bo vrnilo datoteko »testfile.txt«.

GetFolder

To ustvari predmet mape za osnovno mapo na podani poti. Pot mora vsebovati samo imena map. Imena datotek ne smejo biti vključena, sicer bo prišlo do napake.

Sintaksa je:

GetFolder (folderspec)

123456 PodmapaInfo ()Zatemni MyFSO kot nov FileSystemObject, Pth kot niz, Fo kot mapoPth = "C: \ temp"Nastavi Fo = MyFSO.GetFolder (Pth)MsgBox Fo.DateCreatedEnd Sub

Objekt mape vsebuje različne informacije, do katerih lahko dostopate. V tem primeru vrne datum ustvarjanja mape.

To metodo lahko uporabite tudi za pridobivanje vseh imen datotek v dani mapi:

12345678 Imena pod -datotek ()Zatemni MyFSO kot nov FileSystemObject, Pth kot niz, Fo kot mapo, Fn kot datotekoPth = "C: \ temp"Nastavi Fo = MyFSO.GetFolder (Pth)Za vsako datoteko Fn In Fo.FilesMsgBox Fn.NameNaprej FnEnd Sub

Ta koda se bo ponavljala skozi mapo "Temp" in prikazala vsako najdeno ime datoteke.

GetParentFolderName

Ta metoda bo vrnila ime mape na naslednji stopnji v hierarhiji map.

Sintaksa je:

GetParentFolderName (pot)

12345 Ime podmape ()Zatemni MyFSO kot nov FileSystemObject, Pth kot niz, Fo kot mapoPth = "C: \ users \ richard"MsgBox MyFSO.GetParentFolderName (Pth)End Sub

To bo vrnilo "Uporabniki", saj je to "nadrejeni" za mapo "richard".

Programiranje VBA | Generator kod deluje za vas!

Z uporabo metod "Ustvari"

S FSO lahko ustvarite novo mapo in pot ter ustvarite besedilno datoteko.

Ustvari mapo

Določite lahko novo ime poti mape, ki jo želite ustvariti. Nevarnost tega je, da če mapa že obstaja, bo prišlo do napake. Če želite zagotoviti, da se to ne bo zgodilo, uporabite metodo "FolderExists".

Sintaksa je:

Ustvari mapo(ime mape)

1234567 Sub CreateNewFolder ()Zatemni MyFSO kot nov FileSystemObject, Pth kot nizPth = "C: \ temp \ MyFolder"Če je MyFSO.FolderExists (Pth) = False PotemMyFSO.CreateFolder (Pth)Konec ČeEnd Sub

Ta koda bo ustvarila novo mapo z imenom »Moja mapa« pod obstoječo potjo »C: \ temp«.

CreateTextFile

Ta metoda vam omogoča, da ustvarite preprosto besedilno datoteko in pišete neposredno vanjo.

Sintaksa je:

CreateTextFile (Ime datoteke, [ prepisati, [ unicode ]])

1234567 Sub CreateTextFile ()Zatemni MyFSO kot nov FileSystemObject, Pth kot nizPth = "C: \ temp \ Myfile.txt"Nastavite Fn = MyFSO.CreateTextFile (Pth, True)Fn.Write "Dodaj svoje besedilo tukaj" & vbLf & "To je druga vrstica"Fn.ZapriEnd Sub

Ta koda ustvari besedilno datoteko z imenom »Myfile.txt« v mapi »Temp« pogona »C:« in nato vanj zapiše dve vrstici besedila.

Upoštevajte, da je znak za vnos vrstice združen v niz, ki se zapisuje.

Če pot, na katero pišete, ne obstaja, bo prišlo do napake. Preden ustvarite datoteko, lahko to preverite z metodo 'FolderExists'.

Obstaja neobvezen parameter za prepis obstoječe datoteke, če je to potrebno - to je lahko True ali False. Privzeto je True.

Z uporabo metod "Kopiraj"

Te metode lahko uporabite za kopiranje datoteke ali mape na drugo mesto.

Programiranje VBA | Generator kod deluje za vas!

CopyFile

Ta metoda bo kopirala datoteko iz ene lokacije mape v drugo. Upoštevajte, da kopija ne bo uspela, če je na ciljni lokaciji nastavljen atribut samo za branje.

Sintaksa je:

CopyFile vir, cilj, [ prepisati ]

1234 Sub CopyFile ()Zatemni MyFSO kot nov FileSystemObjectMyFSO.CopyFile "C: \ temp \*. Txt", "C: \ temp \ myfolder \", TrueEnd Sub

Ta koda bo naredila kopijo vseh besedilnih (txt) datotek v "C: \ temp" v "C: \ temp \ myfolder \" in prepisala datoteko, kjer je to potrebno. Privzeta nastavitev za Overwrite je True.

Za imena datotek lahko uporabite zvezdico (*), za predstavitev posameznih znakov pa ne morete uporabiti nadomestnega znaka (?).

CopyFolder

S to metodo lahko kopirate celotno mapo z ene lokacije na drugo.

Sintaksa je:

CopyFolder vir, cilj, [ prepisati ]

1234 Mapa podkopiranja ()Zatemni MyFSO kot nov FileSystemObjectMyFSO.CopyFolder "C: \ temp \*", "C: \ users \ richard \"End Sub

Ta koda kopira vse mape in datoteke pod "C: \ temp" v "C: \ users \ richard". Nova ustvarjena mapa bo "C: \ users \ richard \ myfolder", saj je imela "C: \ temp" mapo v sebi imenovano "myfolder".

Pri uporabi te metode so možni štirje rezultati:

  • Če cilj ne obstaja, se kopira izvorna mapa in vsebina.
  • Če cilj že obstaja, pride do napake.
  • Če je cilj mapa, se kopira izvorna mapa in njena vsebina. Napaka se bo pojavila, če je Overwrite nastavljeno na False in je v cilju že kopija datoteke.
  • Če je cilj nastavljen samo na branje, bo prišlo do napake, če je prepis nastavljen na false.

Ta metoda se ustavi pri prvi napaki, na katero naleti. Nobenega odmika nobenega dejanja, ki je bilo uspešno, preden je prišlo do napake.

Z uporabo metod "Premakni"

Te metode lahko uporabite za premikanje datotek ali map na druga mesta. To je enako rezanju z enega mesta in lepljenju na drugo mesto. Upoštevajte, da če je datoteka, ki jo želite premakniti, odprta, potem metoda Move ne bo uspela z napako.

Premakni datoteko

Ta metoda se uporablja za premik določene datoteke na drugo mesto. Nadomestni znaki so dovoljeni v komponenti zadnje poti vira.

Sintaksa je:

Premakni datoteko vir, cilj

1234 Sub MoveAFile ()Zatemni MyFSO kot nov FileSystemObjectMyFSO.MoveFile "C: \ temp \*", "C: \ temp \ myfolder"End Sub

Ta koda premakne vse datoteke, najdene na 'C: \ temp', v 'C: \ temp \ myfolder'.

Izvorna in ciljna mapa morata obstajati, saj se ciljna mapa ne ustvari samodejno.

Ta metoda se ustavi pri prvi napaki, na katero naleti. Nobenega vračila ni nobenega dejanja, ki je bilo uspešno, preden je prišlo do napake.

Programiranje VBA | Generator kod deluje za vas!

Premakni mapo

Ta metoda premakne določeno mapo z ene lokacije na drugo.

Sintaksa je:

Premakni mapo (vir, cilj)

1234 Sub MoveAFolder ()Zatemni MyFSO kot nov FileSystemObjectMyFSO.MoveFolder "C: \ temp \ myfolder", "C: \ temp \ mydestination"End Sub

Ta koda premakne mapo "moja mapa" in vsebino v mapo "moja destinacija". 'Myfolder' se učinkovito izbriše in ustvari 'mydestination' skupaj z vsebino iz 'myfolder'.

Če ciljna mapa že obstaja, pride do napake.

Z uporabo metod "Izbriši"

Te metode se uporabljajo za brisanje datotek ali map. Uporabljati jih je treba previdno, saj ni možnosti vračanja ali razveljavitve, če gre kaj narobe.

DeleteFile

S tem se z nadomestnimi znaki izbrišejo posamezne datoteke ali skupina datotek.

Sintaksa je:

DeleteFile filespec, [ sila ]

1234 Sub DeleteFiles ()Zatemni MyFSO kot nov FileSystemObjectMyFSO.DeleteFile "C: \ temp \*"End Sub

Ta koda bo izbrisala vse datoteke v mapi 'C: \ temp'

Parameter Force ni obvezen in je nastavljen na True ali False. Če je nastavljeno na True, bodo datoteke samo za branje izbrisane. Privzeto je False.

Izbriši mapo

Ta metoda izbriše določeno mapo in njeno vsebino.

Sintaksa je:

Izbriši mapo folderspec, [ sila ]

1234 Podbriši mape ()Zatemni MyFSO kot nov FileSystemObjectMyFSO.DeleteFolder "C: \ temp \ MyDestination"End Sub

Ta koda bo izbrisala mapo "MyDestination" in vse datoteke v tej mapi. Mapa "temp" bo ostala.

Parameter Force ni obvezen in je nastavljen na True ali False. Če je nastavljeno na True, bodo mape samo za branje izbrisane. Privzeto je False.

Nadomestne znake lahko uporabite v zadnji komponenti poti. Če mape ne najdete, bo prišlo do napake.

Ta metoda se ustavi pri prvi napaki, na katero naleti. Nobenega odmika nobenega dejanja, ki je bilo uspešno, preden je prišlo do napake.

Programiranje VBA | Generator kod deluje za vas!

Druge metode v FSO

OpenAsTextStream.

Ta metoda odpre določeno datoteko kot objekt Text Stream in ji omogoča branje ali pisanje. Prednost te metode je, da lahko odpre katero koli vrsto datoteke in izvleče razpoložljivo besedilo.

Sintaksa je:

OpenAsTextStream ([ iomode, [ format ]])

Parameter ‘iomode’ omogoča samo branje (1), branje/pisanje (2) in dodajanje (8). Parameter branje/pisanje prepiše datoteko.

Parameter »format« je nastavljen na -2 za sistemske privzete vrednosti, -1 za odpiranje datoteke kot Unicode in 0 za odpiranje datoteke kot ASCII (ameriška standardna koda za izmenjavo informacij).

1234567891011 Sub TextStream ()Zatemni MyFSO kot nov FileSystemObjectNastavite f = MyFSO.GetFile ("C: \ temp \ myfile.txt")Nastavi ts = f.OpenAsTextStream (2)ts.Napiši "Moje novo besedilo"ts.ZapriNastavi ts = f.OpenAsTextStream (1)s = ts.ReadLineMsgBox sts.ZapriEnd Sub

Ta koda dobi obstoječo besedilno datoteko in jo ustvari kot objekt z metodo »GetFile«. Nato odpre tok besedila kot branje / pisanje (2) in zapiše vrstico besedila. Datoteka se nato zapre in znova odpre kot prebrana (1), iz nje pa se prebere vrstica, ki se nato prikaže kot polje s sporočilom.

Upoštevajte, da mora biti prebrana vrstica postavljena v spremenljivko, preden se lahko prikaže v polju za sporočila.

BuildPath

Ta metoda bo dodala ime mape ali datoteke na konec obstoječe poti mape. To ustvari samo besedilni niz in dejansko ne ustvari nove mape.

Sintaksa je:

BuildPath (pot, ime)

12345 Sub BuildPth ()Zatemni MyFSO kot nov FileSystemObjectnp = MyFSO.BuildPath ("C: \ temp", "ANewFolder")MsgBox npEnd Sub

Prikazalo se bo »C: \ temp \ ANewFolder«. Če pa želite dejansko uporabiti to mapo, morate uporabiti metodo 'CreateFolder'.

OpenTextFile

Ta metoda omogoča odpiranje in branje datotek ali pisanje v skladu z nastavljenimi parametri. Deluje na podoben način kot metoda OpenAsTextStream.

Sintaksa je:

OpenTextFile (Ime datoteke, [ iomode, [ ustvarite, [ format ]]])

Parameter ‘iomode’ omogoča ForReading, ForWriting in ForAppending. Parameter ForWriting prepiše datoteko.

Parameter 'create' je logična vrednost. True pomeni, da bo nova datoteka ustvarjena, če podano ime datoteke ne obstaja. False pomeni, da datoteka ne bo ustvarjena, če imena datoteke ne najdete. Privzeto je False.

Parameter »format« lahko nastavite na TristateFalse, TristateMixed, TristateTrue in TristateUseDefault, odvisno od tega, ali je datoteka ASCII ali Unicode.

1234567 Sub OpenTxtFile ()Zatemni MyFSO kot nov FileSystemObjectNastavite ts = MyFSO.OpenTextFile ("C: \ temp \ myfile.txt", ForReading, False, TristateUseDefault)s = ts.ReadLineMsgBox sts.ZapriEnd Sub

Ta koda bo prebrala vrstico iz besedilne datoteke "myfile.txt".

Prednost metode OpenTextFile pred metodo OpenAsTextStreamMethod je v tem, da ima spustne menije za parametre, ki so bolj smiselni, kot da si zapomnimo ustrezne številske vrednosti za različne možnosti parametrov.

Programiranje VBA | Generator kod deluje za vas!

Lastnosti FSO

Pogoni

Ta lastnost vsebuje zbirko razpoložljivih pogonov v vašem računalniku.

1234567 Poddrv ()Zatemni MyFSO kot nov FileSystemObject, d kot pogonNastavite Dr = MyFSO.DrivesZa vsakega d V drMsgBox d.DriveLetterNaslednji dEnd Sub

Ta koda bo vrnila vsako črko pogona, ki je na voljo v vašem računalniku.

Ime

To vrne ime določene datoteke ali mape.

123456789 Podime Primer ()Zatemni MyFSO kot nov FileSystemObjectNastavite f = MyFSO.GetFile ("C: \ temp \ myfile.txt")i = f.Name & "on Drive" & UCase (f.Drive) & vbCrLfi = i & "Ustvarjeno:" & f.DateCreated & vbCrLfi = i & "Zadnji dostop:" & f.DateLastAccessed & vbCrLfi = i & "Zadnja sprememba:" & f.DateLastModifiedMsgBox iEnd Sub

Ta koda bo dala ime datoteke in podatke o njej z uporabo lastnosti Drive.

Pot

Lastnost Path bo ločila pot od specifikacije datoteke.

123456789 Primer pod -poti ()Zatemni MyFSO kot nov FileSystemObjectNastavite f = MyFSO.GetFile ("C: \ temp \ myfile.txt")i = f.Path & f.Name & "on Drive" & UCase (f.Drive) & vbCrLfi = i & "Ustvarjeno:" & f.DateCreated & vbCrLfi = i & "Zadnji dostop:" & f.DateLastAccessed & vbCrLfi = i & "Zadnja sprememba:" & f.DateLastModifiedMsgBox iEnd Sub

Ta primer deluje na enak način kot primer Name, le da zdaj podaja pot do datoteke.

Programiranje VBA | Generator kod deluje za vas!

Velikost

Lastnost Size bo dala velikost mape ali datoteke.

12345 Sub FSize ()Zatemni MyFSO kot nov FileSystemObjectNastavite f = MyFSO.GetFolder ("C: \ temp \")MsgBox f.VelikostEnd Sub

Zgornja koda bo vrnila velikost mape "C: \ temp \".

12345 Sub FSize ()Zatemni MyFSO kot nov FileSystemObjectNastavite f = MyFSO.GetFile ("C: \ temp \ myfile.txt")MsgBox f.SizeEnd Sub

Zgornja koda bo vrnila velikost datoteke »myfile.txt«.

Vrsta

Lastnost type bo vrnila besedilo za vrsto datoteke ali mape.

12345 Podvrsta FType ()Zatemni MyFSO kot nov FileSystemObjectNastavite f = MyFSO.GetFolder ("C: \ temp \")MsgBox f.TypeEnd Sub

Zgornja koda bo vrnila besedilo »Datoteka mapa«.

12345 Podvrsta FType ()Zatemni MyFSO kot nov FileSystemObjectNastavite f = MyFSO.GetFile ("C: \ temp \ myfile.txt")MsgBox f.TypeEnd Sub

Zgornja koda bo vrnila besedilo „Besedilni dokument“.

Upoštevajte uporabo "GetFolder" in "GetFile" v vsakem primeru.

Vam bo pomagal razvoj spletnega mesta, ki si delijo stran s svojimi prijatelji

wave wave wave wave wave