Přeskočit na obsah

Práce se soubory & složkami

Funkce změní aktuální pracovní adresář.

Funkce se používá v případě, kdy je potřebné v kódu změnit adresář před otevřením nebo vytvořením souborů. Adresářem se myslí cesta k souborům nebo složkám v zařízení. Je důležité správně nakopírovat adresář v případě, kdy se do funkce vkládá skutečně jako zkopírovaný textový řetězec. Pokud adresář v zařízení neexistuje, vyhodnotí se funkce jako error. Funkce navíc nelze vložit do proměnné, pouze přenastaví daný adresář, do kterého následně např. lze ukládat soubory.

ChDir(Path)

Path (povinné) – Povinný argument. Určuje cestu k novému adresáři, který musí být vložen jako textový řetězec.

ChDir („C:\Users\r\Dokumenty“) – Nastavení adresáře na „C:\Users\r\Dokumenty„. Tento adresář však musí v zařízení existovat.

ChDir („..“) – 2 tečky v argumentu funkce znamenají, že bude posunut adresář o jednu složku „výše“. Tedy pokud byl nastaven minulý adresář jako „C:\Users\r\Dokumenty„, při použití 2 teček nyní novým adresářem bude „C:\Users\r “ bez složky „Dokumenty“, jelikož se posunul adresář o složku „výš“.

Použití s ostatními funkcemi

Sekce “Použití s ostatními funkcemi”

Pokud má být změněný adresář zobrazen např. pomocí funkce MsgBox, je možné použít funkci CurDir, kde se ukáže cesta k změněnému adresáři.

ChDir „C:\Users\r\Documents“

MsgBox „Pracovní adresář změněn na: “ & CurDir

Nastavení adresáře, kdy se budou pomocí funkce Dir zobrazovat názvy všech Word dokumentů ve složce pomocí cyklu While. Následně je do proměnné „fileName“ všechny soubory kromě již iterovaných souborů. Pokud se již cyklem projedou všechny Wordovské soubory, cyklus se zastaví.

ChDir „C:\Users\r\VBA“

Dim fileName As String

fileName = Dir(„*.docx“)

While fileName <> „“

MsgBox „Nalezen soubor: “ & fileName

fileName = Dir

Wend

Funkce změní aktuální diskovou jednotku.

Funkce bude fungovat pouze v případě, kdy se v zařízení nachází více než jedna disková jednotka. Obvykle se v zařízení nachází hlavně jednotka „C:\“. Pokud v zařízení jsou i další diskové jednotky, lze je změnit touto funkcí a následně se dostat do dalších adresářů. Funkce se nezadává do proměnné, jinak se vyhodnotí jako error.

ChDrive(String)

String (povinný) – Určuje novou jednotku (např. „C“, „H“,).

ChDrive „D“ – Nastavení disku „D“ jako změněného disku, s kterým může být dále pracováno.

Použití s ostatními funkcemi

Sekce “Použití s ostatními funkcemi”

Nastavení nového disku, který má být následně vypsán pomocí funkce MsgBox, kde bude zobrazen aktuální adresář pomocí funkce CurDir.

ChDrive „D“

MsgBox „Aktuální adresář na jednotce D: “ & CurDir

Nastavení nového disku, ke kterému je následně vložena další cesta na tomto novém disku pomocí funkce ChDir, přičemž nový disk nyní bude uložen jako aktuální adresář, který je zjištěný funkcí CurDir.

ChDrive „Z“

ChDir CurDir & „\dalsi\cesta\v\novem\disku“

Vrací aktuální pracovní adresář jako textový řetězec.

Do funkce není nutné zadávat žádný argument, pokud má být vracen aktuální adresář. Pokud má být zvolen aktuální adresář pro jiný než aktuální disk, je nutné vložit nepovinný argument daného disku. Je nutné, aby disk v zařízení skutečné existoval.

CurDir([String])

String (volitelné) – Určuje jednotku, pro kterou má být získán aktuální adresář.

result = CurDir() – Zjištění aktuálního adresáře bez změny disku.

result = CurDir(„C“) – Zjištění aktuálního adresáře v jiném disku.

Použití s ostatními funkcemi

Sekce “Použití s ostatními funkcemi”

Pokud má být aktuální změněný adresář zobrazen např. pomocí funkce MsgBox, je možné použít funkci ChDir pro změnu adresáře a následně bude změněný adresář vypsán.

ChDir „C:\Users\r\Documents“

MsgBox „Pracovní adresář změněn na: “ & CurDir

Vrací název souboru nebo složky odpovídající zadanému vzoru.

Funkce se používá zejména při iteraci (procházení cyklem) souborů ve složce, kdy se specifickými soubory má provést určitý další blok kódu.

Dir([PathName], [Attributes])

PathName (volitelné) – Určuje cestu k souboru nebo složce.

Attributes (volitelné, výchozí=vbNormal) – Určuje typ souborů (např. pouze skryté soubory).

VBA Konstanta Hodnota Popis
vbNormal 0 Normální (výchozí)
vbReadOnly 1 Pouze pro čtení
vbHidden 2 Skryté
vbSystem 4 Systémové soubory
vbVolume 8 Volume label
vbDirectory 16 Adresář nebo složka
vbAlias 64 Název souboru je aliasem

Do argumentu lze vložit i tzv. zástupné znaky, díky kterým lze např. zvolit pouze soubory s určitou příponou nebo názvem:

Zástupný znak Popis
* Cokoliv před nebo za daným textem (včetně ničeho). Pokud stojí samostatně, jedná se o všechny soubory/složky v adresáři.
? Povoluje nalézt jakýkoliv jeden znak před nebo za řetězcem.

result = Dir(„C:\Users\r\VBA\Excel.xlsx“) – Specifikace přesného souboru.

result = Dir(„C:\Users\r\VBA\*.xlsx“) – Všechny xlsx soubory ve složce VBA, jelikož je před příponou zadaná hvězdička, tedy jakýkoliv text před danou příponou.

result = Dir(„C:\Users\r\VBAy\*.xls?“) – Musí se jednat o jakýkoliv název Excel souboru, který má ale příponu jako např. xlsx, xlsm a další, jelikož poslední znak musí být alespoň jeden znak díky zástupného znaku „?“.

Použití s ostatními funkcemi

Sekce “Použití s ostatními funkcemi”

Nastavení adresáře funkcí ChDir, kdy se budou pomocí funkce Dir zobrazovat názvy všech Excel souborů ve složce pomocí cyklu While. Následně je do proměnné „fileName“ všechny soubory kromě již iterovaných souborů. Pokud se již cyklem projedou všechny „xlsx“ soubory, cyklus se zastaví.

ChDir „C:\Users\r\VBA“

Dim fileName As String

fileName = Dir(„*.xlsx“)

While fileName <> „“

MsgBox „Nalezen soubor: “ & fileName

fileName = Dir

Wend

Vrací atributy souboru nebo režim přístupu k souboru.

Funkce nikdy nestojí samostatně, ale je nutné nejprve otevřít daný soubor, pro který mají být atributy vráceny.

FileAttr(FileNumber, [ReturnType])

FileNumber (povinný) – Číslo souboru.

ReturnType (volitelný)- Typ informace pro vrácení, kde 1 vrací mód souboru (pro 32 bitový systém) a 2 vrací handler operačního systému souboru (pro 16 bitový systém).

Použití s ostatními funkcemi

Sekce “Použití s ostatními funkcemi”

Specifikace cesty k souboru, kdy je následně soubor otevřen a zjištěno, o jaký soubor se jedná, následně jsou informace vypsány pomocí funkce MsgBox.

filePath = „C:\Users\r\Documents\Excel.xlsm“

Open filePath For Input As 1 ‚ Nastavení souboru jako prvního souboru

iOutput = FileAttr(1, 1) ‚ Atributy, jedná se o první otevřený soubor, tedy výstupem bude i 1

MsgBox („Informace o souboru: “ & iOutput) ‚ Msgbox funkce FileAttr

Close iFileNum ‚ Zavření souboru

Zkopíruje soubor z jednoho místa na jiné.

Soubor bude z původní složky pouze zkopírovaný do jiné, nikoliv vyjmutý. Tedy soubor se bude nacházet jak ve staré složce, tak i v nové složce. Je možné nastavit i jiný název souboru. Pro kopírování je nutné zadat i příponu souboru.

FileCopy(Source, Destination)

Source (povinný) – Cesta k původnímu souboru nastavena jako textový řetězec.

Destination (povinný) – Cílová cesta nastavená jako textový řetězec.

FileCopy „C:\Users\r\Doc\Zkouska.xlsx“, „C:\Users\r\Doc\Office\Zkouska.xlsx“ – Zkopírování souboru „Zkouska“ ze složky „Documents“ a vložení do složky „Office“ se stejným názvem. Cesty je nutné nahradit vlastními cestami k existujícímu souboru.

FileCopy „C:\Users\r\Doc\Zkouska.xlsx“, „C:\Users\r\Doc\Office\Novy.xlsx“ – Zkopírování souboru „Zkouska“ ze složky „Documents“ a vložení do složky „Office“ s novým názvem „Novy“. Cesty je nutné nahradit vlastními cestami k existujícímu souboru.

Použití s ostatními funkcemi

Sekce “Použití s ostatními funkcemi”

Kopírování všech .txt souborů pomocí cyklu while ve složce specifikované funkcí Dir ze složky „Doc“ do složky „Office“.

fileName = Dir(„C:\ Users\r\Doc\*.txt“)

While fileName <> „“

FileCopy “ C:\ Users\r\Doc\“ & fileName, “ C:\ Users\r\Doc\Office\“ & fileName

fileName = Dir

Wend

Vrací datum a čas poslední změny souboru.

Je nutné zadat celou cestu i příponu souboru, pro který má být získáno poslední datum změny, popř. cyklem projít jednotlivé soubory ve složce pro soubory, ke kterým má být datum změny získáno.

FileDateTime(String)

String (povinný) – Cesta k souboru i s příponou a názvem soubory zadaným v textovém řetězci.

FileDateTime(„C:\Example.txt“) – Zadaná cesta k textovému souboru „Example.txt“ na disku „C“.

Použití s ostatními funkcemi

Sekce “Použití s ostatními funkcemi”

Nejprve je zjištěna zdrojová složka a následně pomocí funkce Dir všechny soubory v adresáři. Pomocí cyklu je procházen každý soubor v adresáři a pokud je splněna podmínka, že datum změny je nižší než dnešní den zjištěný funkcí Date, má se soubor zkopírovat do jiné složky pomocí funkce FileCopy.

SourcePath = „C:\Zdrojova\Cesta\“ ‚ Získání zdrojové složky

pathToFiles = Dir(„C:\Zdrojova\Cesta\*“) ‚ Získání všech souborů ve zdrojové cestě

While pathToFiles <> „“ ‚ Dělat dokud nebudou projděny všechny soubory

If FileDateTime(SourcePath & pathToFiles) < Date Then ‚ Pokud je datum změny nižší než dnešní den, má být podmínka splněna

FileCopy SourcePath & pathToFiles, „C:\destinationPath\“ & pathToFiles ‚ Kopírování souboru ze zdrojové cesty do cílové

End If

pathToFiles = Dir ‚ změna adresáře pro procházení dalšího souboru

Wend

Vrací velikost souboru v bajtech.

Je nutné zadat celou cestu k souboru, kde se soubor nachází a zároveň příponu specifikovaného souboru. Pokud soubor se ve specifikovaném adresáři nenachází, vrátí funkce error.

FileLen(String)

String (povinný) – Cesta k souboru i s příponou a názvem soubory zadaným v textovém řetězci.

FileLen(„C:\Cesta\Example.txt“) – Vrátí počet bajtů textového souboru „Example“.

Použití s ostatními funkcemi

Sekce “Použití s ostatními funkcemi”

Nejprve je zadaná pouze cesta do souborů do proměnné „onlyPath“, následně jsou vybrány všechny soubory z této složky pomocí funkce Dir. Tyto soubory se prochází cyklem while a pokud bude mít soubor menší velikost než 500 000 bajtů, bude zkopírován pomocí funkce FileCopy. Následně bude přenastaven adresář na další soubor.

onlyPath = „C:\Cesta\“

Filename = Dir(„C:\Cesta\*“)

While Filename <> „“

If FileLen(onlyPath & Filename) < 500000 Then

FileCopy onlyPath & fileName, “ C:\ Users\r\Doc\Office\“ & fileName

End If

fileName = Dir

Wend

Vrací atributy souboru nebo složky.

Je nutné zadat celou cestu k souboru, kde se soubor nachází a zároveň příponu specifikovaného souboru. Pokud soubor se ve specifikovaném adresáři nenachází, vrátí funkce error. Vrácenou hodnotou je číslo, které znázorňuje:

Výstupní hodnota Popis
0 Normální
1 Pouze pro čtení
2 Skrytý
4 Systémový soubor (Není podporované pro Macintosh).
16 Adresář nebo složka.
32 Soubor, který byl od poslední zálohy změněn.
64 Dodaný název souboru je aliasem.
GetAttr(String)

String (povinný) – Cesta k souboru i s příponou a názvem soubory zadaným v textovém řetězci.

GetAttr(„C:\Cesta\Example.txt“) – Získání atributu z textového souboru „Example“.

Použití s ostatními funkcemi

Sekce “Použití s ostatními funkcemi”

Nastavení souboru na pouze pro čtení funkcí SetAttr a následně pomocí funkce MsgBox zobrazení daného nastaveného atributu.

SetAttr „C:\Cesta\Example.txt“, vbReadOnly

MsgBox „Nové atributy souboru: “ & GetAttr(„C:\Cesta\Example.txt“)

Smaže zadaný soubor.

Funkce daný soubor kompletně smaže ze zařízení, tedy pokud není zálohován, nelze se k němu již vrátit, jelikož není odstraněn do koše. Je nutné dávat pozor, jaký soubor má být smazán a s funkcí zacházet opatrně. Je nutné zadat celou cestu, název i příponu souboru, aby byl soubor smazán.

Kill(String)

String (povinný) – Cesta k souboru i s příponou a názvem soubory zadaným v textovém řetězci.

Kill(„C:\Example.txt“) – Zadaná cesta k textovému souboru „Example.txt“ na disku „C“.

Použití s ostatními funkcemi

Sekce “Použití s ostatními funkcemi”

Smazání všech textových souborů ve složce „zdroj“, kde všechny soubory jsou zjištěny pomocí funkce Dir.

fileName = Dir(„C:\Zdroj\*.txt“)

While fileName <> „“

Kill „C:\“ & fileName

fileName = Dir

Wend

Vytvoří nový adresář v zadané cestě.

Nový adresář může být vytvořen kdekoliv v daném zařízení, je nutné vyspecifikovat celkovou cestu, kde má být adresář vytvořen a také jeho název za cestou složky. Pokud navíc již složka v cestě existuje, VBA vyhodí error. Nemůže se tedy stát, že by se již existující složka se stejným názvem přepsala.

MkDir(String)

String (povinný) – Cesta k novému adresáři.

MkDir „C:\Cesta\k\nove\složce\NovaSložka\“ – Tvorba nové složky „NovaSložka“ ve specifikované cestě, jelikož se jedná o poslední složku v cestě, takže ta má být vytvořena.

Použití s ostatními funkcemi

Sekce “Použití s ostatními funkcemi”

Nastavení složky, která má být vytvořena. Podmínkou je zjištěno, zdali již složka v cestě neexistuje, aby se vyhnulo erroru. Zjištění probíhá pomocí délky funkcí Len a zjištění adresáře funkcí Dir. Pokud složka neexistuje, je vytvořena.

newFolder = „C:\Cesta\k\nove\slozce\NovaSlozka\“

If Len(Dir(newFolder, vbDirectory)) = 0 Then

MkDir newFolder

End If

Přejmenuje soubor nebo složku.

Je nutné zadat celou cestu k souboru, kde se soubor nachází a zároveň příponu specifikovaného souboru. Při nového názvu souboru nebo složky je také nutné zadat celou cestu k novému názvu souboru. Pokud se soubor nebo složka ve zdrojovém adresáři nenachází, vrátí funkce error.

Name(OldPath As String, NewPath As String)

OldPath (povinné) – Původní cesta ke složce nebo souboru.

NewPath (povinné) – Nová cesta nebo nový název.

Name C:\Cesta\Example.txt As C:\NovaCesta\Example.txt – Přesunutí souboru.

Name C:\Cesta\Example.txt As C:\Cesta\NewExample.txt – Přejmenování souboru.

Použití s ostatními funkcemi

Sekce “Použití s ostatními funkcemi”

Získání všech PDF souborů pomocí funkce Dir a přesunutí do jiného adresáře pomocí cyklu while.

fileName = Dir(„C:\Zdroj\*.pdf“)

While fileName <> „“

Name „C:\Zdroj\“ & fileName As „C:\Destinace\“ & fileName

fileName = Dir

Wend

Smaže prázdný adresář.

Pokud se v dané složce nenachází žádné soubory, tak bude složka smazána. Pokud zde ale soubory nebo další složky existují, VBA zobrazí error, jelikož není možné složku smazat, proto je vhodné kombinovat s ošetřením errorů. Smazaný adresář se nenachází v koši, ale je kompletně odstraněn ze zařízení a není možné se k němu po smazání znovu vrátit. Je nutné zadat celou cestu ke složce, která má být smazána.

RmDir(String)

String (povinný) – Cesta ke složce.

RmDir „C:\Cesta\SlozkaKSmazani“ – Pokud je složka prázdná, bude vymazána.

Použití s ostatními funkcemi

Sekce “Použití s ostatními funkcemi”

Je možné vytvořit provizorní složku pomocí funkce MkDir, do kterého budou vloženy určité testovací soubory a po potřebném procesu budou soubory smazány a zadaná složka následně vymazána také.

MkDir „C:\TestFolder“

… Potřebný proces

RmDir „C:\TestFolder“

Nastaví atributy souboru nebo složky.

