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:

Předmět Autor Datum
jen pro info selže na : cislo = ExecuteExcel4Macro("VLookup(" & stredisko & ",'[Jednotkové ceny_komp…
xmagicx 26.09.2013 09:58
xmagicx
No, moc jsem to nezkoumal (ono se to ani moc nedá), ale jeden problém tam vidím: při chybě skočíš na…
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

jen pro info selže na :
cislo = ExecuteExcel4Macro("VLookup(" & stredisko & ",'[Jednotkové ceny_komplet 2013.xls]data'!R1C1:R200C20,3,False)")

protože list, který se doplňuje do proměnné "stredisko" neexistuje v daném sešitu. U 5ti předchozích zafunguje tak že nápis vepíše do buňky tak jak chci, ale jak už je těch chyb moc, macro se ukončí.

Děkuji

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