Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: DropDown füllen aus Array-Werten

DropDown füllen aus Array-Werten
09.01.2019 20:05:00
Oisse
Hallo Zusammen,
wie kann ich ein DropDown-Menü in einer Zelle erzeugen, dass mit dem Inhalt eines Arrays gefüllt wird?
Mein Array ist "Public" und steht am Anfang einer Funktion in einem Modul.
Mein Code um das DropDown zu füllen steht in einem "SelectionChange"-Ereignis und sieht folgendermaßen aus:

Application.EnableEvents = False
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=Arr_BCV_W
.IgnoreBlank = False
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With

Hat jemand eine Lösung?
Gruß Oisse
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: DropDown füllen aus Array-Werten
09.01.2019 20:18:54
Nepumuk
Hallo,
wie ist Arr_BCV_W deklariert bzw. welche Dimensionen hat es?
Gruß
Nepumuk
AW: DropDown füllen aus Array-Werten
09.01.2019 20:26:29
Oisse
Hallo Nepumuk,
das Array ist wie folgt deklariert:
Public Arr_BCV_W(10) As Variant
AW: DropDown füllen aus Array-Werten
09.01.2019 20:30:09
Nepumuk
Hallo,
dann so:
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=Join(Arr_BCV_W, ",")

Gruß
Nepumuk
Anzeige
Bin begeistert, aber
09.01.2019 20:35:35
Oisse
leider splittet er mir die Namen, die durch ein Komma getrennt sind.
Der Arrayeintrag setzt sich so zusammen:
Nachname, Vorname
Wie löst man das?
AW: Bin begeistert, aber
09.01.2019 20:42:27
Nepumuk
Hallo,
das Komma ist das Listentrennzeichen. Man könnte es durch einen Strichpunkt ersetzen.
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, _
Formula1:=Replace(Replace(Join(Arr_BCV_W, "~"), ",", ";"), "~", ",")

Gruß
Nepumuk
Anzeige
Super
09.01.2019 20:48:00
Oisse
Viiielen herzlichen Dank,
funktioniert super. Allerdings hab ich noch eine Frage.
Mein Code für das Ereignis sieht so aus:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Zeitraum As Date
If Target.Column = 4 Or Target.Column = 9 Or Target.Column = 10 Then
Zeitraum = Range("C" & Target.Row)
Tage (Zeitraum)
End If
On Error GoTo Ende
Application.EnableEvents = False
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=Replace(Replace(Join(Arr_BCV_W, "~"), ",", ";"), "~", ",")
.IgnoreBlank = False
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Ende:
Application.EnableEvents = True
End Sub

Allerdings werden auch DropDowns in anderen Zellen eingefügt, obwohl die ja mit Werten anderer Arrays gefüllt werden sollen.
Was bitte läuft hier schief?
Anzeige
AW: Super
09.01.2019 20:51:49
Nepumuk
Hallo,
wo soll sie denn eingefügt werden? Du benutzt With Selection.Validation, das ist/sind die ausgewählte/n Zellen.
Gruß
Nepumuk
Ich war
09.01.2019 20:58:14
Oisse
zu voreilig. Nun habe ich den Code um das zweite Array erweitert und läuft einwandfrei.
Echt klasse.
Danke nochmal und einen schönen Abend.
Oisse
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

DropDown aus Array-Werten in Excel VBA erstellen


Schritt-für-Schritt-Anleitung

Um ein DropDown-Menü in Excel aus Werten eines Arrays zu erstellen, kannst du den folgenden VBA-Code verwenden. Dieser Code wird in das SelectionChange-Ereignis eines Arbeitsblatts eingefügt:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Zeitraum As Date
    If Target.Column = 4 Or Target.Column = 9 Or Target.Column = 10 Then
        Zeitraum = Range("C" & Target.Row)
        ' Funktion zur Berechnung der Tage
        Tage (Zeitraum)
    End If
    On Error GoTo Ende
    Application.EnableEvents = False
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=Replace(Replace(Join(Arr_BCV_W, "~"), ",", ";"), "~", ",")
        .IgnoreBlank = False
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
Ende:
    Application.EnableEvents = True
End Sub

Stelle sicher, dass das Array Arr_BCV_W korrekt deklariert ist, zum Beispiel:

Public Arr_BCV_W(10) As Variant

Häufige Fehler und Lösungen

  1. Fehler: DropDowns werden in falschen Zellen eingefügt

    • Lösung: Achte darauf, dass du die Selection-Eigenschaft verwendest. Diese bezieht sich auf die aktuell ausgewählten Zellen. Stelle sicher, dass dein Code nur für die gewünschten Zellen ausgeführt wird.
  2. Fehler: Namen werden bei Komma getrennt

    • Lösung: Verwende den Replace-Befehl, um Kommas durch Semikolons zu ersetzen, da Kommas als Listentrennzeichen fungieren. Hier ein Beispiel:
      .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
      xlBetween, Formula1:=Replace(Join(Arr_BCV_W, ","), ",", ";")

Alternative Methoden

Wenn du eine UserForm in Excel VBA verwendest, kannst du die ComboBox-Steuerelemente nutzen, um Dropdown-Listen zu erstellen. Hier ein Beispiel, wie du eine Dropdown-Liste in einer UserForm erstellen kannst:

Private Sub UserForm_Initialize()
    Dim i As Integer
    For i = LBound(Arr_BCV_W) To UBound(Arr_BCV_W)
        Me.ComboBox1.AddItem Arr_BCV_W(i)
    Next i
End Sub

Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du das Dropdown-Menü in einer Tabelle implementieren kannst:

  1. Deklariere dein Array:

    Public Arr_BCV_W(2) As Variant
  2. Fülle das Array mit Werten:

    Sub InitializeArray()
       Arr_BCV_W(0) = "Mustermann, Max"
       Arr_BCV_W(1) = "Müller, Anna"
       Arr_BCV_W(2) = "Schmidt, Peter"
    End Sub
  3. Füge den Dropdown in die gewünschte Zelle ein:

    Sub CreateDropDown()
       With Range("A1").Validation
           .Delete
           .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
           xlBetween, Formula1:=Replace(Join(Arr_BCV_W, ","), ",", ";")
       End With
    End Sub

Tipps für Profis

  • Nutze Application.EnableEvents = False und Application.EnableEvents = True, um das Ereignis während der Änderung zu deaktivieren und unerwünschte Schleifen zu vermeiden.
  • Teste deinen Code gründlich, um sicherzustellen, dass die Dropdown-Liste nur in den vorgesehenen Zellen erscheint.
  • Verwende die Join-Funktion, um das Array in eine kommagetrennte Liste zu konvertieren, wenn du Werte für die Dropdown-Liste hinzufügst.

FAQ: Häufige Fragen

1. Wie kann ich eine Dropdown-Liste in einer UserForm erstellen?
Verwende die ComboBox und fülle sie mit Werten aus deinem Array, indem du die AddItem-Methode verwendest.

2. Was kann ich tun, wenn mein Dropdown nicht richtig funktioniert?
Überprüfe die Deklaration deines Arrays und stelle sicher, dass der Code für das Dropdown korrekt ausgeführt wird und keine Fehler im Logikablauf enthalten sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige