05. FileSystemObject Object Model

Bár az Excel maga rendelkezik olyan beépített osztállyal (FileSystem), amellyel fájl, könyvtár vagy meghajtó művelteket hajthatunk végre, azonban ez gyakran igen kevésnek bizonyulhat, ezért nem ezt fogjuk használni. Rendelkezésünkre áll ugyanis egy kifejezetten fájlkezelésre használatos objektummodell, amelynek segítségével objektumorientált módon játszhatunk fájljainkkal, könyvtárainkkal, meghajtóinkkal. A továbbiakban ezzel az objektummodellel fogunk megismerkedni. 

Objektummodellünket hivatalosan FileSystemObject Object Model-nek hívják.

FileSystemObject objektum

Ahhoz, hogy létrehozzunk a FileSystemObject objektumot, a CreateObject függvényt hívjuk segítségül:
Sub FileKezeles()
    Dim fso as Scripting.FileSystemObject
    Set fso = CreateObject("Scripting.FileSystemObject")
 End Sub
Ezzel lehetőségünk nyílik arra, hogy az fso objektumváltozó segítségével elérhessük az objektum metódusait és tulajdonságait. Az igazat megvallva bárminemű művelet végrehajtásához szükségünk lesz erre az objektumra. Ez azt jelenti, hogy minden példaprogramunk innentől kezdve ezzel fog kezdődni, ugyanis ezzel az objektummal fogjuk tudni elérni a modell többi objektumot/objektumhalmazt is.


Most pedig nézzük meg mit is tudunk csinálni ezzel az objektummal.

  1. Fájlok, könyvtárak, meghajtók létezésének vizsgálata

 Az objektum rendkívül hasznos metódusai közé tartoznak azok, amelyekkel képesek vagyunk fájlok, könyvtárak és meghajtok létezésének a vizsgálatára. Gyakran kerülhetünk ugyanis olyan probléma elé, ahol egy könyvtár, vagy fájl létezésének vizsgálata a makró biztonságos működésének előfeltétele. Nem nyithatunk ki egy fájlt akkor, ha az nem biztos, hogy ott van, vagy nem hozhatunk létre egy könyvárat, ha véletlenül azt már valaki létrehozta helyettünk, stb, stb...számos példát lehet sorolni. De miként is tudjuk ezeket a létezéseket megvizsgálni? Egy fájl létezésének vizsgálatát a FileExists metódussal vizsgálhatjuk meg. A metódusnak egyetlen paramétere van, amellyel a vizsgálandó fájl nevét (útvonallal együtt) adjuk át.
Sub FileKezeles()
    Dim fso as Scripting.FileSystemObject
    Set fso = CreateObject("Scripting.FileSystemObject")
    If fso.FileExists("C:\Documents and Settings\MakroMester.txt") = True Then
       MsgBox "A fájl létezik az adott könyvtárba"
    Else
       MsgBox "A fájl nem létezik az adott könyvtárba"
    End If
End Sub
A metódus igaz vagy hamis értéket ad vissza, attól függően, hogy fájl létezik e, vagy sem. Ennek analógiájára vizsgálhatjuk meg egy könyvtár létezését is a FolderExists metódussal.
Sub FileKezeles()
Dim fso as Scripting.FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FolderExists("c:\Documents and Settings") = True Then
           MsgBox "A könyvtár létezik az adott könyvtárba"
Else
           MsgBox "A könyvtár nem létezik az adott könyvtárba"
End If
End Sub
Ezek után már egy meghajtó létezésének vizsgálatától sem kell megijednünk, amelyet DriveExists metódussal hajthatunk végre.

2. Fájlnévvel és útvonallal kapcsolatos információk megszerzése

