
Rozevírací seznam závislý na jiném rozevíracím seznamu v excelu
Dobrý den,
potřebuju vytvořit rozevírací seznam (který bude vypadat jako příloha 1) a bude nabízet hodnoty v závislosti na hodnotě v jiném otevíracím seznamu, vím že se to dá udělat přes ověření dat, ale když vytvořím seznam přes ověření dat vznikne mi jen šipka (viz příloha 2) a já potřebuji aby vypadal jako tabulka se šipkou (příloha 1).
Jaký je vůbec rozdíl mezi přílohou 1 a 2?
Děkuji
http://office.lasakovi.com/excel/data/propojene-seznamy-overeni-dat-excel/
Děkuji za odpověď, nicméně já vím jak to udělat přes ověření dat, ale potřebuji a by výsledný seznam vypadal graficky jako rozevírací seznam z ''Formulář'' viz příloha 1.
Špatně se vyjadřuji,
potřebuji vytvořit na sebe navazující rozbalovací seznamy ve ''Formulář'' stejně jako to jde v ověření dat, ve směs mi jde pouze o grafickou podobu.
dyť jo.
V prílohe prikladám ukážkový príklad z Lasákových stránok.
V stĺpci A si vyberieš zo zoznamu Rastlina - Zviera - Človek
V stĺpci B sa Ti v zozname objaví množina prípadov prislúchajúcich k navolenej hodnote v zozname stĺpca A
Nič sa Ti nezbalí do šipky.
Aha, ve Formulár?
Tak potom to už nie je Overovanie údajov ale vo VBA
To je můj problém, já to chápu jak to vytvořit ve ověření dat, ale nevím jak to udělat ve formuláři, protože potřebuji aby ten seznam graficky vypadal jak formulář, proto jsem dával v příloze ty dva obrázky, vysup musí vypadat jako obr1 ne jak 2
Uz nie som na pc, ale ak si dobre spominam, tak na Lasakovych stranke je i dalsi vzorovy subor, kde su pouzite tvoje graficke prvky.
Samozrejme ze si ich usporiadas podla svojich potrieb, ide o pouzitie principu sucinnosti.
Ak ti to do zajtra nikto neporadi, alebo na to neprides sam, mozeme sa na to zajtra cca o 9:00 pozriet.
Koukni do přiloženého souboru. Jedná se o prvky ActiveX. Data jsem si "vypůjčil ze souboru od Lasáka".
Karta Vzorce -> Definované názvy -> Správce Názvů = Obsahuje definované názvy jednotlivých voleb (použito ve VBA).
Combobox1 -> Vlastnosti -> ListFillRange -> oblast buněk A2:A4
Combobox2 = jednotlivé hodnoty se načítají pomocí VBA do kterého se dostaneš pomocí klávesové zkratky ALT+F11.
Mockrát děkuji.
Dá sa to aj s ovládacími prvkami formulára (bez overovania údajov), avšak len pomocou pomocných tabuliek. Viď príloha. To je zjednodušená ukážka druhého vzorového súboru Lasákových, čo som spomínal.
Pomocné tabuľky sú skryté v stĺpcoch G÷N.
Rozhodne elegantnejšie je riešenie Sikiho.
V oboch prípadoch sa situácia začne komplikovať, akonáhle bude tretí zoznam podmienený kombináciou prvých dvoch. Bude to len obsiahlejšie, nie však nemožné.
Děkuji za další možnost,
ale už jsem začal se Sikiho variantou která fungoval na všechny 3tabulky, nicméně jsem si to špatně uložil takže musím začít od znovu :(
Narazil jsem na problem, potřebuju vytvořit podmínku pro 3 box, box 1 = typ potrubí (8možností), box 2 = průměr potrubí (22možností), box3 výrobní rozměry (2možnosti), př. když box 1 = 1 a zároveň box 2 = 1 až 10 potom box 3 = možnost 1 (možnost1= 6m, možnost 2 = 100m)
jak to udělat?
To je presne to, na čo som myslel, keď som vravel, že sa to začne nabaľovať, akonáhle budeš potrebovať 3. box v závislosti od stavov prvého a druhého... Pre univerzálne riešenie musíš vytvoriť toľko zdrojov 3. zoznamu, koľko kombinácií 1. a 2. zoznamu bude vyžadovať koľko rôznych ponúk pre 3. box. Každému zdroju zoznamu 3. boxu priradiť meno a každej kombinácii výberu z 1. a 2. boxu musíš priradiť príslušné meno zoznamu.
Bez pomocnej bunky (pomocných buniek), kde sa Ti excelovskými vzorcami bude vyskladávať meno zdroja pre zoznam 3. boxu, to nepôjde.
3. box bude naviazaný na túto bunku, takže podľa toho, čo sa ti na základe výberu z 1. a 2. boxu vyskladá v tejto bunke, taký zdroj sa natiahne pre 3. box
Jasné?
Mimochodom, práve tento typ úlohy rieši ten druhý ukážkový súbor Lasákových, na ktorý som odkazoval, ale treba ho najprv hĺbkovo preštudovať, pochopiť a potom aplikovať pre svoj prípad...
Private Sub ComboBox30_Change()
Dim x As Byte
Dim y As Byte
On Error Resume Next
x = ComboBox30.ListIndex
y = ComboBox2.ListIndex
On Error GoTo 0
Select Case x
Case Is = 0
Select Case y
Case Is = 0
ComboBox58.ListFillRange = ""
End Select
Case Is = 1
Select Case y
Case Is = 1 Or 2 Or 3 Or 4 Or 5 Or 6 Or 7 Or 8 Or 9 Or 10
ComboBox58.ListFillRange = "vera"
End Select
Case Is = 1
Select Case y
Case Is = 11 Or 12 Or 13 Or 14 Or 15 Or 16 Or 17 Or 18 Or 19 Or 20 Or 21 Or 22
ComboBox58.ListFillRange = "verb"
End Select
End Sub
Nešlo by jen nějak todle upravit, kdby to bylo v Pascalu tak použi ''if'' a ''then''
V podstate by to šlo poriešiť i takto ale máš tam chaos v Select Case.
Musíš dôsledne odlišovať Case pre x v rámci ktorého budeš mať množiny Case pre y.
Musíš prebrať všetky prípady x a všetky prípady y.
V rámci jedného Case pre x musíš prebrať všetky prípady pre y, t.j. nemôžeš pre jedno x prebrať len jednu množinu y a druhú množinu y dať do ďalšieho case x keď sa jedná o to isté x.
Významne sa Ti kód sprehľadní, ak budeš jednotlivé bloky odsadzovať aby na prvý pohľad bolo jasné, kde začína blok pre x a kde pre y... a pod...
Takže Tvoj kód po úprave:
P.S. Nie som si istý, či ListIndex môže byť 0 ale prikladám Ti link z ktorého vyčítaš možnosti a spôsoby použitia Select Case:
http://office.lasakovi.com/excel/vba-teorie-zaklady/select-case-excel-vba/
A myslím, že budeš musieť poošetrovať i ďalšie možné stavy: Case Else (záleží, či vylúčiš napr možnosť voliť v boxe 2 ak box 1 nie je navolený priradením prázdnej množiny ako zdroja pre box 2, alebo budeš musieť použiť Case Else)
Díky
akurát som to ešte upravoval, keď mi znemožnila Tvoja reakcia zmeniť pôvodný príspevok, takže ešte zjednodušenejšie:
super funguje, teď už jenom v tomto stylu udělám zbylých 7řádku a je to.
díky
pohoda, klídek, tabáček

Až budu mít hotový kód pro box 3 ta ho sem dám
Hlavne to otestuj, či neexistujú kombinácie, ktoré ostali neošetrené a týmpádom vedú do nezmyslov.
P.S. Neprehliadol si, že som tam doplnil ešte zjednodušenejšiu verziu?
Private Sub ComboBox30_Change()
Dim x As Byte
Dim y As Byte
On Error Resume Next
x = ComboBox2.ListIndex
y = ComboBox30.ListIndex
On Error GoTo 0
Select Case x
Case 0
Select Case y
Case 0
ComboBox58.ListFillRange = ""
End Select
Case 1
Select Case y
Case 1 To 10
ComboBox58.ListFillRange = "vera"
Case 11 To 22
ComboBox58.ListFillRange = "verb"
End Select
Case 2
Select Case y
Case 1 To 5
ComboBox58.ListFillRange = ""
Case 6 To 7
ComboBox58.ListFillRange = "vera"
Case 8 To 22
ComboBox58.ListFillRange = "verb"
End Select
Case 3
Select Case y
Case 1 To 7
ComboBox58.ListFillRange = "vera"
Case 8 To 22
ComboBox58.ListFillRange = "verb"
End Select
Case 4
Select Case y
Case 1 To 5
ComboBox58.ListFillRange = "verb"
Case 6 To 7
ComboBox58.ListFillRange = "vera"
Case 8 To 22
ComboBox58.ListFillRange = "verb"
End Select
Case 5
Select Case y
Case 1 To 10
ComboBox58.ListFillRange = "vera"
Case 11 To 22
ComboBox58.ListFillRange = "verb"
End Select
Case 6
Select Case y
Case 1 To 5
ComboBox58.ListFillRange = ""
Case 6 To 7
ComboBox58.ListFillRange = "vera"
Case 8 To 22
ComboBox58.ListFillRange = "verb"
End Select
Case 7
Select Case y
Case 1 To 7
ComboBox58.ListFillRange = "vera"
Case 8 To 22
ComboBox58.ListFillRange = "verb"
End Select
Case 8
Select Case y
Case 1 To 5
ComboBox58.ListFillRange = "verb"
Case 6 To 7
ComboBox58.ListFillRange = "vera"
Case 8 To 22
ComboBox58.ListFillRange = "verb"
End Select
End Select
End Sub
otestováno, funguje perfektně
Síce asi odsádzaš, ale sem si to vložil tak, že to nie je vidieť.
Ak sem vkladáš kód, najprv si v ikonách nad textovým poľom vyber šiestu ikonu Code a medzi ne vlep schránku so svojim kódom... tak schválne... ešte raz...
A ak funguje, potom OK. A vidím, že si zbadal aj to zjednodušenie vo forme "n To m"
No a keďže sa Ti tam u viacerých Case x opakujú tie isté delenia pre Case y, môžeš to spriahnuť a výsledný kód sa zjednoduší cca na polovicu:
A keďže je tam čiastočná zhoda medzi blokmi x=2, 6 a x=4, 8, dá sa to ešte zjednodušiť a celý kód bude:
No a ešte môžeme vyňať ComboBox58:
a už fakt dosť