Analyst Cave

nov 24, 2021

ThisWorkbook arra a munkafüzetre utal, amelyben az Excel VBA kódot végrehajtják. Az ActiveWorkbook másrészt arra az Excel munkafüzetre utal, amely jelenleg fókuszban van, vagyis az elöl lévő Excel ablak.

Az Excel VBA fejlesztők gyakran keverik ezt a két gyakori munkafüzet típust a VBA-ban. A probléma akkor kezdődik, amikor egyszerre több Excel Munkakönyvben dolgozunk, és véletlenül egy makrót futtatunk egy Munkakönyvből, miközben egy másik Excel Munkakönyv éppen aktív. Ennek katasztrofális következményei lehetnek, ha közvetlenül a VBA Range vagy VBA Cell tulajdonságait használjuk.

Ezzel a cikkel hadd magyarázzam el az Excel VBA ActiveWorkbook és ThisWorkbook objektumok közötti egyértelmű különbséget.

ActiveWorkbook

Az ActiveWorkbook nem csak a látható Workbook, ahogy azt sokan gondolják, hiszen ugyanúgy lehet több Workbook is megnyitva és egymás mellett elhelyezve. Azonban mindig csak egy Excel Munkakönyv tekinthető Aktívnak. Az Aktívnak lenni egy legfelső tulajdonság – csak az a Munkafüzet számít Aktívnak, amelynek az ablaka éppen ki van jelölve. A pontos definíciót lásd alább

Application.ActiveWorkbook vagy ActiveWorkbook az Excel VBA-ban:
Az aktív ablakban (a legfelső ablakban) lévő munkafüzetet képviselő Workbook objektumot adja vissza. A tulajdonság nem ad vissza semmit, ha az Info ablak vagy a Vágólap ablak az aktív ablak.

Excel VBA ActiveWorkbook példa

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

ThisWorkbook

A ThisWorkbook tulajdonság sokkal könnyebben érthető, mivel egyszerűen arra az Excel munkafüzetre hivatkozik, amelyben a VBA kód végrehajtódik. A teljes definíciót lásd alább:

Application.ThisWorkbook vagy ThisWorkbook az Excel VBA-ban:
A Workbook objektumot adja vissza, amely azt a munkafüzetet képviseli, amelyben az aktuális VBA makró kód fut.

Excel VBA ThisWorkbook példa

'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

Ha még mindig zavaros a két tulajdonság közötti különbség, lásd alább:

A bal oldalon az Excel munkafüzet látható és az első számú alkalmazás. Ebben az esetben, ha ebben a Munkafüzetben futtatunk makrót, az ActiveWorkbook tulajdonság megegyezik a ThisWorkbook tulajdonsággal.

A jobb oldalon az Excel munkafüzet nem látható vagy nem a legelső alkalmazás. Ebben az esetben, ha ebben a munkafüzetben futtatunk makrót, akkor az ActiveWorkbook tulajdonság a bal oldali munkafüzetet, a ThisWorkbook pedig a jobb oldali munkafüzetet jelenti.

Remélem, most már világos!

Következtetések

Most már meg tudja különböztetni ezt a két tulajdonságot, fontos, hogy néhány dolgot szem előtt tartson:

  • A mindennapokban a ThisWorkbookot használja a hibásabb ActiveWorkbook helyett, amikor elvárja, hogy a kódja ugyanazon a Workbookon fusson, amelyen dolgozik
  • Az ActiveWorkbookot óvatosan használja, mivel ez a legfelső tulajdonság, nem biztos, hogy mindig visszaadja a tulajdonságot, ha más Excel felugró ablakok is érintettek lesznek. Bár szükség lehet az ActiveWorkbook tulajdonságra, ha Excel AddIn-ekkel dolgozik (amelyek az aktív munkafüzetben hajtják végre a kódot, nem az AddIn-jén)

.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.