Stránka 1 z 2
rozbalovací seznam - aby byl pořád vidět
Napsal: 04 dub 2015 20:21
od atari
Ve sloupci C mám vytvořený rozbalovací seznam (pomocí ověření dat). Pokud ho chci použít tak musím nejdříve na buňku vložit kurzor (zdržuje to), a pak teprve kliknu na šipku, co jsou dva úkony. Potřebuji nějak zrušit ten první klik umístění kurzoru, prostě aby ta šipečka byla aktivní pořád a mohl na ní klikat bez umístování kurzoru. Je to možné nějak vymyslet?
Re: rozbalovací seznam - aby byl pořád vidět
Napsal: 05 dub 2015 00:38
od guest
a) Ne, s Data / Ověření ne. Jak funguje, víte - po aktivaci buňky. Nečekáte, že se buňka aktivuje na "hover", tj. po najetí kurzoru myši, že ne? Teoreticky lze odchytávat událost Selection_Change a po aktivaci buňky rozbalit roletku (ALT + šipka dolů).
b) Použijte ActiveX prvky Seznam nebo Pole se seznamem (ListBox, ComboBox).
Dovedu si představit, že se tohle vlákno rozroste - vyhledávání v prvku, prvky nebudou držet na místě, problémy s tiskem, počet zobrazených položek, ...
Re: rozbalovací seznam - aby byl pořád vidět
Napsal: 07 dub 2015 12:44
od atari
Děkuji za odpověď.
Co setýče ActiveX, tak jsem to zkoušel, a to není řešení, protože ovládací prvek lze propojit jenom s jednou buňkou, a já to potřebuji na celý sloupec (alespoň mě se to tedy na celý sloupec nepovedlo). EDIT - dodatečná oprava: lze to, ale já to neumím !!
Jako schůdné se mi jeví zachytávat událost Selection_Change, ale zatím se mi nepovedlo, aby VBA uměl udělat ALT + šipka dolů. Tak teď laboruji s použitím Userform.
Ohledně DATA / "Ověření dat" (možná u toho skončím, pokud nic nevymyslím) jsem ještě zjistil jednu "závadu", a sice když se kukrzorem vrátim na již vyplněnou buňku, tak se obsah buňky automaticky vymaže.
Re: rozbalovací seznam - aby byl pořád vidět
Napsal: 07 dub 2015 15:32
od eLCHa
atari píše:Co setýče ActiveX, tak jsem to zkoušel, a to není řešení, protože ovládací prvek lze propojit jenom s jednou buňkou, a já to potřebuji na celý sloupec (alespoň mě se to tedy na celý sloupec nepovedlo).
Nepište, že něco lze nebo nelze, pokud si tím nejste jistý a jen si to myslíte. Někdo si to přečte a bude si to myslet také.
Např. ListBox nebo ComboBox mají vlastnost
ListFillRangeTakže koukněte na ListBox ve spojení s touto vlastností.
Re: rozbalovací seznam - aby byl pořád vidět
Napsal: 08 dub 2015 10:27
od atari
Tak to upřesním:
Vlastnost
ListFillRange je oblast zdroje dat, kde lze zadat větší oblast buněk.
Vlastnost
LinkedCell je buňka, se kterou je prvek propojený (neboli kam se umísťuje hodnota), a to lze opravdu propojit jen s jednou buňkou. Já to potřebuji na celý sloupec (vždy na řádek, který edituji)
.
Tak jsem zkoušel měnit hodnotu
LinkedCell přes VBA:
Zápis:
ListBox1.LinkedCell = "a1" funguje (zde však nemohu měnit hodnotu)
Zápis:
ListBox1.LinkedCell = Cells(1, 1) nefunguje.
Jenže já tu hodnotu potřebuji měnit přes VBA. Má někdo nápad jak to vyřešit, nebo jestli něco dělám špatně?
Kód: Vybrat vše
Private Sub ListBox1_Click()
'ListBox1.LinkedCell = "a1"
ListBox1.LinkedCell = Cells(1, 1)
End Sub
Re: rozbalovací seznam - aby byl pořád vidět
Napsal: 08 dub 2015 12:20
od eLCHa
Moc nerozumím, přijde mi to jako něco jiného než jste se ptal v úvodním příspěvku...
Ale zřejmě chcete
Kód: Vybrat vše
ListBox1.LinkedCell = Cells(1, 1).Address
Re: rozbalovací seznam - aby byl pořád vidět
Napsal: 08 dub 2015 12:49
od atari
Díky moc, to je přesně ono.
Možná jsem se v úvodu nepřesně vyjádřil. Potřebuji do A1 zadat částku, a vedle do B1 vybrat hodnotu k čemu to patří (ze seznamu předdefinovaných hodnot). A pak A2 a B2 atd. A chtěl jsem, abych při tom výběru v "B" nemusel ten seznam hodnot rozklikávat, prostě aby byl pořád otevřený.
Re: rozbalovací seznam - aby byl pořád vidět
Napsal: 09 dub 2015 12:24
od atari
Tak přesně tohle jsem potřeboval (v příloze). Když kdekoliv ve sloupci D vložím kurzor, tak aby se mi u toho zobrazil již otevřený seznam hodnot, ze které si jedním kliknutím myši vyberu.
Re: rozbalovací seznam - aby byl pořád vidět
Napsal: 13 dub 2015 08:44
od VOM
Dobrý den
doplnil bych ještě
do yes větve ListBox1.Visible = True
a do no větve ListBox1.Visible = false
Aby poloha lisboxu nezávisela na velikosti písma v buňce tak snad
ListBox1.Top = Target.Top + ActiveCell.Height
ListBox1.Left = Target.Left + ActiveCell.Width
Prosím o vysvětlení jak se docílí toho, aby nehavarovalo, když už je v buňce jiná hodnota než se očekává.
děkuji
Milan
Re: rozbalovací seznam - aby byl pořád vidět
Napsal: 13 dub 2015 11:58
od atari
VOM píše:do yes větve ListBox1.Visible = True
a do no větve ListBox1.Visible = false.
Tohle jsem nepochopil, můžeš to nějak zkonkretizovat?
Poloha je dobrý nápad, jen jsem to upravil takto:
ListBox1.Top = Target.Top
ListBox1.Left = Target.Left + ActiveCell.Width
Aby makro nehavarovalo, tak stačí ošetřit aktivní buňku, zda obsahuje jiný text než v Listboxu, a pak ji vymazat. Toto ošetření však pro mě není žádoucí, protože tato situace by teoreticky neměla nastat. A pokud nastane, tak mě alespoň chybová hláška upozorní, a já budu moci provést kontrolu, kde se stala chyba.
Re: rozbalovací seznam - aby byl pořád vidět
Napsal: 13 dub 2015 13:30
od VOM
zdravím pěkně
takhle
If sloupec = 5 Then
ListBox1.Visible = True
ListBox1.Top = Target.Top + ActiveCell.Height
ListBox1.Left = Target.Left + ActiveCell.Width
ListBox1.LinkedCell = Cells(radek, 5).Address
Else
ListBox1.Visible = False
End If
Milan
--- Doplnění předchozího příspěvku (13 Dub 2015 13:30) ---
Re: rozbalovací seznam - aby byl pořád vidět
Napsal: 17 dub 2015 09:21
od atari
Tak jsem zrušil Listbox jako ActiveX, a předělal to na formulář. Potřeboval jsem, abych mohl ze seznamu vybírat šipkama (abych nemusel pořád šahat na myš). Jako ActiveX se mě nepodařilo to udělat na ovládání šipkaka, formulář to dělá automaticky. Mám dotaz:
Jak to udělat, abych ten formulář mohl zavřít stiskem "ENTER" na klávesnici. To jsem nikde nenašel. (Prostě abych vůbec nemusel používat myš.)
(Zatím to dělám tak, že klávesou "Tab" si přepnu kurzor na tlačítko "Zavři" a pak už přes ENTER formulář zavřu, ale ten "TAB" je už to klik navíc.)
Poznámka: mám to udělané tak, že formulář se objevuje, jen když je kurzor ve sloupci E.