Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Excel Macro Run-time error '1004' neexistující data, pomoc, díky

Zdar profíci. Dělám nějaké Excel macro a trochu jsem narazil při ošetřování chyb ve zdroji.
Ve zkratce, je jeden xls soubor kde vezme hodnotu, tu hledá jako list v jiném souboru a z daného listu pak vrátí konkrétní hodnotu.
Když list nenajde, tak má vepsat nějakou chybu a pokračovat dále.
Tohle funguje, ale bohužel když vrací chyby opakovaně, tak se macro ukončí. Napadá někoho jak to ošetřit?
Přikládám kousek kódu,
PS: Zápis bude možná trochu nelogický s tunou chyb, ale nejsem Macro guru, učím se

Do While Range("A" & radek & " ").Value <> ""
stredisko = Range("A" & radek & " ").Value

sloupec = 3

cislo = ExecuteExcel4Macro("VLookup(" & stredisko & ",'[Jednotkové ceny_komplet 2013.xls]data'!R1C1:R200C20,3,False)")

If IsError(cislo) Or Not IsNumeric(cislo) Then cislo = 0

If cislo < 10 And cislo > 0 Then

cesta = "'[Stavy médií 2012.xls]" & stredisko & "'"

stavy = ExecuteExcel4Macro("VLookup( ""*ELEKTRO*"" ," & cesta & "!R1C1:R5C20," & mesic & ",False)")
On Error GoTo nenalezeno

If IsError(stavy) Or Not IsNumeric(stavy) Or stavy = 0 Then
nenalezeno:
stavy = 0
cena = 0
'MsgBox (stavy & " " & stredisko)
Cells(radek, sloupec).Value = "**Data nenalezena**"
GoTo pokracuj
End If

naklady = ExecuteExcel4Macro("VLookup( " & stredisko & ",'[Plány 2013_Rozpad nákladů.xls]finální oprava 1'!R1C4:R200C20,2,False)")
If IsError(naklady) Then naklady = 0

cena = stavy * cislo
Cells(radek, sloupec).Value = cena * naklady / 100
Else

naklady = ExecuteExcel4Macro("VLookup( " & stredisko & ",'[Plány 2013_Rozpad nákladů.xls]finální oprava 1'!R1C4:R200C20,2,False)")
If IsError(naklady) Or naklady = blank Then naklady = 100

If Not IsNumeric(cislo) Then cislo = 0

Cells(radek, sloupec).Value = cislo * naklady / 100
cena = cislo

End If

If Not IsNumeric(cislo) Then cena = 0

pokracuj:

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
No, moc jsem to nezkoumal (ono se to ani moc nedá), ale jeden problém tam vidím: při chybě skočíš na… nový
MachR55 26.09.2013 14:31
MachR55
jj, díky za odkazy, nějak to dávám už dohromady :) poslední
xmagicx 26.09.2013 15:28
xmagicx

No, moc jsem to nezkoumal (ono se to ani moc nedá), ale jeden problém tam vidím: při chybě skočíš na návěští "nenalezeno", ale už tu obsluhu chyby neukončíš příkazem RESUME. Takže po skoku je další kód považován za obsluhu chyby. Celý je to navíc zamotaný v tom, že tu obsluhu chyby máš v cyklu "Do While" a v já-nevím-kolikátým-vnořeným IFu, takže z toho při běhu musí zákonitě vzniknout docela slušnej maglajs.
Podívej se, jak se správně obsluha chyb ve VBA má řešit - třeba zde nebo zde.

Zpět do poradny Odpovědět na původní otázku Nahoru