Analyst Cave

nov 24, 2021

ThisWorkbook henviser til den projektmappe, hvori Excel VBA-kode udføres. ActiveWorkbook på den anden side henviser til Excel Workbook, der aktuelt har fokus, hvilket betyder, at det er det forreste Excel-vindue.

Ofte Excel VBA-udviklere blander disse to almindelige typer af arbejdsbøger i VBA. Problemet begynder at opstå, når du arbejder i flere Excel-arbejdsmapper på samme tid og ved et uheld kører en makro fra en arbejdsmappe, mens en anden Excel-arbejdsmappe er aktiv i øjeblikket. Dette kan have katastrofale konsekvenser, hvis du bruger VBA Range- eller VBA Cell-egenskaber direkte.

I denne artikel vil jeg gerne forklare den tydelige forskel mellem Excel VBA ActiveWorkbook vs ThisWorkbook-objekterne.

ActiveWorkbook

The ActiveWorkbook er ikke kun den synlige Workbook, som mange vil tro, da du lige så godt kan have flere Workbooks åbne og placeret side om side. Der er dog kun én Excel-arbejdsbog, der betragtes som aktiv på et hvilket som helst tidspunkt. At være aktiv er en egenskab, der ligger øverst – kun den projektmappe, hvis vindue i øjeblikket er valgt, betragtes som aktiv. Se nedenfor for en præcis definition

Application.ActiveWorkbook eller ActiveWorkbook i Excel VBA:
Vil returnere det Workbook-objekt, der repræsenterer arbejdsbogen i det aktive vindue (det vindue, der er øverst). Egenskaben returnerer intet, hvis Info-vinduet eller Udklipsholdervinduet er det aktive vindue.

Excel VBA ActiveWorkbook eksempel

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

ThisWorkbook

Egenskaben ThisWorkbook er meget nemmere at forstå, da den blot henviser til den Excel-arbejdsbog, som VBA-koden udføres i. Den fulde definition findes nedenfor:

Application.ThisWorkbook eller ThisWorkbook i Excel VBA:
Vil returnere det Workbook-objekt, der repræsenterer den projektmappe, hvor den aktuelle VBA-makrokode kører.

Excel VBA ThisWorkbook eksempel

'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

Hvis du stadig er forvirret over forskellen mellem disse to egenskaber, kan du se nedenfor:

I venstre side er Excel-arbejdsbogen synlig og er det forreste program. I dette tilfælde, hvis du kører en makro i denne arbejdsbog, er ActiveWorkbook-egenskaben den samme som ThisWorkbook.

I højre side er Excel-arbejdsbogen ikke synlig eller er ikke det vigtigste program. I dette tilfælde, hvis du kører en makro i denne arbejdsmappe, repræsenterer ActiveWorkbook-egenskaben arbejdsmappen til venstre, og ThisWorkbook repræsenterer arbejdsmappen til højre.

Håber det er klart nu!

Konklusioner

Nu, hvor du kan skelne mellem disse to egenskaber, er det vigtigt at holde et par ting for øje:

  • På daglig basis skal du bruge ThisWorkbook frem for den mere fejlagtige ActiveWorkbook, når du forventer, at din kode skal køre på den samme Workbook, som du arbejder på
  • Brug ActiveWorkbook med omtanke, da det er en egenskab øverst oppe, returnerer den måske ikke altid en egenskab, hvis andre Excel-popupvinduer vil være involveret. Selv om du måske har brug for ActiveWorkbook-egenskaben, når du arbejder med Excel AddIns (som udfører kode på den aktive projektmappe og ikke på din AddIn)

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.