Použití FileSystemObject v aplikaci Excel VBA

Použití FileSystemObject (FSO) v aplikaci Excel VBA

Server FileSystemObject (FSO) vám poskytuje přístup k celé řadě funkcí pro přístup k systému souborů vašeho počítače. Pomocí tohoto objektu můžete snadno přistupovat k souborům, složkám a jednotkám a také číst a zapisovat do souborů.

Mnoho funkcí FSO byste mohli napsat v tradiční VBA, ale vyžadovalo by to více kódování a pro příchozího vývojáře by bylo obtížnější je udržovat a chápat. FSO je osvědčené API (Application Programming Interface) a je spolehlivější než váš vlastní kód. Je snadno použitelný, připravený a dostupný.

FSO funguje podle mezinárodních standardů a nastavení, která máte ve svém počítači. Pokud svou aplikaci Excel distribuujete globálně, pak se pomocí FSO postará o veškeré rozdíly v nastavení mezi zeměmi, s čímž by měl váš vlastní kód potíže.

FSO vám umožní dělat téměř vše v kódu VBA, co byste mohli dělat v Průzkumníku souborů Windows. Poskytuje vám úplný přístup k systému souborů Windows.

Vytvoření FileSystemObject

Soubor FileSytemObject není součástí aplikace Excel VBA. FSO můžete použít vytvořením objektu (pozdní vazba) ve VBA:

123 Dílčí CreateFSO ()Nastavit MyFSO = CreateObject ("Scripting.FileSystemObject")End Sub

Alternativně můžete přidat odkaz do VBA pro knihovnu FSO. Toto se nazývá časná vazba a je rychlejší než pozdní vazba, protože objekt nemusí být vytvořen při spuštění kódu.

Chcete-li přidat odkaz, musíte stisknutím Alt-F11 vstoupit do editoru jazyka Visual Basic (VBE) a poté použít „Nástroje | Reference“ z nabídky VBE. Zobrazí se vyskakovací okno, ve kterém můžete vybrat příslušnou referenci (viz níže).

Procházejte seznamem dostupných odkazů dolů, dokud neuvidíte „Microsoft Scripting Runtime“. Zaškrtněte políčko a klikněte na OK a knihovna je nyní součástí vaší aplikace.

Umístění souboru knihovny DLL je C: \ Windows \ SysWOW64 \ scrrun.dll

Pokud distribuujete svou aplikaci dalším kolegům nebo místům, je nezbytné, aby měli tento soubor ve svém počítači na správném místě, jinak se váš kód pokazí.

Stojí za to umístit chybovou past na událost „WorkbookOpen“ pomocí příkazu Dir a zkontrolovat, zda soubor existuje. Pokud chybí, zadejte varovnou zprávu a zavřete soubor aplikace Excel.

Po přidání odkazu můžete k vytvoření FSO použít následující kód: Once the reference has been added, you can use the following code to create the FSO:

123 Dílčí testFSO ()Dim MyFSO jako nový FileSystemObjectEnd Sub

Všechny příklady v tomto článku použijí tuto metodiku k vytvoření FSO.

FSO má k dispozici mnoho metod a vlastností. Ty jsou zde rozděleny do sekcí podle toho, co umí.

Pomocí metod „Existuje“

Pomocí metody FSO můžete zkontrolovat, zda existuje jednotka, složka nebo soubor. Tyto metody se snadno používají a vyžadují pouze jeden parametr.

