Call Stack – Hidden code
Při práci na větších projektech používám s výhodou komponentu Call Stack. Už jsem si zvyknul na text "[<Non-Basic Code>]", který jak předpokládam, je volán z jádra aplikace při otevírání sešitů, provádění události apod. Vzhledem k tomu, že office aplikace jsou napsány v jazyku "C", bude to zřejmě tento kód, který je vyvolán aby obstaral vše potřebné,
Při práci na jedné aplikaci jsem se setkal s jevem, který jsem zatím nepozoroval. Kod exportoval listy z jednoho sešitu do druhého a mazal listy, které už tam byly abych měl zaručenou nejnovější verzi. Kod vypadal nějak takto
For Each o_Wks In o_WkbMain.Sheets
o_WkbSlave.Sheets(o_Wks.Name).Delete
o_WkbMain.Sheets(o_Wks.Name).copy o_WkbSlave.Sheets(1)
Next o_Wks
Listy se kopírovaly čtyři. U prvních třech nebyl žádný problém, u posledního se pravidelně stávalo, že se kód "zasekl" na řádku s kopírováním a musel jsem vícekrát krokovat než kód proběhl. Stejný jev nastal při zavírání sešitu kde byly listy překopírovany. V okně Call Stack se objevil nápis "[<Hidenn Code>]"
Samozřejmě se mi toto chování nelíbilo a hledal jsem příčinu. Vyzkoušel jsem metodu DoEvents aby systém měl možnost provést své úkoly a tím jsem předpokládal, že zmizí z Call Stack onen popisek. Ovšem mýlil jsem se. Příčinou tohoto chování jsou událostní procedury v ThisWorkbook. Podle toho kolik procedur je v této sekci uloženo, tolikrát musíte "zbytečně" krokovat nad jedním příkazem. Jak asi tušíte, jedná se o událostní procedury a příkaz pro zákaz vykonávaní události v celé aplikaci je následujicí
Application.EnableEvents = False
a samozřejmě jsem události, po provedení příkazu opět zapnul. Tento postup se ukázal jako lék na nevšední problém. Kód se již více "nezasekával" a z okna Call Stack zmizel text "[<Hidenn Code>]".