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/?DHhootCLYVh

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

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 

Odkaz na stiahnutie

Stiahnite si vzorový list na tomto odkaze: //cjoint.com/?DHhootCLYVh
Predchádzajúci Článok Nasledujúci Článok

Najlepšie Tipy