Articles

excel-vba Når du skal bruge ActiveWorkbook og ThisWorkbook

Eksempel

Det er en VBA Best Practice altid at angive, hvilken arbejdsbog din VBA-kode henviser til. Hvis denne specifikation udelades, antager VBA, at koden er rettet mod den aktuelt aktive projektmappe (ActiveWorkbook).

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

Når flere projektmapper er åbne på samme tid – især og især når VBA-kode kører fra en Excel Add-In – kan henvisninger til ActiveWorkbook imidlertid blive forvirret eller forkert rettet. F.eks. skal en add-in med en UDF, der kontrollerer tidspunktet på dagen og sammenligner det med en værdi, der er gemt på et af add-in’ens regneark (som typisk ikke er umiddelbart synlige for brugeren), eksplicit identificere, hvilken arbejdsbog der henvises til. I vores eksempel har vores åbne (og aktive) arbejdsbog en formel i celle A1 =EarlyOrLate() og har IKKE nogen VBA skrevet for den aktive arbejdsbog. I vores tilføjelsesprogram har vi følgende brugerdefinerede 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 til UDF’en er skrevet og gemt i det installerede Excel-tilføjelsesprogram. Den bruger data, der er gemt på et regneark i tilføjelsesprogrammet kaldet “WatchTime”. Hvis UDF’en havde brugt ActiveWorkbook i stedet for ThisWorkbook, ville den aldrig kunne garantere, hvilket regneark der var tiltænkt.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.