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:
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.
jj, díky za odkazy, nějak to dávám už dohromady :)