Popravek VBA kode z VBA kodo

Pomoč pri izdelavi makrov
Odgovori
dragopre
Prispevkov: 105
Pridružen: To Dec 11, 2012 11:46 pm

Popravek VBA kode z VBA kodo

Odgovor Napisal/-a dragopre »

Pozdravljeni
Vprašanje moram malo bolj pojasniti.
Za gasilsko društvo sem pripravil obrazec za vnos poročil o akcijah in postopek za pripravo zbirnega poročila.
Postopek je naslednji:
1. V prvem (zagonskem) zvezku je le gumb za naročilo priprave novega poročila in drug gumb za naročilo zbirnega poročila.
2. Obrazec za vnos sem pripravil v posebnem "INIT" zvezku v katerem sem pustil "odptre" le celice za vnos, ostale sem pa zaščitil.
V "INIT" zvezku je tudi precej VBA kode za logično in vezano kontrolo, za obdelavo ListBox-ov, itd.
3. Posamezno poročilo naredim takole:
3.1 Z gumbom za novo poročilo zaženem makro ki naredi:
- Odpre INIT poročilo
- Določi naslednjo številko poročila ("Porocilo_NN")
- Shrani INIT poročilo z imenom "Porocilo_NN.xlsm"
- Odpre poročilo "Porocilo_NN.xlsm" ( prazno poročilo )
3.2 Uporabnik vnese podatke, izpiše poročilo, pošlje poročilo na gasilsko zvezo in zapre zvezek (poročilo).

Po nekaj-mesečni uporabi sem dobil predloge za nekaj dopolnitev. Popravil naj bi tudi že narejena poročila.
Pripravil sem makro, ki v zanki obdela vsa poročila in popravi vsebino zvezka (formati celic, formule, barve, nove rubrike, ... vse to znam narediti).
V poročilih je pa tudi VBA koda, ki bi jo tudi rad popravil. TEGA PA NE ZNAM.

Zato prosim za pomoč.
ps.
Mogoče sem se pa nerodno lotil zadeve. Verjetno ste o tovrstni uporabi Excel-a kaj pisali. prosim za link, do te vsebine.

Lepo pozdravljeni in vnaprej hvala za pomoč
Drago
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Re: Popravek VBA kode z VBA kodo

Odgovor Napisal/-a admin »

Pozdravljeni,

To česar ste se lotili ni preprosto, je pa izvedljivo. Jaz se osebno tega sicer nebi lotil tako, da bi "popravljal" VBA kodo, temveč bi:
  1. Kodo popravil
  2. Jo izvozil na disk
  3. Iz diska uvozil nazaj v vse DZ, ki bi jih bilo potrebno popraviti
Za izvoz in uvoz VBA kode uporabljam delovni zvezek, ki ga lahko snamete s spleta IzvoziVBAKodo.xls. To je delovni zvezek v katerem se lahko naučite kako dostopati do VBA kode. Predvsem pa imate implementirani funkciji Export in Import, ki opravljata izvoz in uvoz VBA kode.

Kodo, ki se nahaja v tem, delovnem zvezku sem pobral na spletu a izvora ne vem, saj je koda že stara. Mogoče lahko po ključnih besedah v kodi najdete tudi izvor.

PS:
Tega problema bi ne imeli, če bi se držali relativno preprostega načela, da kode na pišite v sam delovni zvezek, temveč naredite delovni zvezek z makri in dajte vso kodo v ta delovni zvezek, ki potem upravlja z drugimi delovnimi zvezki. V tem primeru morate torej kodo popraviti na enem mestu.
lp,
Matjaž Prtenjak
Administrator
dragopre
Prispevkov: 105
Pridružen: To Dec 11, 2012 11:46 pm

Re: Popravek VBA kode z VBA kodo

Odgovor Napisal/-a dragopre »

Hvala za hiter odgovor.
Se strinjam, uvoz kode je boljša rešitev kot popravljanje.
PS
Razmišljal sem že o rešitvi, da bi dal vso kodo v poseben zvezek. Motilo me le to, da moram imeti v tem primeru vedno odprta dva zvezka - zvezek s kodo in trenutno poročilo.
Spraševal sem kakšni problemi bi nastali pri pošiljanju obrazca drugemu uporabniku ( bi moral prilagati vedno tudi zvezek s kodo ?), kaj, če ima uporabnik odprtih več zvezkov, kaj če zapre zvezek s kodo itd.
Uporabniki imajo le osnovno znanje excel-a. Zato sem poskušal narediti obrazec, ki ga ne morejo "pokvariti".
Vsekakor bom pa naredil vsaj en resen test te variante. Verjetno bom tako dobil odgovore na pomisleke. Sicer se pa vrnem.

Še enkrat hvala in lep pozdrav,
Drago
dragopre
Prispevkov: 105
Pridružen: To Dec 11, 2012 11:46 pm

Re: Popravek VBA kode z VBA kodo

Odgovor Napisal/-a dragopre »

Mogoče bo še koga zanimalo.
Malo sem obrnil zadevo:
Namesto, da bi popravljal stare zvezke sem s predlogo ustvaril nov dopolnjen (tudi z novo VBA kodo) zvezek, potem sem pa iz starega v nov zvezek prepisal samo podatke.
Seveda sem najprej naredil kopijo starih zvezkov in nove zvezke poimenoval in shranil s starimi imeni.

Lep pozdrav,
Drago
Odgovori