Otevření souboru pomocí makra

Nejdříve definujme proměnné, které budou potřeba pro otevření souboru a také poté pro pozdejší manipulaci s jednotlivými listy.

Dim report As Workbook
Dim ws As Worksheet

Jako první krok zkontrolujme, zda soubor, který chceme otevřít, vůbec existuje. Pokud ne, makro se ukončí.

If Len(Dir(ThisWorkbook.Path & "\source\" & "MujReport" & ".xlsx")) = 0 Then Exit Sub

Samotné otevření souboru provedeme následujícím příkazem.

Set report = Workbooks.Open(ThisWorkbook.Path & "\source\" & "MujReport" & ".xlsx")

V tomto případě se soubor nachází ve složce source, která je umístěna ve stejné složce, jako soubor, ze kterého makro spouštíte. Samozřejmě je možné vypsat úplnou cestu místo použití relativní

ThisWorkbook.Path

Stejně tak u názvu souboru je možné odkazovat např. do buňky v souboru, ve které uvedeme právě tento název souboru. To bychom mohli udělat následovně. Název souboru, který chceme otevřít se nachází v buňce C2 na listu setup.

Set MujReport = thisworkbook.sheets("setup").Range("C2")

Případně, pokud byste chtěli odkazovat na pojmenovanou oblast (buňku), lze samozřejmě též.

Set MujReport = Range("MujReport")

V obou případech však nesmíme zapomenout na mírnou úpravu příkazu k otevření souboru. Jelikož MujReport již není názvem samotného souboru, ale proměnnou, příkaz již bude bez uvozovek. Stejně tak přípona souboru je již uvedena v této proměnné a už ji nelze uvádět.

Set report = Workbooks.Open(ThisWorkbook.Path & "\source\" & MujReport)

Následně lze manipulovat se souborem, jak potřebujeme. Po skončení práce, jej můžeme uzavřít.

report.Close

Celé makro může vypadat následovně. Je použita verze s názvem souboru v proměnné.

Sub openFile()

Dim report As Workbook
Dim ws As Worksheet

Set MujReport = Range("MujReport")

If Len(Dir(ThisWorkbook.Path & "\source\" & MujReport)) = 0 Then Exit Sub

Set report = Workbooks.Open(ThisWorkbook.Path & "\source\" & MujReport)

'insert a code for further processing with the file

report.Close

End Sub

Leave a Reply

Your email address will not be published. Required fields are marked *