Articles

excel-vba Az ActiveWorkbook és ThisWorkbook használata

Példa

A VBA legjobb gyakorlata, hogy mindig megadja, melyik munkafüzetre hivatkozik a VBA-kód. Ha ez a megadás elmarad, akkor a VBA azt feltételezi, hogy a kód az éppen aktív munkafüzetre (ActiveWorkbook) irányul.

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

Ha azonban egyszerre több munkafüzet van nyitva — különösen és főleg, ha a VBA-kód egy Excel Add-Inből fut –, akkor a ActiveWorkbook-re való hivatkozások összekeveredhetnek vagy tévesen irányíthatók. Például egy olyan Add-In-nek, amely egy UDF-vel ellenőrzi a napszakot, és összehasonlítja azt az Add-In egyik munkalapján tárolt értékkel (amelyek jellemzően nem láthatóak a felhasználó számára), kifejezetten azonosítania kell, hogy melyik munkafüzetre hivatkozik. Példánkban a megnyitott (és aktív) munkafüzetünk A1 =EarlyOrLate() cellájában van egy képlet, és NEM íródott VBA az aktív munkafüzethez. A kiegészítőnkben a következő felhasználó által definiált függvény (UDF) található:

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

Az UDF kódja a telepített Excel kiegészítőben van megírva és tárolva. Az add-in “WatchTime” nevű munkalapján tárolt adatokat használja. Ha az UDF a ThisWorkbook helyett a ActiveWorkbook-et használta volna, akkor soha nem tudná garantálni, hogy melyik munkafüzetnek van szánva.

Leave a Reply

Az e-mail-címet nem tesszük közzé.