Kapóra jön máshol: könyvtártartalom listázása egy rövidke kódszelet segítségével

2016. március 13. - Office Guru

Kihasználva a hétvégét, tovább folytatom elmaradásom feldolgozását, már ami az olvasói kérdéseket illeti és ezúttal egy nagyobb fába vágom a fejszémet, mert az Excel-kérdések egyikének megválaszolása nem is egy posztot fel felölelni, hiszen én több részre osztottam a megoldást - a kérdés önállóan is kezelhető első része egyébként a kedves írónak nem okozott gondot, de hátha másnak is szüksége lehet ilyesmire, így kezdjük ezzel a kifejtést.

Szóval a kérdés ezen része olyasmi, amelyre nem VBA-s megoldást már kínáltam korábbi posztokban (például a command promptból indítható dir parancs vagy a böngészős Select All Content segítségével), de most azt nézzük meg, hogy makróval hogy tudjuk kilistázni egy adott könyvtárunk tartalmát. Célunk tehát ennek a kis táblának az automatikus kitöltése:

sss01.jpgAhogy mindig, most is hangsúlyozni kell, hogy ez csak egy a lehetséges megoldások közül, szóval továbbra is nyitott vagyok más javaslatokra/ötletekre.

Rövid VBA-kódunk magját és legfontosabb elemét a FileSystemObject objektum adja, amely objektumalapú lehetőséget ad számunkra, hogy hozzáférjünk a számítógépünk fájlrendszeréhez. Egyszerűen csak létre kell hoznunk egy FileSystemObject objektumot VBA-ban a Scripting.FileSystemObject szintaxis segítségével, aztán már törölhetünk, beolvashatunk vagy akár létre is hozhatunk fájlokat. Hogy értsük a szintaxist, érdemes megjegyezni, hogy a FileSystemObject a Microsoft Scripting Runtime Libraryben található dll-ként.

Visszatérve a mostani kérdéskörhöz, lépjünk be a Visual Basic Editorba, majd hozzunk létre négy változót, hármat objektumként, egyet pedig integer típussal:

sss02.jpgFSO a fentebb már említett FileSystemObject objektum, amelyet azért hozunk mindjárt létre, hogy hozzáférjünk a fájlrendszerhez, a Folder és File változók értelemszerűen könyvtár és fájl objektumok tárolására szolgálnak majd, i változónkra pedig a ciklushoz lesz majd szükségünk.

Ha megvannak a változók, akkor állítsuk be, hozzuk létre a FileSystemObject objektumot:

Set FSO = CreateObject("Scripting.FileSystemObject")

Majd a Folder objektumot is állítsuk be arra a könyvtárra, ahol listázni akarunk, ehhez a FileSystemObject objektum GetFolder metódusát használjuk, amely mindig objektumként adja vissza nekünk azt a foldert, amely a megadott elérési úton található:

Set Folder = FSO.GetFolder("c:\")

sss03.jpgEzzel konkrétan már a folderben vagyunk, most jön a ciklusunk, amely egyesével végigmegy a folderben lévő fájlokon és azok nevét egymást követő cellákba írja be.

Miután van fejlécünk, kezdjük alapból az i = 1 értékkel, de mint látni fogjuk ez lehetne 0 de akár 2 is, attól függően hova akarjuk tenni az értéklistát.

A ciklushoz a már jópár alkalommal bemutatott és megismert For Each...Next utasítást fogjuk felhasználni, azaz ha magyarra átfordítva fogalmazzuk meg a kódunkat, akkor minden egyes fájlunk esetén (For Each File) a fentebb definiált folderünk összes fájlja között (in Folder.files), fájlonként haladva az első oszlopunk második cellája (Cells(i + 1, 2)) legyen egyenlő a fájl nevével (File.Name), a második oszlopunk második cellája (Cells(i + 1,2)) pedig legyen egyenlő a fájl elérési útjával (File.Path). Ha ez megvan, akkor ugorjon a következő sorra, azaz i értékét növeljük meg eggyel (i = i + 1).

i = 1
For Each File In Folder.files
Cells(i + 1, 1) = File.Name
Cells(i + 1, 2) = File.Path
i = i + 1
Next File

sss04.jpgVegyük észre, hogy File objektumunknak minden tulajdonságához hozzáférünk, így a nevéhez, elérési útjához is, de ezen analógia mentén férünk hozzá a létrehozási dátumához, utolsó megnyitási időpontjához vagy akár méretéhez is.

Ha ez megvan, akkor meg is van a kódunk, innentől kezdve pedig gombhoz rendelhetjük, vagy ahogy majd én is tenni fogom, egy nagyobb kód első részeként fogjuk felhasználni.

sss05.jpg

 

Kódunk szövegként:

Sub Listazo()
Dim FSO As Object
Dim Folder As Object
Dim File As Object
Dim i As Integer
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder("c:\")
i = 1
For Each File In Folder.files
Cells(i + 1, 1) = File.Name
Cells(i + 1, 2) = File.Path
i = i + 1
Next File
End Sub

A bejegyzés trackback címe:

https://officeguru.blog.hu/api/trackback/id/tr548474048

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.