Analyst Cave

nov 24, 2021

ThisWorkbook hänvisar till arbetsboken där Excel VBA-kod körs. ActiveWorkbook å andra sidan hänvisar till den Excel-arbetsbok som för närvarande har fokus, vilket innebär att det är det främre Excel-fönstret.

Ofta blandar Excel VBA-utvecklare dessa två vanliga typer av arbetsböcker i VBA. Problemet börjar uppstå när du arbetar i flera Excel-arbetsböcker samtidigt och av misstag kör ett makro från en arbetsbok medan en annan Excel-arbetsbok för närvarande är aktiv. Detta kan få katastrofala effekter om du använder VBA Range eller VBA Cell properties direkt.

I den här artikeln vill jag förklara den tydliga skillnaden mellan Excel VBA ActiveWorkbook vs ThisWorkbook-objekten.

ActiveWorkbook

The ActiveWorkbook är inte bara den synliga arbetsboken som många tror, eftersom du lika gärna kan ha flera arbetsböcker öppna och placerade sida vid sida. Det är dock bara en Excel-arbetsbok som anses vara aktiv vid varje tidpunkt. Att vara aktiv är en egenskap som ligger överst – endast den arbetsbok vars fönster för närvarande är markerat anses vara aktiv. Se nedan för en exakt definition

Application.ActiveWorkbook eller ActiveWorkbook i Excel VBA:
Returnerar det Workbook-objekt som representerar arbetsboken i det aktiva fönstret (fönstret överst). Egenskapen returnerar ingenting om Infofönstret eller Urklippsfönstret är det aktiva fönstret.

Excel VBA ActiveWorkbook exempel

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

ThisWorkbook

Den här arbetsboksegenskapen är mycket lättare att förstå eftersom den helt enkelt hänvisar till den Excel-arbetsbok där VBA-koden körs. Den fullständiga definitionen finns nedan:

Application.ThisWorkbook eller ThisWorkbook i Excel VBA:
Returnerar Workbook-objektet som representerar den arbetsbok där den aktuella VBA-makrokoden körs.

Excel VBA ThisWorkbook exempel

'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

Om du fortfarande är förvirrad över skillnaden mellan dessa två egenskaper, se nedan:

Till vänster är Excel-arbetsboken synlig och är det främsta programmet. Om du kör ett makro i denna arbetsbok är egenskapen ActiveWorkbook samma som ThisWorkbook.

Till höger är Excel Workbook inte synlig eller är inte det främsta programmet. Om du kör ett makro i den här arbetsboken representerar ActiveWorkbook-egenskapen i det här fallet arbetsboken till vänster och ThisWorkbook representerar arbetsboken till höger.

Hoppas att det är klart nu!

Slutsatser

Nu när du kan skilja mellan de båda egenskaperna är det viktigt att hålla ett par saker i åtanke:

  • Vidare använder du ThisWorkbook framför den mer felaktiga ActiveWorkbook, när du förväntar dig att din kod ska köras på samma arbetsbok som du arbetar på
  • Använd ActiveWorkbook med försiktighet, eftersom det är en översta egenskap så returnerar den kanske inte alltid en egenskap om andra Excel-popup-fönster kommer att vara inblandade. Även om du kan behöva egenskapen ActiveWorkbook när du arbetar med Excel AddIns (som exekverar kod i den aktiva arbetsboken, inte i ditt AddIn)

Lämna ett svar

Din e-postadress kommer inte publiceras.