VBA - So erstellen Sie ein kaskadierendes Kombinationsfeld in einem Benutzerformular

VBA - So erstellen Sie ein kaskadierendes Kombinationsfeld in einem Benutzerformular

Einführung

In diesem Artikel erfahren Sie, wie Sie ein Kombinationsfeld mit der indirekten Methode füllen.

Voraussetzungen

  • 1 Arbeitsmappe
  • 1 Benutzerformular
  • 3 Combobox.

Sie können auch eine Beispielarbeitsmappe hier herunterladen: //cjoint.com/14au/DHhootCLYVh.htm

Namen verwalten unter Excel

Um Namen in einer Excel-Arbeitsmappe zu definieren, haben Sie folgende Möglichkeiten:
  • Excel 2007 oder frühere Version: Einfügen> Namen> Definieren .
  • Ab Excel 2010: Menübandformeln> Definieren Sie einen Namen.

Der Code für die Combobox

Wir möchten, dass Folgendes passiert:
  • Beim Laden der UserForm wird die ComboBox1 gefüllt.
  • Die anderen Auswahlfelder werden basierend auf den Werten des ersten ausgefüllt.

Füllen Sie die erste Liste

Um ein Kombinationsfeld mit dem Inhalt eines benannten Bereichs der Arbeitsmappe zu füllen, lautet die Syntax:
  • ComboBox1.List = Application.Transpose (Range ("monNom"))

So löschen Sie die ComboBox:

  • Combobox1.Clear

Was gibt uns den Code zum Ausfüllen der ersten Dropdown-Liste beim Laden der UserForm:

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

Füllen Sie die 2. Liste

Wenn ein Wert in der ersten Dropdown-Liste ausgewählt wird, entspricht er (der in der ComboBox angezeigte Text) einem Arbeitsmappennamen.

Um den Inhalt der Zellen des benannten Bereichs anzuzeigen, verwenden wir das Change-Ereignis:

 Private Sub ComboBox1_Change () 'Combobox-Abteilung Vermeiden Sie den Fehler, der beim Löschen des Inhalts von ComboBox1 durch einen Benutzer auftritt. Wenn ComboBox1.Value = "", beenden Sie die Sub ComboBox2.Clear ComboBox3.Clear ComboBox2.List = Application.Transpose (Range (NomRange)) End Sub 

Für das dritte Kombinationsfeld:

 Private Sub ComboBox2_Change () 'Combobox communes Wenn ComboBox2.Value = "", dann beenden Sie Sub ComboBox3.Clear ComboBox3.List = Application.Transpose (Range (NomRange)) End Sub 

Häufige Fehler

Unbenannter Bereich

Der in der ComboBox eingegebene Name entspricht keinem Arbeitsmappennamen. Dies geschieht, wenn der Name nicht definiert wurde. Um dieses Problem zu umgehen, erstellen wir eine kleine Funktion, mit der alle Namen der Arbeitsmappe durchlaufen werden:

 Funktion NomDefini (Nom As String) Als Boolean Dim Noms Als Name NomDefini = False Für jeden Noms in ThisWorkbook.Names Wenn Noms.Name = Nom Dann NomDefini = True: Funktion beenden Next Noms End Function 

Eingabe Fehler

Wie Sie in der Beispieldatei feststellen werden, berücksichtigen definierende Namen keine Sonderzeichen oder Leerzeichen. In einigen Situationen müssen Sie möglicherweise die Variablen bearbeiten:

Hier ist ein Beispiel:

 Funktion CaracSpec (Nom As String) As String CaracSpec = Ersetzen (Nom, "", "_") CaracSpec = Ersetzen (CaracSpec, "-", "_") End Function 

Der vervollständigte Code

 Option 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 If ComboBox1.Value = "" Then Exit Sub ComboBox2.Clear ComboBox3.Clear Dim NomRange As String NomRange = CaracSpec (ComboBox1.Value) If NomDefini (NomRange) Then ComboBox2.List = Application.Transpose (Range (NomRange)) Else ComboBox2.AddItem "" Aucune commune "" End If End Sub Private Sub ComboBox2_Change () 'Combobox communes If ComboBox2.Value = "" Beenden Sie dann Sub ComboBox3.Clear Dim NomRange As String NomRange = CaracSpec (ComboBox2.Value) If NomDefini (NomRange) Then ComboBox3.List = Application.Transpose (Range (NomRange)) Else ComboBox3.AddItem "" "Aucune rue" "" End If End Unterfunktion NomDefini (Nom As String) As Boolean Dim Noms As Name NomDefini = False For Each Noms In ThisWorkbook.Names If Noms.Name = Nom Then NomDefini = True: Funktion beenden Next Noms End Function Function Carac Spec (Nom As String) As String CaracSpec = Ersetzen (Nom, "", "_") CaracSpec = Ersetzen (CaracSpec, "-", "_") End Function 

Download-Link

Laden Sie das Beispielblatt unter folgendem Link herunter: //cjoint.com/?DHhootCLYVh

