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:
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 :)