Je nutné zadat celou cestu k souboru, kde se soubor nachází a zároveň příponu specifikovaného souboru. Pokud soubor se ve specifikovaném adresáři nenachází, vrátí funkce error.

SetAttr(String, Attributes)

PathName (Povinný) – Cesta k souboru nebo složce.

Attributes (Povinný) – Nové atributy, které lze zvolit:

VB Konstanta Hodnota Popis
vbNormal 0 Normální
vbReadOnly 1 Pouze pro čtení
vbHidden 2 Skrytý
vbSystem 4 Systémový soubor (Není podporované pro Macintosh).
vbArchive 32 Soubor, který byl od poslední zálohy změněn.
vbAlias 64 Dodaný název souboru je aliasem.

SetAttr „C:\Cesta\Example.xlsx“, vbReadOnly – Nastavení Excelu pouze pro čtení.

Použití s ostatními funkcemi

Sekce “Použití s ostatními funkcemi”

Nastavení souboru na pouze pro čtení a následně pomocí funkce MsgBox zobrazení daného nastaveného atributu pomocí funkce GetAttr.

SetAttr „C:\Cesta\Example.txt“, vbReadOnly

MsgBox „Nové atributy souboru: “ & GetAttr(„C:\Cesta\Example.txt“)

Práce s textovými soubory

Sekce “Práce s textovými soubory”

Otevře textový soubor pro čtení, zápis nebo úpravy.

Argumentem lze otevřít na pozadí jakýkoliv textový soubor, do kterého je možné dále zapisovat data pomocí dalších argumentů zejména pomocí cyklů nebo podmínek. Soubor se otevře pouze v pozadí zařízení, nebude otevřen přímo na obrazovce. Pokud navíc textový soubor ve specifikované cestě neexistuje, bude zde vytvořen se zadaným názvem. Je nutné dávat si pozor na jednotlivé režimy. Pokud je vybrán rešim Output, všechen text z textového souboru bude vymazán i při jakémkoliv neuložení otevřeného souboru. Existuje i argument Open pro otevření např. xlsx, docx nebo jiných dokumentů, který se zadává za cestou k danému dokumentu.

Open „Cesta_k_souboru“ For režim As #číslo_souboru

Cesta_k_souboru – Celá cesta k souboru společně s příponou a názvem souboru.

Režim – Jak má být soubor otevřen:

  • Input – Používá se pro čtení.
  • Output – Používá se pro zápis (přepíše soubor).
  • Append – Přidává data na konec souboru.
  • Binary – Používá se pro binární soubory.
  • Random – Používá se pro náhodný přístup.

Číslo_souboru – Identifikátor, o který soubor se jedná. V případě práce s více soubory ve VBA slouží jako vodítko k použití daného souboru.

Open „C:\Cesta\data.txt“ For Output As #1 – Otevření souboru „data“ pro zápis s identifikátorem souboru. Pokud v souboru již data jsou, budou přepsána novým textem.

Open „C:\Cesta\data.txt“ For Input As #1 – Otevření souboru „data“ pouze pro čtení, tedy bez možnosti zapisování do souboru.

Open „C:\Cesta\data.txt“ For Input As #1 – Otevření souboru „data“ pro přidání dat na konec souboru. Pokud data již v souboru existují, nová data budou přidána na nový řádek na konci souboru.

Použití s ostatními funkcemi

Sekce “Použití s ostatními funkcemi”

Otevření souboru pro přidání dalšího textu do souboru pomocí příkazu Print bez přepsání již existujících dat. Následně bude soubor zavřen a uložen pomocí příkazu Close.

Open „C:\ Cesta\data.txt“ For Append As #1

Print #1, „Toto je testovací text“

Close #1

Následující kód nebude proveden z důvodu chyby zapsání, jelikož soubor je otevřen pouze pro čtení a tak není možné do něj hodnoty zapisovat. Pokud je nutné hodnoty zapisovat, je nutné použít příkaz Output nebo Append.

Open „C:\ Cesta\data.txt“ For Input As #1

Print #1, „Toto je testovací text“

Close #1

Otevři zadaný soubor pouze pro čtení a následně procházej každý řádek až do poslední vyplněného řádku v souboru pomocí EOF. Každý řádek bude načten do VBA pomocí Line Input a pomocí Debug.Print bude text nebo hodnota z řádku vypsána do okna Inmediate. Následně bude soubor zavřený příkazem Close.

Open “ C:\ Cesta\data.txt “ For Input As #1

Do While Not EOF(1)

Line Input #1, textLine

Debug.Print textLine

Loop

Close #1

Uzavře jeden nebo více otevřených souborů, aby nedošlo k poškození dat.