VBA - So erstellen Sie ein kaskadierendes Kombinationsfeld in einem Benutzerformular

Einführung

In diesem Artikel erfahren Sie, wie Sie ein Kombinationsfeld mit der indirekten Methode füllen.

Voraussetzungen

  • 1 Arbeitsmappe
  • 1 Benutzerformular
  • 3 Combobox.

Sie können auch eine Beispielarbeitsmappe hier herunterladen: //cjoint.com/14au/DHhootCLYVh.htm

Namen verwalten unter Excel

Um Namen in einer Excel-Arbeitsmappe zu definieren, haben Sie folgende Möglichkeiten:
  • Excel 2007 oder frühere Version: Einfügen> Namen> Definieren.
  • Ab Excel 2010: Menübandformeln> Definieren Sie einen Namen.

Der Code für die Combobox

Wir möchten, dass Folgendes passiert:
  • Beim Laden der UserForm wird die ComboBox1 gefüllt.
  • Die anderen Auswahlfelder werden basierend auf den Werten des ersten ausgefüllt.

Füllen Sie die erste Liste

Um ein Kombinationsfeld mit dem Inhalt eines benannten Bereichs der Arbeitsmappe zu füllen, lautet die Syntax:
  • ComboBox1.List = Application.Transpose (Range ("monNom"))

So löschen Sie die ComboBox:

  • Combobox1.Clear

Was gibt uns den Code zum Ausfüllen der ersten Dropdown-Liste beim Laden der UserForm:

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

Füllen Sie die 2. Liste

Wenn ein Wert in der ersten Dropdown-Liste ausgewählt wird, entspricht er (der in der ComboBox angezeigte Text) einem Arbeitsmappennamen.

Um den Inhalt der Zellen des benannten Bereichs anzuzeigen, verwenden wir das Change-Ereignis:

 Private Sub ComboBox1_Change () 'Combobox-Abteilung Vermeiden Sie den Fehler, der beim Löschen des Inhalts von ComboBox1 durch einen Benutzer auftritt. Wenn ComboBox1.Value = "", beenden Sie die Sub ComboBox2.Clear ComboBox3.Clear ComboBox2.List = Application.Transpose (Range (NomRange)) End Sub 

Für das dritte Kombinationsfeld:

 Private Sub ComboBox2_Change () 'Combobox communes Wenn ComboBox2.Value = "", dann beenden Sie Sub ComboBox3.Clear ComboBox3.List = Application.Transpose (Range (NomRange)) End Sub 

Häufige Fehler

Unbenannter Bereich

Der in der ComboBox eingegebene Name stimmt nicht mit einem Arbeitsmappennamen überein, da er noch nicht definiert wurde. Um dieses Problem zu umgehen, erstellen wir eine kleine Funktion. Es ist

Die Aufgabe besteht darin, alle Namen der Arbeitsmappe durchzugehen:

 Funktion NomDefini (Nom As String) Als Boolean Dim Noms Als Name NomDefini = False Für jeden Noms in ThisWorkbook.Names Wenn Noms.Name = Nom Dann NomDefini = True: Funktion beenden Next Noms End Function 

Eingabe Fehler

Wie Sie in der Beispieldatei feststellen werden, berücksichtigen definierende Namen keine Sonderzeichen oder Leerzeichen. In einigen Situationen müssen Sie möglicherweise die Variable bearbeiten:

Hier ist ein Beispiel:

 Funktion CaracSpec (Nom As String) As String CaracSpec = Ersetzen (Nom, "", "_") CaracSpec = Ersetzen (CaracSpec, "-", "_") End Function 

Der vervollständigte Code

 Option 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 If ComboBox1.Value = "" Then Exit Sub ComboBox2.Clear ComboBox3.Clear Dim NomRange As String NomRange = CaracSpec (ComboBox1.Value) If NomDefini (NomRange) Then ComboBox2.List = Application.Transpose (Range (NomRange)) Else ComboBox2.AddItem "" Aucune commune "" End If End Sub Private Sub ComboBox2_Change () 'Combobox communes If ComboBox2.Value = "" Beenden Sie dann Sub ComboBox3.Clear Dim NomRange As String NomRange = CaracSpec (ComboBox2.Value) If NomDefini (NomRange) Then ComboBox3.List = Application.Transpose (Range (NomRange)) Else ComboBox3.AddItem "" "Aucune rue" "" End If End Unterfunktion NomDefini (Nom As String) As Boolean Dim Noms As Name NomDefini = False For Each Noms In ThisWorkbook.Names If Noms.Name = Nom Then NomDefini = True: Funktion beenden Next Noms End Function Function Carac Spec (Nom As String) As String CaracSpec = Ersetzen (Nom, "", "_") CaracSpec = Ersetzen (CaracSpec, "-", "_") End Function 

Download-Link

Laden Sie das Beispielblatt unter folgendem Link herunter: //cjoint.com/?DHhootCLYVh
Vorherige Artikel Nächster Artikel

Top-Tipps