< návrat zpět

MS Excel


Téma: Přechod na položku rozevíracího seznamu rss

Zaslal/a 9.6.2016 13:07

Hledám nějaký způsob, abych v dlouhém rozbalovacím seznamu nemusel myší/šipkou hledat potřebnou položku, ale abych napsáním písmene, na něž hledaná položka začíná, skočil alespoň na první položku, která na toto písmeno začíná, ideálně psaním dalšího písmene na další relevantní položku začínající na tato dvě písmena.

Zaslat odpověď >

Strana:  « předchozí  1 2 3
icon #032349
avatar
Karle, ja som nepísal, že by som like v tomto prípade použil, ale že by to šlo (vyhľadávanie obecne) napr. cez like. Krom toho, v článku dole sú linky na ďalšie možnosti, ako pracovať s reťazcami. Ten filter, čo uvádzaš, je samozrejme pre dosiahnutie toho, čo golfino zrovna rieši, vhodnejší.citovat
#032427
avatar

eLCHa napsal/a:

Ne, Like bych nepoužil.

Na tohle je výborná funkce Filter.
Data: Na List1 v objektu Tabulka - vybírám první sloupec
Formulář: TextBox1 a ListBox1
Vše obslouží tento krátký kód (testováno asi 20s - rozlišuje velká a malá písmena)Dim sValues() As Variant

Private Sub UserForm_Initialize()
sValues = Application.Transpose(List1.ListObjects(1).ListColumns(1).Range.Value)

Me.ListBox1.List = sValues
End Sub

Private Sub TextBox1_Change()
Me.ListBox1.List = Filter(sValues, TextBox1.Text)
End SubPokud nechcete rozlišovat velká a malá Me.ListBox1.List = Filter(sValues, TextBox1.Text, , vbTextCompare)


Hoj ogaři. Chtěl bych se zeptat, když naplním listBox datama z listu (např. Jmenama) a pak vyberu v tom listBoxu nějaké jméno, tak jak zjistím adresu toho co jsem vybral na listu (sloupec, řádek)?citovat
#032432
elninoslov
Uložte si niekam vlastnosť TextBox1.ListIndex. To je Index (poradové číslo) vybranej položky. Ďalej si to už ľahko spracujete podľa potreby.citovat
#032434
avatar

elninoslov napsal/a:

Uložte si niekam vlastnosť TextBox1.ListIndex. To je Index (poradové číslo) vybranej položky. Ďalej si to už ľahko spracujete podľa potreby.

elninoslov napsal/a:

Uložte si niekam vlastnosť TextBox1.ListIndex. To je Index (poradové číslo) vybranej položky. Ďalej si to už ľahko spracujete podľa potreby.


Hm to mi vrátí hodnotu v listBoxu, ale já potřebuji adresu na listu (např. data_klient - což je databáze s několika stovkama klientů), kde se konkrétní jmého
(klient nachází), abych mohl dále natáhnout hodonty z databáze a vyplnit je do formuláře pro tisk. 1 Celé to fachčí tak, že na Listu1 mám formulář a tlačítko vyhledat klienta. Když na to kliknu, tak se mi otevře formulář pro vyhledání klienta, kde do texBoxu napíšu méno a ono se mi to v listBoxu vyhledává. Pak v listBoxu kliknu na konkrétního klienta a potřeboval bych zjistit na kterém řádku v databázi (list2 "data_klient") se klient nachází, abych si mohl dotáhnout další hodnoty do formuláře na listu1. 4 Jinak to budu muset asi řešit nějak svyhledat, nebo něco takového.citovat
icon #032435
eLCHa
potřeboval bych zjistit na kterém řádku v databázi (list2 "data_klient") se klient nachází

Pokud načítáte souvislou oblast, např. Range("A1:A100"), tak to vám právě řekne ListIndex (tuším, že začíná 0) takže přesněji ListIndex + 1.
Range("A1:A100").Cells(lb.ListIndex + 1)
Pokud ta oblast není souvislá nebo s daty v ListBoxu něco vyvádíte (např. řazení) - tak si adresu nebo řádek uložte jako další (nezobrazenou) hodnotu listboxu.
lb.AddItem Range.Value
lb.List(lb.ListCount - 1, 1) = Range.Address

Pokud ten listbox filtrujete, jak je v tomto tématu - tak nejsrozumitelnější pro vás bude použít vyhledávací funkci - nejpravděpodobněji Worksheetfunction.Match

Píšu to zbrucha - pokud to není přesné, berte jako inspiraci a nasměrování - dolaďte si.citovat
#032443
avatar

eLCHa napsal/a:

potřeboval bych zjistit na kterém řádku v databázi (list2 "data_klient") se klient nachází

Pokud načítáte souvislou oblast, např. Range("A1:A100"), tak to vám právě řekne ListIndex (tuším, že začíná 0) takže přesněji ListIndex + 1.
Range("A1:A100").Cells(lb.ListIndex + 1)
Pokud ta oblast není souvislá nebo s daty v ListBoxu něco vyvádíte (např. řazení) - tak si adresu nebo řádek uložte jako další (nezobrazenou) hodnotu listboxu.
lb.AddItem Range.Value
lb.List(lb.ListCount - 1, 1) = Range.Address
Pokud ten listbox filtrujete, jak je v tomto tématu - tak nejsrozumitelnější pro vás bude použít vyhledávací funkci - nejpravděpodobněji Worksheetfunction.Match

Píšu to zbrucha - pokud to není přesné, berte jako inspiraci a nasměrování - dolaďte si.


Tak jsem to vyřešil takto (s využitím nápovědy na netu) 1 :


Private Sub UserForm_Initialize()
Dim lbtarget As msforms.ListBox
Dim rngSource As Range
Dim sloupec, radek As Variant
sloupec = 2
radek = 2

Do While (Worksheets("database_klientu").Cells(radek, sloupec).Value <> "")
radek = radek + 1
Loop

radek = radek - 1

'Set reference to the range of data to be filled
Set rngSource = Worksheets("database_klientu").Range("A2:B" & radek)

'Fill the listbox
Set lbtarget = Me.ListBox1
With lbtarget
'Determine number of columns
.ColumnCount = 2
'Set column widths
.ColumnWidths = "130;130"
'Insert the range of data supplied
.List = rngSource.Value
End With
End Sub


Ale nechce mi to filtrovat když vypisuji např. číslo klienta, nebo jméno klienta. Asi budu muset vložit tabulku do listu (tomu jsem se chtěl vyhnout) 8 ale vaše řešení je zase nejjednodušší tak tam tu tabulku asi frknu 1


Private Sub TextBox1_Change()
Me.ListBox1.List = Filter(sValues, TextBox1.Text)
End Sub


Budu muset zase pátrat 8

Dal by se váš kod upravit aby načítal dva sloupce?
Dim sValues() As Variant

Private Sub UserForm_Initialize()

sValues = Application.Transpose(List1.ListObjects(1).ListColumns(1).Range.Value)



Me.ListBox1.List = sValues

End Sub


Tak jsem si poupravil kod:
Dim sValues() As Variant

Dim radek, sloupec As Variant

Private Sub ListBox1_Click()
Dim sloupec As Variant
sloupec = ListBox1.Value
End Sub

Private Sub TextBox1_Change()
Set lbtarget = Me.ListBox1
lbtarget.List = Filter(rngSource, TextBox1.Text, , vbTextCompare)
End Sub

Private Sub UserForm_Initialize()
'Macro Purpose: To populate a multi-column listbox with data from
' a worksheet range

Dim lbtarget As msforms.ListBox


sloupec = 3
radek = 2

Do While (Worksheets("databazeAll").Cells(radek, sloupec).Value <> "")
radek = radek + 1
Loop

radek = radek - 1

'Set reference to the range of data to be filled
Set rngSource = Worksheets("databazeAll").Range("C2:D" & radek)

'Fill the listbox
Set lbtarget = Me.ListBox1
With lbtarget
'Determine number of columns
.ColumnCount = 2
'Set column widths
.ColumnWidths = "130;130"
'Insert the range of data supplied
.List = rngSource.Value
End With
End Sub


Ale když zadávám něco do textBoxu tak mi to nefiltruje prosím pomooooc 8citovat
#032506
avatar
Chtěl jsem se zeptat, jestli byste mi mohl někdo pomoci s tou mojí záležitostí. Dělám si databázi klientů a potřeboval bych to nějak dokončit, ale asi jsem úplně blbej (tím nechci říci že jsem bůhví jak dobrej ve vba)

Ten kód od eLCHa funguje tak jak máDim sValues() As Variant

Private Sub UserForm_Initialize()
sValues = Application.Transpose(List16.ListObjects(1).ListColumns(1).Range.Value)
Me.ListBox1.List = sValues
End Sub

Private Sub TextBox1_Change()
Me.ListBox1.List = Filter(sValues, TextBox1.Text)
End Sub
, ale já bych ve formuláři "vyhledat_klienta" potřeboval zobrazovat 2 sloupce. V tabulce mám vložen v prvním sloupci rodné číslo a ve druhém sloupci příjmení, adresu atd.... A potřeboval bych když do textBoxu napíšu rč, nebo příjmení tak aby mi to ukazovalo oba dva sloupce pro kontrolu, jsetli jsem našel toho správného človíčka. Pak mi to taky načítá komplet celou vloženou tabulku i když tam mám jen 2 řádky. Nešlo by nějak poradit, nebo alespoň navést na tu správnou cestu?

Předem děkujicitovat

Strana:  « předchozí  1 2 3

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

lubo • 19.4. 16:30

Makro smyčka

MilanKop • 19.4. 10:46

Makro smyčka

elninoslov • 19.4. 9:02

Čas od do

elninoslov • 19.4. 8:46

Čas od do

jarek1111 • 18.4. 13:46

Čas od do

lubo • 18.4. 11:13

Čas od do

jarek1111 • 18.4. 8:32