Kas ir FileSystemObject (FSO) un kā to izmantot programmā VBA Excel?

Satura rādītājs:

Anonim

FileSystemObject tiek izmantots, lai strādātu ar mapēm un failiem, kas savienoti ar sistēmu. Mēs to varam izmantot, lai piekļūtu failiem, mapēm, diskiem un teksta straumēm. Tas var ne tikai piekļūt failiem, mapēm un teksta failiem, bet arī izveidot. Šīs darbības neaprobežojas tikai ar sistēmas cieto disku, bet ar jebkuru failu savienotu ierīci. Tas nozīmē, ka varat piekļūt pildspalvu diskdziņiem, cd diskiem vai virtuāli pievienotiem tīkla diskdziņiem.

Šīs ir darbības, kuras mēs varam veikt, izmantojot FileSystemObject VBA:

Teksta failu izveidei, atvēršanai, lasīšanai, rakstīšanai un dzēšanai.

Lai pievienotu, mainītu un dzēstu mapes.

Lai atkārtotu failus un mapes.

Failu vai mapju kopēšanai un pārvietošanai uz citām vietām.

Lai pārbaudītu, vai fails vai mape pastāv vai nav

Kā piekļūt FileSystemObject VBA?

Failu sistēmas objekts ir daļa no Microsoft skriptu izpildlaika bibliotēkas. Lai piekļūtu FileSystemObject, mums ir jāpievieno vai jāpievieno atsauce uz Microsoft skriptu izpildlaika bibliotēka vai Scrrun.dll.

Piezīme. FileSystemObject neatbalsta bināro failu darbību, jo Scrrun.dll atbalsta failu izveidi un manipulācijas, izmantojot TextStream Object.

Ir divas metodes FileSystemObject izveidei VBA:

1: FSO objekta izveide, izmantojot CreateObject metodi:

Izmantojot šo metodi, mēs vispirms deklarējam mainīga objekta tipu. Pēc tam iestatiet FSO objekta atsauci uz šo mainīgo, izmantojot CreateObject:

Sub LearnFso () 'Objekta mainīgā izveide Dim fso kā objekts' Izveidojiet FileSystemObject, izmantojot Create Object Method Set fso = CreateObject ("Scripting.FileSystemObject") Debug.Print fso.GetBaseName ("E: \ MTR \ Feb'18 MTR" ) Beigu apakš 

Šī metode ir dinamiska un pārnesama. Tas nozīmē, ka, kopīgojot kodu ar citām sistēmām, šis kods darbosies lieliski. Nav svarīgi, kāda Microsoft Runtime Scripting versija jums ir.

Vienīgais trūkums ir tas, ka jūs nevarēsit redzēt VBA sniegto intellisense. Lai izmantotu visus FileSystemObject rekvizītus un metodes, jums būs jābūt atkarīgiem no jūsu zināšanām.

2: FSO objekta izveide, pievienojot atsauci uz Microsoft Runtime Scripting

Izmantojot jauno atslēgvārdu, VBA varat tieši izveidot FileSystemObject. Lai to izdarītu, jums būs jāpievieno atsauce uz jaunāko Microsoft skriptu izpildlaiku jūsu sistēmā.

Lai pievienotu atsauci, dodieties uz rīku izvēlnes opciju Atsauces. Šeit atrodiet Microsoft Scripting Runtime dll. Pārbaudiet to un noklikšķiniet uz Labi.

Tagad jūs esat gatavs izveidot un izmantot FSO objektu.

Sub LearnFso () Dim fso kā jauns FileSystemObject Debug.Print fso.GetBaseName ("E: \ MTR \ Feb'18 MTR") Beigu apakšdaļa 

Vai

Sub LearnFso () Dim fso kā FileSystemObject Set fso = New FileSystemObject Debug.Print fso.GetBaseName ("E: \ MTR \ Feb'18 MTR") Beigu apakšdaļa 

Abi darbosies labi.

Šīs metodes galvenā priekšrocība ir tā, ka jūs varēsit redzēt VBA inteliģenci. VBA parādīs visas fso objekta īpašības un metodes. Tas arī pateiks, kādus mainīgos lielumus tā pieņems un kādu vērtību tā atgriezīs.

Ja kopīgojat šo kodu ar citām sistēmām, jums būs jāpasaka viņiem no rīkiem pievienot atsauci uz skriptu izpildlaiku, pretējā gadījumā viņi saņems kompilācijas kļūdu, ka lietotāja definētais tips nav definēts. Tātad tas ir tāpat kā citu programmēšanas valodu importēšana.

Ņemiet vērā, ka FSO nav atslēgvārds. To var izmantot kā mainīgā nosaukumu. Tā ir tikai vienošanās, ka failu sistēmas objektu var nosaukt par fso. Tāpēc daži cilvēki sajauc to ar atslēgvārdu.

Abām FSO objektu izveides metodēm ir savas priekšrocības un trūkumi, kurus es minēju, tos izskaidrojot. Tāpēc izmantojiet atbilstoši savām vajadzībām. Šajā rakstā es izmantošu otro FileSystemObject izveides metodi.

Tagad, kad mēs zinām, kā VBA izveidot FileSystemObject, izmantosim šīs zināšanas, veicot dažus nozīmīgus uzdevumus. Es domāju pāriet uz piemēriem.

1. piemērs: Iegūstiet visu apakšmapi noteiktā mapē

Pirmais piemērs, ko mēs redzēsim, ir apakšmapes nosaukumu iegūšana no konkrētas mapes.

Sub LearnFso () ”mainīgie mainīgie, kas mums būs nepieciešami mape 'Objektu inicializācija fdrpath = "D: \ Downloads"' Mapes deklarēšana Set fso = New FileSystemObject 'Fso objekta izveide Set fdr = fso.GetFolder (fdrpath)' Dotās mapes objekta izveide 'cilpa, lai iegūtu visu apakšmapes nosaukums katrai apakšddr In fdr. 

Palaižot iepriekš minēto kodu, jūs saņemsiet to.

Jā! Tā ir mana lejupielādes mape. Nekoncentrējieties uz to.

Kā tas darbojās?

Sapratīsim soļos:

1: Mums vajadzīgo mainīgo samazināšana

Dim fso As FileSystemObject 'Mainīgais FileSystemObject

Dim fdr kā mape 'Mainīgais bāzes mapei

Dim subfdr As Folder 'Mainīgais apakšmapēm

Vispirms mēs deklarējām visu mainīgo, kas mums būs vajadzīgs šajā piemērā. Pirmais mainīgais, protams, ir fso kā faila sistēmas objekts. Abi mainīgie fdr un subfdr ir mapes tipa. Mēs izmantosim fso objektu, lai izveidotu faila tipa objektu, nevis radītu tieši. The fdrpath is use mainīgais tiek izmantots, lai turētu tās pamatmapes ceļu, no kuras mēs vēlamies iegūt visas apakšmapes.

2: objektu inicializācija

fdrpath = "D: \ Lejupielādes" 'Deklarēt mapi

Set fso = New FileSystemObject 'Fso objekta izveide

Iestatiet fdr = fso.GetFolder (fdrpath) 'Dotās mapes mapes objekta izveide

Šajā solī mēs inicializējām visus mūsu deklarētos objektus, izņemot apakšfdr. Ņemiet vērā, ka esam inicializējuši fdr faila mainīgo, izmantojot fso objektu metodi getFolder.

FileSystemObject metode GetFolder () izmanto mapes vai direktorija ceļu kā virkni un atgriež faila tipa objektu.

3: cilpa, lai iegūtu visu apakšmapes nosaukumu mapes objektā

Katram apakšddd In fdr.SubFolders

Atkļūdot. Drukāt apakšdr. Nosaukums

Nākamais apakšfdr

Šeit mēs esam izmantojuši a katrai cilpai, lai cilpotu caur katru apakšmapi fdr faila objektā. Mēs izmantojām faila objekta rekvizītu Apakšmapes.

Mēs izmantojam vārda rekvizītu, lai iegūtu katras apakšmapes nosaukumu. Un tas tiek darīts.

2. piemērs: Iegūstiet visus failu ceļus mapē un tās apakšmapes

Lai iegūtu visus mapes un tās apakšmapes failu ceļus vai pilnībā kvalificētos nosaukumus, mums jāpievieno vēl dažas rindiņas 1. piemēra kodā.

Sub LearnFso () Dim fso kā FileSystemObject Dim fdr kā mape 'Mainīgais mainīgajai mapei Dim subfdr Kā mape' Mainīgais apakšmapēm Dim fdrpath As String ', lai saglabātu bāzes mapes ceļu Dim fl As File', lai saglabātu faila objektu fdrpath = "D: \ lejupielādes" Set fso = New FileSystemObject Set fdr = fso.GetFolder (fdrpath) 'cilpa, lai iegūtu visas apakšmapes nosaukumu katrai apakšfdr In fdr.SubFolders Katrai fl In subfdr.Files', lai cilpotu katru failu Debug.Print fl.Path 'iegūst faila nosaukumu Next fl Next subfdr', lai iegūtu galvenās mapes failus Par katru fl In fdr.Files Debug.Print fl.Path Next fl End Sub 

Metode Folder.Files () ir metode, kas atgriež apakšmapes failus. Metode File.Path () atgriež pilnu faila adresi.

Mums katram ir iekšēja cilpa, lai atkārtotu visus galvenās mapes un tās mapes apakšmapes failus.

Lai iegūtu galvenās mapes failus, mēs izmantojam citu cilpu.

3. piemērs. Saglabājiet failu nosaukumus CSV failā.

Iepriekšējā piemērā mēs uzzinājām, kā drukāt konkrētu mapju failu ceļus tūlītējā logā. Šajā piemērā mēs uzzināsim, kā saglabāt šos ceļus CSV failā. Lai to izdarītu, mums vienkārši jāpievieno kodam dažas rindiņas. Skatiet zemāk redzamās drosmīgās koda rindiņas.

Sub LearnFso () Dim fso kā FileSystemObject Dim fdr kā mape 'Mainīgais mainīgajai mapei Dim subfdr kā mape' Mainīgais apakšmapēm Dim fdrpath As String ', lai saglabātu bāzes mapes ceļu Dim fl As File', lai saglabātu faila objektu Dim fileList Kā TextStream 'A texttream object fdrpath = "D: \ downloads" Set fso = New FileSystemObject Set fdr = fso.GetFolder (fdrpath) Set fileList = fso.CreateTextFile (fdrpath & "Failu saraksts šajā mapē.csv", True, False) 'cilpa, lai iegūtu visas apakšmapes nosaukumu katrai apakšddr In fdr.SubFolders Katrai fl In subfdr.Files', lai cilpotu cauri katram failam fileList.Write fl.Path & "," Next fl Next subfdr ", lai iegūtu galvenās mapes faili Katram fl In fdr.Files fileList.Write fl.Path & "," Next fl fileList.Close End Sub 

Šeit mēs esam pasludinājuši jaunu FileStream tipa objektu ar nosaukumu fileList

Mēs inicializējām failu saraksta mainīgo ar failu plūsmas objektu, izmantojot zemāk esošo rindiņu.

Iestatīt fileList = fso.CreateTextFile (fdrpath & "\ File List in this Folder.csv", True, False)

Mēs izmantojam FSO metodi CreateTextFile, lai izveidotu FileStream objektu. Tas izveido teksta failu. Šī metode pieņem faila nosaukumu ar pilnu ceļu. Pirmais mainīgais to dara. Mēs izmantojam paplašinājumu .csv, lai izveidotu csv failu. Otro mainīgo izmanto, lai atļautu pārrakstīšanu. Trešais arguments ir nepatiess, paziņojot, ka tas nav binārs fails.

Cilpās mēs aizstājam debug.print ar filelist.Write metodi, lai rakstītu katru faila ceļu izveidotajā failā.

Tātad, jā, puiši, šādi varat izmantot FileSystemObject. FSO var izmantot daudzām citām lietām, kuras mēs apspriedīsim nākamajos rakstos. Ja jums ir šaubas par šo FSO saistītā vaicājuma rakstu, jautājiet man zemāk esošajā komentāru sadaļā.

Darba sākšana ar Excel VBA UserForms| Es paskaidrošu, kā izveidot veidlapu programmā Excel, kā izmantot VBA rīklodziņu, kā rīkoties ar lietotāja ievadi un visbeidzot, kā saglabāt lietotāja ievadīto informāciju. Mēs apskatīsim šīs tēmas, izmantojot vienu piemēru un soli pa solim.

VBA mainīgie programmā Excel| VBA apzīmē Visual Basic for Applications. Tā ir programmēšanas valoda no Microsoft. To izmanto ar Microsoft Office lietojumprogrammām, piemēram, MSExcel, MS-Word un MS-Access, turpretī VBA mainīgie ir specifiski atslēgvārdi.

Excel VBA mainīgā darbības joma| Visās programmēšanas valodās mums ir mainīgas piekļuves specifikatori, kas nosaka, no kurienes var piekļūt definētajam mainīgajam. Excel VBA nav izņēmums. Arī VBA ir darbības jomas specifikatori.

ByRef un ByVal argumenti | Kad arguments tiek nodots kā ByRef arguments citai apakšfunkcijai vai funkcijai, tiek nosūtīta faktiskā mainīgā atsauce. Visas izmaiņas, kas veiktas mainīgā kopijā, tiks atspoguļotas sākotnējā argumentā.

Izdzēsiet lapas bez apstiprinājuma uzvednēm, izmantojot Microsoft Excel VBA | Tā kā jūs dzēšat lapas, izmantojot VBA, jūs zināt, ko darāt. Jūs vēlaties pateikt programmai Excel nerādīt šo brīdinājumu un izdzēst sasodīto lapu.

Pievienojiet un saglabājiet jaunu darbgrāmatu, izmantojot VBA programmā Microsoft Excel 2016| Šajā kodā mēs vispirms izveidojām atsauci uz darbgrāmatas objektu. Un tad mēs to inicializējām ar jaunu darbgrāmatas objektu. Šīs pieejas priekšrocība ir tā, ka jūs varat viegli veikt darbības ar šo jauno darbgrāmatu. Piemēram, saglabāšana, aizvēršana, dzēšana utt

Parādiet ziņojumu Excel VBA statusa joslā| Excel statusa joslu var izmantot kā koda monitoru. Ja jūsu VBA kods ir garš un veicat vairākus uzdevumus, izmantojot VBA, jūs bieži atspējojat ekrāna atjaunināšanu, lai neredzētu ekrāna mirgošanu.

Izslēdziet brīdinājuma ziņojumus, izmantojot VBA programmā Microsoft Excel 2016| Šis kods ne tikai atspējo VBA brīdinājumus, bet arī palielina koda laika efektivitāti. Redzēsim, kā.

Populāri raksti:

50 Excel saīsnes, lai palielinātu produktivitāti | Ātrāk izpildiet savu uzdevumu. Šie 50 īsceļi ļaus jums strādāt vēl ātrāk programmā Excel.

Funkcija VLOOKUP programmā Excel | Šī ir viena no visbiežāk izmantotajām un populārākajām Excel funkcijām, kas tiek izmantota, lai meklētu vērtību no dažādiem diapazoniem un lapām.

COUNTIF programmā Excel 2016 | Saskaitiet vērtības ar nosacījumiem, izmantojot šo apbrīnojamo funkciju. Jums nav jāfiltrē dati, lai saskaitītu noteiktas vērtības. Skaitītāja funkcija ir būtiska, lai sagatavotu informācijas paneli.

Kā lietot SUMIF funkciju programmā Excel | Šī ir vēl viena būtiska informācijas paneļa funkcija. Tas palīdz apkopot vērtības noteiktos apstākļos.