123456 Dílčí kontrola Vzdálenost ()Dim MyFSO jako nový FileSystemObjectMsgBox MyFSO.DriveExists ("C:")MsgBox MyFSO.FolderExists ("C: \ temp \")MsgBox MyFSO.FileExists ("C: \ temp \ testfile.txt")End Sub

Všechna tato prohlášení vrátí hodnotu „True“ za předpokladu, že váš počítač má jednotku C:, složku na ní nazvanou „Temp“ a soubor ve složce Temp nazvaný „testfile.txt“

V textových řetězcích v parametrech se nerozlišují malá a velká písmena. V žádné z těchto metod nemůžete použít zástupné znaky.

Adresy URL (Uniform Resource Locators) také nemůžete použít k popisu umístění složky nebo souboru. FSO funguje čistě na operačním systému Windows a na systému souborů na něm. Pokud jde o umístění externího serveru, musíte k tomu nejprve namapovat jednotku a poté použít samotnou cestu k disku.

Pomocí metod „Získat“

FSO má mnoho způsobů, jak získat informace o souboru a cestě, a to buď rozdělením cesty a souboru, nebo získáním informací o souboru nebo složce, jako je datum vytvoření nebo datum změny.

GetAbsolutePathname

To poskytne úplnou cestu z kořenového adresáře zadané jednotky.

Syntaxe je:

GetAbsolutePathName (roadspec)

12345 Sub AbsolutePath ()Dim MyFSO jako nový FileSystemObject, Pth jako řetězecPth = "c: …"MsgBox MyFSO.GetAbsolutePathName (Pth)End Sub

Tím se vrátí řetězec „C: \ Users \ Richard \ Documents“. Důvodem je, že cesta byla zadána jako C: následovaná třemi tečkami. Každá tečka znamená další úroveň ve struktuře složek.

GetBaseName

Tím se vrátí název zadaného souboru nebo složky.

Syntaxe je:

GetBaseName(cesta)

12345 Sub BaseName ()Dim MyFSO jako nový FileSystemObject, Pth jako řetězecPth = "C: \ temp \ testfile.txt"MsgBox MyFSO.GetBaseName (Pth)End Sub

Tento kód vrátí „testovací soubor“. Metoda vrací poslední část v názvu cesty. Pokud se jedná o soubor, nevrací příponu souboru.

Pokud cestu nelze najít, bude vrácen prázdný řetězec.

GetDrive

To vám umožní použít kód pro přístup k informacím o jednotce na základě zadaného písmene jednotky.

Syntaxe je:

GetDrive (drivepec)

123456 Sub DriveInfo ()Dim MyFSO jako nový FileSystemObject, Pth jako řetězec, Dr jako diskPth = "C:"Nastavit Dr = MyFSO.GetDrive (Pth)MsgBox Dr.FreeSpaceEnd Sub

Tato metoda vrací objekt jednotky na základě zadané jednotky. Tento objekt můžete použít k přístupu k informacím o jednotce, jako je například dostupné volné místo.

Už vás nebaví hledat příklady kódu VBA? Zkuste AutoMacro!

GetDriveName

Tato metoda oddělí název jednotky od řetězce cesty / názvu souboru.

Syntaxe je:

GetDriveName (cesta)

12345 Sub DriveName ()Dim MyFSO jako nový FileSystemObject, Pth jako řetězecPth = "C: \ temp \ testfile.txt"MsgBox MyFSO.GetDriveName (Pth)End Sub

Tím se vrátí „C:“

GetExtensionName

Tím se vrátí přípona souboru v zadané cestě.

Syntaxe je:

GetExtensionName (cesta)

12345 Sub ExtensionName ()Dim MyFSO jako nový FileSystemObject, Pth jako řetězecPth = "C: \ temp \ testfile.txt"MsgBox MyFSO.GetExtensionName (Pth)End Sub

Tím se vrátí „txt“.

Pokud není zadán žádný soubor, bude vrácen prázdný řetězec.

GetFile

Tato metoda vrací objekt souboru, který obsahuje různé informace o samotném souboru.

Syntaxe je:

GetFile (filepec)

123456 PodsouborInfo ()Dim MyFSO jako nový FileSystemObject, Pth jako řetězec, Fn jako souborPth = "C: \ temp \ testfile.txt"Nastavit Fn = MyFSO.GetFile (Pth)MsgBox Fn.DateCreatedEnd Sub

Tím se vrátí datum a čas, kdy byl zadaný soubor vytvořen. Pokud není zadán žádný soubor nebo soubor neexistuje, zobrazí se chyba „soubor nebyl nalezen“.

12345 Podsoubor ()Dim MyFSO jako nový FileSystemObject, Pth jako řetězecPth = "C: \ temp \ testfile.txt"MsgBox MyFSO.GetFileName (Pth)End Sub

Tím se vrátí soubor „testfile.txt“.

GetFolder

Tím se vytvoří objekt složky pro základní složku v zadané cestě. Cesta musí obsahovat pouze názvy složek. Nesmí obsahovat žádná jména souborů, jinak dojde k chybě.

Syntaxe je:

GetFolder (folderspec)

123456 PodsložkaInfo ()Dim MyFSO jako nový FileSystemObject, Pth jako řetězec, Fo jako složkaPth = "C: \ temp"Nastavit Fo = MyFSO.GetFolder (Pth)MsgBox Fo.DateCreatedEnd Sub

Objekt složky obsahuje různé informace, ke kterým je přístup. V tomto případě vrátí datum vytvoření složky.

Tuto metodu můžete také použít k načtení všech názvů souborů v dané složce:

12345678 Podsoubory ()Dim MyFSO jako nový souborSystemObject, Pth jako řetězec, Fo jako složka, Fn jako souborPth = "C: \ temp"Nastavit Fo = MyFSO.GetFolder (Pth)Za každý Fn v Fo. SouboryMsgBox Fn. JménoDalší FnEnd Sub

Tento kód bude iterovat ve složce „Temp“ a zobrazí každý nalezený název souboru.

GetParentFolderName

Tato metoda vrátí název složky v další úrovni v hierarchii složek.

Syntaxe je:

GetParentFolderName (cesta)

12345 Název podsložky ()Dim MyFSO jako nový FileSystemObject, Pth jako řetězec, Fo jako složkaPth = "C: \ users \ richard"MsgBox MyFSO.GetParentFolderName (Pth)End Sub

Tím se vrátí „Uživatelé“, protože toto je „rodič“ pro složku „richard“.

Programování VBA | Generátor kódu pracuje pro vás!

Pomocí metod „Vytvořit“

Pomocí FSO můžete vytvořit novou složku a cestu a vytvořit textový soubor.

Vytvořit složku

Můžete zadat nový název cesty ke složce, která se má vytvořit. Hrozí nebezpečí, že pokud složka již existuje, dojde k chybě. Můžete použít metodu „FolderExists“, abyste zajistili, že k tomu nedojde.

Syntaxe je:

Vytvořit složku(název složky)

1234567 Sub CreateNewFolder ()Dim MyFSO jako nový FileSystemObject, Pth jako řetězecPth = "C: \ temp \ MyFolder"Pokud MyFSO.FolderExists (Pth) = False ThenMyFSO.CreateFolder (Pth)Konec IfEnd Sub

Tento kód vytvoří novou složku s názvem „MyFolder“ pod existující cestou „C: \ temp“.

CreateTextFile

Tato metoda vám umožňuje vytvořit jednoduchý textový soubor a zapisovat přímo do něj.

Syntaxe je:

CreateTextFile (název souboru, [ přepsat, [ unicode ]])

1234567 Sub CreateTextFile ()Dim MyFSO jako nový FileSystemObject, Pth jako řetězecPth = "C: \ temp \ Myfile.txt"Nastavit Fn = MyFSO.CreateTextFile (Pth, True)Fn.Write „Přidat můj vlastní text sem“ & vbLf & „Toto je druhý řádek“Fn. ZavřítEnd Sub

Tento kód vytvoří textový soubor s názvem „Myfile.txt“ ve složce „Temp“ na disku „C:“ a poté do něj zapíše dva řádky textu.

Všimněte si toho, že znak řádku je zřetězen do zapisovaného řetězce.

Pokud cesta, na kterou píšete, neexistuje, dojde k chybě. Můžete to zkontrolovat pomocí metody „FolderExists“ před vytvořením souboru.

V případě potřeby je existující soubor přepsán volitelným parametrem - může to být True nebo False. Výchozí hodnota je True.

Pomocí metod „Kopírovat“

Tyto metody můžete použít ke zkopírování souboru nebo složky do jiného umístění.

Programování VBA | Generátor kódu pracuje pro vás!

Zkopírovat soubor

Tato metoda zkopíruje soubor z jednoho umístění složky do jiného. Pokud má cílové umístění nastaven atribut jen pro čtení, kopie se nezdaří.

Syntaxe je:

Zkopírovat soubor zdroj, destinace, [ přepsat ]

1234 Dílčí kopírovací soubor ()Dim MyFSO jako nový FileSystemObjectMyFSO.CopyFile "C: \ temp \*. Txt", "C: \ temp \ myfolder \", TrueEnd Sub

Tento kód vytvoří kopii všech textových (txt) souborů na 'C: \ temp' do 'C: \ temp \ myfolder \', v případě potřeby soubor přepíše. Výchozí nastavení pro Přepsat je True.

Pro názvy souborů můžete použít zástupný znak s hvězdičkou (*), ale pro reprezentaci jednotlivých znaků nemůžete použít zástupný znak s otazníkem (?).

CopyFolder

Tuto metodu můžete použít ke kopírování celé složky z jednoho umístění do jiného.

Syntaxe je:

CopyFolder zdroj, destinace, [ přepsat ]

1234 Dílčí kopírovací složka ()Dim MyFSO jako nový FileSystemObjectMyFSO.CopyFolder "C: \ temp \*", "C: \ users \ richard \"End Sub

Tento kód zkopíruje všechny složky a soubory pod „C: \ temp“ do „C: \ users \ richard“. Nová vytvořená složka bude „C: \ users \ richard \ myfolder“, protože „C: \ temp“ obsahuje složku s názvem „myfolder“.

Při použití této metody existují čtyři možné výsledky:

  • Pokud cíl neexistuje, zkopíruje se zdrojová složka a obsah.
  • Pokud cíl již existuje, dojde k chybě.
  • Pokud je cílem složka, zkopíruje se zdrojová složka a její obsah. Pokud je Overwrite nastaveno na False a v cílovém umístění již existuje kopie souboru, dojde k chybě.
  • Pokud je cíl nastaven pouze na čtení, dojde k chybě, pokud je přepis nastaven na hodnotu false.

Tato metoda se zastaví při první chybě, na kterou narazí. Než dojde k chybě, není možné vrátit zpět žádné akce, které byly úspěšné.

Pomocí metod „Přesunout“

Tyto metody lze použít k přesunu souborů nebo složek do jiných umístění. To je stejné jako vyjmutí z jednoho místa a vložení na jiné místo. Všimněte si, že pokud je soubor, který chcete přesunout, otevřený, metoda Move se nezdaří s chybou.

MoveFile

Tato metoda se používá k přesunu konkrétního souboru do jiného umístění. V komponentě poslední cesty zdroje jsou povoleny zástupné znaky.

Syntaxe je:

MoveFile zdroj, destinace

1234 Sub MoveAFile ()Dim MyFSO jako nový FileSystemObjectMyFSO.MoveFile "C: \ temp \*", "C: \ temp \ myfolder"End Sub

Tento kód přesune všechny soubory nalezené na ‘C: \ temp’ do ‘C: \ temp \ myfolder’.

Zdrojová a cílová složka musí existovat, protože cílová složka se nevytvoří automaticky.

Tato metoda se zastaví při první chybě, na kterou narazí. Než dojde k chybě, není možné vrátit zpět žádné akce, které byly úspěšné.

Programování VBA | Generátor kódu pracuje pro vás!

MoveFolder

Tato metoda přesune konkrétní složku z jednoho umístění do jiného.

Syntaxe je:

MoveFolder (zdroj, destinace)

1234 Sub MoveAFolder ()Dim MyFSO jako nový FileSystemObjectMyFSO.MoveFolder "C: \ temp \ myfolder", "C: \ temp \ mydestination"End Sub

Tento kód přesune složku „myfolder“ a obsah do složky „mydestination“. „Myfolder“ se účinně odstraní a „mydestination“ se vytvoří společně s obsahem z „myfolder“.

Pokud cílová složka již existuje, dojde k chybě.

Pomocí metod „Odstranit“

Tyto metody se používají k odstranění souborů nebo složek. Musí být používány opatrně, protože pokud se něco pokazí, neexistují metody vrácení zpět nebo zpět.

Smazat soubor

Tím se odstraní jednotlivé soubory nebo skupina souborů pomocí zástupných znaků.

Syntaxe je:

Smazat soubor filepec, [ platnost ]

1234 Dílčí mazací soubory ()Dim MyFSO jako nový FileSystemObjectMyFSO.DeleteFile "C: \ temp \*"End Sub

Tento kód odstraní všechny soubory ve složce „C: \ temp“

Parametr Force je volitelný a je nastaven na True nebo False. Pokud je nastavena na hodnotu True, budou soubory pouze pro čtení odstraněny. Výchozí hodnota je False.

Smazat složku

Tato metoda odstraní zadanou složku a její obsah.

Syntaxe je:

Smazat složku folderspec, [ platnost ]

1234 Dílčí složky Odstranit ()Dim MyFSO jako nový FileSystemObjectMyFSO.DeleteFolder "C: \ temp \ MyDestination"End Sub

Tento kód odstraní složku „MyDestination“ a všechny soubory v této složce. Složka ‘temp’ zůstane.

Parametr Force je volitelný a je nastaven na True nebo False. Pokud je nastaveno na True, budou odstraněny pouze složky pro čtení. Výchozí hodnota je False.

V poslední složce cesty lze použít zástupné znaky. Pokud není složka nalezena, dojde k chybě.

Tato metoda se zastaví při první chybě, na kterou narazí. Než dojde k chybě, není možné vrátit zpět žádné akce, které byly úspěšné.

Programování VBA | Generátor kódu pracuje pro vás!

Další metody v FSO

OpenAsTextStream.

Tato metoda otevře zadaný soubor jako objekt Textového proudu a umožní jeho čtení nebo zápis. Výhodou této metody je, že dokáže otevřít jakýkoli typ souboru a extrahovat dostupný text.

Syntaxe je:

OpenAsTextStream ([ iomode, [ formát ]])

Parametr „iomode“ umožňuje pouze čtení (1), čtení/zápis (2) a připojování (8). Parametr čtení/zápis přepíše soubor.

Parametr „formát“ je nastaven na -2 pro výchozí nastavení systému, -1 pro otevření souboru jako Unicode a 0 pro otevření souboru jako ASCII (americký standardní kód pro výměnu informací).

1234567891011 Sub TextStream ()Dim MyFSO jako nový FileSystemObjectNastavit f = MyFSO.GetFile ("C: \ temp \ myfile.txt")Nastavit ts = f.OpenAsTextStream (2)ts.Napište „Můj nový text“TS. ZavřítNastavit ts = f.OpenAsTextStream (1)s = ts.ReadLineMsgBox sTS. ZavřítEnd Sub

Tento kód získá existující textový soubor a vytvoří jej jako objekt pomocí metody „GetFile“. Poté otevře textový proud jako čtení / zápis (2) a zapíše řádek textu. Soubor se poté zavře a znovu otevře jako čtení (1) a načte se z něj řádek, který se poté zobrazí jako okno se zprávou.

Pamatujte, že přečtený řádek musí být umístěn v proměnné, než může být zobrazen v okně zprávy.

BuildPath

Tato metoda připojí název složky nebo souboru na konec cesty ke stávající složce. Tím se vytvoří pouze textový řetězec a ve skutečnosti se nevytvoří nová složka.

Syntaxe je:

BuildPath (cesta, název)

12345 Dílčí buildPth ()Dim MyFSO jako nový FileSystemObjectnp = MyFSO.BuildPath ("C: \ temp", "ANewFolder")MsgBox npEnd Sub

Zobrazí se „C: \ temp \ ANewFolder“. Pokud však chcete tuto složku skutečně použít, musíte použít metodu „CreateFolder“.

OpenTextFile

Tato metoda umožňuje otevírání a čtení souborů nebo zápis do nich podle nastavených parametrů. Funguje to podobným způsobem jako metoda OpenAsTextStream.

Syntaxe je:

OpenTextFile (název souboru, [ iomode, [ vytvořit, [ formát ]]])

Parametr „iomode“ umožňuje ForReading, ForWriting a ForAppending. Parametr ForWriting přepíše soubor.

Parametr ‘create’ je logická hodnota. True znamená, že pokud zadaný název souboru neexistuje, bude vytvořen nový soubor. False znamená, že pokud nebude nalezen název souboru, nebude vytvořen žádný soubor. Výchozí hodnota je False.

Parametr „formát“ lze nastavit na TristateFalse, TristateMixed, TristateTrue a TristateUseDefault podle toho, zda je soubor ASCII nebo Unicode.

1234567 Sub OpenTxtFile ()Dim MyFSO jako nový FileSystemObjectNastavit ts = MyFSO.OpenTextFile ("C: \ temp \ myfile.txt", ForReading, False, TristateUseDefault)s = ts.ReadLineMsgBox sTS. ZavřítEnd Sub

Tento kód načte řádek z textového souboru „myfile.txt“.

Výhodou metody OpenTextFile oproti OpenAsTextStreamMethod je, že má rozbalovací nabídky pro parametry, které jsou smysluplnější než snaha zapamatovat si příslušné číselné hodnoty pro různé možnosti parametrů.

Programování VBA | Generátor kódu pracuje pro vás!

Vlastnosti FSO

Pohony

Tato vlastnost obsahuje kolekci dostupných disků ve vašem počítači.

1234567 Sub Drv ()Dim MyFSO jako nový FileSystemObject, d jako DriveNastavit Dr = MyFSO.DrivesZa každého d In Dr.MsgBox d.DriveLetterDalší dEnd Sub

Tento kód vrátí každé písmeno jednotky dostupné ve vašem počítači.

název

Tím se vrátí název zadaného souboru nebo složky.

123456789 Sub NameExample ()Dim MyFSO jako nový FileSystemObjectNastavit f = MyFSO.GetFile ("C: \ temp \ myfile.txt")i = f.Název & "na Disku" & UCase (f.Drive) & vbCrLfi = i & "Vytvořeno:" & f.DateCreated & vbCrLfi = i & "Poslední přístup:" & f.DateLastAccessed & vbCrLfi = i & "Poslední změna:" & f.DateLastModifiedMsgBox iEnd Sub

Tento kód poskytne název souboru a informace o něm pomocí vlastnosti Drive.

Cesta

Vlastnost Cesta oddělí cestu od specifikace souboru.

123456789 Dílčí cesta Příklad ()Dim MyFSO jako nový FileSystemObjectNastavit f = MyFSO.GetFile ("C: \ temp \ myfile.txt")i = f.Path & f.Name & "on Drive" & UCase (f.Drive) & vbCrLfi = i & "Vytvořeno:" & f.DateCreated & vbCrLfi = i & "Poslední přístup:" & f.DateLastAccessed & vbCrLfi = i & "Poslední změna:" & f.DateLastModifiedMsgBox iEnd Sub

Tento příklad funguje stejným způsobem jako příklad Název, kromě toho, že nyní poskytuje cestu k souboru.

Programování VBA | Generátor kódu pracuje pro vás!

Velikost

Vlastnost Size udává velikost složky nebo souboru.

12345 Sub FSize ()Dim MyFSO jako nový FileSystemObjectNastavit f = MyFSO.GetFolder ("C: \ temp \")MsgBox f. VelikostEnd Sub

Tento kód výše vrátí velikost složky „C: \ temp \“.

12345 Sub FSize ()Dim MyFSO jako nový FileSystemObjectNastavit f = MyFSO.GetFile ("C: \ temp \ myfile.txt")MsgBox f. VelikostEnd Sub

Tento kód výše vrátí velikost souboru „myfile.txt“.

Typ

Vlastnost type vrátí text pro typ souboru nebo složky.

12345 Sub FType ()Dim MyFSO jako nový FileSystemObjectNastavit f = MyFSO.GetFolder ("C: \ temp \")MsgBox f. TypEnd Sub

Tento kód výše vrátí text „Složka souboru“.

12345 Podtyp F ()Dim MyFSO jako nový FileSystemObjectNastavit f = MyFSO.GetFile ("C: \ temp \ myfile.txt")MsgBox f. TypEnd Sub

Tento kód výše vrátí text „Textový dokument“.

Všimněte si použití ‘GetFolder’ a ‘GetFile’ v každém příkladu.

wave wave wave wave wave