Argumentem se zavře již otevřený textový soubor pomocí příkazu Open. Pokud jsou v otevřeném souboru provedeny jakékoliv změny před zavřením, automaticky se soubor se změnami uloží při zavření. Existuje i argument Close pro zavření např. xlsx, docx nebo jiných dokumentů, který se zadává za cestou nebo proměnnou potřebného dokumentu.

Close #číslo_souboru

číslo_souboru – Identifikátor, který soubor má být zavřen na základě čísla otevřeného souboru.

Close #1 – Zavře specifický soubor, který je již otevřen.

Použití s ostatními funkcemi

Sekce “Použití s ostatními funkcemi”

Otevření souboru příkazem Open pro přidání dalšího textu do souboru pomocí příkazu Print. Následně bude soubor zavřen a uložen.

Open „C:\ Cesta\data.txt“ For Append As #1

Print #1, „Toto je testovací text“

Close #1

Otevře zadaný soubor pouze pro čtení pomocí příkazu Open a následně procházej každý řádek až do poslední vyplněného řádku v souboru pomocí EOF. Každý řádek bude načten do VBA pomocí Line Input a pomocí Debug.Print bude text nebo hodnota z řádku vypsána do okna Inmediate. Následně bude soubor zavřen.

Open “ C:\ Cesta\data.txt “ For Input As #1

Do While Not EOF(1)

Line Input #1, textLine

Debug.Print textLine

Loop

Close #1

Načte celý řádek textového souboru do VBA.

Po otevření textového souboru pomocí příkazu Open lze načíst jakýkoliv řádek z dokumentu, s kterým lze následně ve VBA dále pracovat popř. měnit.

Line Input #číslo_souboru, proměnná

číslo_souboru – Identifikátor, ze kterého souboru má být řádek načten do VBA.

proměnná – Vlastní název proměnné, která identifikuje další práci se souborem.

Line Input #1, nazevPromenne – Načte řádek do proměnné „nazevPromenne“ z prvního otevřeného souboru.

Použití s ostatními funkcemi

Sekce “Použití s ostatními funkcemi”

Otevření souboru příkazem Open a načtení dat do proměnné textLine, který následně bude vypsán do okna Inmediate pomocí Debug.Print.

Open „C:\ Cesta\data.txt“ For Append As #1

Line Input #1, textLine

Debug.Print textLine

Otevře zadaný soubor pouze pro čtení pomocí příkazu Open a následně prochází každý řádek až do poslední vyplněného řádku v souboru pomocí EOF. Každý řádek bude načten do VBA a pomocí Debug.Print bude text nebo hodnota z řádku vypsána do okna Inmediate. Následně bude soubor zavřen příkazem Close.

Open “ C:\ Cesta\data.txt “ For Input As #1

Do While Not EOF(1)

Line Input #1, textLine

Debug.Print textLine

Loop

Close #1

Zapisuje textový řetězec do souboru bez jakéhokoliv formátování.

Nejprve je nutné textový soubor otevřít pomocí příkazu Open, aby bylo možné zapisovat data. Je nutné zadat i text, který má být do specifikovaného souboru zapsán. Je nutné navíc soubor zavřít příkazem Close, aby zapsaný text byl uložen do souboru. Text v uvozovkách bude do souboru zapsán bez uvozovek. Pokud je nutné mít v souboru i uvozovky, je potřebné použít příkaz Write. Neplést příkaz s Debug.Print, které slouží k zapisování hodnot z proměnných nebo objektů do okna Inmediate.

Print #číslo_souboru, text

číslo_souboru – Identifikátor, do kterého souboru má být text zapsán.

text – Text nebo hodnoty, které mají být do textového souboru zapsány.

Print #1, „Test“ – Zapíše text „Test“ do prvního souboru.

Print #1, „1;2;3;4;5“ – Zapíše hodnoty do textového souboru.

Použití s ostatními funkcemi

Sekce “Použití s ostatními funkcemi”

Otevření souboru příkazem Open pro přidání dalšího textu do souboru. Následně bude soubor zavřen a uložen argumentem Close. Text bude navíc zapsán bez daných uvozovek.

Open „C:\ Cesta\data.txt“ For Append As #1

Print #1, „Toto je testovací text“

Close #1

Zapisuje text nebo hodnoty do souboru s formátováním.

Nejprve je nutné textový soubor otevřít pomocí příkazu Open, aby bylo možné zapisovat data. Je nutné zadat i text, který má být do specifikovaného souboru zapsán. Je potřebné navíc soubor zavřít příkazem Close, aby zapsaný text byl uložen do souboru. Pokud je navíc text, který má být zapsán, v uvozovkách, dané uvozovky budou do souboru také zapsány. Pokud má být text zapsán bez uvozovek, je nutné použít příkaz Print. Je možné přidávat hodnoty oddělené čárkami a další formáty.

Write #číslo_souboru, text

číslo_souboru – Identifikátor, do kterého souboru má být text zapsán.

text – Text nebo hodnoty, které mají být do textového souboru zapsány.

Write #1, „Test“ – Zapíše text „Test“ do prvního souboru s uvozovkami.

Write #1, „Test“, 123, True – Zapíše hodnoty do textového souboru s formátováním.

Použití s ostatními funkcemi

Sekce “Použití s ostatními funkcemi”

Otevření souboru příkazem Open pro přidání dalšího textu do souboru. Následně bude soubor zavřen a uložen argumentem Close. Text bude navíc zapsán s uvozovkami.

Open „C:\ Cesta\data.txt“ For Append As #1

Write #1, „Toto je testovací text“

Close #1

Zjišťuje, zda bylo dosaženo konce souboru.

Příkaz se používá zejména při cyklech, kdy má být procházen každý řádek v textovém souboru a je nutné nějak zjistit dosažení konce souboru. Číslo souboru se navíc dává bez hashtagu na rozdíl od ostatních textových příkazů. Výstupem bude binární proměnná buďto True, kdy je konec souboru, nebo False.

EOF(číslo_souboru)

číslo_souboru – Identifikátor, u kterého souboru má být zjištěn konec souboru.

EOF(1) – Identifikátor prvního souboru, u kterého souboru má být zjištěn konec souboru.

Použití s ostatními funkcemi

Sekce “Použití s ostatními funkcemi”

Otevře zadaný soubor pouze pro čtení pomocí příkazu Open a následně prochází každý řádek až do poslední vyplněného řádku. Každý řádek bude načten do VBA příkazem Line Input a pomocí Debug.Print bude text nebo hodnota z řádku vypsána do okna Inmediate. Následně bude soubor zavřen příkazem Close.

Open “ C:\ Cesta\data.txt “ For Input As #1

Do While Not EOF(1)

Line Input #1, textLine

Debug.Print textLine

Loop

Close #1

FileSystemObject (FSO) je další speciální objekt ve VBA, který umožňuje také práci se soubory a složkami. Poskytuje metody pro vytváření, kopírování, přesouvání a mazání souborů a složek, stejně jako pro čtení a zápis do textových souborů.

Aby bylo možné FSO používat, musíš nejprve vytvořit instanci tohoto objektu pomocí:

Set [název proměnné] = CreateObject(„Scripting.FileSystemObject“)

Kontrola existence souboru

Sekce “Kontrola existence souboru”

Pokud soubor ve složce existuje, bude otevřen, jinak bude zobrazena hláška pomocí MsgBox, že soubor ve složce neexistuje.

Sub FileExists()

Dim fso as Object

Dim wb as Workbook

Set fso = CreateObject(„Scripting.FileSystemObject“)

If fso.FileExists(„C:\test.xlsx“) = True Then

Set wb = Workbooks.Open(„C:\test.xlsx“)

Else

MsgBox(„Soubor neexistuje“)

End If

End Sub

Kontrola existence složky

Sekce “Kontrola existence složky”

Pokud složka v dané cestě existuje, budou všechny soubory procházeny pomocí cyklu a zobrazeny názvy jednotlivých souborů do okna Inmediate pomocí příkazu Debug.Print, jinak bude zobrazena hláška pomocí MsgBox, že složka neexistuje.

Sub FolderExists()

Dim fso as Object

Set fso = CreateObject(„Scripting.FileSystemObject“)

If fso.FolderExists(„C:\testSlozka“) = True Then

For Each file In fso.getFolder(„C:\testSlozka“) .Files

Debug.Print file.Name

Next file

Else

MsgBox(„Složka neexistuje“)

End If

End Sub

Kontrola existence disku

Sekce “Kontrola existence disku”

Pokud disk existuje, bude zobrazena hláška pomocí MsgBox, že disk existuje, jinak bude zobrazena hláška, že disk neexistuje.

Sub DriveExists()

Dim fso as Object

Set fso = CreateObject(„Scripting.FileSystemObject“)

If fso.DriveExists(„C:\“) = True Then

MsgBox(„Disk existuje.“)

Else

MsgBox(„Disk neexistuje.“)

End If

End Sub

FSO umožňuje i kopírování souborů. Nejprve je potřeba stanovit cestu k souboru a název souboru s příponou, který má být zkopírován a následně cestu ke složce, kde má být soubor zkopírován. Soubor tak bude v obou složkách, jelikož se pouze kopíruje, ale nepřesouvá. Pokud xlsx soubor „Test“ ve složce existuje, bude zkopírován do nové složky.

