VBA - Så här skapar du en kaskad kombinationsfält i en användarform

VBA - Så här skapar du en kaskad kombinationsfält i en användarform

Introduktion

I den här artikeln kommer du att lära dig hur du fyller i en kaskad kombinationsfält med hjälp av den indirekta metoden.

förutsättningar

  • 1 arbetsbok
  • 1 UserForm
  • 3 combobox.

Du kan också hämta en exempellagbok här: //cjoint.com/14au/DHhootCLYVh.htm

Hantera namn under Excel

För att definiera namn i en Excel-arbetsbok kan du antingen:
  • Excel 2007 eller tidigare version: Infoga> Namn> Definiera .
  • Från och med Excel 2010: Ribbon formler> Definiera ett namn.

Koden för comboboxen

Vi vill att följande ska hända:
  • När du laddar UserForm fylls ComboBox1.
  • De andra kombinationsfälten fylls utifrån värdena på den första.

Fyller i den första listan

För att fylla en kombinationsruta med innehållet i ett namngivna område i arbetsboken är syntaxen:
  • ComboBox1.List = Application.Transpose (Range ("monNom"))

Så här rensar du ComboBox:

  • Combobox1.Clear

Vad ger oss koden för att fylla den första rullgardinsmenyn vid lastningen av UserForm:

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

Fyller i den andra listan

När ett värde väljs i den första rullgardinsmenyn kommer det (texten som visas i ComboBox) att motsvara ett arbetsboksnamn.

För att visa innehållet i cellerna i det angivna intervallet använder vi ändringsevenemanget:

 Private Sub ComboBox1_Change () 'Combobox département Undvik buggen som genereras när en användare raderade innehållet i ComboBox1 Om ComboBox1.Value = "" Avsluta sedan ComboBox2.Clear ComboBox3.Clear ComboBox2.List = Application.Transpose (Range (NomRange)) Avsluta Sub 

För den tredje kombinationsrutan:

 Private Sub ComboBox2_Change () 'Combobox communes Om ComboBox2.Value = "" Avsluta sedan ComboBox3.Clear ComboBox3.List = Application.Transpose (Range (NomRange)) Slut Sub 

Vanliga buggar

Namnlösa Range

Namnet som anges i ComboBox matchar inte något arbetsboksnamn. Detta händer när namnet inte har definierats. För att kringgå detta problem skapar vi en liten funktion för att slinga igenom alla namn på arbetsboken:

 Funktion NomDefini (Nom As String) Som Boolean Dim Noms Som Namn NomDefini = Falskt För Varje Noms I ThisWorkbook.Names Om Noms.Name = Nom Då NomDefini = True: Avsluta Funktion Nästa Noms Slut Funktion 

Inmatningsfel

Som du kommer att märka i urvalsfilen tar inte hänsyn till specialtecken eller mellanslag vid definierande namn. I vissa situationer kan du behöva redigera variablerna:

Här är ett exempel:

 Funktion CaracSpec (Nom som sträng) Som sträng CaracSpec = Byt ut (Nom, "", "_") CaracSpec = Ersätt (CaracSpec, "-", "_") Slutfunktion 

Den färdiga koden

 Alternativ Explicit Private Sub UserForm_Initialize () ComboBox1.Clear ComboBox1.List = Application.Transpose (Range ("Dep")) ComboBox2.Clear ComboBox3.Clear End Sub Private Sub ComboBox1_Change () 'Combobox département Om ComboBox1.Value = "" Avsluta sedan Sub ComboBox2.Clear ComboBox3.Clear Dim NomRange Som String NomRange = CaracSpec (ComboBox1.Value) Om NomDefini (NomRange) Sedan ComboBox2.List = Application.Transpose (Range (NomRange)) Annan ComboBox2.AddItem "" "Aucune commune" Avsluta Om Slut Sub Privat Sub ComboBox2_Change () 'Combobox Kommuner Om ComboBox2.Value = "" Avsluta Sub ComboBox3.Clear Dim NomRange Som String NomRange = CaracSpec (ComboBox2.Value) Om NomDefini (NomRange) Då ComboBox3.List = Application.Transpose (Range (NomRange)) Annan ComboBox3.AddItem "" "Aucune rue" "" Avsluta om slutdelfunktion NomDefini (Nom som sträng) Som booleska dimma som namn NomDefini = Fel för varje noms i ThisWorkbook.Names Om Noms.Name = Nom Then NomDefini = True: Exit Funktion Nästa Noms Slut Funktion Funktion Carac Spec (Nom som sträng) Som sträng CaracSpec = Byt ut (Nom, "", "_") CaracSpec = Ersätt (CaracSpec, "-", "_") Slutfunktion 

Nedladdningslänk

Ladda ner provarket på den här länken: //cjoint.com/?DHhootCLYVh

