VBA-Beispiel 137
mail schreiben
mail schreiben

ListBox dynamisch befüllen

In dieser Datei wurden einige Bereichsnamen (Zellnamen) vergeben. Die UserForm enthält eine ComboBox, mit der Sie einen Bereichsnamen auswählen können.

Nach der Auswahl passieren zwei Dinge:

1.) zur Demo wird der Zellbereich in der Tabelle markiert.
2.) die ListBox wird mit den Daten aus dem Zellbereich gefüllt (RowSource).

Wählen Sie in der ListBox einen Datensatz aus, wird die entsprechende Zeile in der Tabelle gelb markiert (ListIndex der ListBox).

Spielen Sie mit den Daten in der Tabelle indem Sie Spaltenüberschriften hinzufügen oder entfernen bzw. die Daten-ZEILEN erweitern.

Testen Sie anschließend das Verhalten der dynamischen Bereichsnamen mit der UserForm...
Private Sub UserForm_Initialize()
Dim namName As Name
  Me.Label1.Caption = ""
  Me.Label2.Caption = ""

  'alle Bereichsnamen in Combo auflisten
  For Each namName In ThisWorkbook.Names
    Me.comboZellnamen.AddItem (namName.Name)
  Next namName

  'Erst ab Excel 2007 können Bereichsnamen Kommentare beinhalten.
  'Label2 dient zum anzeigen der Kommentare.
  'Label2 nur für Excel 2007 anzeigen:
  If Val(Application.Version) > 11 Then Me.Label2.Visible = True
End Sub

Private Sub ListBox1_Click()
Dim rng As Range
'Demo für ListIndex
'Die in der ListBox per Maus ausgewählte Datenzeile
'in der Tabelle gelb anmalen:

  'Set rng = Tabelle1.Range(Me.comboZellnamen)
  Set rng = Tabelle1.Range(Me.ListBox1.RowSource)

  With rng
   .Interior.ColorIndex = xlNone
   .Rows(Me.ListBox1.ListIndex + 1).Interior.ColorIndex = 36
  End With

  Set rng = Nothing
End Sub

Private Sub comboZellnamen_Change()
Dim strBN As String    'Bereichsname/Zellbereich
Dim rng As Range

  strBN = Me.comboZellnamen
  Set rng = Tabelle1.Range(strBN)

  'der ListBox den Zellbereich als Datenquelle zuweisen
  Me.ListBox1.RowSource = rng.Address

  'ListBox bekommt so viele Spalten, wie Zellbereich Spalten hat
  Me.ListBox1.ColumnCount = rng.Columns.Count

  Me.Label1 = ThisWorkbook.Names(strBN).RefersToLocal
  'geht leider erst ab Excel 2007:
  If Val(Application.Version) > 11 Then _
        Me.Label2 = ThisWorkbook.Names(strBN).Comment

  rng.Select  'in Tabelle ganzen Zellbereich markieren
  Set rng = Nothing

  Tabelle1.UsedRange.Interior.ColorIndex = xlNone
End Sub

Download:   vba137.zip