Když přemýšlíte o automatickém otevírání sešitů aplikace Excel, zvažte, co se může stát, když se pokusíte otevřít knihu, která je již otevřená. Ve světě bez VBA se Excel pokusí soubor otevřít znovu, přičemž se zobrazí zpráva s upozorněním, že všechny neuložené změny budou ztraceny. Proti takovému výskytu se můžete chránit tím, že před pokusem o jeho opětovné otevření zkontrolujete, zda je daný soubor již otevřen.
Vyhněte se této varovné zprávě.
Jak makro funguje
První věc, kterou si na tomto makru všimnete, je, že se jedná o funkci, nikoli proceduru Sub. Jak uvidíte, uděláte z tohoto makra funkci, která vám umožní předat mu libovolný název souboru, abyste otestovali, zda je tento soubor již otevřen.
Podstata tohoto kódu je jednoduchá. Testujete daný název souboru, abyste zjistili, zda jej lze přiřadit proměnné Object. K proměnné Object lze přiřadit pouze otevřené sešity. Při pokusu o přiřazení uzavřeného sešitu k proměnné dojde k chybě.
Pokud lze daný sešit přiřadit, je sešit otevřený; pokud dojde k chybě, sešit se zavře.
Funkce FileIsOpenTest(TargetWorkbook As String) Jako logická hodnota
'Krok 1: Deklarujte své proměnné
Dim TestBook As Workbook
'Krok 2: Řekněte Excelu, aby v případě chyby pokračoval
Při chybě pokračovat dále
'Krok 3: Pokuste se přiřadit cílový sešit k TestBooku
Nastavit TestBook = Workbooks (TargetWorkbook)
'Krok 4: Pokud nenastala žádná chyba, sešit je již otevřen
Pokud Err.Number = 0 Pak
FileIsOpenTest = True
Jiný
FileIsOpenTest = False
End If
End Function
První věc, kterou makro udělá, je deklarovat proměnnou String, která bude obsahovat název souboru, který si uživatel vybere. TestBook je název vaší proměnné String.
V kroku 2 sdělíte Excelu, že při spouštění tohoto kódu může být chyba, a v případě chyby kód obnovte. Bez tohoto řádku by se kód jednoduše zastavil, když dojde k chybě. Opět otestujete daný název souboru, abyste zjistili, zda jej lze přiřadit proměnné Object. Pokud lze daný sešit přiřadit, je otevřený; pokud dojde k chybě, je zavřeno.
V kroku 3 se pokusíte přiřadit daný sešit k proměnné objektu TestBook. Sešit, který se pokoušíte přiřadit, je proměnná typu String s názvem TargetWorkbook. TargetWorkbook je předán funkci v deklaracích funkcí (viz první řádek kódu). Tato struktura eliminuje potřebu pevně zakódovat název sešitu a umožňuje vám jej místo toho předat jako proměnnou.
V kroku 4 jednoduše zkontrolujete, zda nedošlo k chybě. Pokud k chybě nedošlo, sešit je otevřený, takže nastavte FileIsOpenTest na hodnotu True. Pokud došlo k chybě, sešit není otevřený a FileIsOpenTest nastavíte na hodnotu False.
Tuto funkci lze opět použít k vyhodnocení jakéhokoli souboru, který jí předáte, prostřednictvím argumentu TargetWorkbook. V tom spočívá krása vložení makra do funkce.
Následující makro ukazuje, jak implementovat tuto funkci. Zde zavoláte novou funkci FileIsOpenTest, abyste se ujistili, že uživatel nemůže otevřít již otevřený soubor:
Dílčí makro1()
'Krok 1: Definujte proměnnou typu String
Dim FName jako varianta
Dim FNFileOnly As String
'Krok 2: Metoda GetOpenFilename aktivuje dialogové okno
FName = Application.GetOpenFilename( _
FileFilter:="Sešity Excel,*.xl*", _
Title:="Vyberte sešit k otevření", _
MultiSelect:=False)
'Krok 3: Otevřete vybraný soubor, pokud ještě není otevřen
Pokud FName <> False Then
FNFileOnly = StrReverse(Left(StrReverse(FName), _
InStr(StrReverse(FName), ") - 1))