

Excel - VBA - jak ošetřit # v makru
Dobrý den.
Prosím o pomoc s následujícím skriptem.
Při zpracování tabulky končí některé řádky hodnotou #NENÍ_K_DISPOZICI v buňce. Já potřebuji tyto řádky makrem vyhledat a vymazat. Sloupec s chybovou hodnotou buňky #NENÍ_K_DISPOZICI vložím do jiného jako hodnotu a tím dostanu v buňce místo chyby #NENÍ_K_DISPOZICI text #NENÍ_K_DISPOZICI.
Problém je v tom, že # je náhradní znak pro numeriku a když chci obsah buňky otestovat, tak test končí chybou "type mismatch".
Je možné v testu nějak význam znaku # potlačit aby skript fungoval?
Sub maz_nenalezene()
ActiveCell.Range("A1:A1").Select
Selection.EntireRow.Delete
ActiveCell.Select
End Sub
Sub Vymaz_nenalezene()
ActiveCell.SpecialCells(xlLastCell).Select
Selection.End(xlToLeft).Select
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Range("A1").Select
posledni = ActiveCell.Row - 1
Range("E2").Select
For beh = 1 To posledni
If ActiveCell.Value = "#NENÍ_K_DISPOZICI" Then
maz_nenalezene
Else
ActiveCell.Offset(1, 0).Range("A1").Select
End If
Next
End Sub
no a ak ti funguje zvyšok kódu čo máš (mne sa zdá čudný), tak miesto
If ActiveCell.Value = "#NENÍ_K_DISPOZICI" Then
daj
If WorksheetFunction.IsError(ActiveCell) Then
a pôjde ti to tiež ;)
a dokonca stačí aj:
If IsError(ActiveCell) Then
Děkuji, toto je plně funkční.
Funkce iserror(funkce) na to použít nešla.
JE.CHYBA Hodnota odkazuje na libovolnou chybovou hodnotu kromě #NENÍ_K_DISPOZICI.
neviem, či je jasné, že pod pojmom "funkce" som chápal zápis TEJ funkcie, ktorá je vpísaná do bunky a vracia chybovú hodnotu!
Keďže neviem, aká funkcia ti vracia tú chybovú hodnotu, nemohol som ti ju ani priamo napísať, preto som miesto naj napísal len všeobecne "funkce"
Pretože to MUSÍ fungovať ;)
Tam malo byť NAPR: iserror(vlookup(A1;D1:F500;2;false))
a ja som musel zjednodušene napísať iserror (funkce)
rozumieme sa? ;)
Vyskúšaj, aj to sa zíde ;)
alebo som špatne pochopil, že #NENÍ_K_DISPOZICI nie je zachytená ako chyba???
Ten řádek "JE.CHYBA (iserror) Hodnota odkazuje na libovolnou chybovou hodnotu kromě #NENÍ_K_DISPOZICI." je z nápovědy. Skutečně při tom hlášení nedojde k zachycení chyby.
A ono to skutečně chyba není i když to má podobný formát zápisu. Je to výsledek funkce SVYHLEDAT (mám český office a eng názvy funkcí bohužel neznám) v případě, že je nastaven typ 0 a v prohledávané tabulce požadovaný záznam není.
Tvé řešení s If IsError(ActiveCell) Then mi pomohlo a už to funguje jak potřebuji.
Dík.
Sorry ale nejde mi do hlavy aby to Excel vo svojom vzorci nevyhodnotil ako chybu, keď to VBA ako chybu vyhodnotí...
Preto som si to odskúšal a mne to funguje aj vo vzorci v Exceli.
Prikladám súbor s dôkazom, máš to tam ošetrené aj s funkciou IsError aj s funkciou IfError
A zhodou okolností som v predošlej mojej odpovedi, kde som upresňoval ako je myslený výraz "funkce", tiež použil funkciu Svyhledat (Vlookup).
Ty keď otvoríš tento súbor, tvoja verzia bude mať názvy funkcií už preložené do češtiny, tak uvidíš, ktoré funkcie som tam použil.
Ale dôležité je, že ti to cez VBA vyriešilo to, čo potrebuješ.
Aj tak uvítam info o tom, prečo si vyššie písal, že ti to nešlo, keď podľa priloženého súboru to ide... Len sme si nerozumeli?
Je pravda, že som možno nenavodil stav, kedy dáva hlášku NENI K DISPOZICI, lebo mne pre tento príklad vracia NEDOSTUPNY.
Pre aký prípad vracia hlášku NENI K DISPOZICI?
Problém je ve vyhodnocující funkci.
Předpokládal jsem, že funkce IsError by měla být v české verzi JE.CHYBA. Ty ve svém příkladě ale používáš pro test českou funkci JE.CHYBHODN a ta už na #NENÍ_K_DISPOZICI reaguje. JE.CHYBA ne.
Druhý problém je má nepozornost. Nevšiml jsem si že používáš jak funkci iserror, tak i iferror.
Hlášku #NENÍ_K_DISPOZICI vrací funkce SVyhledat, když požadovaný údaj ve druhé tabulce nenalezne. Viz příloha.
Rozumiem, šlo o dve rozne funkcie:
je.chyba (iserr) = nevyhodnotí ako chybu
je.chybhodn (iserror) = vyhodnotí ako chybu
mne však neukazuje NENI_K_DISPOZICI ale NEDOSTUPNÝ, preto mi to nebolo jasné...
OK, díky
R
Taky díky za pomoc.