{"id":581,"date":"2011-02-17T21:00:01","date_gmt":"2011-02-17T20:00:01","guid":{"rendered":"http:\/\/www.matjazev.net\/blog\/?p=581"},"modified":"2011-02-17T21:01:21","modified_gmt":"2011-02-17T20:01:21","slug":"scitenje-resursov-v-vba-koncni-primer","status":"publish","type":"post","link":"https:\/\/www.matjazev.net\/blog\/2011\/02\/17\/scitenje-resursov-v-vba-koncni-primer\/","title":{"rendered":"\u0160\u010ditenje resursov v VBA kon\u010dni primer"},"content":{"rendered":"<p>Za konec tega kratkega sprehoda skozi \u0161\u010ditenje resursov v okolju VBA (<a href=\"http:\/\/www.matjazev.net\/blog\/2011\/02\/01\/scitenje-resursov-v-vba\/\">prvi del<\/a>, <a href=\"http:\/\/www.matjazev.net\/blog\/2011\/02\/06\/scitenje-resursov-v-vba-ii\/\">drugi del<\/a> in <a href=\"http:\/\/www.matjazev.net\/blog\/2011\/02\/11\/scitenje-resursov-v-vba-iii\/\">tretji del<\/a>), si poglejmo \u0161e zaklju\u010dni primer, <strong>torej \u0161\u010ditenje dostopa do datoteke<\/strong>.<\/p>\n<p>Prikazal bom preprost razred, ki hrani \u0161tevilko (VBA do datotek prihaja preko \u0161tevilk, ki jih dodeli posamezni datoteki) in v kolikor je \u0161tevilka postavljena, kar pomeni, da je bila datoteka odprta, jo ob uni\u010denju objekta zapre in uni\u010di \u0161tevilko.<\/p>\n<p><strong>Z uporabo tak\u0161nega razreda oz. spremenljivke tega razreda lahko zanesemo na dejstvo, da bo vsaka datoteka, ki smo jo odprli tudi zaprta.<\/strong><\/p>\n<h2>Razred za za\u0161\u010dito dostopa datotek<\/h2>\n<p><pre name=&#8221;code&#8221; class=&#8221;vb&#8221;>\nOption Explicit\n\n&#039; tu hranimo ID datoteke\nPrivate idDatoteke\n\nPrivate Sub Class_Initialize()\n&nbsp;&nbsp;&#039; na za\u010detku ID-ja datoteke ne poznamo,\n&nbsp;&nbsp;&#039; saj datoteke \u0161e nismo odprli\n&nbsp;&nbsp;idDatoteke = -1\nEnd Sub\n\nPrivate Sub Class_Terminate()\n&nbsp;&nbsp;&#039; v kolikor smo datoteko odprli\n&nbsp;&nbsp;&#039; jo tudi zapremo\n&nbsp;&nbsp;If (idDatoteke &amp;gt; 0) Then\n&nbsp;&nbsp;&nbsp;&nbsp;Close #idDatoteke\n&nbsp;&nbsp;End If\nEnd Sub\n\n&#039; s to funkcijo datoteko odpremo in tudi izvemo ali\n&#039; nam je odpiranje uspelo ali ne\nPublic Function Odpri(imeDatoteke As String, _\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vhod As Boolean) As Boolean\n&nbsp;&nbsp;&#039; predpostavimo, da nam odpiranje ne bo usplo\n&nbsp;&nbsp;Odpri = False\n\n&nbsp;&nbsp;&#039; pridobimo novo \u0161tevilo\n&nbsp;&nbsp;idDatoteke = FreeFile\n\n&nbsp;&nbsp;&#039; v primeru napake odregiramo\n&nbsp;&nbsp;On Error GoTo napaka\n\n&nbsp;&nbsp;&#039; ali \u017eelimo datoteko pisati ali brati\n&nbsp;&nbsp;If (vhod) Then\n&nbsp;&nbsp;&nbsp;&nbsp;Open imeDatoteke For Input As idDatoteke\n&nbsp;&nbsp;Else\n&nbsp;&nbsp;&nbsp;&nbsp;Open imeDatoteke For Output As idDatoteke\n&nbsp;&nbsp;End If\n\n&nbsp;&nbsp;&#039; \u010de smo pri\u0161li do sem, je odpiranje uspelo\n&nbsp;&nbsp;Odpri = True\n\n&nbsp;&nbsp;&#039; kon\u010damo\n&nbsp;&nbsp;Exit Function\n\nnapaka:\n&nbsp;&nbsp;&#039; \u010de smo tu, pomeni, da odpiranje ni uspelo\n&nbsp;&nbsp;idDatoteke = -1\nEnd Function\n\n&#039; samo okraj\u0161ava gornje funkcije\nPublic Function OdpriZaBranje(imeDatoteke As String) _\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;As Boolean\n&nbsp;&nbsp;OdpriZaBranje = Me.Odpri(imeDatoteke, True)\nEnd Function\n\n&#039; samo okraj\u0161ava gornje funkcije\nPublic Function OdpriZaPisanje(imeDatoteke As String) _\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;As Boolean\n&nbsp;&nbsp;OdpriZaPisanje = Me.Odpri(imeDatoteke, False)\nEnd Function\n\n&#039; lastnost, ki nam vrne identifikacijsko\n&#039; \u0161tevilko datoteke, preko katere se bomo\n&#039; nanjo sklicevali\nPublic Property Get id()\n&nbsp;&nbsp;id = idDatoteke\nEnd Property\n<\/pre><\/p>\n<h2>Primer uporabe<\/h2>\n<p><pre name=&#8221;code&#8221; class=&#8221;vb&#8221;>\nOption Explicit\n\nSub beriDatoteko(ime As String)\n&nbsp;&nbsp;&#039; ustvarimo spremenljivko\n&nbsp;&nbsp;Dim dat As New clsDatoteka\n\n&nbsp;&nbsp;&#039; v kolikor datoteke ne moremo odpreti kon\u010damo\n&nbsp;&nbsp;If (Not dat.OdpriZaBranje(ime)) Then Exit Sub\n\n&nbsp;&nbsp;&#039; spremenljivka, kamor bomo prebrali vsebino\n&nbsp;&nbsp;Dim vrstica\n\n&nbsp;&nbsp;&#039; vrtimo se dokler ne pridemo na konec datoteke\n&nbsp;&nbsp;Do While Not EOF(dat.id)\n&nbsp;&nbsp;&nbsp;&nbsp;Line Input #1, vrstica &#039; preveremo vsebino\n&nbsp;&nbsp;&nbsp;&nbsp;MsgBox vrstica &#039; in jo izpi\u0161emo\n&nbsp;&nbsp;Loop\n\n&nbsp;&nbsp;&#039; datoteka se bo zaprla sama\nEnd Sub\n\nSub pisiDatoteko(ime As String)\n&nbsp;&nbsp;&#039; ustvarimo spremenljivko\n&nbsp;&nbsp;Dim dat As New clsDatoteka\n\n&nbsp;&nbsp;&#039; v kolikor datoteke ne moremo odpreti kon\u010damo\n&nbsp;&nbsp;If (Not dat.OdpriZaPisanje(ime)) Then Exit Sub\n\n&nbsp;&nbsp;&#039; pi\u0161emo\n&nbsp;&nbsp;Print #dat.id, &quot;Prva vrstica v datoteki&quot;\n&nbsp;&nbsp;Print #dat.id, &quot;Druga vrstica v datoteki&quot;\n&nbsp;&nbsp;Print #dat.id, &quot;Tretja vrstica v datoteki&quot;\nEnd Sub\n\nSub Test()\n&nbsp;&nbsp;Dim ime As String\n\n&nbsp;&nbsp;ime = &quot;d:\\test.out&quot;\n\n&nbsp;&nbsp;&#039; to ne bo uspelo\n&nbsp;&nbsp;beriDatoteko ime\n\n&nbsp;&nbsp;&#039; \u010de ste ustrezno ureili ime bo to uspelo\n&nbsp;&nbsp;pisiDatoteko ime\n\n&nbsp;&nbsp;&#039; \u010de je uspelo pisanje, bo tudi branje\n&nbsp;&nbsp;beriDatoteko ime\nEnd Sub\n<\/pre><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Za konec tega kratkega sprehoda skozi \u0161\u010ditenje resursov v okolju VBA (prvi del, drugi del in tretji del), si poglejmo \u0161e zaklju\u010dni primer, torej \u0161\u010ditenje dostopa do datoteke. Prikazal bom preprost razred, ki hrani \u0161tevilko (VBA do datotek prihaja preko \u0161tevilk, ki jih dodeli posamezni datoteki) in v kolikor je \u0161tevilka postavljena, kar pomeni, da &hellip; <a href=\"https:\/\/www.matjazev.net\/blog\/2011\/02\/17\/scitenje-resursov-v-vba-koncni-primer\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">\u0160\u010ditenje resursov v VBA kon\u010dni primer<\/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":[41,66,65,38],"_links":{"self":[{"href":"https:\/\/www.matjazev.net\/blog\/wp-json\/wp\/v2\/posts\/581"}],"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=581"}],"version-history":[{"count":7,"href":"https:\/\/www.matjazev.net\/blog\/wp-json\/wp\/v2\/posts\/581\/revisions"}],"predecessor-version":[{"id":588,"href":"https:\/\/www.matjazev.net\/blog\/wp-json\/wp\/v2\/posts\/581\/revisions\/588"}],"wp:attachment":[{"href":"https:\/\/www.matjazev.net\/blog\/wp-json\/wp\/v2\/media?parent=581"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.matjazev.net\/blog\/wp-json\/wp\/v2\/categories?post=581"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.matjazev.net\/blog\/wp-json\/wp\/v2\/tags?post=581"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}