Bár nem igényel túl sok programozó tudást, a fájlnév kinyerése egy útvonalból, vagy egy fájl kiterjesztésének megszerzése, mégis bosszantó lehet ezeket az egyszerű kis String kezelő rutinokat megírni, ahelyett, hogy a problémánk érdemi részével tudnánk foglalkozni.
A objektum ebben is a segítségünkre siet, és számos metódussal segít minket. Nézzük is meg ezeket.
 A GetFileName metódus segítségével egy útvonalban lévő fájl nevét kapjuk eredményül. Paraméterként mindössze az útvonalat kell megadnunk, amely lehet abszolút vagy relatív.
Sub FileKezeles()
    Dim fso as Scripting.FileSystemObject
    Set fso = CreateObject("Scripting.FileSystemObject")
    MsgBox fso.GetFileName("c:\Documents and Settings\Makro.txt")
End Sub
Ha egy fájl kiterjesztésére vagyunk kíváncsiak, akkor a GetExtensionName metódust használjuk.
MsgBox fso.GetExtensionName("c:\Documents and Settings\Makro.txt")
Amennyiben egy adott útvonalból számunkra csak a meghajtó neve érdekel, akkor használjuk a GetDriveName metódust.
MsgBox fso.GetDriveName("c:\Documents and Settings\Makro.txt")
De mi van akkor ha nekünk, az útvonalból csak a fájl nevére van szükségünk a kiterjesztés nélkül. Ekkor sem kell csüggednünk, és a teljes fájlnév lekérdezést követően további String kezelő függvényekkel bajlódnunk, hiszen rendelkezésünkre áll a GetBaseName metódus, amely pontosan ezt a feladatot, hajtja végre.
MsgBox fso.GetBaseName("c:\Documents and Settings\Makro.txt")
3. Alapvető fájlműveltek végrehajtása
A FileSystemObject objektummal olyan alapvető fájlművelteket is végrehajthatunk, mint a fájlok másolása, mozgatása egyik helyről egy másikra, vagy a fájlok törlése.
Fájlok másolására a az objektum CopyFile metódusa alkalmas, amely nemcsak egyetlen fájl másolására, hanem több fájl egyidejű másolására is alkalmas. Ezt, a metódus azzal a nagy előnyével valósítja meg, hogy használhatjuk az ismert joker karaktereket, tehát ??? vagy ?*?.
A metódus két kötelezően magadandó, és egy opcionális paraméterrel rendelkezik. A két kötelezővel a forrás (másolandó) fájlt, vagy fájlokat adjuk meg, míg a másodikkal a célkönyvtárat, ahova a fájt vagy fájlokat másolni szeretnénk. A harmadik paraméter egy Boolean típusú paraméter, amelynek értékét igazra állítva a célhelyen talált azonos nevű fájlokat automatikusan felül írja, a forrásfájlokkal. Fontos, hogy e harmadik paraméter alapértéke False.
Nézzük is néhány példát a másolásra.
Egy fájl másolása szükség esetén felülírással:
Sub FileKezeles()
    Dim fso as Scripting.FileSystemObject
    Set fso = CreateObject("Scripting.FileSystemObject")
   fso.CopyFile "c:\Documents and Settings\Makro.txt", "c:\Documents and Settings\Macros\"
End Sub
A fájlok mozgatását az objektum MoveFile metódusával hajtattuk végre. Hasonlóan a FileCopy metódushoz, itt is két kötelező paramétert kell átadni. Az egyik a forrás fájl vagy fájlok, illetve a célmappa. Ennél a metódusnál nincs több paraméter. Természetesen itt használhatjuk a joker karaktereket.
Sub FileKezeles()
    Dim fso as Scripting.FileSystemObject
    Set fso = CreateObject("Scripting.FileSystemObject")
    fso.MoveFile "c:\*.txt", "c:\Documents and Settings\"
