Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1716to1720
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Combobox füllen

Combobox füllen
15.10.2019 16:07:34
Georg
Hallo zusammen,
ich versuche derzeit eine Combobox nach meinen Wünschen zu befüllen.
Mit

Sub fuellen3(Arbeitsblatt As String, Comboboxnr As Integer, Tabelle As String, Spalte As  _
Integer)
Dim wks As Worksheet
Dim comborng As Range
Set wks = ThisWorkbook.Sheets(Arbeitsblatt)
Set comborng = wks.ListObjects(Tabelle).DataBodyRange.Columns(Spalte)
With comborng
Userform_Main.Controls("ComboBox" & Comboboxnr).RowSource = .Parent.Name & "!" & . _
Address
End With
Set wks = Nothing
Set comborng = Nothing
End Sub

Dies klappt aus soweit wunderbar.
Jetzt stehen in der Tabelle auch doppelte Werte, die ich gerne nur einmal in der combobox aufführen möchte.
Geht dies irgendwie mit der Filterfunktion? Oder wie geht man da am besten vor?
LG
Georg

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Combobox füllen
15.10.2019 16:24:35
Nepumuk
Hallo Georg,
ein Beispiel:
Public Sub Test()
    Dim avntValues As Variant, vntItem As Variant
    Dim objDictionary As Object
    Set objDictionary = CreateObject(Class:="Scripting.Dictionary")
    avntValues = Tabelle1.ListObjects("Tabelle").DataBodyRange.Columns(1).Value
    With objDictionary
        For Each vntItem In avntValues
            .Item(Key:=vntItem) = vbNullString
        Next
        UserForm1.ComboBox1.List = .Keys
    End With
    Set objDictionary = Nothing
End Sub

Gruß
Nepumuk
Anzeige
AW: Combobox füllen
16.10.2019 13:17:54
Georg
Hallo Nepumuk,
vielen Dank für dein Beispiel!
Das rettet mir den Tag ;)
LG
Georg
AW: Combobox füllen
18.10.2019 07:54:38
Georg
Hallo Nepumuk und natürlich alle anderen,
ich benötige da doch nochmal ein Hilfestellung.
Den Code von Nemupuk habe ich soweit angepasst, dass ich meine Combobox7 richtig gefüllt bekomme.
Public Sub Combobox_fuellen(Arbeitsblatt As String, Comboboxnr As Integer, Tabelle As String,  _
Spalte As Integer)
Dim avntValues As Variant, vntItem As Variant
Dim objDictionary As Object
Set objDictionary = CreateObject(Class:="Scripting.Dictionary")
avntValues = Worksheets(Arbeitsblatt).ListObjects(Tabelle).DataBodyRange.Columns(Spalte). _
Value
With objDictionary
For Each vntItem In avntValues
.Item(Key:=vntItem) = vbNullString
Next
Userform_Main.Controls("ComboBox" & Comboboxnr).List = .Keys
End With
Set objDictionary = Nothing
End Sub

Nun möchte ich noch gerne eine weitere Combobox8 automatisch befüllen. Allerdings soll hier der Wert aus Combobox7 als Filterwert benutzt werden.
Also nach dem Motto:
Wenn in TabelleX in SpalteX der Wert combobox7.value steht, dann
For Each vntItem In avntValues
.Item(Key:=vntItem) = vbNullString
Ich bin mir ziemlich sicher, dass meine Lösung schon in diesem Beitrag (https://www.herber.de/forum/archiv/1688to1692/1688510_VBA_Verteilung_auf_Reiter.html) steckt, allerdings weiß ich nicht so recht wie ich diese anpassen muss.
Der Code sieht bislang wie folgt aus:
Public Sub Combobox_fuellen2(Arbeitsblatt As String, Comboboxnr As Integer, Tabelle As String,  _
Spalte_Werte As Integer, Optional ByVal Spalte_filter = 2, Optional ByVal Spalte_Filter_Wert As Variant)
Dim avntValues As Variant, vntItem As Variant
Dim avntValues2 As Variant, vntItem2 As Variant
Dim objDictionary As Object
Set objDictionary = CreateObject(Class:="Scripting.Dictionary")
avntValues = Worksheets(Arbeitsblatt).ListObjects(Tabelle).DataBodyRange.Columns( _
Spalte_Werte).Value
avntValues2 = Worksheets(Arbeitsblatt).ListObjects(Tabelle).DataBodyRange.Columns( _
Spalte_filter).Value
With objDictionary
For Each vntItem In avntValues
'        If Not IsEmpty(vntItem) Then objDictionary.Item(Key:=vntItem) = vbNullString
.Item(Key:=vntItem) = vbNullString
Next
Userform_Main.Controls("ComboBox" & Comboboxnr).List = .Keys
End With
Set objDictionary = Nothing
End Sub
Ich bin für jeden Tipp dankbar!
LG
Georg
Anzeige
AW: Combobox füllen
18.10.2019 08:35:46
Nepumuk
Hallo Georg,
so?
Public Sub Combobox_fuellen2(Arbeitsblatt As String, Comboboxnr As Integer, Tabelle As String, _
        Spalte_Werte As Integer, Optional ByVal Spalte_filter = 2, Optional ByVal Spalte_Filter_Wert As Variant)

    
    Dim avntValues As Variant
    Dim avntValues2 As Variant
    Dim ialngIndex As Long
    Dim objDictionary As Object
    Set objDictionary = CreateObject(Class:="Scripting.Dictionary")
    
    avntValues = Worksheets(Arbeitsblatt).ListObjects(Tabelle).DataBodyRange.Columns(Spalte_Werte).Value
    avntValues2 = Worksheets(Arbeitsblatt).ListObjects(Tabelle).DataBodyRange.Columns(Spalte_filter).Value
    
    With objDictionary
        
        For ialngIndex = LBound(avntValues, 1) To UBound(avntValues, 1)
            
            If avntValues2(ialngIndex, 1) = Spalte_Filter_Wert Then _
                .Item(Key:=avntValues(ialngIndex, 1)) = vbNullString
            
        Next
        Userform_Main.Controls("ComboBox" & Comboboxnr).List = .Keys
    End With
    Set objDictionary = Nothing
End Sub


Gruß
Nepumuk
Anzeige
AW: Combobox füllen
18.10.2019 09:43:40
Georg
Hallo Nepumuk,
ja genau so!
Vielen Dank!
Was zwei kleine Zeilen so alles ausmachen können.
For ialngIndex = LBound(avntValues, 1) To UBound(avntValues, 1)
If avntValues2(ialngIndex, 1) = Spalte_Filter_Wert Then _

LG
Georg

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige