Analyst Cave

Lis 24, 2021

ThisWorkbook označuje sešit, ve kterém se provádí kód Excel VBA. ActiveWorkbook naproti tomu označuje sešit Excelu, který má aktuálně fokus, tedy je předním oknem Excelu.

Často vývojáři Excelu VBA tyto dva běžné typy sešitů ve VBA míchají. Problém začne vznikat, když pracujete ve více sešitech Excelu současně a omylem spustíte makro ze sešitu, zatímco jiný sešit Excelu je právě aktivní. To může mít katastrofální následky, pokud použijete přímo vlastnosti VBA Range nebo VBA Cell.

V tomto článku vysvětlím zřetelný rozdíl mezi objekty Excel VBA ActiveWorkbook vs ThisWorkbook.

ActiveWorkbook

Aktivní sešit není jen viditelný sešit, jak by si mnozí mysleli, protože stejně dobře můžete mít otevřeno více sešitů a umístěno vedle sebe. V každém okamžiku je však za aktivní považován pouze jeden sešit aplikace Excel. Být Aktivní je vlastnost nejvyššího stupně – za Aktivní je považován pouze sešit, jehož okno je aktuálně vybráno. Přesnou definici najdete níže

Application.ActiveWorkbook nebo ActiveWorkbook v Excel VBA:
Vrátí objekt sešitu, který představuje sešit v aktivním okně (okno nahoře). Vlastnost nevrátí nic, pokud je aktivním oknem okno Info nebo okno schránky.

Příklad ActiveWorkbook v Excelu VBA

'Returns the name of the Active Workbook in Excel VBADebug.Print ActiveWorkbook.Name'Get Sheet1 from the Active WorkbookActiveWorkbook.Sheets("Sheet1")

ThisWorkbook

Vlastnost ThisWorkbook je mnohem srozumitelnější, protože jednoduše odkazuje na sešit Excelu, ve kterém se provádí kód VBA. Úplnou definici najdete níže:

Application.ThisWorkbook nebo ThisWorkbook v Excel VBA:
Vrátí objekt Workbook, který představuje sešit, v němž je spuštěn aktuální kód makra VBA.

Příklad aplikace Excel VBA ThisWorkbook

'Returns the name of the Workbook which is executing this MacroDebug.Print ActiveWorkbook.Name'Get Sheet1 from the Workbook executing this MacroActiveWorkbook.Sheets("Sheet1")

ActiveWorkbook vs ThisWorkbook

Pokud jste stále zmateni rozdílem mezi těmito dvěma vlastnostmi, podívejte se níže:

Vlevo je viditelný sešit aplikace Excel, který je v popředí. Pokud v tomto sešitě spustíte makro, je v tomto případě vlastnost ActiveWorkbook stejná jako vlastnost ThisWorkbook.

Vpravo není sešit Excel viditelný nebo není přední aplikací. V tomto případě, pokud spustíte makro v tomto sešitě, představuje vlastnost ActiveWorkbook sešit vlevo a ThisWorkbook sešit vpravo.

Snad je to nyní jasné!

Závěry

Když už umíte obě tyto vlastnosti rozlišit, je důležité mít na paměti několik věcí:

  • Na denní bázi používejte ThisWorkbook místo chybnější ActiveWorkbook, pokud očekáváte, že váš kód bude spuštěn na stejném sešitě, na kterém pracujete
  • ActiveWorkbook používejte opatrně, protože se jedná o vlastnost nahoře, nemusí vždy vracet vlastnost, pokud budou zapojena další vyskakovací okna Excelu. Ačkoli vlastnost ActiveWorkbook můžete potřebovat při práci s doplňky Excelu (které provádějí kód v aktivním sešitu, nikoli ve vašem doplňku)

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.