VBA - Så här skapar du en kaskad kombinationsfält i en användarform

Introduktion

I den här artikeln kommer du att lära dig hur du fyller i en kaskad kombinationsfält med hjälp av den indirekta metoden.

förutsättningar

  • 1 arbetsbok
  • 1 UserForm
  • 3 combobox.

Du kan också hämta en exempellagbok här: //cjoint.com/14au/DHhootCLYVh.htm

Hantera namn under Excel

För att definiera namn i en Excel-arbetsbok kan du antingen:
  • Excel 2007 eller tidigare version: Infoga> Namn> Definiera.
  • Från och med Excel 2010: Ribbon formler> Definiera ett namn.

Koden för comboboxen

Vi vill att följande ska hända:
  • När du laddar UserForm fylls ComboBox1.
  • De andra kombinationsfälten fylls utifrån värdena på den första.

Fyller i den första listan

För att fylla en kombinationsruta med innehållet i ett namngivna område i arbetsboken är syntaxen:
  • ComboBox1.List = Application.Transpose (Range ("monNom"))

Så här rensar du ComboBox:

  • Combobox1.Clear

Vad ger oss koden för att fylla den första rullgardinsmenyn vid lastningen av UserForm:

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

Fyller i den andra listan

När ett värde väljs i den första rullgardinsmenyn kommer det (texten som visas i ComboBox) att motsvara ett arbetsboksnamn.

För att visa innehållet i cellerna i det angivna intervallet använder vi ändringsevenemanget:

 Private Sub ComboBox1_Change () 'Combobox département Undvik buggen som genereras när en användare raderade innehållet i ComboBox1 Om ComboBox1.Value = "" Avsluta sedan ComboBox2.Clear ComboBox3.Clear ComboBox2.List = Application.Transpose (Range (NomRange)) Avsluta Sub 

För den tredje kombinationsrutan:

 Private Sub ComboBox2_Change () 'Combobox communes Om ComboBox2.Value = "" Avsluta sedan ComboBox3.Clear ComboBox3.List = Application.Transpose (Range (NomRange)) Slut Sub 

Vanliga buggar

Namnlösa Range

Namnet som anges i ComboBox matchar inte något arbetsboksnamn eftersom det inte har definierats än. För att kringgå detta problem skapar vi en liten funktion. Dess

rollen är att gå igenom alla arbetsbokens namn:

 Funktion NomDefini (Nom As String) Som Boolean Dim Noms Som Namn NomDefini = Falskt För Varje Noms I ThisWorkbook.Names Om Noms.Name = Nom Då NomDefini = True: Avsluta Funktion Nästa Noms Slut Funktion 

Inmatningsfel

Som du kommer att märka i urvalsfilen tar inte hänsyn till specialtecken eller mellanslag vid definierande namn. I vissa situationer kan du behöva redigera variabeln:

Här är ett exempel:

 Funktion CaracSpec (Nom som sträng) Som sträng CaracSpec = Byt ut (Nom, "", "_") CaracSpec = Ersätt (CaracSpec, "-", "_") Slutfunktion 

Den färdiga koden

 Alternativ Explicit Private Sub UserForm_Initialize () ComboBox1.Clear ComboBox1.List = Application.Transpose (Range ("Dep")) ComboBox2.Clear ComboBox3.Clear End Sub Private Sub ComboBox1_Change () 'Combobox département Om ComboBox1.Value = "" Avsluta sedan Sub ComboBox2.Clear ComboBox3.Clear Dim NomRange Som String NomRange = CaracSpec (ComboBox1.Value) Om NomDefini (NomRange) Sedan ComboBox2.List = Application.Transpose (Range (NomRange)) Annan ComboBox2.AddItem "" "Aucune commune" Avsluta Om Slut Sub Privat Sub ComboBox2_Change () 'Combobox Kommuner Om ComboBox2.Value = "" Avsluta Sub ComboBox3.Clear Dim NomRange Som String NomRange = CaracSpec (ComboBox2.Value) Om NomDefini (NomRange) Då ComboBox3.List = Application.Transpose (Range (NomRange)) Annan ComboBox3.AddItem "" "Aucune rue" "" Avsluta om slutdelfunktion NomDefini (Nom som sträng) Som booleska dimma som namn NomDefini = Fel för varje noms i ThisWorkbook.Names Om Noms.Name = Nom Then NomDefini = True: Exit Funktion Nästa Noms Slut Funktion Funktion Carac Spec (Nom som sträng) Som sträng CaracSpec = Byt ut (Nom, "", "_") CaracSpec = Ersätt (CaracSpec, "-", "_") Slutfunktion 

Nedladdningslänk

Ladda ner provarket på den här länken: //cjoint.com/?DHhootCLYVh
Tidigare Artikel Nästa Artikel

Bästa Tipsen