Clever-Excel-Forum

Normale Version: ComboBox RowSource einer flexiblen Liste
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen, 

ich habe eine ComboBox in meiner Userform eingefügt wie folgt:

Code:
Private Sub ComboBox1_Initialize ()
    Me.ComboBox1.RowSource="Liste"
End Sub

Das heißt es werden alle Namen aus der vorher definierten Liste angezeigt. Diese ist nun aber von A1:A100 definiert, aber nur bis A40 gefüllt. Die restlichen Zellen sollen als Puffer für weitere Namen dienen. 
Das Problem ist nun, dass mir in der ComboBox dadurch 60 Leeren Auswahlmöglichkeiten dargestellt werden. Wie kann ich das flexibel anpassen?

beste Grüße
Hallo Otto,

hier eine Idee:

PS: Du könntest, je nach Arbeitsweise, die Combobox auch aus der Spalte 5 aus Deiner DatenbankMaterial gefiltert per VBA speisen und auf Deine Projektliste verzichten...
Code:

Private Sub ComboBox1_Initialize()
 Dim i As Long
 
 With Sheets("Projektliste")
   For i = 7 To .UsedRange.Rows.Count
       If .Cells(i, "B").Value = "" Then Exit For
   Next i
   Me.ComboBox1.RowSource = .Range("B7:B" & i - 1).Address
 End With
End Sub

______________________
viele Grüße aus Freigericht
Karl-Heinz
Code:
Private Sub UserForm_Initialize()
    With ListBox1
        .List = Range("A1", Range("A1").End(xlDown)).Value
    End With
End Sub
Hallo Otto,
noch etwas dynamischer d.h. falls man einzelne Werte behandeln müsste, kann man auch folgendes verwenden:
Z.Bsp.
With Worksheets("Namen")
        ComboBox1.Clear
        For K = 1 To .Cells(Rows.Count, 1).End(xlUp).Row
             ComboBox1.AddItem
             N = ComboBox1.ListCount - 1
             ComboBox1.List(N, 0) = .Cells(K, 1).Value
             ComboBox1.List(N, 1) = .Cells(K, 2).Value
             ComboBox1.List(N, 2) = .Cells(K, 3).Value
             ComboBox1.List(N, 3) = .Cells(K, 4).Value
             ComboBox1.List(N, 4) = .Cells(K, 5).Value
             ComboBox1.List(N, 5) = .Cells(K, 6).Value
             ComboBox1.List(N, 6) = .Cells(K, 7).Value
             ComboBox1.List(N, 7) = .Cells(K, 8).Value
             ComboBox1.List(N, 8) = .Cells(K, 9).Value
             ComboBox1.List(N, 9) = .Cells(K, 0).Value
            'letzte mögliche Zeile
        Next
  End With
@volti

Danke für die schnelle Antwort. 

Ich habe leider das Problem, dass die Projektliste eigentlich Formel enthält und quasi nur ein Name angezeigt wird, wenn in Tabelle XY ein Name steht ansonsten "" nichts quasi. Bei der ComboBox wird mir jetzt halt trotzdem alles mit leeren Auswahlmöglichkeiten dargestellt
Hallo Otto,

wenn in der Projektliste immer Projekt... steht, könnte man das entsprechend abfangen...
Mit der Like-Abfrage werden Einträge auf Beginn mit "Projekt" geprüft und wenn das dann nicht mehr zutrifft, wird rausgesprungen.

Vielleicht klappt es ja so:
Code:

Private Sub ComboBox1_Initialize()
 Dim i As Long
 
 With ThisWorkbook.Sheets("Projektliste")
   For i = 7 To .UsedRange.Rows.Count
       If Not .Cells(i, "B").Value Like "Projekt*" Then Exit For
   Next i
   ComboBox1.RowSource = .Name & "!" & "B7:B" & i - 1
 End With
End Sub

______________________
viele Grüße aus Freigericht
Karl-Heinz
Hallo Otto,

hier ergänzend noch eine Variante, die auf den benamten Bereich aufsetzt. Den könnte man dann auch problemlos verschieben und erweitern.
Code:

Private Sub ComboBox1_Initialize()
 Dim Obj As Range, oBer As Range
 
 Set oBer = Range("ListeProjekte")
 For Each Obj In oBer
     If Not Obj.Value Like "Projekt*" Then Exit For
 Next Obj
 With oBer
   ComboBox1.RowSource = .Parent.Name & "!" & Replace(.Address(0, 0), _
           (.Row + .Rows.Count - 1), (Obj.Row - 1))
 End With

End Sub

______________________
viele Grüße aus Freigericht
Karl-Heinz