FileSystemObjecti kasutamine Excel VBA -s

FileSystemObject (FSO) kasutamine Excel VBA -s

FileSystemObject (FSO) annab teile juurdepääsu paljudele funktsioonidele arvuti failisüsteemile juurdepääsuks. Selle objekti abil saate hõlpsasti juurde pääseda failidele, kaustadele ja draividele ning lugeda ja kirjutada failidesse.

Paljusid FSO funktsioone võiksite kirjutada traditsioonilises VBA -s, kuid see nõuaks rohkem kodeerimist ning neid oleks sissetuleval arendajal raskem säilitada ja mõista. FSO on proovitud ja testitud API (Application Programming Interface) ning on usaldusväärsem kui teie enda kood. Seda on lihtne kasutada ning see on valmis ja saadaval.

FSO töötab vastavalt rahvusvahelistele standarditele ja seadetele, mis teil arvutis on. Kui levitate oma Exceli rakendust kogu maailmas, hoolitseb FSO kasutamine kõigi riikide seadete erinevuste eest, mida teie koodil oleks probleeme.

FSO võimaldab teil teha peaaegu kõike VBA -koodis, mida saate teha Windows File Exploreris. See annab teile täieliku juurdepääsu Windowsi failisüsteemile.

FileSystemObjecti loomine

FileSytemObject ei kuulu Exceli VBA -sse. FSO -d saate kasutada, luues VBA -s objekti (hiline sidumine):

123 Sub CreateFSO ()Määra MyFSO = CreateObject ("Scripting.FileSystemObject")End Sub

Teise võimalusena saate lisada viite FSO teegi VBA -sse. Seda nimetatakse varaseks sidumiseks ja see on kiirem kui hiline sidumine, kuna objekti ei pea koodi käivitamisel looma.

Viite lisamiseks peate Visual Basic Editori (VBE) sisenemiseks vajutama klahve Alt-F11 ja seejärel kasutama menüüd VBE „Tööriistad | Viited”. See kuvab hüpikakna, kus saate valida sobiva viite (vt allpool).

Kerige saadaolevate viidete loendit allapoole, kuni näete teksti „Microsoft Scripting Runtime”. Märkige ruut ja klõpsake nuppu OK ning raamatukogu on nüüd teie rakenduse osa.

DLL -i teegifaili asukoht on C: \ Windows \ SysWOW64 \ scrrun.dll

Kui levitate oma rakendust teistele kolleegidele või asukohtadele, on oluline, et neil oleks see fail oma arvutis õiges kohas, vastasel juhul ilmub teie koodile tõrge.

Faili olemasolu kontrollimiseks tasub sündmusele „WorkbookOpen” panna vealõks, kasutades käsku Dir. Kui see puudub, andke hoiatusteade ja sulgege Exceli fail.

Kui viide on lisatud, saate FSO loomiseks kasutada järgmist koodi:

123 AlamkatseFSO ()Hämarda MyFSO uue failisüsteemi objektinaEnd Sub

Kõik selle artikli näited kasutavad seda metoodikat FSO loomiseks.

FSO -l on palju meetodeid ja omadusi. Need on siin jagatud osadeks vastavalt võimalustele.

Olemasolevate meetodite kasutamine

FSO meetodi abil saate kontrollida, kas draiv, kaust või fail on olemas. Neid meetodeid on lihtne kasutada ja need nõuavad ainult ühte parameetrit.

123456 Alamkontrolli kaugus ()Hämarda MyFSO uue failisüsteemi objektinaMsgBox MyFSO.DriveExists ("C:")MsgBox MyFSO.FolderExists ("C: \ temp")MsgBox MyFSO.FileExists ("C: \ temp \ testfile.txt")End Sub

Kõik need avaldused tagastavad „tõese”, eeldades, et teie arvutis on C -draiv, sellel olev kaust nimega „Temp” ja Temp -kausta fail nimega „testfile.txt”

Parameetrite tekstistringid ei ole tõstutundlikud. Ühelgi neist meetoditest ei saa metamärke kasutada.

Samuti ei saa te kausta või faili asukoha kirjeldamiseks kasutada URL -e (ühtseid ressursside otsijaid). FSO töötab puhtalt Windowsi opsüsteemis ja selle failisüsteemis. Välise serveri asukoha jaoks peate draivi ennekõike sellele kaardistama ja seejärel kasutama draiviteed ennast.

"Hangi" meetodite kasutamine

FSO -l on mitmeid meetodeid faili ja tee kohta teabe saamiseks, kas tee ja faili jagamine või faili või kausta teabe, näiteks loomise kuupäeva või muutmise kuupäeva, hankimine.

GetAbsolutePathname

See annab täieliku tee määratud draivi juurest.

Süntaks on:

GetAbsolutePathName (pathspec)

12345 Sub AbsolutePath ()Dim MyFSO kui uus FileSystemObject, Pth kui stringPth = "c: …"MsgBox MyFSO.GetAbsolutePathName (Pth)End Sub

See tagastab stringi „C: \ Users \ Richard \ Documents”. Seda seetõttu, et tee on määratud kui C:, millele järgneb kolm punkti. Iga punkt tähistab järgmist taset kaustastruktuuris.

GetBaseName

See tagastab määratud faili või kausta nime.

Süntaks on:

GetBaseName(tee)

12345 Sub BaseName ()Dim MyFSO kui uus FileSystemObject, Pth kui stringPth = "C: \ temp \ testfile.txt"MsgBox MyFSO.GetBaseName (Pth)End Sub

See kood tagastab "testfaili". Meetod tagastab tee nime viimase lõigu. Kui see on fail, ei tagasta see faili järelliidet.

Kui teed ei leita, tagastatakse tühi string.

GetDrive

See võimaldab teil kasutada draivi teabele juurdepääsemiseks koodi, lähtudes määratud draivitähest.

Süntaks on:

GetDrive (drivepec)

123456 Sub DriveInfo ()Dim MyFSO kui uus FileSystemObject, Pth kui string, Dr As DrivePth = "C:"Määra Dr = MyFSO.GetDrive (Pth)MsgBox Dr.FreeSpaceEnd Sub

See meetod tagastab draivi objekti määratud draivi põhjal. Selle objekti abil saate juurde pääseda draivi kohta käivale teabele, näiteks saadaolevale vabale ruumile.

Kas olete väsinud VBA koodinäidete otsimisest? Proovige AutoMacrot!

GetDriveName

See meetod eraldab draivi nime tee / failinime stringist.

Süntaks on:

GetDriveName (tee)

12345 Sub DriveName ()Dim MyFSO kui uus FileSystemObject, Pth kui stringPth = "C: \ temp \ testfile.txt"MsgBox MyFSO.GetDriveName (Pth)End Sub

See tagastab "C:"

GetExtensionName

See tagastab faili järelliite määratud teel.

Süntaks on:

GetExtensionName (tee)

12345 Alamlaiendi nimi ()Dim MyFSO kui uus FileSystemObject, Pth kui stringPth = "C: \ temp \ testfile.txt"MsgBox MyFSO.GetExtensionName (Pth)End Sub

See tagastab "txt".

Kui faili pole määratud, tagastatakse tühi string.

GetFile

See meetod tagastab failiobjekti, mis sisaldab erinevat teavet faili enda kohta.

Süntaks on:

GetFile (failispets)

123456 Alamfaili teave ()Dim MyFSO uue failisüsteemi objektina, Pth kui string, Fn kui failPth = "C: \ temp \ testfile.txt"Määra Fn = MyFSO.GetFile (Pth)MsgBox Fn.DateCreatedEnd Sub

See tagastab määratud faili loomise kuupäeva ja kellaaja. Kui ühtegi faili pole määratud või faili pole olemas, kuvatakse tõrge „faili ei leitud”.

12345 Alamfaili nimi ()Dim MyFSO kui uus FileSystemObject, Pth kui stringPth = "C: \ temp \ testfile.txt"MsgBox MyFSO.GetFileName (Pth)End Sub

See tagastab faili „testfile.txt”.

GetFolder

See loob määratud tee baaskausta jaoks kaustaobjekti. Tee peab sisaldama ainult kaustade nimesid. Failinimesid ei tohi lisada, vastasel juhul ilmneb tõrge.

Süntaks on:

GetFolder (kaustade spetsifikatsioon)

123456 Alamkaustainfo ()Dim MyFSO kui uus FileSystemObject, Pth kui string, Fo kui kaustPth = "C: \ temp"Määra Fo = MyFSO.GetFolder (Pth)MsgBox Fo.DateCreatedEnd Sub

Kaustaobjektil on mitmesugust teavet, millele pääseb juurde. Sel juhul tagastab see kausta loomise kuupäeva.

Seda meetodit saate kasutada ka antud kausta kõigi failinimede allalaadimiseks:

12345678 Alamfaili nimed ()Dim MyFSO uue failisüsteemi objektina, Pth kui string, Fo kui kaust, Fn failinaPth = "C: \ temp"Määra Fo = MyFSO.GetFolder (Pth)Iga Fn in Fo.Files jaoksMsgBox Fn. NimiJärgmine FnEnd Sub

See kood kordab kausta „Temp” ja kuvab iga leitud failinime.

GetParentFolderName

See meetod tagastab kausta nime kaustahierarhia järgmisele tasemele.

Süntaks on:

GetParentFolderName (tee)

12345 Alamkausta nimi ()Dim MyFSO kui uus FileSystemObject, Pth kui string, Fo kui kaustPth = "C: kasutajad"MsgBox MyFSO.GetParentFolderName (Pth)End Sub

See tagastab „kasutajad”, kuna see on kausta „richard” „vanem”.

VBA programmeerimine | Koodigeneraator töötab teie jaoks!

"Loo" meetodite kasutamine

FSO abil saate luua uue kausta ja tee ning luua tekstifaili.

Loo kaust

Saate määrata loodava kausta tee nime. Selle oht on see, et kui kaust on juba olemas, ilmneb tõrge. Selle vältimiseks võite kasutada meetodit „FolderExists”.

Süntaks on:

Loo kaust(kausta nimi)

1234567 Sub CreateNewFolder ()Dim MyFSO kui uus FileSystemObject, Pth kui stringPth = "C: \ temp \ MyFolder"Kui MyFSO.FolderExists (Pth) = Vale siisMyFSO.CreateFolder (Pth)Lõpp KuiEnd Sub

See kood loob olemasoleva tee „C: \ temp” alla uue kausta nimega „Minu kaust”.

CreateTextFile

See meetod võimaldab teil luua lihtsa tekstifaili ja sinna otse kirjutada.

Süntaks on:

CreateTextFile (faili nimi, [ üle kirjutada, [ unicode ]])

1234567 Sub CreateTextFile ()Dim MyFSO kui uus FileSystemObject, Pth kui stringPth = "C: \ temp \ Myfile.txt"Määra Fn = MyFSO.CreateTextFile (Pth, True)Fn.Kirjutage "Lisa siia oma tekst" & vbLf & "See on teine ​​rida"Fn. SuleEnd Sub

See kood loob C: draivi kausta „Temp” tekstifaili nimega „Myfile.txt” ja kirjutab seejärel sellele kaks rida teksti.

Pange tähele, et reavahetusmärk on ühendatud kirjutatavasse stringi.

Kui teed, kuhu kirjutate, pole olemas, ilmneb tõrge. Enne faili loomist saate selle kontrollimiseks kasutada meetodit „FolderExists”.

Olemasoleva faili vajadusel ülekirjutamiseks on valikuline parameeter - see võib olla tõene või vale. Vaikimisi on see tõene.

Kopeerimismeetodite kasutamine

Nende meetodite abil saate faili või kausta teise kohta kopeerida.

VBA programmeerimine | Koodigeneraator töötab teie jaoks!

CopyFile

See meetod kopeerib faili ühest kausta asukohast teise. Pange tähele, et kopeerimine ebaõnnestub, kui sihtkoha asukohas on kirjutuskaitstud atribuut.

Süntaks on:

CopyFile allikas, sihtkoht, [ üle kirjutada ]

1234 Alamkoopiafail ()Hämarda MyFSO uue failisüsteemi objektinaMyFSO.CopyFile "C: \ temp \*. Txt", "C: \ temp \ myfolder \", TrueEnd Sub

See kood teeb koopia kõigist teksti (txt) failidest, mis asuvad kaustas „C: \ temp”, ja muudavad need vajadusel üle. Ülekirjutamise vaikeseade on True.

Failinimede jaoks saate kasutada tärniga (*) metamärki, kuid üksikute märkide tähistamiseks ei saa kasutada küsimärgi (?) Metamärke.

CopyFolder

Seda meetodit saate kasutada terve kausta kopeerimiseks ühest asukohast teise.

Süntaks on:

CopyFolder allikas, sihtkoht, [ üle kirjutada ]

1234 Sub CopyFolder ()Hämarda MyFSO uue failisüsteemi objektinaMyFSO.CopyFolder "C: \ temp \*", "C: \ users \ richard \"End Sub

See kood kopeerib kõik kaustad ja failid allpool „C: \ temp” kausta „C: \ users Richard”. Loodud uus kaust on „C: \ users \ richard \ myfolder”, kuna „C: \ temp” sisaldab kausta nimega „myfolder”.

Selle meetodi kasutamisel on neli võimalikku tulemust:

  • Kui sihtkohta pole, kopeeritakse lähtekaust ja sisu.
  • Kui sihtkoht on juba olemas, ilmneb tõrge.
  • Kui sihtkohaks on kaust, kopeeritakse lähtekaust ja selle sisu. Kui ülekirjutamise seadeks on määratud Väär, ilmneb tõrge ja sihtkohas on juba faili koopia.
  • Kui sihtkoht on seatud ainult lugemiseks, ilmneb tõrge, kui ülekirjutamine on seatud väärtusele Väär.

See meetod peatub esimese tõrke korral. Enne tõrke ilmnemist õnnestunud toiminguid ei tühistata.

Liigutamismeetodite kasutamine

Neid meetodeid saab kasutada failide või kaustade teisaldamiseks mujale. See on sama kui ühest kohast lõikamine ja teise kohta kleepimine. Pange tähele, et kui teisaldatav fail on avatud, ebaõnnestub teisaldamismeetod veaga.

MoveFile

Seda meetodit kasutatakse konkreetse faili teisaldamiseks teise kohta. Allika viimases teekomponendis on lubatud kasutada metamärke.

Süntaks on:

MoveFile allikas, sihtkoht

1234 Sub MoveAFile ()Hämarda MyFSO uue failisüsteemi objektinaMyFSO.MoveFile "C: \ temp \*", "C: \ temp \ myfolder"End Sub

See kood teisaldab kõik failist „C: \ temp” leitud failid kausta „C: \ temp \ myfolder”.

Allika- ja sihtkaustad peavad eksisteerima, kuna sihtkausta ei looda automaatselt.

See meetod peatub esimese tõrke korral. Enne tõrke ilmnemist õnnestunud toiminguid ei tühistata.

VBA programmeerimine | Koodigeneraator töötab teie jaoks!

MoveFolder

See meetod teisaldab kindla kausta ühest asukohast teise.

Süntaks on:

MoveFolder (allikas, sihtkoht)

1234 Sub MoveAFolder ()Hämarda MyFSO uue failisüsteemi objektinaMyFSO.MoveFolder "C: \ temp \ myfolder", "C: \ temp \ mydestination"End Sub

See kood teisaldab kausta „minu kaust” ja sisu kausta „minu sihtkoht”. „Minu kaust” kustutatakse tõhusalt ja luuakse „minu sihtkoht” koos kausta „Minu kaust” sisuga.

Kui sihtkaust on juba olemas, ilmneb tõrge.

Kustutusmeetodite kasutamine

Neid meetodeid kasutatakse failide või kaustade kustutamiseks. Neid tuleb kasutada ettevaatlikult, kuna tagasilöögi või tagasivõtmise meetodeid pole, kui midagi läheb valesti.

Kustuta fail

See kustutab üksikud failid või failirühma metamärkide abil.

Süntaks on:

Kustuta fail failispets, [ jõud ]

1234 Alam Kustuta Failid ()Hämarda MyFSO uue failisüsteemi objektinaMyFSO.DeleteFile "C: \ temp \*"End Sub

See kood kustutab kõik failid kaustast C: \ temp

Parameeter Force on valikuline ja seatud väärtusele True või False. Kui see on seatud väärtusele Tõene, kustutatakse kirjutuskaitstud failid. Vaikimisi on vale.

Kustuta kaust

See meetod kustutab määratud kausta ja selle sisu.

Süntaks on:

Kustuta kaust kaustade spetsifikatsioon, [ jõud ]

1234 Alam Kustuta Kaustad ()Hämarda MyFSO uue failisüsteemi objektinaMyFSO.DeleteFolder "C: \ temp \ MyDestination"End Sub

See kood kustutab kausta „MyDestination” ja kõik selle kausta failid. Kaust "temp" jääb alles.

Parameeter Force on valikuline ja seatud väärtusele True või False. Kui see on seatud väärtusele Tõene, kustutatakse kirjutuskaitstud kaustad. Vaikimisi on vale.

Metamärke saab kasutada raja viimases komponendis. Kui kausta ei leita, ilmneb tõrge.

See meetod peatub esimese tõrke korral. Enne tõrke ilmnemist õnnestunud toiminguid ei tühistata.

VBA programmeerimine | Koodigeneraator töötab teie jaoks!

Muud meetodid FSO -s

OpenAsTextStream.

See meetod avab määratud faili tekstivoo objektina ja võimaldab seda lugeda või sinna kirjutada. Selle meetodi eeliseks on see, et see võib avada mis tahes tüüpi failid ja ekstraheerida saadaoleva teksti.

Süntaks on:

OpenAsTextStream ([ iomode, [ vormingus ]])

Parameeter „iomode” võimaldab ainult lugemist (1), lugemist/kirjutamist (2) ja lisamist (8). Loe/kirjuta parameeter kirjutab faili üle.

Parameetri „vorming” väärtuseks on süsteemi vaikimisi määratud -2, faili avamiseks Unicode -kood ja -1, et avada fail ASCII -na (American Standard Code for Information Interchange).

1234567891011 Alamtekstivoo ()Hämarda MyFSO uue failisüsteemi objektinaMäära f = MyFSO.GetFile ("C: \ temp \ myfile.txt")Määra ts = f. OpenAsTextStream (2)ts. Kirjutage "Minu uus tekst"ts. SuleMäära ts = f. OpenAsTextStream (1)s = ts.ReadLineMsgBox sts. SuleEnd Sub

See kood saab olemasoleva tekstifaili ja loob selle objektina, kasutades meetodit „GetFile”. Seejärel avab see tekstivoo lugemiseks / kirjutamiseks (2) ja kirjutab tekstirida. Seejärel suletakse fail ja avatakse uuesti loetuna (1) ning loetakse sealt rida, mis kuvatakse seejärel sõnumikastina.

Pange tähele, et lugemisliin tuleb paigutada muutujale, enne kui seda saab kuvada sõnumikastis.

BuildPath

See meetod lisab olemasoleva kausta tee lõppu kausta või faili nime. See loob ainult tekstistringi ja tegelikult ei loo uut kausta.

Süntaks on:

BuildPath (tee, nimi)

12345 Sub BuildPth ()Hämarda MyFSO uue failisüsteemi objektinanp = MyFSO.BuildPath ("C: \ temp", "ANewFolder")MsgBox npEnd Sub

See kuvab 'C: \ temp \ ANewFolder'. Kui aga soovite seda kausta tegelikult kasutada, peate kasutama meetodit „CreateFolder”.

OpenTextFile

See meetod võimaldab faile avada ja lugeda või kirjutada vastavalt määratud parameetritele. See toimib sarnaselt OpenAsTextStreami meetodiga.

Süntaks on:

OpenTextFile (faili nimi, [ iomode, [ luua, [ vormingus ]]])

Parameeter „iomode” võimaldab ForReading, ForWriting ja ForAppending. Parameeter ForWriting kirjutab faili üle.

Parameeter „Loo” on loogiline väärtus. Tõene tähendab, et kui määratud failinime pole, luuakse uus fail. Vale tähendab, et faili nime ei leita ei looda. Vaikimisi on vale.

