
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
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
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ě
No a ešte môžeme vyňať ComboBox58:
a už fakt dosť