VBA - Ako vytvoriť kaskádové pole so zoznamom v userform
VBA - Ako vytvoriť kaskádové pole so zoznamom v userform
úvod
V tomto článku sa dozviete, ako vyplniť kaskádové pole so zoznamom pomocou metódy nepriamych.predpoklady
- 1 zošit
- 1 UserForm
- 3 combobox.
Vzorový zošit môžete tiež stiahnuť tu: //cjoint.com/14au/DHhootCLYVh.htm
Správa názvov v programe Excel
Ak chcete definovať názvy v zošite programu Excel, môžete:- Excel 2007 alebo staršia verzia: Vložiť> Mená> Definovať .
- Ako v programe Excel 2010: Vzorce pásu> Definujte názov.
Kód pre kombobox
Chceme, aby sa stalo nasledovné:- Po načítaní UserForm bude ComboBox1 vyplnený.
- Ostatné zoznamy budú vyplnené na základe hodnôt prvého.
Vyplnenie prvého zoznamu
Ak chcete vyplniť pole so zoznamom s názvom pomenovaného rozsahu zošita, syntax je:- ComboBox1.List = Application.Transpose (Range ("monNom"))
Vymazanie ComboBoxu:
- Combobox1.Clear
Čo nám dáva kód na vyplnenie prvého rozbaľovacieho zoznamu pri načítaní UserForm:
Private Sub UserForm_Initialize () ComboBox1.Clear ComboBox1.List = Application.Transpose (Rozsah ("Dep")) ComboBox2.Clear ComboBox3.Clear End Sub
Vyplnenie 2. zoznamu
Keď je v prvom rozbaľovacom zozname vybratá hodnota, bude (text zobrazený v poli ComboBox) zodpovedať názvu zošita.Ak chcete zobraziť obsah buniek pomenovaného rozsahu, použijeme udalosť Zmeniť:
Private Sub ComboBox1_Change () 'Combobox département Vyhnite sa chybe generovanej, keď používateľ odstránil obsah ComboBox1 Ak ComboBox1.Value = "" Potom ukončite Sub ComboBox2.Clear ComboBox3.Clear ComboBox2.List = Application.Transpose (Range (NomRange)) Koniec náhradník
Pre tretie pole so zoznamom:
Private Sub ComboBox2_Change () 'Combobox communes Ak ComboBox2.Value = "" Potom Exit Sub ComboBox3.Clear ComboBox3.List = Application.Transpose (Range (NomRange)) End Sub
Bežné chyby
Bezmenný rozsah
Názov zadaný v poli ComboBox sa nezhoduje so žiadnym názvom pracovného zošita. Toto sa stane, keď názov nebol definovaný. Ak chcete tento problém obísť, vytvoríme malú funkciu, ktorá bude prechádzať všetkými názvami zošita:Funkcia NomDefini (Nom As String) Ako Boolean Dim Noms As Name NomDefini = False pre každé Noms V ThisWorkbook.Names Ak Noms.Name = Nom Potom NomDefini = True: Ukončiť funkciu Next Noms End Function
Chyba vstupu
Ako si všimnete vo vzorovom súbore, definovanie mien neberie do úvahy špeciálne znaky alebo medzery. V niektorých situáciách možno budete musieť upraviť premenné:Tu je príklad:
Funkcia CaracSpec (Nom As String) As String CaracSpec = Nahradiť (Nom, "", "_") CaracSpec = Nahradiť (CaracSpec, "-", "_") Funkcia ukončenia
Vyplnený kód
Možnosť Explicit Private Sub UserForm_Initialize () ComboBox1.Clear ComboBox1.List = Application.Transpose (Rozsah ("Dep")) ComboBox2.Clear ComboBox3.Clear End Sub Private Sub ComboBox1_Change () 'Combobox département Ak ComboBox1.Value = "" Potom ukončiť Sub ComboBox2.Clear ComboBox3.Clear Dim NomRange As String NomRange = CaracSpec (ComboBox1.Value) Ak NomDefini (NomRange) Potom ComboBox2.List = Application.Transpose (Range (NomRange)) Else ComboBox2.AddItem "" "Aucune commune" "" End If End Sub Private Sub ComboBox2_Change () 'Combobox communes Ak ComboBox2.Value = "" Potom Exit Sub ComboBox3.Clear Dim NomRange As String NomRange = CaracSpec (ComboBox2.Value) Ak NomDefini (NomRange) Potom ComboBox3.List = Application.Transpose (Rozsah (NomRange)) Else ComboBox3.AddItem "" "Aucune rue" "" End Ak End Sub Funkcia NomDefini (Nom As String) Ako logický Dim Noms ako názov NomDefini = False pre každé Noms In ThisWorkbook.Names Ak Noms.Name = Nom Potom NomDefini = True: Ukončenie funkcie Next Noms End Function Function Carac Spec (Nom As String) As String CaracSpec = Nahradiť (Nom, "", "_") CaracSpec = Nahradiť (CaracSpec, "-", "_") Ukončiť funkciu
Odkaz na stiahnutie
Stiahnite si vzorový list na tomto odkaze: //cjoint.com/?DHhootCLYVhVBA - Ako vytvoriť kaskádové pole so zoznamom v userform
úvod
V tomto článku sa dozviete, ako vyplniť kaskádové pole so zoznamom pomocou metódy nepriamych.predpoklady
- 1 zošit
- 1 UserForm
- 3 combobox.
Vzorový zošit môžete tiež stiahnuť tu: //cjoint.com/14au/DHhootCLYVh.htm
Správa názvov v programe Excel
Ak chcete definovať názvy v zošite programu Excel, môžete:- Excel 2007 alebo staršia verzia: Vložiť> Mená> Definovať.
- Ako v programe Excel 2010: Vzorce pásu> Definujte názov.
Kód pre kombobox
Chceme, aby sa stalo nasledovné:- Po načítaní UserForm bude ComboBox1 vyplnený.
- Ostatné zoznamy budú vyplnené na základe hodnôt prvého.
Vyplnenie prvého zoznamu
Ak chcete vyplniť pole so zoznamom s názvom pomenovaného rozsahu zošita, syntax je:- ComboBox1.List = Application.Transpose (Range ("monNom"))
Vymazanie ComboBoxu:
- Combobox1.Clear
Čo nám dáva kód na vyplnenie prvého rozbaľovacieho zoznamu pri načítaní UserForm:
Private Sub UserForm_Initialize () ComboBox1.Clear ComboBox1.List = Application.Transpose (Rozsah ("Dep")) ComboBox2.Clear ComboBox3.Clear End Sub
Vyplnenie 2. zoznamu
Ak je v prvom rozbaľovacom zozname vybratá hodnota, bude (text zobrazený v poli ComboBox) zodpovedať názvu zošita.Ak chcete zobraziť obsah buniek pomenovaného rozsahu, použijeme udalosť Zmeniť:
Private Sub ComboBox1_Change () 'Combobox département Vyhnite sa chybe generovanej, keď používateľ odstránil obsah ComboBox1 Ak ComboBox1.Value = "" Potom ukončite Sub ComboBox2.Clear ComboBox3.Clear ComboBox2.List = Application.Transpose (Range (NomRange)) Koniec náhradník
Pre tretie pole so zoznamom:
Private Sub ComboBox2_Change () 'Combobox communes Ak ComboBox2.Value = "" Potom Exit Sub ComboBox3.Clear ComboBox3.List = Application.Transpose (Range (NomRange)) End Sub
Bežné chyby
Bezmenný rozsah
Názov zadaný do ComboBoxu nezodpovedá žiadnemu názvu zošita, pretože ešte nebol definovaný. Aby sme tento problém obišli, vytvoríme malú funkciu. jehoúlohou je slučka cez všetky názvy zošita:
Funkcia NomDefini (Nom As String) Ako Boolean Dim Noms As Name NomDefini = False pre každé Noms V ThisWorkbook.Names Ak Noms.Name = Nom Potom NomDefini = True: Ukončiť funkciu Next Noms End Function
Chyba vstupu
Ako si všimnete vo vzorovom súbore, definovanie mien neberie do úvahy špeciálne znaky alebo medzery. V niektorých situáciách môže byť potrebné upraviť premennú:Tu je príklad:
Funkcia CaracSpec (Nom As String) As String CaracSpec = Nahradiť (Nom, "", "_") CaracSpec = Nahradiť (CaracSpec, "-", "_") Funkcia ukončenia
Vyplnený kód
Možnosť Explicit Private Sub UserForm_Initialize () ComboBox1.Clear ComboBox1.List = Application.Transpose (Rozsah ("Dep")) ComboBox2.Clear ComboBox3.Clear End Sub Private Sub ComboBox1_Change () 'Combobox département Ak ComboBox1.Value = "" Potom ukončiť Sub ComboBox2.Clear ComboBox3.Clear Dim NomRange As String NomRange = CaracSpec (ComboBox1.Value) Ak NomDefini (NomRange) Potom ComboBox2.List = Application.Transpose (Range (NomRange)) Else ComboBox2.AddItem "" "Aucune commune" "" End If End Sub Private Sub ComboBox2_Change () 'Combobox communes Ak ComboBox2.Value = "" Potom Exit Sub ComboBox3.Clear Dim NomRange As String NomRange = CaracSpec (ComboBox2.Value) Ak NomDefini (NomRange) Potom ComboBox3.List = Application.Transpose (Rozsah (NomRange)) Else ComboBox3.AddItem "" "Aucune rue" "" End Ak End Sub Funkcia NomDefini (Nom As String) Ako logický Dim Noms ako názov NomDefini = False pre každé Noms In ThisWorkbook.Names Ak Noms.Name = Nom Potom NomDefini = True: Ukončenie funkcie Next Noms End Function Function Carac Spec (Nom As String) As String CaracSpec = Nahradiť (Nom, "", "_") CaracSpec = Nahradiť (CaracSpec, "-", "_") Ukončiť funkciu