Articles

excel-vba Wanneer ActiveWorkbook en ThisWorkbook gebruiken

Example

Het is een VBA Best Practice om altijd aan te geven naar welke werkmap uw VBA code verwijst. Als deze specificatie wordt weggelaten, gaat VBA ervan uit dat de code is gericht op het werkboek dat op dat moment actief is (ActiveWorkbook).

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

Wanneer echter meerdere werkboeken tegelijk zijn geopend — met name en vooral wanneer VBA-code wordt uitgevoerd vanuit een Excel-invoegtoepassing — kunnen verwijzingen naar de ActiveWorkbook worden verward of verkeerd worden gericht. Een add-in met een UDF die bijvoorbeeld het tijdstip controleert en vergelijkt met een waarde die is opgeslagen op een van de werkbladen van de add-in (die doorgaans niet direct zichtbaar zijn voor de gebruiker), zal expliciet moeten aangeven naar welke werkmap wordt verwezen. In ons voorbeeld heeft onze open (en actieve) werkmap een formule in cel A1 =EarlyOrLate() en is er GEEN VBA geschreven voor die actieve werkmap. In onze invoegtoepassing hebben we de volgende door de gebruiker gedefinieerde functie (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

De code voor de UDF is geschreven en opgeslagen in de geïnstalleerde Excel-invoegtoepassing. De UDF gebruikt gegevens die zijn opgeslagen op een werkblad in de invoegtoepassing met de naam “WatchTime”. Als de UDF ActiveWorkbook had gebruikt in plaats van ThisWorkbook, dan zou het nooit kunnen garanderen welke werkmap bedoeld was.

Laat een antwoord achter

Het e-mailadres wordt niet gepubliceerd.