VBA chování skriptu při chybě

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod pb03 6. 11. 2019 12:56

Pěkný den,
mám začátečnický dotaz:
mám makro v Excelu ve VBA. ve zkratce je v něm toto:

Sub Makro1()

On error goto handler
For i = 12 To n
.......

Next i
handler: Makro1

End Sub

Potřebuju, když se stane error a znovu se načte spustí Makro1 , aby pokračovalo od posledního použité hodnoty proměnné "i"

Díky předem za pomoc.
PB
pb03
Kolemjdoucí

Odeslat příspěvekod Chipoun 6. 11. 2019 16:55

"Znovu se načte spustí" jakože ho uživatel ručně znovu spustí. Nebo ho volá jiné makro?
Chipoun
Junior

Odeslat příspěvekod pb03 6. 11. 2019 20:29

to udělá řádek
On Error goto handler

handler:
Makro1

chápu to tak, že "pokud nastane chyba, přejdi na handler", a handler říká "spusť Makro1"
jenže podle mně Makro1 se spustí znovu od i=12 tedy od začátku...

kdybych dal do handler: Resume Next
pokračovalo by to od místa kde to zhavarovalo??

Omlouvám se ale jsem opravdu začátečník.
Díky. PB
pb03
Kolemjdoucí

Odeslat příspěvekod Chipoun 7. 11. 2019 05:44

Tvým cílem je jen to, aby error kód nezastavil a makro pokračovalo?

V tom případě:
Sub Makro1()

On error resume next
For i = 12 To n
.......

Next i
On error goto 0

End Sub



Jinak to n máš někde definovaný?
Chipoun
Junior

Odeslat příspěvekod pb03 7. 11. 2019 06:48

díky za odpověď...
jenom na co tam je (musí to tam být?)
"on error goto 0" ?

jinak "n" je definovaný celkový počet řádků v DB.

PB.
pb03
Kolemjdoucí

Odeslat příspěvekod Chipoun 7. 11. 2019 17:18

Nemusí to tam být. Jen to vynuluje errory v paměti. A zastaví ignorování chyb v dalším kódu.
Chipoun
Junior

Odeslat příspěvekod pb03 8. 11. 2019 06:36

Děkuju za odpověď a ještě mám jeden dotaz.
Jak to celé funguje -
já bych potřeboval, když dojde při provádění cyklu k chybě aby se tu samou iteraci ( i) pokusil udělat znovu - prostě aby nepřeskakoval řádky.
Každý průchod cyklu je jeden řádek, kdy pro údaj na tom řádku tabulky se pošle dotaz do DB a výsledek se zapíše.
Tak prostě aby nepřeskakoval...
Ona chyba se většinou objeví, když je dlouhá odezva na dotaz...

Díky.
pb03
Kolemjdoucí

Odeslat příspěvekod Chipoun 9. 11. 2019 06:31

Tak bych tam dal aspon jen urcity pocet opakovani. Jinak se ti to muze zacyklit navzdy...
Pisu jen narychlo z mobilu, tak snad to bude fungovat. Kdybys dal cely kod, treba bychom nasli proc ti to ty errory haze... a lip je osetrili.

Sub Makro1()


For i = 12 To n
For r =1 to 3 'pocet opakovani jednoho radku pri chybe
On error resume next
.......

If err.number = 0 then goto probehlouspesne
On error goto 0
Next r
Probehlouspesne:
Next i

End Sub
Chipoun
Junior


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků