Keď uvažujete o automatickom otváraní excelových zošitov, zvážte, čo sa môže stať, ak sa pokúsite otvoriť knihu, ktorá je už otvorená. Vo svete bez VBA sa Excel pokúsi znova otvoriť súbor, pričom sa zobrazí hlásenie s upozornením, že všetky neuložené zmeny sa stratia. Pred takýmto výskytom sa môžete chrániť tak, že pred opätovným pokusom o jeho otvorenie skontrolujete, či je daný súbor už otvorený.
Vyhnite sa tejto varovnej správe.
Ako funguje makro
Prvá vec, ktorú si treba na tomto makre všimnúť, je, že ide o funkciu, nie procedúru Sub. Ako uvidíte, vytvorenie tohto makra ako funkcie vám umožní odovzdať mu ľubovoľný názov súboru, aby ste otestovali, či je daný súbor už otvorený.
Podstata tohto kódu je jednoduchá. Testujete daný názov súboru, aby ste zistili, či ho možno priradiť objektovej premennej. K premennej objektu možno priradiť iba otvorené zošity. Pri pokuse o priradenie uzavretého zošita k premennej sa vyskytne chyba.
Ak je možné daný zošit priradiť, zošit je otvorený; ak sa vyskytne chyba, zošit sa zatvorí.
Funkcia FileIsOpenTest(TargetWorkbook As String) Ako boolovská hodnota
'Krok 1: Deklarujte svoje premenné
Dim TestBook As Workbook
„Krok 2: Povedzte Excelu, aby pokračoval v chybe
Pri chybe Pokračujte ďalej
'Krok 3: Skúste priradiť cieľový zošit k TestBooku
Nastaviť TestBook = Workbooks (TargetWorkbook)
'Krok 4: Ak sa nevyskytla žiadna chyba, zošit je už otvorený
Ak Err.Number = 0 Potom
FileIsOpenTest = Pravda
Inak
FileIsOpenTest = False
Koniec Ak
End Function
Prvá vec, ktorú makro urobí, je deklarovať premennú String, ktorá bude obsahovať názov súboru, ktorý si používateľ vyberie. TestBook je názov vašej premennej String.
V kroku 2 poviete Excelu, že pri spúšťaní tohto kódu môže nastať chyba, a v prípade chyby pokračujte v kóde. Bez tohto riadku by sa kód jednoducho zastavil, keď sa vyskytne chyba. Opäť otestujete daný názov súboru, aby ste zistili, či ho možno priradiť objektovej premennej. Ak je možné daný zošit priradiť, je otvorený; ak sa vyskytne chyba, je zatvorený.
V kroku 3 sa pokúsite priradiť daný zošit k premennej TestBook Object. Zošit, ktorý sa pokúšate priradiť, je premenná typu String s názvom TargetWorkbook. TargetWorkbook sa odovzdá funkcii v deklaráciách funkcií (pozri prvý riadok kódu). Táto štruktúra eliminuje potrebu pevne zakódovať názov zošita, čo vám umožňuje odovzdať ho ako premennú.
V kroku 4 jednoducho skontrolujete, či sa nevyskytla chyba. Ak sa chyba nevyskytla, zošit je otvorený, takže FileIsOpenTest nastavte na hodnotu True. Ak sa vyskytla chyba, zošit nie je otvorený a FileIsOpenTest nastavíte na hodnotu False.
Túto funkciu možno opäť použiť na vyhodnotenie akéhokoľvek súboru, ktorý jej odošlete, prostredníctvom argumentu TargetWorkbook. Toto je krása uvedenia makra do funkcie.
Nasledujúce makro ukazuje, ako implementovať túto funkciu. Tu zavoláte novú funkciu FileIsOpenTest, aby ste sa uistili, že používateľ nemôže otvoriť už otvorený súbor:
Pod makro1()
'Krok 1: Definujte premennú typu String
Dim FName ako variant
Dim FNFileOnly As String
'Krok 2: Metóda GetOpenFilename aktivuje dialógové okno
FName = Application.GetOpenFilename( _
FileFilter:="Zošity programu Excel,*.xl*", _
Title:="Vyberte pracovný zošit na otvorenie", _
MultiSelect:=False)
'Krok 3: Otvorte vybraný súbor, ak ešte nie je otvorený
Ak FName <> False Then
FNFileOnly = StrReverse(Left(StrReverse(FName), _
InStr(StrReverse(FName), ") - 1))