Articles

excel-vba När du använder ActiveWorkbook och ThisWorkbook

Exempel

Det är en VBA-bästa praxis att alltid ange vilken arbetsbok din VBA-kod hänvisar till. Om denna specifikation utelämnas antar VBA att koden är riktad till den för närvarande aktiva arbetsboken (ActiveWorkbook).

'--- the currently active workbook (and worksheet) is impliedRange("A1").value = 3.1415Cells(1, 1).value = 3.1415

När flera arbetsböcker är öppna samtidigt – särskilt och framför allt när VBA-koden körs från ett Excel-tillägg – kan referenser till ActiveWorkbook dock förväxlas eller dirigeras fel. Till exempel måste en tilläggsinmatning med en UDF som kontrollerar tiden på dagen och jämför den med ett värde som är lagrat på ett av tilläggsinmatningens kalkylblad (som vanligtvis inte är lätt synliga för användaren) uttryckligen identifiera vilken arbetsbok som refereras. I vårt exempel har vår öppna (och aktiva) arbetsbok en formel i cell A1 =EarlyOrLate() och har INTE någon VBA skriven för den aktiva arbetsboken. I vårt tillägg har vi följande användardefinierade funktion (UDF):

Public Function EarlyOrLate() As String If Hour(Now) > ThisWorkbook.Sheets("WatchTime").Range("A1") Then EarlyOrLate = "It's Late!" Else EarlyOrLate = "It's Early!" End IfEnd Function

Koden för UDF:n är skriven och lagrad i det installerade Excel-tillägget. Den använder data som lagras på ett kalkylblad i tillägget som heter ”WatchTime”. Om UDF:en hade använt ActiveWorkbook i stället för ThisWorkbook skulle den aldrig kunna garantera vilken arbetsbok som avses.

Lämna ett svar

Din e-postadress kommer inte publiceras.