End Sub
A fájlkezelés fontos eleme a fájlok törlése, amelynek végrehajtása a DeleteFile metódussal történik. Ennél a metódusnál is megengedett, hogy egyszerre több fájl töröljünk a joker karakterek alkalmazásával. A metódus egyik paraméterével a törlendő fájl(ok) útvonalát kell átadnunk, a másik opcionális paraméterrel pedig lehetőségünk van arra, hogy akkor is ki tudjuk törölni a fájlokat, ha azoknak csak olvashatóra van állítva az attributruma. Ez utóbbit, a paraméter igazra állításával oldhatjuk, meg. Az alapbeállítás egyébként False.
Sub FileKezeles()
    Dim fso
    Set fso = CreateObject("Scripting.FileSystemObject")
    fso.DeleteFile "c:\Documents and Settings\Macros\Makro.txt"
End Sub
4. Alapvető könyvtárműveltek végrehajtása
Alapvető könyvtárművelet közé sorolhatjuk a következőket:

  • Könyvtár létrehozása
  • Könyvtár másolása (A benne lévő könyvtárakkal és fájlokkal együtt)
  • Könyvtárak mozgatását
  • Könyvtárak törlése

Haladunk akkor ebben a sorrendben és nézzük meg ezek megvalósulását az objektum segítségével.

Könyvtárat a CreateFolder metódussal hozhatunk létre, amelynek egyetlen paraméterével a létrehozandó könyvtár nevét kell megadnunk.
Sub FileKezeles()
Dim fso as Scripting.FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CreateFolder "c:\Documents and Settings\Új könytár"
End Sub
Könyvtárat a CopyFolder metódussal tudunk másolni, amely teljes mértékben hasonlít CopyFile metódushoz. Ugyan azokkal a paraméterekkel rendelkezik, ugyanúgy használhatunk joker karaktereket, azzal a különbséggel, hogy itt nem fájl neveket, hanem könyvtár neveket kell megadnunk.
Egy könyvtár másolása:
Sub FileKezeles()
    Dim fso as Scripting.FileSystemObject
    Set fso = CreateObject("Scripting.FileSystemObject")
    fso.CopyFolder "C:\Documents and Settings\Új könytár", "C:\"
End Sub
Könyvtárak mozgatására szerintem már mindenki kitalálta a MoveFolder nevű metódus alkalmazandó, teljesen analóg módon, mint a MoveFile, azzal a különbséggel, hogy itt könyvtárakra hivatkozva kell a paramétereket átadnunk. Ne feledjük, itt is alkalmazhatunk joker karaktereket.
Sub FileKezeles()
    Dim fso as Scripting.FileSystemObject
    Set fso = CreateObject("Scripting.FileSystemObject")
    fso.MoveFolder "C:\Documents and Settings\Makro2", "C:\"
End Sub
A végére maradt, hogy az eddigi példák során kreált példakönyvtárakat törölni. Erre a DeleteFolder metódus való. Mivel az is analóg módon történik, mint a fájlok törlése esetében, ezért itt már csak egy kis minta programot szolgáltatok, amely kitörli az összes "Makro"-val kezdődö könyvárat a Documents and Settings-ből.
Sub FileKezeles()
    Dim fso as Scripting.FileSystemObject
    Set fso = CreateObject("Scripting.FileSystemObject")
    fso.DeleteFolder "C:\Documents and Settings\Makro*"
End Sub

Címkék: Excel Programozás VBA Makró

A bejegyzés trackback címe:

https://zsmaster.blog.hu/api/trackback/id/tr105595668

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.

Leslee 2016.01.31. 09:15:53

Szia, nem tudom, jó helyen járok-e, de tudnál segíteni?

Egy Excelbe ágyazott Word dokumentum tartalmát szeretném makróval másolni. Rögzítettem a következő makrót:

Sub Makró2()
Sheets("Adatok").Select
ActiveSheet.Shapes.Range(Array("Object 1")).Select
Selection.Verb Verb:=xlPrimary
Sheets("Adatok").Range("AU47").Select
ActiveSheet.Paste
End Sub

Ám lefuttatva nem az objektum tartalmát, hanem a nevét másolja a megadott helyre.

Előre is köszönöm
süti beállítások módosítása