FileSystemObject a VBA-ban – magyarázat

A FileSystemObject, más néven FSO, egy egyszerű objektumalapú modellt biztosít a számítógép fájlrendszerének eléréséhez. Egyszerűen csak létre kell hoznunk a FileSystemObject egy példányát a VBA-ban, és máris létrehozhatunk fájlokat, olvashatunk fájlokat, törölhetünk fájlokat, végigfuthatunk mappákon, és sok más műveletet végezhetünk a számítógép fájlrendszerén.

A FileSystemObject a Microsoft Scripting Runtime Library-ben, azaz a Scrrun.dll-ban található. Ez a DLL támogatja a fájlok létrehozását és manipulálását TextStream objektum segítségével, és ez az oka annak, hogy az FSO nem támogatja a bináris fájlokon végzett műveleteket.

Tartalomjegyzék

A File System Object

FileSystemObject többféle feladatra is használható, például:

  • Szöveges fájlok létrehozása, megnyitása, olvasása, írása és törlése.
  • Mappák létrehozása, módosítása és törlése.
  • Fájlok és mappák ismétlése.
  • Fájlok vagy mappák másolása és áthelyezése.
  • Fájlok vagy mappák létezésének (fájlútvonal) ellenőrzése.

FileSystemObject elérése

A FileSystemObject több objektumgyűjteményből áll, és ezen objektumgyűjtemények mindegyike a fájlrendszer egy adott aspektusáról tartalmaz információt. Ezek a gyűjtemények a következők:

Object Description
Drive Ez az objektum lehetővé teszi, hogy információt kapjon a rendszerhez csatlakoztatott meghajtóról. Például meg tudja mondani a meghajtón rendelkezésre álló helyet, a logikai nevét stb. Vegye figyelembe, hogy a meghajtó objektum, amelyre itt utalunk, nem feltétlenül a merevlemezt jelenti, lehet CD-ROM, Flash-meghajtó, RAM, vagy akár egy LAN-on keresztül logikailag csatlakoztatott meghajtó is.
Mappa Ez az objektum lehetővé teszi egy mappahierarchia létrehozását, törlését, mozgatását vagy lekérdezését.
Fájl Ez az objektum lehetővé teszi egy Fájl létrehozását, törlését, mozgatását vagy lekérdezését.
TextStream TextStream objektum lehetővé teszi szöveges fájlok olvasását vagy írását.

Egy FileSystemObject tehát diagrammatikusan így ábrázolható:

Megjegyezzük, hogy az FSO a fenti objektumok többségével közvetve kommunikál. Közvetlenül csak a “Meghajtók” objektumgyűjteményét tartalmazza. A “Meghajtók” gyűjtemény minden egyes “Drive” objektuma “Folder” objektumok láncolatát tartalmazza. És minden egyes “Folder” objektum tartalmaz egy “File” gyűjteményt.

Az érthetőség kedvéért mondjuk így: Egy FileSystemObject három fő metódust tartalmaz a meghajtókra, mappákra vagy fájlokra vonatkozó konkrét információk lekérdezésére (olvasására), ezek a metódusok a GetDrive, GetFolder és GetFile , illetve. Most tegyük fel, hogy meg kell találnunk egy adott fájl méretét, ezért létrehozzuk a GetFile módszer egy példányát, majd lekérjük a size tulajdonságát.

Megjegyzés: GetDrive, GetFolder és GetFile nem az egyetlen módszer az FSO-n belül, csak a dolgok magyarázatára használtam őket. Az alábbiakban a FileSystemObjectben található összes metódust megnézzük.

FSO metódusok

Az alábbi táblázat részletesen ismerteti a különböző FileObjectSystem metódusokat és az általuk végzett feladatokat:

Method Description
GetDrive, GetFolder és GetFile Ezek a módszerek a meghajtóra, mappákra és fájlokra vonatkozó információk lekérdezésére szolgálnak.
CreateFolder és CreateTextFile Új mappák vagy fájlok létrehozásában segít.
DeleteFile és DeleteFolder A meglévő fájlok vagy mappák törlésében segít.
CopyFile és CopyFolder Ezek a módszerek segítenek a fájlok vagy mappák másolásában egyik helyről a másikra.
MoveFile és MoveFolder Ezek a módszerek fájlok vagy mappák egyik helyről a másikra történő áthelyezésében segítenek.

FileSystemObject létrehozása a VBA-ban: Ebben a részben két dologgal fogunk foglalkozni:

  • Hivatkozás létrehozása a Microsoft Scripting Runtime Library-re, azaz a Scrrun.dll-re
  • Egy FSO objektum létrehozása.

A Microsoft Scripting Runtime Library hivatkozásának létrehozása

A Microsoft Scripting Runtime Library hivatkozásának létrehozásához kövesse az alábbi lépéseket:

  • Először is nyissa meg a VBA szerkesztőt az “Alt + F11” billentyűkombinációval.

  • Majd navigáljon az “Eszközök” > “Hivatkozás” menüpontra a fentiek szerint.

  • Ezzel megnyílik a hivatkozás ablak. Itt válassza ki és ellenőrizze a “Microsoft Scripting Runtime” bejegyzést, majd kattintson az “OK” gombra.
  • Most a Microsoft Scripting Runtime Library-re való hivatkozás hozzáadásra került.

FSO objektum létrehozása

Az FSO objektum létrehozása egyszerű, ehhez kövesse az alábbi lépéseket:

  • A VBA szerkesztőben navigáljon a “Insert” > “Module” menüpontra.

  • Most a modul ablakban írja be a “Public FSO As New FileSystemObject” szöveget.
  • Ezzel létrehoz egy FileSystemObject objektumot FSO névvel.

Ezután egyszerűen elérheti a FileSystemObject módszereit az FSO objektummal.

6 Gyakorlati példák a FileSystemObject elérésére

Most térjünk át az FSO néhány gyakorlati példájára:

1. példa: Használjuk az FSO-t egy meghajtó teljes szabad helyének megkeresésére.

Az alábbiakban az ehhez szükséges kód:

'Egy FileSystemObject létrehozása 
Public FSO As New FileSystemObject
Sub DiskSpace()
Dim drv As Drive
Dim Space As Double
Set drv = FSO.GetDrive("C:") 'A meghajtó létrehozása
objektum Space = drv.FreeSpace
Space = Space / 1073741824 'byte-ok átváltása GB-ra
Space = WorksheetFunction.Round(Space, 2) 'Kerekítés
MsgBox "C: has free space = " & Space & " GB"
End Sub

Magyarázat:

Végül egy üzenőmező segítségével megjelenítettük a szabad helyet.

Megjegyezzük, hogy a meghajtó szabad helyének lekérdezéséhez két tulajdonság van: drv.FreeSpace és drv.AvailableSpace.

Példa 2: Ellenőrizzük, hogy egy mappa létezik-e vagy sem. Ha a mappa nem létezik, akkor hozza létre a mappát.

Az alábbi kód:

'Egy FileSystemObject létrehozása 
Public FSO As New FileSystemObject
Sub ChkFolder()
Dim Fldr_name As String
Fldr_name = InputBox("Enter the path of the folder to check :")
Ha Len(Fldr_name) > 0
Then If FSO.FolderExists(Fldr_name) = True Then
MsgBox "Mappa létezik!"
Else FSO.CreateFolder (Fldr_név)
MsgBox ("Folder Created!")
End If Else MsgBox "Wrong Input"
End If
End Sub

Magyarázat: A kódban egy InputBox függvényt használtunk arra, hogy a mappa elérési útvonalát megkapjuk a felhasználótól. Ezt követően az If utasítás használatával a FolderExists módszerrel együtt ellenőriztük, hogy az adott mappa jelen van-e vagy sem. Ha a mappa nincs jelen, akkor a CreateFolder módszerrel létrehozzuk a mappát.

Megjegyzés: A CreateFoldermódszer egyszerre csak egyetlen mappát hoz létre. Ha tehát a “C:\Folder1\Folder2\Folder3” argumentumot adjuk meg, akkor csak a Folder3 mappát fogja létrehozni a Folder2 mappán belül. De ha a Folder2 nem létezik, akkor egy path not found hibát fog dobni.

3. példa: Írjunk kódot az FSO segítségével egy mappa egyik helyről a másikra történő másolásához.

Az alábbi kód ennek megvalósításához:

‘Egy FileSystemObject létrehozása Public FSO As New FileSystemObject Sub CopyFolder() FSO.CopyFolder “C:\Source-Folder\”, “D:\Destination-Folder\”, True MsgBox “Copying Done!” End Sub

Magyarázat: A kódban az FSO CopyFolder módszerét használtuk, ez a módszer három argumentumot fogad el:

  • Forrás útvonal
  • Cél útvonal
  • Egy Boolean argumentum a Meglévő felülírásának megadásához.

Példa 4: A FileSystemObject használatával a Temp könyvtár, a Rendszer mappa és a Windows mappa lekérése.

Ezzel a következő kódot használhatjuk:

'Egy FileSystemObject létrehozása 
Public FSO As New FileSystemObject
Sub GetFolderpath()
Dim Windows_Fldr As String
Dim System_Fldr As String
Dim Temp_Fldr As String
Windows_Fldr = FSO.GetSpecialFolder(0)
System_Fldr = FSO.GetSpecialFolder(1)
Temp_Fldr = FSO.GetSpecialFolder(2)
MsgBox ("Windows folder path = " & Windows_Fldr & vbNewLine & _ "System folder path = " & System_Fldr & vbNewLine & _ "Temp folder path = " & Temp_Fldr)
End Sub

Magyarázat: Ez a módszer egyetlen numerikus argumentumot fogad el, azaz 0-2.

  • FSO.GetSpecialFolder(0) – A Windows mappa elérési útvonalának lekérdezése.
  • FSO.GetSpecialFolder(1) – A Rendszer mappa elérési útvonalának lekérdezése.
  • FSO.GetSpecialFolder(2) – A Helyi ideiglenes mappa elérési útvonalának lekérdezése.

5. példa: Szövegfájl létrehozása, valamilyen tartalom írása, majd a fájl olvasása, végül a fájl törlése.

Az alábbiakban az ehhez szükséges kódot mutatjuk be:

'FileSystemObject létrehozása Public 
FSO As New FileSystemObject
Sub CreateFile()
Dim txtstr As TextStream
Dim FileName As String
Dim FileContent As String
Dim File As File
FileName = "C:\TestDirectory\File.txt" 'Létrehozandó fájl
'Egy fájl létrehozása és a tartalom írása
FileContent = InputBox("Enter the File Content")
If Len(FileContent) > 0 Then
Set txtstr = FSO.CreateTextFile(FileName, True, True)
txtstr.Write FileContent
txtstr.Close
End If
' Olvasás az éppen létrehozott fájlból
If FSO.FileExists(FileName) Then
Set File = FSO.GetFile(FileName)
Set txtstr = File.OpenAsTextStream(ForReading, TristateUseDefault)
MsgBox txtstr.ReadAll txtstr.Close
' Végül a fájl törlése
File.Delete (True)
End If
End Sub

Magyarázat: Ez a kód először létrehoz egy szöveges fájlt, hozzáadja a tartalmát, majd beolvassa azt, megjeleníti egy üzenőmező segítségével, és végül törli a fájlt.

Példa 6: Írjunk egy VBA kódot, amely képes egy mappában található összes fájlt végigjárni, valamint lekérdezi azok méretét és módosítási dátumát.

A következő kód képes elvégezni ezt a feladatot:

'Egy FileSystemObject létrehozása 
Public FSO As New FileSystemObject
Sub ListFiles()
'Változók deklarálása
Dim objFolder As Folder
Dim objFile As File
Dim strPath As String
Dim NextRow As Long
'A mappa elérési útjának megadása
strPath = "C:\Users\Aniee\Desktop\ExcelTrick\ "
'Hozzuk létre a mappa objektumát
Set objFolder = FSO.GetFolder(strPath)
'Ellenőrizze, hogy a mappa üres-e vagy sem
If objFolder.Files.Count = 0 Then
MsgBox "No files were found...", vbExclamation
Exit Sub
End If
'Az A, B és C oszlopnevek hozzáadása
Cells(1, "A").Value = "File Name"
Cells(1, "B").Value = "Size"
Cells(1, "C").Value = "Modified Date/Time"
'A következő elérhető sor keresése
NextRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row + 1
'Lépjünk végig a mappában lévő minden egyes fájlon
For Each objFile In objFolder.Files
'Listázzuk ki az aktuális fájl nevét, méretét és dátumát/idejét
Cells(NextRow, 1).Value = objFile.Name
Cells(NextRow, 2).Value = objFile.Size
Cells(NextRow, 3).Value = objFile.DateLastModified
'Keresse meg a következő sort NextRow = NextRow + 1
Next objFile
End Sub

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.