Articles

excel-vba Kdy použít ActiveWorkbook a ThisWorkbook

Příklad

Je osvědčeným postupem VBA vždy uvádět, kterého sešitu se kód VBA týká. Pokud toto upřesnění vynecháte, bude VBA předpokládat, že kód směřuje na aktuálně aktivní sešit (ActiveWorkbook).

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

Pokud je však otevřeno více sešitů najednou – zejména a zvláště pokud je kód VBA spuštěn z doplňku Excelu – mohou být odkazy na ActiveWorkbook zmateny nebo nesprávně směrovány. Například doplněk s UDF, který kontroluje denní čas a porovnává jej s hodnotou uloženou na jednom z listů doplňku (které obvykle nejsou pro uživatele snadno viditelné), bude muset výslovně určit, na který sešit se odkazuje. V našem příkladu má náš otevřený (a aktivní) sešit vzorec v buňce A1 =EarlyOrLate() a NEMÁ pro tento aktivní sešit napsaný žádný VBA. V našem doplňku máme následující uživatelsky definovanou funkci (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

Kód pro UDF je napsán a uložen v nainstalovaném doplňku aplikace Excel. Používá data uložená na listu v doplňku s názvem „WatchTime“. Pokud by UDF místo ThisWorkbook použil ActiveWorkbook, pak by nikdy nemohl zaručit, který sešit je určen.

.

Leave a Reply

Vaše e-mailová adresa nebude zveřejněna.