» Poradna » Programy

VBA v Excelu, chyba kompilace

 |   |  Microsoft Windows 7 Firefox 21.0

V Excel tabulce mám dva sloupce. První obsahuje kód výrobku, např. "10.450" a do druhého chci doplnit jeho cenu, kterou najde VBA funkce "Hledej" v tabulce na druhém listu v sešitě, kam jsem načetl data v textovém tvaru z katalogu v PDF. Druhý list tedy obsahuje jeden sloupec s řádky s textem. VBA funkce hledej nejdříve prohledá celý list TXT a zjisti, zda tam najde kód výrobku, předaný funkci z prvního sloupce v prvním listu. Pokud ano, zavolá VBA funkce Hledej podprogram "Cena", kterému předá pozici nalezeného řádku v druhém listě TXT s daným kódem a začně od daného řádku hledat cenu pro daný kód výrobku. Ta ale nemusí být hned na stejném řádku s nalezeným kódem, ale může být dále i několik dalších řádku (mezi kódem výrobku a jeho cenou může být doprovodný text). Cena je vždy na jednom řádku ukončena v textu znaky ",-" a může být v následujích variantách: " 23,-" " 123,-" " 1 124,-" a " 12 345,-". Tj. v případě ceny větší než 1.000,- Kč je trojice číslic oddělena mezerou, a před začátkem vlastního číselného údaje ceny je také mezera. V textu ale může být i "...rozměry 125 m2 1 234,- nejlepší výrobek...".Nevím proč mi při spuštění funkce hlásí VBA chybu:Compile error:Expected Function or variablea podtrhne slovo "Cena" při volání tohoto podprogramu ve funkci Hledej.Program mám zatím jen v "pracovní fázi" a potřebuji ho odladit krokováním. To mi teď ale kvůli té chybě nejde. Vypadá to, že je nějaký problém s definicí proměnných nebo funkcí a podprogramem samotným. Ve VBA běžně neprogramuji.Global vArr As VariantPublic Function Hledej(kod As String) As StringDim j As LongDim Up As LongHledej = "Ne"vArr = Range("TXT!A1:A18160")Up = UBound(vArr)For j = LBound(vArr) To UBound(vArr)If InStr(vArr(j, 1), kod) ThenHledej = "Ano" & Cena(j, Up)If Hledej = "Ano" Then Exit ForEnd IfNext jEnd FunctionPublic Sub Cena(r As Long, Max As Long)Dim Cena As LongDim p As LongDim m As LongCena = 0For k = r To MaxIf InStr(vArr(k, 1), ",-") Thenp = InStr(vArr(k, 1), ",-") - 1m = InStr(Left(vArr(k, 1), Len(vArr(k, 1)) - p), " ")If Mid(vArr(k, 1), m - 2, "m2") ThenCena = Val(Mid(vArr(k, 1), m, Len(vArr(k, 1) - p)))If Cena > O Then Exit ForEnd IfIf IsNumeric(Mid(vArr(k, 1), m - 1, 1)) And Not IsNumeric(Mid(vArr(k, 1), m - 2, 1)) ThenCena = Val(Mid(vArr(k, 1), m - 1, Len(vArr(k, 1) - p)))End IfIf IsNumeric(Val(Mid(vArr(k, 1), m - 1))) And IsNumeric(Val(Mid(vArr(k, 1), m - 2))) And InStr(Mid(vArr(k, 1), m - 3), " ") ThenCena = Val(Mid(vArr(k, 1), m - 2, Len(vArr(k, 1) - p)))

Odpovědi na otázku

 |   |  Microsoft Windows 7 Firefox 21.0

Na konci programu se mi ještě schovalo:End IfEnd IfNext kEnd Sub

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 7 Opera 9.80

To bude tim, ze mas CENA definovane jako proceduru, ktera nic nevraci a pouzivas ji jako funkci. Deklaruj ji jako funkci, ne jako SUB

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Firefox 21.0

Díky, už to běhá .

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: 10, Kompilace, Cena, Exit, Trojice




Určitě si přečtěte

Tohle tak jednou zažít: Nová vzducholoď Airlander 10 s prosklenou podlahou

Tohle tak jednou zažít: Nová vzducholoď Airlander 10 s prosklenou podlahou

** Airlander 10 nabídne plavby vzduchem v interiéru s prosklenou podlahou ** Luxusní vzducholoď byla původně vyvíjena pro vojenské účely ** Počítá se s třídenními „kochacími“ výlety za poznáním

Karel Kilián | 7

Roboruka se 100 let učila otočit kostičku. Skutečné A.I. se možná nikdy nedočkáme

Roboruka se 100 let učila otočit kostičku. Skutečné A.I. se možná nikdy nedočkáme

** Strojové učení v posledních deseti letech dokázalo divy ** Používáme ho dnes každý den nejen ve vyhledávači ** A přesto se člověku nepřibližuje ani náznakem

Jakub Čížek | 59

Osudová havárie Concordu: Před 18 lety přišel konec nadzvukových dopravních letadel

Osudová havárie Concordu: Před 18 lety přišel konec nadzvukových dopravních letadel

** Concorde byl nejrychlejším dopravním letadlem ** Atlantik dokázal přeletět za cca 3 až 3,5 hodiny ** Před osmnácti lety tragická havárie provoz těchto letadel prakticky ukončila

David Polesný, Jiří Černý | 37


Aktuální číslo časopisu Computer

Jak vytvořit a spravovat vlastní web

Velký test herních klávesnic a DVB-T2 tunerů

Vše o formátu RAW

Vybíráme nejlepší základní desku