FileSystemObject ve VBA – vysvětlení

FileSystemObject, nazývaný také FSO, poskytuje snadný objektový model pro přístup k souborovému systému počítače. Stačí vytvořit instanci objektu FileSystemObject ve VBA a pak můžete generovat soubory, číst soubory, mazat soubory, iterovat ve složkách a provádět mnoho dalších operací se souborovým systémem počítače.

Objekt FileSystemObject je přítomen uvnitř knihovny Microsoft Scripting Runtime Library, tedy Scrrun.dll. Tato knihovna DLL podporuje vytváření a manipulaci se soubory pomocí objektu TextStream, a to je důvod, proč FSO nepodporuje operace s binárními soubory.

Obsah

Použití objektu souborového systému

Objekt FileSystemObject lze použít k mnoha úlohám, například:

  • Vytváření, otevírání, čtení, zápis a mazání textových souborů.
  • Vytváření, změna a mazání složek.
  • Iterace souborů a složek.
  • Kopírování a přesouvání souborů nebo složek.
  • Kontrola, zda umístění (cesta k souboru) existuje nebo ne.

Přístup k objektu FileSystemObject

Objekt FileSystemObject se skládá z několika kolekcí objektů a každá z těchto kolekcí objektů obsahuje informace o určitém aspektu systému souborů. Tyto kolekce jsou:

Objekt Popis
Disk Tento objekt umožňuje získat informace o disku připojeném k systému. Může vám například sdělit volné místo na jednotce, její logický název atd. Všimněte si, že objekt jednotky, který zde máme na mysli, nemusí nutně znamenat pevný disk, může to být disk CD-ROM, jednotka Flash, paměť RAM nebo dokonce logicky připojená jednotka prostřednictvím sítě LAN.
Složka Tento objekt umožňuje vytvářet, mazat, přesouvat nebo se dotazovat na hierarchii složek.
Soubor Tento objekt umožňuje vytvářet, mazat, přesouvat nebo se dotazovat na soubor.
TextStream ObjektTextStream umožňuje číst nebo zapisovat textové soubory.

Schématicky lze tedy objekt FileSystemObject znázornit takto:

Upozorňujeme, že FSO komunikuje s většinou výše uvedených objektů nepřímo. Přímo obsahuje pouze kolekci objektů pro „jednotky“. Každý objekt „Jednotky“ v kolekci „Jednotky“ obsahuje řetězec objektů „Složky“. A každý objekt „Folder“ obsahuje kolekci „File“.

Aby to bylo smysluplnější, řekněme to takto: Objekt FileSystemObject obsahuje tři hlavní metody pro získání (čtení) specifických informací o Jednotkách, Složkách nebo Souborech, tyto metody jsou GetDrive, GetFolder a GetFile respektive. Řekněme, že nyní potřebujete zjistit velikost konkrétního souboru, takže vytvoříte instanci metody GetFile a poté načtete jeho vlastnost size .

Poznámka: GetDrive, GetFolder a GetFile nejsou jediné metody uvnitř FSO, použil jsem je pouze pro vysvětlení. V následující části si ukážeme všechny metody obsažené uvnitř FileSystemObject.

Metody FSO

Následující tabulka uvádí podrobnosti o různých metodách FileObjectSystem a úkolech, které provádějí:

Metoda Popis
GetDrive, GetFolder a GetFile Tyto metody slouží k získání informací o jednotce, složce, respektive souboru.
CreateFolder a CreateTextFile Pomáhá při vytváření nových složek nebo souborů.
DeleteFile a DeleteFolder Pomáhá při mazání stávajících souborů nebo složek.
CopyFile a CopyFolder Tyto metody pomáhají při kopírování souborů nebo složek z jednoho umístění do druhého.
MoveFile a MoveFolder Tyto metody pomáhají při přesouvání souborů nebo složek z jednoho umístění do druhého.