Sub CopyFile()

Dim fso as Object

Set fso = CreateObject(„Scripting.FileSystemObject“)

fso.CopyFile „C:\SourceFolder\Test.xlsx“, „c:\DestinationFolder\“

End Sub

Pro přesouvání souborů je nutné zadat cestu k souboru, název a příponu souboru, který má být přesunut a následně cestu ke složce, kde má být soubor přesunut. Soubor tak již nebude ve zdrojové složce ale pouze ve složce cílové. Je nutné si dávat pozor, zdali cílová složka skutečně existuje, pokud ne, tak soubor bude odebrán ze zdrojové složky a už ho nebude možné nalézt, jelikož se neměl kam přesunout, protože cílová složka neexistuje.

Sub MoveFile()

Dim fso as Object

Set fso = CreateObject(„Scripting.FileSystemObject“)

fso.MoveFile „C:\SourceFolder\Test.xlsx“, „c:\DestinationFolder\“

End Sub

Pro smazání souboru je nutné zadat celou cestu k souboru, název i příponu souboru. Po smazání souboru nebude možné soubor získat zpět, nebude přesunut ani do koše, ale bude kompletně vymazán ze zařízení. Proto je vhodné si udělat zálohu v případě, kdy má být příkaz pouze testován.

Sub DeleteFile()

Dim fso as Object

Set fso = CreateObject(„Scripting.FileSystemObject“)

fso.DeleteFile „C:\SourceFolder\Test.xlsx “

End Sub

Pro tvorbu složky je nutné zadat cestu, kam má být složka vytvořena. Pokud zdrojová cesta neexistuje, daná složka nebude vytvořena. Pokud existuje, vytvoří se daná složka do dané cesty.

Sub CreateFolder()

Dim fso as Object

Set fso = CreateObject(„Scripting.FileSystemObject“)

fso.CreateFolder „C:\SourceFolder\NewFolder“

End Sub

FSO umožňuje i kopírování složek. Nejprve je potřeba stanovit cestu ke zdrojové složce, která má být zkopírována a následně cestu k cílové složce, kde má být daná složka zkopírována. Složka tak bude v obou složkách (zdrojová i cílová), jelikož se pouze kopíruje, ale nepřesouvá. V tomto příkladu je složka „NewFolder“ zkopírována do složky „DestinationFolder“, ale stále bude i v cestě „SourceFolder“. Se složkou „NewFolder“ se zkopírují zároveň všechny soubory a složky, které v této složce jsou.

Sub CopyFolder()

Dim fso as Scripting.FileSystemObject

Set fso = CreateObject(„Scripting.FileSystemObject“)

fso.CopyFolder „C:\SourceFolder\NewFolder“, „C:\DestinationFolder\“

End Sub

FSO umožňuje i přesouvání složek. Nejprve je potřeba stanovit cestu ke zdrojové složce, která má být přesunuta a následně cestu k cílové složce, kam má být složka vložena. Složka tak bude již pouze v cílové složce. Je nutné ošetřit, zdali cílová složka, kam se má složka přesunout, existuje. Pokud ne, bude složka přesunuta do neexistující cesty a tak už se k ní nebude možné dostat stejně jako k případným souborům a složkám, které jsou v přesouvající složce. Při testování příkazu je vhodné si udělat kopii složky, aby bylo zaručeno, že cílová složka existuje. V tomto příkladu je složka „NewFolder“ přesunuta do složky „DestinationFolder“, ale stále bude a v cestě „SourceFolder“ již nebude existovat. Se složkou „NewFolder“ se přesunou zároveň všechny soubory a složky, které v této složce jsou.

Sub MoveFolder()

Dim fso as Object

Set fso = CreateObject(„Scripting.FileSystemObject“)

fso.MoveFolder „C:\SourceFolder\NewFolder“, „C:\DestinationFolder\“

End Sub

Pro smazání složky je nutné zadat celou cestu k složce, která má být smazána, přičemž se smaže právě poslední sloka ve specifikované cestě. Při smazání složky se smažou i všechny složky a soubory, které v dané složce jsou. Složku nebude možné získat zpět, jelikož není přesunuta do koše, ale bude kompletně vymazána ze zařízení. Proto je vhodné udělat zálohu složky v případě, kdy má být příkaz pouze testován.

Sub DeleteFolder()

Dim fso as Object

Set fso = CreateObject(„Scripting.FileSystemObject“)

fso.DeleteFolder „C:\SourceFolder\NewFolder“

End Sub

© 2026 Excelland