Kai „VBA“ naudojame „Excel“, dažniausiai tai atliekama automatizuojant užduotis.
Tai taip pat reiškia, kad dažniausiai mes dirbame su langeliais ir diapazonais, darbalapiais, darbaknygėmis ir kitais objektais, kurie yra „Excel“ programos dalis.
Tačiau VBA yra daug galingesnė ir taip pat gali būti naudojama dirbant su daiktais, esančiais ne „Excel“.
Šioje pamokoje aš jums parodysiu, kaip naudoti „VBA FileSystemObject“ (FSO) darbui su failais ir aplankais jūsų sistemoje ar tinklo diskuose.
Kas yra VBA FileSystemObject (FSO)?
„FileSystemObject“ (FSO) leidžia pasiekti kompiuterio failų sistemą. Naudodamiesi ja galite pasiekti ir keisti savo kompiuterio sistemos failus/aplankus/katalogus.
Pavyzdžiui, žemiau yra keletas dalykų, kuriuos galite padaryti naudodami „FileSystemObject“ programoje „Excel VBA“:
- Patikrinkite, ar yra failas ar aplankas.
- Sukurkite arba pervardykite aplankus/failus.
- Gaukite visų aplanke esančių failų pavadinimų (arba pakatalogių pavadinimų) sąrašą.
- Nukopijuokite failus iš vieno aplanko į kitą.
Tikiuosi supratote mintį.
Visus šiuos aukščiau pateiktus pavyzdžius (ir dar daugiau) aptarsiu vėliau šioje pamokoje.
Nors kai kuriuos aukščiau paminėtus dalykus taip pat galima atlikti naudojant tradicines VBA funkcijas (pvz., Funkciją DIR) ir metodus, kodai būtų ilgesni ir sudėtingesni. „FileSystemObject“ leidžia lengvai dirbti su failais ir aplankais, išlaikant švarų ir trumpą kodą.
Pastaba: FSO galima naudoti tik „Excel 2000“ ir naujesnėse versijose.
Kokius visus objektus galite pasiekti per „FileSystemObject“?
Kaip minėjau aukščiau, galite pasiekti ir modifikuoti failus ir aplankus naudodami „FileSystemObject“ VBA.
Žemiau yra lentelė, kurioje parodyti svarbiausi objektai, kuriuos galite pasiekti ir keisti naudodami FSO:
Objektas | apibūdinimas |
Vairuoti | „Drive Object“ leidžia gauti informacijos apie diską, pvz., Ar jis egzistuoja, ar ne, jo kelio pavadinimą, disko tipą (nuimamą ar fiksuotą), jo dydį ir kt. |
Aplankas | Aplanko objektas leidžia jums sukurti arba modifikuoti savo sistemos aplankus. Pavyzdžiui, naudodami šį objektą galite kurti, ištrinti, pervardyti, kopijuoti aplankus. |
Failas | „File Object“ leidžia dirbti su jūsų sistemos failais. Pavyzdžiui, naudodami šį objektą galite kurti, atidaryti, kopijuoti, perkelti ir ištrinti failus. |
„TextStream“ | „TextStream“ objektas leidžia kurti ar skaityti teksto failus. |
Kiekvienas iš aukščiau išvardytų objektų turi metodus, kuriuos galite naudoti dirbdami su jais.
Pavyzdžiui, jei norite ištrinti aplanką, naudokite objekto „Folder“ metodą „DeleteFolder“. Panašiai, jei norite nukopijuoti failą, naudosite objekto „File“ metodą „CopyFile“.
Nesijaudinkite, jei tai atrodo per daug ar sunku suprasti. Jūs daug geriau suprasite, kai peržiūrėsite pavyzdžius, kuriuos apžvelgiau šioje pamokoje.
Tik informaciniais tikslais šios pamokos pabaigoje apžvelgiau visus „FileSystemObject“ metodus (kiekvienam objektui).
„FileSystemObject“ įgalinimas „Excel VBA“
„FileSystemObject“ pagal numatytuosius nustatymus „Excel VBA“ nepasiekiama.
Kadangi mes susiduriame su failais ir aplankais, kurie nėra „Excel“ programoje, pirmiausia turime sukurti nuorodą į biblioteką, kurioje yra šie objektai (diskai, failai, aplankai).
Dabar „Excel VBA“ galite pradėti naudoti „FileSystemObject“ dviem būdais:
- Nuorodos į „Microsoft Scripting Runtime Library“ („Scrrun.dll“) nustatymas
- Objekto, skirto bibliotekai, sukūrimas iš paties kodo
Nors abu šie metodai veikia (ir aš jums parodysiu, kaip tai padaryti toliau), aš rekomenduoju naudoti pirmąjį metodą.
Pastaba: įjungę „FileSystemObject“, galite pasiekti visus jo objektus. Tai apima „FileSystemObject“, „Drive“, „Files“, „aplankus“ ir kt. Šioje pamokoje daugiausia dėmesio skirsiu „FileSystemObject“.Nuorodos į „Microsoft Scripting Runtime Library“ nustatymas
Kai sukuriate nuorodą į scenarijų vykdymo laiko biblioteką, leidžiate „Excel VBA“ pasiekti visas failų ir aplankų ypatybes ir metodus. Kai tai bus padaryta, galite kreiptis į failus/aplankus/diskų objektą iš „Excel VBA“ (kaip ir langelius, darbalapius ar darbaknyges).
Toliau pateikiami veiksmai, kaip sukurti nuorodą į „Microsoft Scripting Runtime Library“:
- VB redaktoriuje spustelėkite Įrankiai.
- Spustelėkite nuorodos.
- Atsidariusiame dialogo lange Nuorodos slinkite per galimas nuorodas ir pažymėkite parinktį „Microsoft Scripting Runtime“.
- Spustelėkite Gerai.
Pirmiau minėti veiksmai dabar leis jums kreiptis į FSO objektus iš „Excel VBA“.
„FileSystemObject“ egzemplioriaus sukūrimas kodekse
Nustatę nuorodą į „Scripting FileSystemObject“ biblioteką, savo kode turite sukurti FSO objekto egzempliorių.
Kai tai bus sukurta, galėsite ją naudoti VBA.
Žemiau yra kodas, kuris nustatys objekto kintamąjį MyFSO kaip „FileSystemObject“ objektą:
Sub CreatingFSO () Dim MyFSO kaip FileSystemObject Set MyFSO = New FileSystemObject End Sub
Šiame kode pirmiausia kintamąjį MyFSO paskelbiau kaip „FileSystemObject“ tipo objektą. Tai įmanoma tik todėl, kad sukūriau nuorodą į „Microsoft Scripting Runtime Library“. Jei nuoroda nesukurta, tai sukels klaidą (nes „Excel“ neatpažintų, ką reiškia „FileSystemObject“).
Antroje eilutėje nutinka du dalykai:
- Naujas raktinis žodis sukuria „FileSystemObject“ egzempliorių. Tai reiškia, kad dabar galiu naudoti visus „FileSystemObject“ metodus darbui su failais ir aplankais. Jei nesukursite šio egzemplioriaus, negalėsite pasiekti FSO metodų.
- Raktinis žodis SET nustato objektą MyFSO į šį naują „FileSystemObject“ egzempliorių. Tai leidžia man naudoti šį objektą norint pasiekti failus ir aplankus. Pavyzdžiui, jei man reikia sukurti aplanką, galiu naudoti „MyFSO.CreateFolder“ metodą.
Jei norite, taip pat galite sujungti aukščiau pateiktus du teiginius į vieną, kaip parodyta žemiau:
Sub CreatingFSO () Dim MyFSO kaip New FileSystemObject End Sub
Didelis šio metodo (kuris yra nuoroda į „Microsoft Scripting Runtime Library“) pranašumas yra tas, kad kai savo kode naudojate FSO objektus, galėsite naudoti „IntelliSense“ funkciją, kuri parodo metodus ir ypatybes, susijusias su objektas (kaip parodyta žemiau).
Tai neįmanoma, kai sukuriate nuorodą iš kodo (aptariamas toliau).
Objekto kūrimas iš kodo
Kitas būdas sukurti nuorodą į FSO yra tai padaryti naudojant kodą. Taikant šį metodą, nereikia kurti jokios nuorodos (kaip tai buvo padaryta ankstesniame metode).
Rašydami kodą, galite sukurti objektą iš kodo ir peržiūrėti „Scripting.FileSystemObject“.
Žemiau pateiktas kodas sukuria objektą FSO, o tada daro jį „FileSystemObject“ tipu.
Sub FSODemo () Dim FSO kaip Object Set FSO = CreateObject ("Scripting.FileSystemObject") Pabaiga
Nors tai gali atrodyti patogiau, didelis šio metodo naudojimo trūkumas yra tas, kad jis nerodys „IntelliSense“, kai dirbate su objektais FSO. Man tai yra didžiulis neigiamas dalykas, ir aš visada rekomenduoju naudoti ankstesnį FSO įgalinimo metodą (ty nustatant nuorodą į „Microsoft Scripting Runtime“)
„VBA FileSystemObject“ pavyzdžiai
Dabar pasinerkime ir pažvelkime į keletą praktinių „FileSystemObject“ naudojimo „Excel“ pavyzdžių.
1 pavyzdys: patikrinkite, ar yra failas ar aplankas
Šis kodas patikrins, ar aplankas pavadinimu „Test“ egzistuoja, ar ne (nurodytoje vietoje).
Jei aplankas yra, IF sąlyga yra tiesa ir pranešimų laukelyje rodomas pranešimas - „Aplankas egzistuoja“. O jei jo nėra, rodomas pranešimas - aplanko nėra “.
Sub CheckFolderExist () Dim MyFSO kaip FileSystemObject Set MyFSO = New FileSystemObject If MyFSO.FolderExists ("C: \ Users \ sumit \ Desktop \ Test") Tada MsgBox "Aplankas egzistuoja" Kiti MsgBox "Aplankas neegzistuoja" Pabaiga Sub
Taip pat galite patikrinti, ar yra failas, ar ne.
Žemiau pateiktas kodas patikrina, ar nurodytame aplanke yra failas pavadinimu Test.xlsx.
Sub CheckFileExist () Dim MyFSO kaip FileSystemObject Set MyFSO = New FileSystemObject If MyFSO.FileExists ("C: \ Users \ sumit \ Desktop \ Test \ Test.xlsx") Tada MsgBox "Failas egzistuoja" Kita "MsgBox" Failas neegzistuoja „Pabaiga, jei pabaiga
2 pavyzdys: Sukurkite naują aplanką nurodytoje vietoje
Žemiau pateiktas kodas sukurtų aplanką pavadinimu „Test“ mano sistemos C diske (turėsite nurodyti savo sistemos kelią, kuriame norite sukurti aplanką).
Sub CreateFolder () Dim MyFSO kaip FileSystemObject Set MyFSO = New FileSystemObject MyFSO.CreateFolder ("C: \ Users \ sumit \ Desktop \ Test") Pabaiga
Nors šis kodas veikia gerai, jis parodys klaidą, jei aplankas jau egzistuoja.
Žemiau pateiktas kodas patikrina, ar aplankas jau egzistuoja, ir sukuria aplanką, jei jo nėra. Jei aplankas jau yra, jame rodomas pranešimas. Norėdami patikrinti, ar aplankas egzistuoja, naudoju FolderExists metodas FSO.
Sub CreateFolder () Dim MyFSO kaip FileSystemObject Set MyFSO = New FileSystemObject If MyFSO.FolderExists ("C: \ Users \ sumit \ Desktop \ Test") Tada MsgBox "Aplankas jau yra" Kitas MyFSO.CreateFolder ("C: \ Users \ sumit \ Desktop \ Test ") Pabaiga Jei pabaiga Sub
3 pavyzdys: gaukite visų aplankų failų sąrašą
Žemiau pateiktas kodas parodys visų nurodytame aplanke esančių failų pavadinimus.
Sub GetFileNames () Dim MyFSO kaip FileSystemObject Dim MyFile kaip File Dim MyFolder As Folder Set MyFSO = New Scripting.FileSystemObject Set MyFolder = MyFSO.GetFolder ("C: \ Users \ sumit \ Desktop \ Test") kiekvienam MyFile aplanke MyFolder.Files Derinti. Spausdinti MyFile. Pavadinimas Kitas MyFile End Sub
Šis kodas yra šiek tiek sudėtingesnis nei tie, kuriuos jau matėme.
Kaip minėjau aukščiau šiame vadove, kai nurodote „Microsoft Scripting Runtime Library“, galite naudoti „FileSystemObject“ ir visus kitus objektus (pvz., Failus ir aplankus).
Pirmiau pateiktame kode naudoju tris objektus - „FileSystemObject“, „File“ ir „Folder“. Tai leidžia man peržiūrėti kiekvieną failą nurodytame aplanke. Tada naudoju vardo ypatybę, kad gaučiau visų failų pavadinimų sąrašą.
Atminkite, kad naudoju „Debug.Print“, kad gautumėte visų failų pavadinimus. Šie vardai bus išvardyti tiesioginiame VB redaktoriaus lange.
4 pavyzdys: Gaukite visų aplanko poaplankių sąrašą
Žemiau pateiktas kodas suteiks visų nurodyto aplanko poaplankių pavadinimus. Logika yra tokia pati, kaip aprašyta aukščiau pateiktame pavyzdyje. Vietoj failų šiame kode naudojome poaplankius.
Sub GetSubFolderNames () Dim MyFSO kaip FileSystemObject Dim MyFile Kaip failas Dim MyFolder kaip aplankas Dim MySubFolder As Folder Set MyFSO = New Scripting.FileSystemObject Set MyFolder = MyFSO.GetFolder ("C: \ Users \ sumit \ Desktop My Test") MyFolder.SubFolders derinimas. Spausdinti MySubFolder.Pavadinimas Kitas MySubFolder End Sub
5 pavyzdys: nukopijuokite failą iš vienos vietos į kitą
Žemiau pateiktas kodas nukopijuos failą iš aplanko „Šaltinis“ ir nukopijuos jį į aplanką „Paskirtis“.
Sub CopyFile () Dim MyFSO kaip FileSystemObject Dim SourceFile kaip eilutė Dim DestinationFolder kaip eilutė Nustatykite MyFSO = New Scripting.FileSystemObject SourceFile = "C: \ Users \ sumit \ Desktop \ Source \ SampleFile.xlsx" DestinationFolder = "C: \ Users \ sumit \ Desktop \ Destination "MyFSO.CopyFile Šaltinis: = SourceFile, Destination: = DestinationFolder &" \ SampleFileCopy.xlsx "pabaiga
Pirmiau pateiktame kode naudoju du kintamuosius - „SourceFile“ ir „DestinationFolder“.
Šaltinio faile yra failo, kurį noriu nukopijuoti, adresas, o kintamasis DestinationFolder - aplanko, į kurį noriu nukopijuoti, adresą.
Atminkite, kad kopijuojant failą nepakanka nurodyti paskirties aplanko pavadinimą. Taip pat turite nurodyti failo pavadinimą. Galite naudoti tą patį failo pavadinimą arba jį pakeisti. Pirmiau pateiktame pavyzdyje nukopijavau failą ir pavadinau jį „SampleFileCopy.xlsx“
6 pavyzdys: nukopijuokite visus failus iš vieno aplanko į kitą
Žemiau pateiktas kodas nukopijuos visus failus iš aplanko Šaltinis į paskirties aplanką.
Sub CopyAllFiles () Dim MyFSO kaip FileSystemObject Dim MyFile kaip File Dim SourceFolder kaip String Dim DestinationFolder Kaip String Dim MyFolder As Folder Dim MySubFolder As Folder SourceFolder = "C: \ Users \ sumit \ Desktop \ Source" DestinationFolder = "C: \ Users \ sumit \ Desktop \ Destination "Nustatykite MyFSO = New Scripting.FileSystemObject Set MyFolder = MyFSO.GetFolder (SourceFolder) Kiekvienam MyFile aplanke MyFolder.Files MyFSO.CopyFile Šaltinis: = MyFSO.GetFile (MyFile), _ Destination: = Destination: &" Destination: = " "& MyFile.Name, Overwritefiles: = False Next MyFile End Sub
Aukščiau pateiktas kodas nukopijuos visus failus iš aplanko Šaltinis į paskirties aplanką.
Atminkite, kad taikant „MyFSO.CopyFile“ metodą ypatybę „Perrašyti failus“ nurodiau kaip klaidingą (pagal nutylėjimą tai tiesa). Tai užtikrina, kad jei jau turite failą aplanke, jis nebus nukopijuotas (ir pamatysite klaidą). Jei pašalinsite „Overwritefiles“ arba nustatysite kaip „True“, jei paskirties aplanke yra failų tuo pačiu pavadinimu, jie bus perrašyti.
Pro patarimas: Kopijuojant failus visada yra galimybė perrašyti failus. Gera idėja šiuo atveju yra pridėti laiko žymę kartu su pavadinimu. Tai užtikrins, kad pavadinimai visada bus skirtingi ir galėsite lengvai sekti, kurie failai kada buvo nukopijuoti.Jei norite kopijuoti tik tam tikro plėtinio failus, tai galite padaryti naudodami IF IF sakinį, kad patikrintumėte, ar plėtinys yra xlsx, ar ne.
Sub CopyExcelFilesOnly () Dim MyFSO kaip FileSystemObject Dim MyFile kaip File Dim SourceFolder kaip String Dim DestinationFolder As String Dim MyFolder As Folder Dim MySubFolder As Folder SourceFolder = "C: \ Users \ sumit \ Desktop \ Source" DestinationFolder = "C: \ Us: sumit \ Desktop \ Destination "Nustatykite MyFSO = New Scripting.FileSystemObject Set MyFolder = MyFSO.GetFolder (SourceFolder) Kiekvienam MyFile aplanke MyFolder.Files Jei MyFSO.GetExtensionName (MyFile) =" xlsx "Tada MyFSO.CopyFileGap = (MyFile), _ Destination: = DestinationFolder & "\" & MyFile.Name, Overwritefiles: = False End if Next MyFile End Sub
„FileSystemObject“ (FSO) metodai
Štai metodai, kuriuos galite naudoti kiekvienam objektui. Tai tik orientacinis tikslas ir per daug dėl to nesijaudinkite. Kai kurių iš jų naudojimas buvo parodytas aukščiau pateiktuose pavyzdžiuose.
FSO metodai | Dėl objekto | apibūdinimas |
„DriveExists“ | Vairuoti | Patikrina, ar diskas yra, ar ne |
„GetDrive“ | Vairuoti | Pateikia disko objekto egzempliorių pagal nurodytą kelią |
„GetDriveName“ | Vairuoti | Paleidžia disko pavadinimą |
„BuildPath“ | Failas/aplankas | Sukurkite kelią iš esamo kelio ir pavadinimo |
CopyFile | Failas/aplankas | Kopijuoja failą |
GetAbsolutePathName | Failas/aplankas | Pateikite kanoninį kelio vaizdą |
„GetBaseName“ | Failas/aplankas | Grąžinkite pagrindo pavadinimą iš kelio. Pavyzdžiui, „D: \ TestFolder \ TestFile.xlsm“ grąžins TextFile.xlsm |
„GetTempName“ | Failas/aplankas | Sukurkite pavadinimą, kuriuo galima pavadinti laikiną failą |
CopyFolder | Aplankas | Kopijuoja aplanką iš vienos vietos į kitą |
Sukurti aplanką | Aplankas | Sukuria naują aplanką |
DeleteFolder | Aplankas | Ištrina nurodytą aplanką |
FolderExists | Aplankas | Patikrina, ar aplankas yra, ar ne |
„GetFolder“ | Aplankas | Grąžina aplanko objekto egzempliorių pagal nurodytą kelią |
„GetParentFolderName“ | Aplankas | Pakartotinai paleidžia pirminio aplanko pavadinimą pagal nurodytą kelią |
GetSpecialFolder | Aplankas | Gaukite įvairių sistemos aplankų vietą. |
„MoveFolder“ | Aplankas | Perkelia aplanką iš vienos vietos į kitą |
Ištrinti failą | Failas | Ištrina failą |
„FileExists“ | Failas | Patikrina, ar yra failas, ar ne |
„GetExtensionName“ | Failas | Grąžina failo plėtinį |
GetFile | Failas | Grąžina failo objekto egzempliorių pagal nurodytą kelią |
GetFileName | Failas | Grąžina failo pavadinimą |
„GetFileVersion“ | Failas | Grąžina failo versiją |
MoveFile | Failas | Perkelia failą |
CreateTextFile | Failas | Sukuria tekstinį failą |
„GetStandardStream“ | Failas | Gaukite standartinį įvesties, išvesties ar klaidų srautą |
„OpenTextFile“ | Failas | Atidarykite failą kaip „TextStream“ |