pozdravljeni
Imam težavo z makrojem,ki sem ga ustvaril in nisem predvidel možnih
komplikacij.
in sicer: ko imam nek delovni zvezek že odprt z makrojem pokličem nek drug delovni zvezek,ga ta odpre in vanj prekopira določene podatke iz prvega zvezka,nekaj preračuna,presoltira... in tako naprej.
Se,pravi,ko je makro zaključil, samo še shranim,in zadeva je končana.
Toda,nazadnje se je zgodilo,da mi je sodelavka potem,ko je makro opravil svoje delo,le tega še enkrat sprožila in nastal je pravi kaos,poleg tega je pa še vse skupaj hranila.torej ,vsi podatki so se uničili,da ne govorim,kaj se je zgodilo s tabelami.
Torej ,kako se obvarovati pred ponovnim zagonom makra,v kolikor je ta že opravil delo pri odprtih zvezkih in pod kateri dogodek potem to kodo pripeti.
Za odgovor se najlepše zahvaljujem.
lp
preprečitev ponovnega zagona makra
Si boste morali pa pomagati sami, saj samo vi veste, pod kakšnimi pogoji se makro lahko izvede in pod kakšnimi ne.
Če se makro npr. ne sme izvesti 2x na dan, si je potrebno v neko datoteko zapisati, da se je makro izvedel in pred zagonom je potrebno prebrati omenjeno datoteko ter preveriti ali se je makro že izvedel ali ne.
Če se makro ne sme izvesti več kot 1x ko je datoteka odprta (če jo zaprete in ponovno odprete se spet lahko izvede...) potem je stvar še lažja. Samo postavite globalno spremenljivko, da se makro izvedel.
Če se makro npr. ne sme izvesti 2x na dan, si je potrebno v neko datoteko zapisati, da se je makro izvedel in pred zagonom je potrebno prebrati omenjeno datoteko ter preveriti ali se je makro že izvedel ali ne.
Če se makro ne sme izvesti več kot 1x ko je datoteka odprta (če jo zaprete in ponovno odprete se spet lahko izvede...) potem je stvar še lažja. Samo postavite globalno spremenljivko, da se makro izvedel.
lp,
Matjaž Prtenjak
Administrator
Matjaž Prtenjak
Administrator
pozdravljen Matjaž
napisali ste:
ja,Matjaž,točno to bi rabil,enostavno imam premalo znanja,da bi lahko nadaljeval.
poskušal sem nekako takole:ko se nek list aktivira mi v celico zapiše
številko ena,in v kolikor je v tej celici številka ena potem se makro naj nebi izvajal.ko pa sem zvezek zaprl sem to 1 "brisal v beforeclose",vendar se vseskupaj ne obnese.
imate vi morda bolj enostaven predlog?
za odgovor se zahvaljujem
lp
napisali ste:
Koda: Izberi vse
Če se makro ne sme izvesti več kot 1x ko je datoteka odprta (če jo zaprete in ponovno odprete se spet lahko izvede...) potem je stvar še lažja. Samo postavite globalno spremenljivko, da se makro izvedel.
poskušal sem nekako takole:ko se nek list aktivira mi v celico zapiše
številko ena,in v kolikor je v tej celici številka ena potem se makro naj nebi izvajal.ko pa sem zvezek zaprl sem to 1 "brisal v beforeclose",vendar se vseskupaj ne obnese.
imate vi morda bolj enostaven predlog?
za odgovor se zahvaljujem
lp
Da ne boste preveč komplicirali naredite še eno preverjanje za zagon makra in odločitev prepustite izvajalcu:
Drugič pa skušajte ločiti podatke in obdelavo podatkov.
Lp
Koda: Izberi vse
Sub Makro1()
'
If MsgBox("Ali naj izvedem makro?", vbYesNo + vbCritical + vbDefaultButton2, "Izbira...") <> vbYes Then
MsgBox "Moj makro se ne izvaja."
Exit Sub
End If
MsgBox "Moj makro se izvaja."
End Sub
Lp
pozdravljen Stenly
hvala za kodo.ta koda sicer preverja tudi prvi zagon ,kar bi lahko zanemarili,če bi znali.no stvar je v tem,da ko so
zvezki že odprti in je makro že opravil delo,potem ga nikakor ne smem
več pognati(štala),naredi mi...ojoj.....Šele,ko zvezek zaprem in ponovno odprem,lahko sprožim makro(toda samo enkrat).
Če povem še enkrat,ko makro prvič odpiram se mi lahko sproži brez opozorila,
če pa ga hoče kdo še večkrat (ko je zvezek seveda odprt),potem pa naj
me opozori,oziroma naj mi ne dovoli ponovnega zagona.
ali je to rešljivo?
za pomoč se zahvaljujem
lp
hvala za kodo.ta koda sicer preverja tudi prvi zagon ,kar bi lahko zanemarili,če bi znali.no stvar je v tem,da ko so
zvezki že odprti in je makro že opravil delo,potem ga nikakor ne smem
več pognati(štala),naredi mi...ojoj.....Šele,ko zvezek zaprem in ponovno odprem,lahko sprožim makro(toda samo enkrat).
Če povem še enkrat,ko makro prvič odpiram se mi lahko sproži brez opozorila,
če pa ga hoče kdo še večkrat (ko je zvezek seveda odprt),potem pa naj
me opozori,oziroma naj mi ne dovoli ponovnega zagona.
ali je to rešljivo?
za pomoč se zahvaljujem
lp
V vašem primru potrebujete samo globalno spremenljivko in to je to:
PS: Koda deluje pravilno, ker VBA zagotovo (!) inicializira vse globalne spremenljivke in v primeru boolean vrednosti jih inicializirana false.
Koda: Izberi vse
Global MakroSeJeZeIzvedel As Boolean
Sub MojMakro()
If (MakroSeJeZeIzvedel) Then
MsgBox "Makra ni dovoljeno zaganjati več kot 1x!"
Exit Sub
End If
MakroSeJeZeIzvedel = True
' ostala koda vašega makra
End Sub
lp,
Matjaž Prtenjak
Administrator
Matjaž Prtenjak
Administrator