{"id":564,"date":"2011-02-11T09:45:54","date_gmt":"2011-02-11T08:45:54","guid":{"rendered":"http:\/\/www.matjazev.net\/blog\/?p=564"},"modified":"2011-02-11T09:47:42","modified_gmt":"2011-02-11T08:47:42","slug":"scitenje-resursov-v-vba-iii","status":"publish","type":"post","link":"https:\/\/www.matjazev.net\/blog\/2011\/02\/11\/scitenje-resursov-v-vba-iii\/","title":{"rendered":"\u0160\u010ditenje resursov v VBA III"},"content":{"rendered":"<p>V <a href=\"http:\/\/www.matjazev.net\/blog\/2011\/02\/06\/scitenje-resursov-v-vba-ii\/\">prej\u0161njem prispevku<\/a> sem prikazal kako idejo o \u0161\u010ditenju realizirati v praksi, danes pa podajam \u0161e <strong>prvi konkretni primer, ki bo prikazal resni\u010dno uporabnost.<\/strong><\/p>\n<h2>Hitrej\u0161e izvajanje makrov<\/h2>\n<p>Za hitrej\u0161e izvajanje makrov v Excelu je priporo\u010dljivo <strong>ustaviti prera\u010dunavanje<\/strong>, saj sicer Excel ob vsaki spremembi, ki bi vplivala na druge celice vse tiste celice prera\u010dunava in \u010de to ponovimo 1000x se prera\u010dunavanje izvede 1000x!<\/p>\n<p>Dobro je tudi <strong>prepre\u010diti nepotrebno osve\u017eevanje ekrana<\/strong>, saj sicer uporabniku zaslon nenehno utripa in okna ter podatki ska\u010dejo sem ter tja.<\/p>\n<p>Nenazadnje pa je dobro (\u010de jih ne potrebujemo) <strong>izklju\u010diti tudi odzive na dogodke<\/strong>.<\/p>\n<p>Vse skupaj lahko torej strnemo v slede\u010do kodo:<\/p>\n<p><pre name=&#8221;code&#8221; class=&#8221;vb&#8221;>\nWith Application\n&nbsp;&nbsp;&nbsp;&nbsp;.Calculation = xlCalculationManual&nbsp;&nbsp;&#039; prepre\u010dimo prera\u010dunavanje\n&nbsp;&nbsp;&nbsp;&nbsp;.ScreenUpdating = False&nbsp;&nbsp;&nbsp;&nbsp;&#039; ne osve\u017eujemo ekrana\n&nbsp;&nbsp;&nbsp;&nbsp;.EnableEvents = False&nbsp;&nbsp;&#039; ugasnemo dogodke\nEnd With\n<\/pre><br \/>\nSeveda pa je potrebno ob koncu makra <strong>vse to postaviti nazaj<\/strong>:<\/p>\n<p><pre name=&#8221;code&#8221; class=&#8221;vb&#8221;>\nSub VelikMakro()\n&nbsp;&nbsp;&#039; zamrznemo\n&nbsp;&nbsp;With Application\n&nbsp;&nbsp;&nbsp;&nbsp;.Calculation = xlCalculationManual\n&nbsp;&nbsp;&nbsp;&nbsp;.ScreenUpdating = False\n&nbsp;&nbsp;&nbsp;&nbsp;.EnableEvents = False\n&nbsp;&nbsp;End With\n\n&nbsp;&nbsp;&#039; tu vmes je veliko kode\n\n&nbsp;&nbsp;&#039; vzpostavimo nazaj\n&nbsp;&nbsp;With Application\n&nbsp;&nbsp;&nbsp;&nbsp;.Calculation = xlCalculationAutomatic\n&nbsp;&nbsp;&nbsp;&nbsp;.ScreenUpdating = True\n&nbsp;&nbsp;&nbsp;&nbsp;.EnableEvents = True\n&nbsp;&nbsp;End With\nEnd Sub\n<\/pre><\/p>\n<h2>Test<\/h2>\n<p>A da bo stvar bolj zanimiva, <strong>izvedimo majhen test<\/strong>. Poglejmo kako dolgo se bo izvajal slede\u010d makro:<\/p>\n<p><pre name=&#8221;code&#8221; class=&#8221;vb&#8221;>\nSub TestnaFunkcija()\n&nbsp;&nbsp;Range(&quot;A1&quot;).Formula = &quot;=cos(A2)*tan(A2)\/sin(a3)&quot;\n&nbsp;&nbsp;Range(&quot;A2&quot;).Formula = &quot;=1\/A3&quot;\n\n&nbsp;&nbsp;Dim i As Long\n&nbsp;&nbsp;For i = 1 To 100000\n&nbsp;&nbsp;&nbsp;&nbsp;Range(&quot;A3&quot;) = i\n&nbsp;&nbsp;Next\nEnd Sub\n\nSub KlicTestneFunkcije()\n&nbsp;&nbsp;TestnaFunkcija\nEnd Sub\n\nSub IzvediTest()\n&nbsp;&nbsp;Dim cas: cas = Now\n&nbsp;&nbsp;&nbsp;&nbsp;KlicTestneFunkcije\n&nbsp;&nbsp;MsgBox &quot;Trajanje (v sec): &quot;; ((Now - cas) * 24 * 60 * 60)\nEnd Sub\n<\/pre><\/p>\n<p>\u010ce izvedem makro <strong>IzvediTest<\/strong>, se na testnem ra\u010dunalniku <strong><span style=\"text-decoration: underline;\">izvaja 19 sekund<\/span><\/strong>.<\/p>\n<h2>Objekt, ki bo vzpostavil stanje<\/h2>\n<p>Napi\u0161imo torej objekt, ki bo ob inicializaciji <strong>\u00bbzamrznil\u00ab Excel in ga ob koncu makra vzpostavil nazaj<\/strong>:<\/p>\n<p><pre name=&#8221;code&#8221; class=&#8221;vb&#8221;>\nOption Explicit\n\nPrivate Sub Class_Initialize()\n&nbsp;&nbsp;With Application\n&nbsp;&nbsp;&nbsp;&nbsp;.Calculation = xlCalculationManual\n&nbsp;&nbsp;&nbsp;&nbsp;.ScreenUpdating = False\n&nbsp;&nbsp;&nbsp;&nbsp;.EnableEvents = False\n&nbsp;&nbsp;End With\nEnd Sub\n\nPrivate Sub Class_Terminate()\n&nbsp;&nbsp;With Application\n&nbsp;&nbsp;&nbsp;&nbsp;.Calculation = xlCalculationAutomatic\n&nbsp;&nbsp;&nbsp;&nbsp;.ScreenUpdating = True\n&nbsp;&nbsp;&nbsp;&nbsp;.EnableEvents = True\n&nbsp;&nbsp;End With\nEnd Sub\n<\/pre><\/p>\n<p>Poimenujmo ga <strong>clsZamrzni<\/strong>.<\/p>\n<h2>Nov test<\/h2>\n<p>Popravimo sedaj funkcijo tako, da uporabimo pridobljeno znanje. Uporabimo torej objekt. Popravimo testni klic:<br \/>\n<pre name=&#8221;code&#8221; class=&#8221;vb&#8221;>\nSub KlicTestneFunkcije()\n&nbsp;&nbsp;Dim zamrzni As clsZamrzni\n\n&nbsp;&nbsp;Set zamrzni = New clsZamrzni\n&nbsp;&nbsp;TestnaFunkcija\nEnd Sub\n<\/pre><\/p>\n<p>\u010ce sedaj na mojem testnem ra\u010dunalniku izvedem funkcijo <strong>IzvediTest<\/strong>, se slednja izvede <span style=\"text-decoration: underline;\"><strong>v manj kot sekundi<\/strong><\/span>\u2026 \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>V prej\u0161njem prispevku sem prikazal kako idejo o \u0161\u010ditenju realizirati v praksi, danes pa podajam \u0161e prvi konkretni primer, ki bo prikazal resni\u010dno uporabnost. Hitrej\u0161e izvajanje makrov Za hitrej\u0161e izvajanje makrov v Excelu je priporo\u010dljivo ustaviti prera\u010dunavanje, saj sicer Excel ob vsaki spremembi, ki bi vplivala na druge celice vse tiste celice prera\u010dunava in \u010de &hellip; <a href=\"https:\/\/www.matjazev.net\/blog\/2011\/02\/11\/scitenje-resursov-v-vba-iii\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">\u0160\u010ditenje resursov v VBA III<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,35,34],"tags":[40,39,41,66,65,38],"_links":{"self":[{"href":"https:\/\/www.matjazev.net\/blog\/wp-json\/wp\/v2\/posts\/564"}],"collection":[{"href":"https:\/\/www.matjazev.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.matjazev.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.matjazev.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.matjazev.net\/blog\/wp-json\/wp\/v2\/comments?post=564"}],"version-history":[{"count":16,"href":"https:\/\/www.matjazev.net\/blog\/wp-json\/wp\/v2\/posts\/564\/revisions"}],"predecessor-version":[{"id":580,"href":"https:\/\/www.matjazev.net\/blog\/wp-json\/wp\/v2\/posts\/564\/revisions\/580"}],"wp:attachment":[{"href":"https:\/\/www.matjazev.net\/blog\/wp-json\/wp\/v2\/media?parent=564"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.matjazev.net\/blog\/wp-json\/wp\/v2\/categories?post=564"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.matjazev.net\/blog\/wp-json\/wp\/v2\/tags?post=564"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}