Zmena aktuálneho adresára
Určite ste sa stretli so situáciou, že chcete počas priebehu vykonávania makra zmeniť aktuálny adresár na iný, aby ste tak mohli tam pokračovať s nejakými operáciami. Na tento účel slúži funkcia ChDir(). Jej argumentom je cesta k priečinku.
Sub changeDir
Dim nextPath As String
Dim message As String
message = "Aktuálny adresár: " & CurDir()
nextPath = "C:\Users\astro\Desktop\makra"
MkDir(nextPath)
ChDir(nextPath)
MsgBox message & Chr(10) & "Aktuálny adresár: " & CurDir()
End Sub
Spustenie makra vo Windows 10
Zdá sa, že avizovaná zmena priečinku nenastala. Skúsme aplikovať rovnaký kód s jednou menšou obmenou v Linuxe. Ak aj tam dostaneme rovnaký výsledok, tak problém je multiplatformový.
Sub changeDir
Dim nextPath As String
Dim message As String
message = "Aktuálny adresár: " & CurDir()
nextPath = "/home/astronomer/Plocha/makra"
MkDir(nextPath)
ChDir(nextPath)
MsgBox message & Chr(10) & "Aktuálny adresár: " & CurDir()
End Sub
Spustenie makra v Linux Ubuntu 18.04 LTS
Ani spustenie makra v Linuxe sa priečinok nezmenil. Rovnako poznámka v znení: „Tento příkaz momentálně nefunguje podle dokumentace. Více informací najdete v popisu této chyby“ k funkcii nám napovedá, že niečo s touto funkciou nie je v poriadku. A ako vidieť z nahlásenia chyby vzťahujúcej k funkcii ChDir(), je to už pekne dlho neopravená funkcionalita. Môžeme len dúfať, že v jednej z nasledujúcich verzií LibreOffice sa opraví tento nepekný bug inak zaujímavej funkcie.
V prípade, ak by opravili túto funkciu hneď v nasledujúcej verzii alebo až o pár rokov, tak znova si prejdite článok a postup aplikácie ChDir() by mal platiť. Ak by sa niečo zmenilo, napíšte dole pod komentárom.
A čo funkcia CurDir()?
Ak sa pozrieme na popis funkcie CurDir() v help.libreoffice.org, má rovnakú poznámku o možnej chybovosti ako funkcia ChDir() a dokonca vedie na rovnakú stránku Bugzilly. Skutočne však nefunguje ako ChDir()? Poďme to otestovať našimi záťažovými testami. Majme nasledovné makro:
Sub actualDir
MsgBox "Aktuálny adresár: " & CurDir()
End Sub
Už vieme, že zobrazí aktuálnu nastavenú adresu. V minulom článku sme ale nespomenuli, že funkcia CurDir() má jeden argument. Označujeme nim vybranú jednotku, napr. "C" označujúci primárnu jednotku vo Windows. Nasleduje makro, kde aplikujeme argument drive vo funkcii CurDir().
Sub actualDir
MsgBox "Aktuálny adresár: " & CurDir("D")
End Sub
Aplikácia funkcie CurDir() aj s argumentom
drive
Pod jednotkou D mám externý pevný disk. Zdá sa, že funkcia CurDir() funguje, ak dáme správne jednotku. Čo sa ale stane, ak dáme neexistujúcu jednotku? Podľa dokumentácie by mala funkcia poslať chybový kód 68 a tým pádom spustenie obvyklej chybovej hlášky, lenže čo sa nestane po spustení nasledujúceho makra.
Sub actualDir
MsgBox "Aktuálny adresár: " & CurDir("E")
End Sub
Po spustení makra s neexistujúcou jednotkou spadne celý LibreOffice! Takže neodporúčam takto experimentovať, ako som to urobil ja. A keď, tak na vlastné riziko. Tiež si môžete pozrieť moju chybovú správu pre vývojárov LibreOffice. Dúfam, že to čoskoro vyriešia. Tiež by som bol vďačný, ak by ste i vy tieto reporty posielali. Ale opäť prízvukujem, že na vlastné riziko. Mne spadlo celé LibreOffice bez nejakej väčšej straty a obnova otvorených dokumentov bola bezproblémová. Otázkou je, či sa vždy tak „mierumilovne“ táto chyba správa a nemôže u niektorých užívateľov viac uškodiť.
Verdikt
Na záver pár slov k predstaveným funkciám. Funkcia ChDir() nefunguje vôbec, aj keď je to veľmi užitočná funkcia pri práci s priečinkami. V príkazovom riadku v Linuxe je táto funkcia ekvivalentná s príkazom cd. Čo sa týka funkcie CurDir(), tá síce funguje, ale ak napíšete zle jednotku, tak vám spadne celý LibreOffice. Takže ak si moc programátorský neveríte, tak sa tejto funkcii oblúkom vyhnite.
Ak tieto dve funkcie opravia, v čom ja dúfam, tak sa vráťte k článku a pozrite si znova ich aplikácie a k tomu aj môj komentár. Dovtedy bohužiaľ treba využiť niečo iné. Ak máte alternatívu k týmto dvom funkciám, tak podeľte sa s nimi v komentároch. Jednou z možných alternatív sa nachádza v komentári od používateľa neutr pod predchádzajúcim mojim článkom. V budúcom článku môžeme skúsiť jeho riešenie a zhodnotíme, či to stojí zato.
Námet na tento článok poslúžili tieto zdroje:
OpenOffice.org Macros Explained Third Edition, Andrew Pitonyak, page 168-169, dostupné online
Funkce ChDir, help.libreoffice.org, dostupné online
Funkce CurDir, help.libreoffice.org, dostupné online