Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

ComboBox RowSource einer flexiblen Liste
#1
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
Antwortento top
#2
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
Antwortento top
#3
Code:
Private Sub UserForm_Initialize()
    With ListBox1
        .List = Range("A1", Range("A1").End(xlDown)).Value
    End With
End Sub
gruß
Marco
Antwortento top
#4
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
Grüße aus Nürnberg
Armin
Ich benutze WIN 10 (64bit) und Office 19 (32bit)
Antwortento top
#5
@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
Antwortento top
#6
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
Antwortento top
#7
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
Antwortento top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste