VBA - Cum se creează o casetă combo cascadă într-o formă de utilizator

VBA - Cum se creează o casetă combo cascadă într-o formă de utilizator

Introducere

În acest articol veți învăța cum să umpleți o casetă combo cascadă utilizând metoda indirectă.

Cerințe preliminare

  • 1 registru de lucru
  • 1 UserForm
  • 3 combobox.

Puteți descărca, de asemenea, un registru de lucru exemplu: //cjoint.com/14au/DHhootCLYVh.htm

Gestionarea numelor în Excel

Pentru a defini nume într-un registru de lucru Excel, puteți:
  • Versiunea 2007 sau versiunea anterioară: Inserați> Nume> Definiți .
  • Începând cu Excel 2010: Formule panglică> Definiți un nume.

Codul comboboxului

Vrem să se întâmple următoarele:
  • La încărcarea UserForm, ComboBox1 va fi completat.
  • Celelalte cutii combo vor fi completate pe baza valorilor primului.

Completarea primei liste

Pentru a completa o casetă combo cu conținutul unei game numite din registrul de lucru, sintaxa este:
  • ComboBox1.List = Application.Transpose (Domeniu ("monNom"))

Pentru a șterge ComboBox-ul:

  • Combobox1.Clear

Ce ne dă codul pentru completarea primei liste de dropdown la încărcarea UserForm:

 Private Sub UserForm_Initialize () ComboBox1.Clear ComboBox1.List = Application.Transpose ("Dep")) ComboBox2.Clear ComboBox3.Clear End Sub 

Completarea celei de-a doua liste

Atunci când o valoare este selectată în prima listă derulantă, ea (textul afișat în ComboBox) corespunde unui nume de carte de lucru.

Pentru a afișa conținutul celulelor din intervalul numit, vom folosi evenimentul Schimbați:

 Private Sub ComboBox1_Change () 'Combobox département Evitați eroarea generată atunci când un utilizator a șters conținutul ComboBox1 Dacă ComboBox1.Value = "" Apoi Exit Sub ComboBox2.Clear ComboBox3.Clear ComboBox2.List = Aplicație.Transport (Domeniu (NomRange)) Sfârșit Sub 

Pentru a treia cutie combo:

 Private Sub ComboBox2_Change () 'Combobox comună Dacă ComboBox2.Value = "" Apoi Exit Sub ComboBox3.Clear ComboBox3.List = Application.Transpose (Range (NomRange)) End Sub 

Probleme comune

Gama fără nume

Numele introdus în ComboBox nu se va potrivi cu nici un nume de carte de lucru. Acest lucru se întâmplă atunci când numele nu a fost definit. Pentru a evita această problemă, vom crea o mică funcție de a trece prin toate denumirile din registrul de lucru:

 Funcția NomDefini (Nom ca șir) ca nume boolean Dim NomDefini = False pentru fiecare Noms în ThisWorkbook.Names Dacă Noms.Name = Nom Apoi NomDefini = Adevărat: Funcția de ieșire Următorul Noms End Funcția 

Eroare de intrare

După cum veți observa în fișierul eșantion, definirea numelor nu ia în considerare caracterele sau spațiile speciale. În unele situații, este posibil să fie necesar să modificați variabilele:

Iată un exemplu:

 Funcție CaracSpec (Nom ca șir) Ca șir CaracSpec = Înlocuiește (Nom, "", "_") CaracSpec = Înlocuiește (CaracSpec, "-", 

Codul completat

 () ComboBox1.Clear ComboBox1.List = Application.Transpose (Range ("Dep")) ComboBox2.Clear ComboBox3.Clear Sfarsit Sub Sub Private Sub ComboBox1_Change () 'Combobox département Daca ComboBox1.Value = "" Apoi Exit Sub ComboBox2.Clear ComboBox3.Clear Dim NomRange ca String NomRange = CaracSpec (ComboBox1.Value) Dacă NomDefini (NomRange) Apoi ComboBox2.List = Application.Transpose (Range (NomRange)) Alt ComboBox2.AddItem "" "Comuna Aucune" Sfarsit Daca se termina Sub Sub Private Sub ComboBox2_Change () 'Combobox comunele Daca ComboBox2.Value = "" Apoi Exit Sub ComboBox3.Clear Dim NomRange Ca String NomRange = CaracSpec (ComboBox2.Value) Daca NomDefini (NomRange) Apoi ComboBox3.List = Application.Transpose (NomRange)) Alse ComboBox3.AddItem "" "Aucune rue" "" Sfârșit Dacă funcția End Sub Sub NomDefini (Nom ca String) Ca Nume Boolean Dim NomDefini = False pentru fiecare Noms În ThisWorkbook.Names Dacă Noms.Name = Nom Apoi NomDefini = Adevărat: Ieșire Funcție Următor Nomuri Funcție Funcție Carac Spec (Nom ca șir) Ca șir CaracSpec = Înlocuiește (Nom, "", "_") CaracSpec = Înlocuiește (CaracSpec, "-", 

Descărcați linkul

Descărcați foaia de probă pe acest link: //cjoint.com/?DHhootCLYVh

VBA - Cum se creează o casetă combo cascadă într-o formă de utilizator

Introducere

În acest articol veți învăța cum să umpleți o casetă combo cascadă utilizând metoda indirectă.

Cerințe preliminare

  • 1 registru de lucru
  • 1 UserForm
  • 3 combobox.

Puteți descărca, de asemenea, un registru de lucru exemplu: //cjoint.com/14au/DHhootCLYVh.htm

Gestionarea numelor în Excel

Pentru a defini nume într-un registru de lucru Excel, puteți:
  • Versiunea 2007 sau versiunea anterioară: Inserați> Nume> Definiți.
  • Începând cu Excel 2010: Formule panglică> Definiți un nume.

Codul comboboxului

Vrem să se întâmple următoarele:
  • La încărcarea UserForm, ComboBox1 va fi completat.
  • Celelalte cutii combo vor fi completate pe baza valorilor primului.

Completarea primei liste

Pentru a completa o casetă combo cu conținutul unei game numite din registrul de lucru, sintaxa este:
  • ComboBox1.List = Application.Transpose (Domeniu ("monNom"))

Pentru a șterge ComboBox-ul:

  • Combobox1.Clear

Ce ne dă codul pentru completarea primei liste de dropdown la încărcarea UserForm:

 Private Sub UserForm_Initialize () ComboBox1.Clear ComboBox1.List = Application.Transpose ("Dep")) ComboBox2.Clear ComboBox3.Clear End Sub 

Completarea celei de-a doua liste

Atunci când o valoare este selectată în prima listă derulantă, ea va (textul afișat în ComboBox) corespunde unui nume de carte de lucru.

Pentru a afișa conținutul celulelor din intervalul numit, vom folosi evenimentul Schimbați:

 Private Sub ComboBox1_Change () 'Combobox département Evitați eroarea generată atunci când un utilizator a șters conținutul ComboBox1 Dacă ComboBox1.Value = "" Apoi Exit Sub ComboBox2.Clear ComboBox3.Clear ComboBox2.List = Aplicație.Transport (Domeniu (NomRange)) Sfârșit Sub 

Pentru a treia cutie combo:

 Private Sub ComboBox2_Change () 'Combobox comună Dacă ComboBox2.Value = "" Apoi Exit Sub ComboBox3.Clear ComboBox3.List = Application.Transpose (Range (NomRange)) End Sub 

Probleme comune

Gama fără nume

Numele introdus în ComboBox nu se potrivește cu niciun nume de carte de lucru deoarece nu a fost definit încă. Pentru a evita această problemă, vom crea o funcție mică. Este

rolul este de a trece prin toate denumirile din registrul de lucru:

 Funcția NomDefini (Nom ca șir) ca nume boolean Dim NomDefini = False pentru fiecare Noms în ThisWorkbook.Names Dacă Noms.Name = Nom Apoi NomDefini = Adevărat: Funcția de ieșire Următorul Noms End Funcția 

Eroare de intrare

După cum veți observa în fișierul eșantion, definirea numelor nu ia în considerare caracterele sau spațiile speciale. În unele situații, poate fi necesar să modificați variabila:

Iată un exemplu:

 Funcție CaracSpec (Nom ca șir) Ca șir CaracSpec = Înlocuiește (Nom, "", "_") CaracSpec = Înlocuiește (CaracSpec, "-", 

Codul completat

 () ComboBox1.Clear ComboBox1.List = Application.Transpose (Range ("Dep")) ComboBox2.Clear ComboBox3.Clear Sfarsit Sub Sub Private Sub ComboBox1_Change () 'Combobox département Daca ComboBox1.Value = "" Apoi Exit Sub ComboBox2.Clear ComboBox3.Clear Dim NomRange ca String NomRange = CaracSpec (ComboBox1.Value) Dacă NomDefini (NomRange) Apoi ComboBox2.List = Application.Transpose (Range (NomRange)) Alt ComboBox2.AddItem "" "Comuna Aucune" Sfarsit Daca se termina Sub Sub Private Sub ComboBox2_Change () 'Combobox comunele Daca ComboBox2.Value = "" Apoi Exit Sub ComboBox3.Clear Dim NomRange Ca String NomRange = CaracSpec (ComboBox2.Value) Daca NomDefini (NomRange) Apoi ComboBox3.List = Application.Transpose (NomRange)) Alse ComboBox3.AddItem "" "Aucune rue" "" Sfârșit Dacă funcția End Sub Sub NomDefini (Nom ca String) Ca Nume Boolean Dim NomDefini = False pentru fiecare Noms În ThisWorkbook.Names Dacă Noms.Name = Nom Apoi NomDefini = Adevărat: Ieșire Funcție Următor Nomuri Funcție Funcție Carac Spec (Nom ca șir) Ca șir CaracSpec = Înlocuiește (Nom, "", "_") CaracSpec = Înlocuiește (CaracSpec, "-", 

Descărcați linkul

Descărcați foaia de probă pe acest link: //cjoint.com/?DHhootCLYVh
Articolul Precedent Articolul Următor

Cele Mai Importante Sfaturi