2016-07-20 8 views
0

Ich habe 3 Listboxen. In den Eigenschaften habe ich den ListStyle als fmListStyleOption und den MultiSelect als fmMultiSelectMulti ausgewählt. Hier ist der aktuelle Code:Empty ListBox Werte

Private Sub Userform_Initialize() 

Me.lstProperties.RowSource = "FilterData" 

Me.lstStmts.RowSource = "ListofProps" 

Me.lstLoans.RowSource = "FilterLoans" 

End Sub 

Ich verwende dynamische benannte Bereiche in der Hoffnung, dass sie nur Daten in der Listbox für Zellen zeigen, die tatsächlich Werte haben. Leider zeigt es eine lange Liste von Leerzeilen mit Checkboxen.

Kann jemand sicherstellen, dass die Listbox nur Daten mit Werten zeigt, d. H. Wenn es in meinem benannten Bereich 2 Zellen mit Daten gibt, dann gibt es nur zwei Checkboxen in meiner Listbox.

Visual

+0

Wie stellen Sie Ihr Dynamikbereich? Es funktioniert wie erwartet an meinem Ende. – L42

+0

hmmm ... = OFFSET ('Property Daten'! $ A $ 5,2,, COUNTA ('Property Data'! $ A $ 5: $ N $ 5), 14) –

+0

Ich merke jetzt, dass das mehr abholt als nur gebrauchte Zellen. –

Antwort

0

Ein einfache, warum dies zu tun wäre, um einen Array aus Ihrem Bereich zu erstellen und das Feld zu der Listbox.List Eigenschaft zuweisen. Auf diese Weise können Sie SpecialCells verwenden, um die Daten zu filtern.

Private Sub Userform_Initialize() 

    Me.lstProperties.List = getArrayFromRange(Range("FilterData").SpecialCells(xlCellTypeVisible)) 

    Me.lstStmts.List = getArrayFromRange(Range("ListofProps").SpecialCells(xlCellTypeConstants)) 

    Me.lstLoans.RowSource = getArrayFromRange(Range("FilterLoans").SpecialCells(xlCellTypeConstants)) 

End Sub 

Function getArrayFromRange(rng As Range) 
    Dim arr 
    Dim a As Range 
    Dim count As Long, x As Long, y As Integer 

    ReDim arr(1 To rng.CountLarge, 1 To rng.Columns.count) 

    For Each a In rng.Areas 

     For x = 1 To a.Rows.count 

      count = count + 1 

      For y = 1 To rng.Columns.count 
       arr(count, y) = a.Cells(x, y).Value 
      Next 

     Next 
    Next 

    getArrayFromRange = arr 
End Function 
0

Das Problem war, dass mein dynamischer benannter Bereich nicht richtig eingerichtet wurde. Die Formel für den benannten Bereich hätte sein sollen:

=OFFSET('Property Data'!$A$5,2,,COUNTA('Property Data'!$A$5),14) 

und nicht:

=OFFSET('Property Data'!$A$5,2,,COUNTA('Property Data'!$A$5:N$5),14).