< návrat zpět

MS Excel


Téma: EXCEL VBA vyhledání buňky rss

Zaslal/a 14.10.2021 21:09

Mohl by mně prosím někdo nasměrovat k řešení?
Na listu1 mám v buňce A2 údaj, který bych potřeboval vyhledat v oblasti na listu2, zjistit její řádek, na jeho základě vyčíst buňku na stejném řádku v jiném sloupci a její obsah vrátit do buňky B2 na listu1.
Je to obdoba =SVYHLEDAT(A2;List2!A1:E6;3;NEPRAVDA).
Inicializace události mi funguje, zatím po opouštění buňky A2 zapíšu její obsah přímo do B2. Zasekl jsem se s vyhledáním buňky v seznamu. Děkuji za nápady

Zaslat odpověď >

#051347
avatar
Range("List1!B2") = Application.WorksheetFunction.VLookup(Range("List1!A2"), Range("List2!A1:E6"), 3, 0)citovat
#051348
avatar
Děkuji, vypadalo to nadějně, ale končím vždy chybou:
"Run-time error '1004': method 'range' of object '_worksheet' failed".
Hledal jsem a zdá se, že by se měla měnit hodnota dotčených buněk při běhu funkce a tím se to opakuje.
Což by ale nemělo být, funkci schválně spouštím změnou jiné buňky, zdrojová buňka obsahuje text, cílová je prázdná a seznam jsem zkusil převést také na "pevná" data.citovat
#051349
avatar
Tak vše jinak, pokusil jsem se rozchodit tuto konstrukci na jednom listu a chyba byla stejná. Pak jsem zjistil, že problém je v odkazech na listy. Po chvíli hledání našel jiný způsob zápisu a vše je OK.
Místo "..VLookup(Range("List1!A2"),.."
nově ".. VLookup(List1.Range("A2"),..,
Děkuji za nasměrování.citovat
#051354
avatar

ben59 napsal/a:

... Po chvíli hledání našel jiný způsob zápisu a vše je OK.
Místo "..VLookup(Range("List1!A2"),.."
nově ".. VLookup(List1.Range("A2"),..,
Děkuji za nasměrování.


Pokud je List1 = Codename tak ano. Pokud je List1 = Name (to co je vidět na záložce listu) a Codename je jiné, tak je radost dočasná.citovat
#051362
avatar
List1 je Codename, Name mám jiné vlastní pojmenováni.citovat
#051363
elninoslov
Bez problémov funguje. Najskôr učite list, potom až range.
Sub Hladaj()
On Error Resume Next
List1.Range("B2").Value = WorksheetFunction.VLookup(List1.Range("A2"), List2.Range("A1:E6"), 3, 0)
If Err.Number <> 0 Then List1.Range("B2").Value = "nenašlo"
On Error GoTo 0
End Sub
Příloha: zip51363_hladaj.zip (17kB, staženo 11x)
citovat
#051364
elninoslov
Prípadne do modulu listu, a nič sa nebude ani opakovane volať:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Vysledok As Variant
If Not Intersect(Range("A2"), Target) Is Nothing Then
Vysledok = "nenašlo"
On Error Resume Next
Vysledok = WorksheetFunction.VLookup(Range("A2"), List2.Range("A1:E6"), 3, 0)
On Error GoTo 0
Application.EnableEvents = False
Range("B2").Value = Vysledok
Application.EnableEvents = True
End If
End Sub
Příloha: zip51364_hladaj2.zip (16kB, staženo 14x)
citovat
#051366
avatar
Ošetření chyby pro případ nenalezení jsem zatím nepoužil, vybírám jen z platných hodnot a zatím s tím problém nebyl. Zamezení opakované akce nebo zasmyčkování už jsem měl použito.

Děkuji všem za pomoc.citovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje