< 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 10x)
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 12x)
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

On-line nástroje

Formulář Faktura

Formulář Faktura IV

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

Aktivní diskuse

Čas od do

jarek1111 • 18.4. 13:46

Čas od do

lubo • 18.4. 11:13

Čas od do

jarek1111 • 18.4. 8:32

Čas od do

jarek1111 • 18.4. 8:31

Makro smyčka

MilanKop • 18.4. 7:18

Makro smyčka

elninoslov • 18.4. 0:18

Makro smyčka

MilanKop • 17.4. 21:33