Analyst Cave

marras 24, 2021

ThisWorkbook viittaa työkirjaan, jossa Excelin VBA-koodi suoritetaan. AktiivinenTyökirja (ActiveWorkbook) taas viittaa Excel-työkirjaan, jolla on tällä hetkellä fokus, eli se on etupuolella oleva Excel-ikkuna.

Usein Excel VBA -kehittäjät sekoittavat nämä kaksi yleistä työkirjatyyppiä VBA:ssa. Ongelma alkaa syntyä, kun työskentelet useissa Excel-työkirjoissa samanaikaisesti ja suoritat vahingossa makron työkirjasta, kun toinen Excel-työkirja on parhaillaan aktiivinen. Tällä voi olla tuhoisia vaikutuksia, jos käytät suoraan VBA:n Range- tai VBA:n Cell-ominaisuuksia.

Tässä artikkelissa selitän selvän eron Excel VBA:n ActiveWorkbook- ja ThisWorkbook-objektien välillä.

ActiveWorkbook

AktiivinenWorkbook ei ole vain näkyvissä oleva Työkirja, kuten moni luulee, sillä sinulla voi yhtä hyvin olla avoinna useita Työkirjoja ja ne voidaan sijoittaa rinnakkain. Aktiivisena pidetään kuitenkin aina vain yhtä Excel-työkirjaa. Aktiivisena oleminen on ylimpänä oleva ominaisuus – Aktiivisena pidetään vain sitä työkirjaa, jonka ikkuna on tällä hetkellä valittuna. Katso alla oleva tarkka määritelmä

Application.ActiveWorkbook tai ActiveWorkbook Excel VBA:ssa:
Palauttaa Workbook-objektin, joka edustaa aktiivisessa ikkunassa (ylimpänä oleva ikkuna) olevaa työkirjaa. Ominaisuus palauttaa Ei mitään, jos Infoikkuna tai Leikepöytä-ikkuna on aktiivinen ikkuna.

Excel VBA ActiveWorkbook -esimerkki

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

ThisWorkbook

Ominaisuus ThisWorkbook on paljon helpompi ymmärtää, koska se yksinkertaisesti viittaa Excel-työkirjaan, jossa VBA-koodi suoritetaan. Täydellinen määritelmä on alla:

Application.ThisWorkbook tai ThisWorkbook Excel VBA:ssa:
Palauttaa Workbook-olion, joka edustaa työkirjaa, jossa nykyinen VBA-makrokoodi on käynnissä.

Excel VBA ThisWorkbook esimerkki

'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

Jos olet vielä hämmentynyt näiden kahden ominaisuuden erosta, katso alla:

Vasemmalla Excel-työkirja on näkyvissä ja se on etusijalla oleva sovellus. Tällöin jos suoritat makron tässä työkirjassa, ActiveWorkbook-ominaisuus on sama kuin ThisWorkbook.

Oikealla Excel-työkirja ei ole näkyvissä tai se ei ole tärkein sovellus. Tässä tapauksessa, jos suoritat makron tässä työkirjassa, ActiveWorkbook-ominaisuus edustaa vasemmanpuoleista työkirjaa ja ThisWorkbook edustaa oikeanpuoleista työkirjaa.

Toivottavasti tämä on nyt selvää!

Johtopäätökset

Nyt kun osaat erottaa nämä kaksi ominaisuutta toisistaan, on tärkeää pitää mielessä pari asiaa:

  • Päivittäin käytä ThisWorkbookia virheellisemmän ActiveWorkbookin sijasta, kun odotat koodisi toimivan samassa Työkirjassa, jota työstät
  • Käytä ActiveWorkbookia varovasti, koska se on ylimpänä oleva ominaisuus, se ei välttämättä aina palauta ominaisuutta, jos siihen liittyy muitakin Excelin avautuvia ikkunoita. Tosin saatat tarvita ActiveWorkbook-ominaisuutta työskennellessäsi Excel AddInien kanssa (jotka suorittavat koodia aktiivisessa työkirjassa, eivät AddInissäsi)

Vastaa

Sähköpostiosoitettasi ei julkaista.