ThisWorkbook verwijst naar de werkmap waarin Excel VBA code wordt uitgevoerd. ActiveWorkbook aan de andere kant verwijst naar de Excel-werkmap die momenteel focus heeft, dat wil zeggen is de voorkant geconfronteerd Excel-venster.
Vaak Excel VBA-ontwikkelaars mix deze twee gemeenschappelijke soorten werkmappen in VBA. Het probleem begint te ontstaan wanneer u in meerdere Excel-werkmappen tegelijk werkt en per ongeluk een macro uit een werkmap uitvoert terwijl een andere Excel-werkmap momenteel actief is. Dit kan rampzalige gevolgen hebben als u VBA Range of VBA Cell eigenschappen direct gebruikt.
In dit artikel laat me het verschil uitleggen tussen de Excel VBA ActiveWorkbook vs ThisWorkbook objecten.
ActiveWorkbook
The ActiveWorkbook is niet alleen de zichtbare Werkmap zoals velen zouden denken, want je kunt net zo goed meerdere Werkmappen open hebben staan en naast elkaar hebben geplaatst. Echter, slechts één Excel werkmap wordt op enig moment als Actief beschouwd. Actief zijn is een eigenschap die bovenaan staat – alleen de Werkmap waarvan het venster op dat moment is geselecteerd wordt als Actief beschouwd. Zie hieronder voor een nauwkeurige definitie
Geeft het Workbook-object terug dat de werkmap in het actieve venster (het bovenste venster) vertegenwoordigt. De eigenschap retourneert Niets als het Info-venster of het Klembord-venster het actieve venster is.
Excel VBA ActiveWorkbook voorbeeld
'Returns the name of the Active Workbook in Excel VBADebug.Print ActiveWorkbook.Name'Get Sheet1 from the Active WorkbookActiveWorkbook.Sheets("Sheet1")
ThisWorkbook
De eigenschap ThisWorkbook is veel eenvoudiger te begrijpen, omdat het eenvoudigweg verwijst naar de Excel-werkmap waarin de VBA-code wordt uitgevoerd. Zie hieronder voor de volledige definitie:
Hiermee krijgt u het Workbook-object terug dat de werkmap vertegenwoordigt waarin de huidige VBA-macrocode wordt uitgevoerd.
Excel VBA ThisWorkbook voorbeeld
'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
Als u nog steeds in de war bent over het verschil tussen deze twee eigenschappen, zie dan het volgende:
Aan de linkerkant is de Excel-werkmap zichtbaar en is deze de belangrijkste toepassing. In dit geval, als u een macro in deze werkmap uitvoert, is de eigenschap ActiveWorkbook dezelfde als ThisWorkbook.
Aan de rechterkant is de Excel Werkmap niet zichtbaar of is niet de belangrijkste toepassing. In dit geval, als u een macro in deze werkmap uitvoert, vertegenwoordigt de eigenschap ActiveWorkbook de werkmap aan de linkerkant, en ThisWorkbook vertegenwoordigt de werkmap aan de rechterkant.
Hoop dat het nu duidelijk is!
Conclusies
Nu u onderscheid kunt maken tussen deze beide eigenschappen is het belangrijk om een paar dingen in gedachten te houden:
- Op dagelijkse basis gebruikt u ThisWorkbook boven de meer foutieve ActiveWorkbook, wanneer u verwacht dat uw code wordt uitgevoerd op dezelfde Werkmap waar u aan werkt
- Gebruik ActiveWorkbook voorzichtig, omdat het een bovenste eigenschap is zal het niet altijd een eigenschap retourneren als er andere Excel pop-up vensters bij betrokken zullen zijn. Hoewel u de ActiveWorkbook eigenschap nodig zou kunnen hebben wanneer u werkt met Excel AddIns (die code uitvoeren op de Actieve Werkmap niet uw AddIn)