{"id":536,"date":"2011-02-01T12:50:17","date_gmt":"2011-02-01T11:50:17","guid":{"rendered":"http:\/\/www.matjazev.net\/blog\/?p=536"},"modified":"2011-02-06T20:02:27","modified_gmt":"2011-02-06T19:02:27","slug":"scitenje-resursov-v-vba","status":"publish","type":"post","link":"https:\/\/www.matjazev.net\/blog\/2011\/02\/01\/scitenje-resursov-v-vba\/","title":{"rendered":"\u0160\u010ditenje resursov v VBA"},"content":{"rendered":"<p>Kot klasi\u010dni C\/C++ programer sem <strong>obseden od \u0161\u010ditenja resursov<\/strong>!<\/p>\n<p>Da najprej raz\u010distimo, kaj resursi sploh so. <strong>V ra\u010dunalni\u0161tvu so resursi pravzaprav vse kar ra\u010dunalnik uporablja, kot programerja pa nas najbolj zanimajo pomnilnik, datoteke in zunanje naprave.<\/strong><\/p>\n<p>Pri \u0161\u010ditenju resursov je ideja v tem, da vedno <strong>zagotavljate dvoje<\/strong>:<\/p>\n<ol>\n<li><em>\u010ce resurs zase\u017eete ga tudi sprostite.<\/em><\/li>\n<li><em>Vse resurse spro\u0161\u010dajte \u010dim prej. \u010ce jih ne potrebujete ve\u010d jih sprostite!<\/em><\/li>\n<\/ol>\n<p>Primer je recimo odpiranje datoteke. Program <strong>odpre datoteko<\/strong>, pi\u0161e vanjo in jo na koncu zapre\u2026 Toda, kaj \u010de jo <strong>pozabi zapreti<\/strong>? Kaj \u010de se v programski kodi zgodi napaka in se datoteka ne zapre? To je te\u017eava in nanjo je potrebno biti pozoren.<\/p>\n<p>V Excelu pa se ve\u010dkrat sre\u010damo s povsem enakovrednim problemom prera\u010dunavanja. Da bi <strong>makro v Excelu tekel hitreje<\/strong> v ve\u010dini primerov na za\u010detku <strong>postavimo prera\u010dunavanje na ro\u010dno<\/strong> \u2013 izvedemo makro in postavimo prera\u010dunavanje <strong>nazaj na avtomati\u010dno<\/strong>\u2026<\/p>\n<p>A kaj \u010de pozabimo oz. se zgodi napaka \ud83d\ude41 ? Uporabnik ostane z delovnim zvezkom, ki se ro\u010dno prera\u010dunava in seveda je zmeden\u2026!<br \/>\n<pre name=&#8221;code&#8221; class=&#8221;vb&#8221;>\nSub Delujoce()\n&nbsp;&nbsp;Dim oldCalculation\n&nbsp;&nbsp;oldCalculation = Application.Calculation\n&nbsp;&nbsp;Application.Calculation = xlCalculationManual\n\n&nbsp;&nbsp;&#039; tu vmes je veliko vrstic kode\u2026\n&nbsp;&nbsp;Dim i As Long\n&nbsp;&nbsp;For i = 1 To 10000\n&nbsp;&nbsp;&nbsp;&nbsp;Debug.Print i\n&nbsp;&nbsp;Next\n\n&nbsp;&nbsp;Application.Calculation = oldCalculation\nEnd Sub<\/pre><br \/>\nToda \u010dez nekaj \u010dasa kodo <strong>popravljamo<\/strong> in zapi\u0161emo nekaj tak\u0161nega\u2026?<br \/>\n<pre name=&#8221;code&#8221; class=&#8221;vb&#8221;>\nSub NEDelujoce()\n&nbsp;&nbsp;Dim oldCalculation\n&nbsp;&nbsp;oldCalculation = Application.Calculation\n&nbsp;&nbsp;Application.Calculation = xlCalculationManual\n\n&nbsp;&nbsp;&#039; tu vmes je veliko vrstic kode\u2026\n&nbsp;&nbsp;Dim i As Long\n&nbsp;&nbsp;For i = 1 To 10000\n&nbsp;&nbsp;&nbsp;&nbsp;Debug.Print i\n\n&nbsp;&nbsp;&nbsp;&nbsp;&#039; PROBLEM!!!\n&nbsp;&nbsp;&nbsp;&nbsp;If (i Mod 123 = 12) Then Exit Sub\n&nbsp;&nbsp;Next\n\n&nbsp;&nbsp;Application.Calculation = oldCalculation\nEnd Sub<\/pre><br \/>\nSedaj se bo v nekem primeru funkcija zaklju\u010dila prej in Excel ostane v ro\u010dnem prera\u010dunu! <strong>Napaka!<\/strong><\/p>\n<h2>Re\u0161itev<\/h2>\n<p><strong>Re\u0161itev ponuja objektno programiranje oz ideja konstruktorjev ~ destruktorjev<\/strong>. <strong>Konstruktor<\/strong> je funkcija, ki se <strong>izvede ob ustvarjanju objekta<\/strong>, <strong>destruktor <\/strong>pa se zgodi <strong>ob uni\u010denju objekta<\/strong>. Lepota obeh funkcij je v tem, da sta <strong>privzeti<\/strong> in ju ni potrebno eksplicitno klicati.<\/p>\n<p>Dobro; konstruktor pokli\u010demo vedno ko objekt ustvarimo \u2013 to kot programerji zagotovo naredimo. A objekt se ob koncu <strong>ob koncu funkcije uni\u010di avtomati\u010dno. <\/strong>No natan\u010dneje re\u010deno,\u00a0 se objekt uni\u010di ob koncu njegove \u017eivljenske dobe, ki je odvisna od tega,kje ga ustvarimo&#8230; A to zdajle ni tako pomembno.<\/p>\n<p>In to je klju\u010d do uspeha. <strong>V konstruktorju zase\u017eemo resurse, ob destruktorju pa se slednji avtomati\u010dno sprostijo in vse je lepo in prav.<\/strong><\/p>\n<p>Kako to izvesti v VBA-ju pa poka\u017eem naslednji\u010d.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kot klasi\u010dni C\/C++ programer sem obseden od \u0161\u010ditenja resursov! Da najprej raz\u010distimo, kaj resursi sploh so. V ra\u010dunalni\u0161tvu so resursi pravzaprav vse kar ra\u010dunalnik uporablja, kot programerja pa nas najbolj zanimajo pomnilnik, datoteke in zunanje naprave. Pri \u0161\u010ditenju resursov je ideja v tem, da vedno zagotavljate dvoje: \u010ce resurs zase\u017eete ga tudi sprostite. Vse resurse &hellip; <a href=\"https:\/\/www.matjazev.net\/blog\/2011\/02\/01\/scitenje-resursov-v-vba\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">\u0160\u010ditenje resursov v VBA<\/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\/536"}],"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=536"}],"version-history":[{"count":17,"href":"https:\/\/www.matjazev.net\/blog\/wp-json\/wp\/v2\/posts\/536\/revisions"}],"predecessor-version":[{"id":546,"href":"https:\/\/www.matjazev.net\/blog\/wp-json\/wp\/v2\/posts\/536\/revisions\/546"}],"wp:attachment":[{"href":"https:\/\/www.matjazev.net\/blog\/wp-json\/wp\/v2\/media?parent=536"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.matjazev.net\/blog\/wp-json\/wp\/v2\/categories?post=536"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.matjazev.net\/blog\/wp-json\/wp\/v2\/tags?post=536"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}