Parameetri „vorming” saab määrata TristateFalse, TristateMixed, TristateTrue ja TristateUseDefault sõltuvalt sellest, kas fail on ASCII või Unicode.

1234567 Alam OpenTxtFile ()Hämarda MyFSO uue failisüsteemi objektinaMäära ts = MyFSO.OpenTextFile ("C: \ temp \ myfile.txt", ForReading, False, TristateUseDefault)s = ts.ReadLineMsgBox sts. SuleEnd Sub

See kood loeb rida tekstifailist „myfile.txt”.

OpenTextFile meetodi eelis OpenAsTextStreamMethodi ees on see, et sellel on parameetrite rippmenüüd, mis on tähendusrikkamad kui erinevate parameetrite valikute sobivate arvväärtuste meeldejätmine.

VBA programmeerimine | Koodigeneraator töötab teie jaoks!

FSO omadused

Sõidab

See atribuut sisaldab teie arvutis saadaolevate draivide kogumit.

1234567 Alamdv ()Dim MyFSO kui uus FileSystemObject, d DriveMäära Dr = MyFSO.DrivesIga d kohta drMsgBox d.DriveLetterJärgmine dEnd Sub

See kood tagastab iga teie arvutis saadaoleva draivitähe.

Nimi

See tagastab määratud faili või kausta nime.

123456789 Alamnimi Näide ()Hämarda MyFSO uue failisüsteemi objektinaMäära f = MyFSO.GetFile ("C: \ temp \ myfile.txt")i = f.Name & "Drive'is" & UCase (f.Drive) & vbCrLfi = i & "Loodud:" & f.DateCreated & vbCrLfi = i & "Viimati juurdepääs:" & f.DateLastAccessed & vbCrLfi = i & "Viimati muudetud:" & f.DateLastModifiedMsgBox iEnd Sub

See kood annab faili nime ja teabe selle kohta Drive'i atribuudi abil.

Tee

Atribuut Path eraldab tee faili spetsifikatsioonist.

123456789 AlamteeNäide ()Hämarda MyFSO uue failisüsteemi objektinaMäära f = MyFSO.GetFile ("C: \ temp \ myfile.txt")i = f.Path & f.Name & "on Drive" & UCase (f.Drive) & vbCrLfi = i & "Loodud:" & f.DateCreated & vbCrLfi = i & "Viimati juurdepääs:" & f.DateLastAccessed & vbCrLfi = i & "Viimati muudetud:" & f.DateLastModifiedMsgBox iEnd Sub

See näide töötab samamoodi nagu näide, välja arvatud see, et see annab nüüd faili tee.

VBA programmeerimine | Koodigeneraator töötab teie jaoks!

Suurus

Atribuut Suurus annab kausta või faili suuruse.

12345 Alam FSize ()Hämarda MyFSO uue failisüsteemi objektinaMäära f = MyFSO.GetFolder ("C: \ temp")MsgBox f. SuurusEnd Sub

See ülaltoodud kood tagastab kausta "C: \ temp" suuruse.

12345 Alam FSize ()Hämarda MyFSO uue failisüsteemi objektinaMäära f = MyFSO.GetFile ("C: \ temp \ myfile.txt")MsgBox f. SuurusEnd Sub

See ülaltoodud kood tagastab faili "myfile.txt" suuruse.

Tüüp

Atribuut tüüp tagastab faili või kausta tüübi teksti.

12345 Alamtüüp ()Hämarda MyFSO uue failisüsteemi objektinaMäära f = MyFSO.GetFolder ("C: \ temp")MsgBox f. TüüpEnd Sub

See ülaltoodud kood tagastab teksti „Failikaust”.

12345 Alamtüüp ()Hämarda MyFSO uue failisüsteemi objektinaMäära f = MyFSO.GetFile ("C: \ temp \ myfile.txt")MsgBox f. TüüpEnd Sub

See ülaltoodud kood tagastab teksti „Tekstidokument”.

Pange tähele näidete „GetFolder” ja „GetFile” kasutamist.

Te aitate arengu ala, jagades leht oma sõpradega

wave wave wave wave wave