Articles

excel-vba Când se utilizează ActiveWorkbook și ThisWorkbook

Exemplu

Este o bună practică VBA să specificați întotdeauna la ce registru de lucru se referă codul VBA. Dacă această specificație este omisă, atunci VBA presupune că codul este direcționat către registrul de lucru activ în acel moment (ActiveWorkbook).

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

Cu toate acestea, atunci când mai multe registre de lucru sunt deschise în același timp – în special și mai ales atunci când codul VBA se execută dintr-un Excel Add-In – referințele la ActiveWorkbook pot fi confundate sau direcționate greșit. De exemplu, un add-in cu un UDF care verifică ora din zi și o compară cu o valoare stocată pe una dintre foile de lucru ale add-in-ului (care, de obicei, nu sunt ușor vizibile pentru utilizator) va trebui să identifice în mod explicit la care registru de lucru se face referire. În exemplul nostru, registrul de lucru deschis (și activ) are o formulă în celula A1 =EarlyOrLate() și NU are niciun VBA scris pentru acel registru de lucru activ. În add-in-ul nostru, avem următoarea funcție definită de utilizator (User Defined Function – 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

Codul pentru UDF este scris și stocat în add-in-ul Excel instalat. Acesta utilizează datele stocate pe o foaie de calcul din add-in-ul numit „WatchTime”. Dacă UDF ar fi folosit ActiveWorkbook în loc de ThisWorkbook, atunci nu ar fi putut garanta niciodată ce registru de lucru a fost destinat.

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.