Vytvoření objektu FileSystemObject ve VBA: V této části se budeme zabývat dvěma věcmi:

  • Vytvoření odkazu na knihovnu Microsoft Scripting Runtime Library, tedy Scrrun.dll
  • Vytvoření objektu FSO.

Vytvoření odkazu na knihovnu Microsoft Scripting Runtime Library

Pro vytvoření odkazu na knihovnu Microsoft Scripting Runtime Library postupujte podle následujících kroků:

  • Nejprve otevřete editor VBA stisknutím kláves „Alt + F11“.

  • Dále přejděte na „Nástroje“ > „Reference“, jak je uvedeno výše.

  • Tím se otevře okno reference. Zde vyberte a zaškrtněte položku „Microsoft Scripting Runtime“ a klikněte na „OK“.
  • Nyní byl přidán odkaz na knihovnu Microsoft Scripting Runtime.

Vytvoření objektu FSO

Vytvoření objektu FSO je jednoduché, postupujte podle následujících kroků:

  • V editoru VBA přejděte na „Insert“ > „Module“.

  • Nyní v okně modulu zadejte „Public FSO As New FileSystemObject„.
  • Tím se vytvoří objekt FileSystemObject s názvem FSO.

Poté můžete jednoduše přistupovat k metodám objektu FileSystemObject pomocí objektu FSO.

6 Praktické příklady přístupu k objektu FileSystemObject

Přejděme nyní k několika praktickým příkladům FSO:

Příklad 1: Použijte FSO ke zjištění celkového volného místa na disku.

Níže je uveden kód, který to provede:

'Vytvoření objektu FileSystemObject 
Public FSO As New FileSystemObject
Sub DiskSpace()
Dim drv As Drive
Dim Space As Double
Set drv = FSO.GetDrive("C:") 'Vytvoření jednotky
objekt Space = drv.FreeSpace
Space = Space / 1073741824 'převod bajtů na GB
Space = WorksheetFunction.Round(Space, 2) 'zaokrouhlení
MsgBox "C: má volné místo = " & Space & " GB"
End Sub

Vysvětlení: V tomto kódu jsme nejprve vytvořili objekt jednotky pomocí metody ‚GetDrive‚ a poté jsme použili její vlastnost ‚FreeSpace‚ k získání volného místa.

Nakonec jsme volné místo zobrazili pomocí okna se zprávou.

Všimněte si, že existují dvě vlastnosti pro získání volného místa na jednotce, tj. drv.FreeSpace a drv.AvailableSpace.

Příklad 2: Kontrola, zda složka existuje nebo ne. Pokud složka neexistuje, vytvořte tuto složku.

Následující kód:

'Vytvoření objektu FileSystemObject 
Public FSO As New FileSystemObject
Sub ChkFolder()
Dim Fldr_name As String
Fldr_name = InputBox("Zadejte cestu ke složce, kterou chcete zkontrolovat :")
If Len(Fldr_name) > 0
Then If FSO.FolderExists(Fldr_name) = True Then
MsgBox "Složka existuje!"
Else FSO.CreateFolder (Fldr_name)
MsgBox ("Folder Created!")
End If Else MsgBox "Wrong Input"
End If
End Sub

Vysvětlení: V kódu jsme použili funkci InputBox pro získání cesty ke složce od uživatele. Poté jsme pomocí příkazu If spolu s FolderExistsmetodou zkontrolovali, zda je tato složka přítomna, nebo ne. Pokud složka není přítomna, vytvoříme tuto složku pomocí CreateFolder metody.

Poznámka: CreateFoldermetoda vytvoří vždy pouze jednu složku. Pokud jí tedy zadáte argument „C:\Složka1\Složka2\Složka3“, pak vytvoří pouze složku3 uvnitř složky2. Pokud však složka2 neexistuje, vyhodí chybu „cesta nenalezena“.

Příklad 3: Napište kód pomocí FSO pro kopírování složky z jednoho umístění do druhého.

Níže je uveden kód, který toho dosáhne:

‚Vytvoření objektu FileSystemObject Public FSO As New FileSystemObject Sub CopyFolder() FSO.CopyFolder „C:\Source-Folder\“, „D:\Destination-Folder\“, True MsgBox „Kopírování dokončeno!“ End Sub

Vysvětlení: V kódu jsme použili CopyFolder metodu FSO, tato metoda přijímá tři argumenty:

  • Source Path
  • Destination path
  • A Boolean argument to specify Overwrite Existing.

Příklad 4: Pomocí FileSystemObject načtěte adresář Temp, systémovou složku a složku Windows.

K tomu můžeme použít následující kód:

'Vytvoření objektu FileSystemObject 
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 ("Cesta ke složce Windows = " & Windows_Fldr & vbNewLine & _ "Cesta ke složce System = " & System_Fldr & vbNewLine & _ "Cesta ke složce Temp = " & Temp_Fldr)
End Sub

Vysvětlení: V kódu jsme použili GetSpecialFolder metodu FSO, tato metoda přijímá jeden číselný argument, tj. 0-2.

  • FSO.GetSpecialFolder(0) – Vyhledá cestu ke složce Windows.
  • FSO.GetSpecialFolder(1) – Vyhledá cestu k systémové složce.
  • FSO.GetSpecialFolder(2) – Načte cestu k místní dočasné složce.

Příklad 5: Vytvoří textový soubor, zapíše do něj nějaký obsah, pak soubor přečte a nakonec soubor odstraní.

Níže je uveden kód, kterým toho dosáhnete:

'Vytvoření objektu FileSystemObject 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" 'Vytvoření souboru
'Vytvoření souboru a zápis obsahu do něj
FileContent = InputBox("Zadejte obsah souboru")
If Len(FileContent) > 0 Then
Set txtstr = FSO.CreateTextFile(FileName, True, True)
txtstr.Write FileContent
txtstr.Close
End If
' Čtení ze souboru, který jsme právě vytvořili
If FSO.FileExists(FileName) Then
Set File = FSO.GetFile(FileName)
Set txtstr = File.OpenAsTextStream(ForReading, TristateUseDefault)
MsgBox txtstr.ReadAll txtstr.Close
' Konečně smazání souboru
File.Delete (True)
End If
End Sub

Vysvětlení: Tento kód nejprve vytvoří textový soubor, přidá do něj obsah, pak jej přečte, zobrazí pomocí okna se zprávou a nakonec tento soubor odstraní.

Příklad 6: Napište kód VBA, který dokáže iterovat všechny soubory přítomné uvnitř složky a také načte jejich velikost a datum změny.

Tento úkol může splnit následující kód:

'Vytvoření objektu FileSystemObject 
Public FSO As New FileSystemObject
Sub ListFiles()
'Deklarace proměnných
Dim objFolder As Folder
Dim objFile As File
Dim strPath As String
Dim NextRow As Long
'Zadání cesty ke složce
strPath = "C:\Users\Aniee\Desktop\ExcelTrick\ "
'Vytvořte objekt této složky
Set objFolder = FSO.GetFolder(strPath)
'Zkontrolujte, zda je složka prázdná nebo ne
If objFolder.Files.Count = 0 Then
MsgBox "No files were found...", vbExclamation
Exit Sub
End If
'Přidání názvů sloupců pro A, B a C
Cells(1, "A").Value = "Název souboru"
Cells(1, "B").Value = "Velikost"
Cells(1, "C").Value = "Datum/čas úpravy"
'Najděte další dostupný řádek
NextRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Řádek + 1
'Projděte ve smyčce každý soubor ve složce
For Each objFile In objFolder.Files
'Vypište název, velikost a datum/čas aktuálního souboru
Cells(NextRow, 1).Value = objFile.Name
Cells(NextRow, 2).Value = objFile.Size
Cells(NextRow, 3).Value = objFile.DateLastModified
'Najdi další řádek NextRow = NextRow + 1
Next objFile
End Sub

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.