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.