Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Wert einer listbox der variablen zuweisen

Forumthread: Wert einer listbox der variablen zuweisen

Wert einer listbox der variablen zuweisen
15.10.2004 15:52:52
Sepp
Hallo Leute
ich zeige auf einer UserForm eine Listbox mit mehreren Spalten und Zeilen. Bei Click soll von der markierten Zeile Werte aus den Spalten der jeweiligen Variablen zugewiesen werden: Spalte1 - Variable 1, Spalte2 - Variable2, usw.
Gruß Sepp
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wert einer listbox der variablen zuweisen
Dieter
Hallo Sepp
vor einer Stunde hast du das Gleiche gefragt.
Wie wärs, wenn du die Frage etwas präziser gestalten könntest?
Gruß Dieter
Daten aus MultiColumn ListBox
Dan
Hallo Sepp, hier einpaar Vorchlaege. Um es zu testen, braust man UserForm mit 3 Listboxen (1,2,3) und 4 Buttons (1,2,3,4). Wie man die Werte in die Variablen kriegt sieht man in den Button_Click handlers. Die Beispiele arbeiten mit ListBoxen, die keinen MultiSelect ermoeglichen. Gruss und schoenes Wochenende :-). Dan, CZ.


Option Explicit
' unbound >
' Describes a control that is not related to a worksheet cell.
' In contrast, a bound control is a data source for a worksheet cell
' that provides access to display and edit the value of a control.
Private SourceRange As Range
Private Sub CommandButton1_Click()
    If (Me.ListBox1.ListIndex > -1) Then
    
        MsgBox "ListBox1.Value = " & Me.ListBox1.Value & vbCrLf & _
               "ListBox1.Text = " & Me.ListBox1.Text & vbCrLf & _
               "ListBox1.BoundColumn = " & ListBox1.BoundColumn & vbCrLf & _
               "ListBox1.TextColumn = " & ListBox1.TextColumn
               
        Dim v1, v2, v3, v4, v5
        
        v1 = Me.ListBox1.List(Me.ListBox1.ListIndex, 0)
        v2 = Me.ListBox1.List(Me.ListBox1.ListIndex, 1)
        v3 = Me.ListBox1.List(Me.ListBox1.ListIndex, 2)
        v4 = Me.ListBox1.List(Me.ListBox1.ListIndex, 3)
        v5 = Me.ListBox1.List(Me.ListBox1.ListIndex, 4)
        
        MsgBox "v1 = " & v1 & vbCrLf & _
               "v2 = " & v2 & vbCrLf & _
               "v3 = " & v3 & vbCrLf & _
               "v4 = " & v4 & vbCrLf & _
               "v5 = " & v5 & vbCrLf
    Else
        MsgBox "Etwas ausweahlen ..."
    End If
End Sub
Private Sub CommandButton2_Click()
    If (Me.ListBox2.ListIndex > -1) Then
    
        MsgBox "ListBox2.Value = " & Me.ListBox2.Value & vbCrLf & _
               "ListBox2.Text = " & Me.ListBox2.Text & vbCrLf & _
               "ListBox2.BoundColumn = " & ListBox2.BoundColumn & vbCrLf & _
               "ListBox2.TextColumn = " & ListBox2.TextColumn
               
        Dim v1, v2, v3, v4, v5
        
        v1 = Me.ListBox2.List(Me.ListBox2.ListIndex, 0)
        v2 = Me.ListBox2.List(Me.ListBox2.ListIndex, 1)
        v3 = Me.ListBox2.List(Me.ListBox2.ListIndex, 2)
        v4 = Me.ListBox2.List(Me.ListBox2.ListIndex, 3)
        v5 = Me.ListBox2.List(Me.ListBox2.ListIndex, 4)
        
        MsgBox "v1 = " & v1 & vbCrLf & _
               "v2 = " & v2 & vbCrLf & _
               "v3 = " & v3 & vbCrLf & _
               "v4 = " & v4 & vbCrLf & _
               "v5 = " & v5 & vbCrLf
    Else
        MsgBox "Etwas ausweahlen ..."
    End If
End Sub
Private Sub CommandButton3_Click()
    If (Me.ListBox3.ListIndex > -1) Then
    
        MsgBox "ListBox3.Value = " & Me.ListBox3.Value & vbCrLf & _
               "ListBox3.Text = " & Me.ListBox3.Text & vbCrLf & _
               "ListBox3.BoundColumn = " & ListBox3.BoundColumn & vbCrLf & _
               "ListBox3.TextColumn = " & ListBox3.TextColumn
               
        Dim v1, v2, v3, v4, v5
        
        v1 = Me.ListBox3.List(Me.ListBox3.ListIndex, 0)
        v2 = Me.ListBox3.List(Me.ListBox3.ListIndex, 1)
        v3 = Me.ListBox3.List(Me.ListBox3.ListIndex, 2)
        v4 = Me.ListBox3.List(Me.ListBox3.ListIndex, 3)
        v5 = Me.ListBox3.List(Me.ListBox3.ListIndex, 4)
        
        MsgBox "v1 = " & v1 & vbCrLf & _
               "v2 = " & v2 & vbCrLf & _
               "v3 = " & v3 & vbCrLf & _
               "v4 = " & v4 & vbCrLf & _
               "v5 = " & v5 & vbCrLf
    Else
        MsgBox "Etwas ausweahlen ..."
    End If
End Sub
Private Sub CommandButton4_Click()
    SourceRange.Value = "Hallo"
End Sub
Private Sub UserForm_Initialize()
    ' UN-BOUND ListBox
    With Me.ListBox1
        .ColumnCount = 5 ' ' For an unbound data source, there is a 10-column limit (0 to 9).
        .MultiSelect = fmMultiSelectSingle
        .BoundColumn = 1
        .TextColumn = 2
        
        ' For a multicolumn ListBox or ComboBox, AddItem inserts an entire row,
        ' that is, it inserts an item for each column of the control.
        
        ' To assign values to an item beyond the first column, use the
        ' List or Column property and specify the row and column of the item.
        .AddItem
        .List(0, 0) = "Europe"
        .List(0, 1) = "Germany"
        .List(0, 2) = "Berlin"
        .List(0, 3) = "12°C"
        .List(0, 4) = "4°C"
        
        .AddItem
        .List(1, 0) = "United States"
        .List(1, 1) = "Texas"
        .List(1, 2) = "Dallas"
        .List(1, 3) = "26°C"
        .List(1, 4) = "14°C"
        
        ' Column Property >
        ' Specifies one or more items in a ListBox or ComboBox.
        ' object.Column( column, row ) [= Variant]
        .AddItem
        .Column(0, 2) = "Africa"
        .Column(1, 2) = "Egypt"
        .Column(2, 2) = "Luxor"
        .Column(3, 2) = "36°C"
        .Column(4, 2) = "18°C"
    End With
    
    Dim MeineListe(0 To 2, 0 To 4)
    ' ----------------------------------------------------
    ' oder einfacher, wenn man Daten im Excel hat, kann man
    ' eine Liste mit Excel Range fuellen :
    
    ' Dim MeineExcelListe As Variant
    ' MeineExcelListe = ActiveSheet.Range("a1:e3")
    ' Me.ListBox2.ColumnCount = ActiveSheet.Range("a1:e3").Columns.Count
    ' Me.ListBox2.List = MeineExcelListe
    ' -----------------------------------------------------
    
    MeineListe(0, 0) = "Europe"
    MeineListe(0, 1) = "Germany"
    MeineListe(0, 2) = "Berlin"
    MeineListe(0, 3) = "12°C"
    MeineListe(0, 4) = "4°C"
    MeineListe(1, 0) = "United States"
    MeineListe(1, 1) = "Texas"
    MeineListe(1, 2) = "Dallas"
    MeineListe(1, 3) = "26°C"
    MeineListe(1, 4) = "14°C"
    MeineListe(2, 0) = "Africa"
    MeineListe(2, 1) = "Egypt"
    MeineListe(2, 2) = "Luxor"
    MeineListe(2, 3) = "36°C"
    MeineListe(2, 4) = "18°C"
    
    With Me.ListBox2
        .ColumnCount = 5
        .BoundColumn = 4
        .TextColumn = 5
        .MultiSelect = fmMultiSelectSingle
        .List = MeineListe
    End With
    
    ' BOUND ListBox
    With Me.ListBox3
        ' The RowSource property accepts worksheet ranges from Microsoft Excel.
        
        Set SourceRange = ActiveSheet.Range("a1:e3")
        .RowSource = SourceRange.Parent.Name & "!" & SourceRange.Address(FalseFalse)
        .ColumnCount = SourceRange.Columns.Count
        .BoundColumn = 2
        .TextColumn = 3
    End With
End Sub
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Wert einer ListBox einer Variablen zuweisen


Schritt-für-Schritt-Anleitung

Um den Wert einer ListBox in einer UserForm einer Variablen zuzuweisen, kannst du den folgenden VBA-Code verwenden. Dieser Code funktioniert in Excel VBA und ermöglicht es dir, die ausgewählten Werte aus einer mehrspaltigen ListBox abzurufen:

  1. Erstelle eine UserForm mit einer ListBox und mehreren Schaltflächen (Buttons).
  2. Füge den folgenden VBA-Code in das Codefenster der UserForm ein:
Option Explicit

Private Sub CommandButton1_Click()
    Dim v1 As Variant, v2 As Variant, v3 As Variant, v4 As Variant, v5 As Variant

    If Me.ListBox1.ListIndex > -1 Then
        v1 = Me.ListBox1.List(Me.ListBox1.ListIndex, 0)
        v2 = Me.ListBox1.List(Me.ListBox1.ListIndex, 1)
        v3 = Me.ListBox1.List(Me.ListBox1.ListIndex, 2)
        v4 = Me.ListBox1.List(Me.ListBox1.ListIndex, 3)
        v5 = Me.ListBox1.List(Me.ListBox1.ListIndex, 4)

        MsgBox "v1 = " & v1 & vbCrLf & _
               "v2 = " & v2 & vbCrLf & _
               "v3 = " & v3 & vbCrLf & _
               "v4 = " & v4 & vbCrLf & _
               "v5 = " & v5
    Else
        MsgBox "Bitte wähle etwas aus..."
    End If
End Sub
  1. Füge weitere Buttons hinzu (z.B. CommandButton2, CommandButton3) und passe den Code entsprechend für andere ListBoxen an.

Häufige Fehler und Lösungen

  • Fehler: "ListBox1.ListIndex = -1"

    • Lösung: Stelle sicher, dass eine Zeile in der ListBox ausgewählt ist, bevor du versuchst, den Wert abzurufen. Überprüfe den ListIndex.
  • Fehler: "Objektvariable oder With-Blockvariable nicht gesetzt"

    • Lösung: Stelle sicher, dass die ListBox korrekt initialisiert ist und die UserForm sichtbar ist, wenn du auf die Buttons klickst.

Alternative Methoden

Eine andere Möglichkeit, Werte an eine Variablen zuzuweisen, besteht darin, die Column-Eigenschaft der ListBox zu verwenden. Diese Methode ist besonders nützlich, wenn du mit einer gebundenen ListBox arbeitest.

Dim value As Variant
value = Me.ListBox1.Column(2, Me.ListBox1.ListIndex) ' Zugriff auf die dritte Spalte

Du kannst auch die RowSource-Eigenschaft verwenden, um eine Datenquelle aus Excel zu binden, was besonders nützlich ist, wenn die Daten dynamisch sind.


Praktische Beispiele

Hier sind einige Beispiele, wie du die ListBox in verschiedenen Szenarien nutzen kannst:

  1. Einfügen von Werten in die ListBox:

    Me.ListBox1.AddItem "Neuer Eintrag"
    Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = "Zusatzinfo"
  2. Binden einer ListBox an einen Excel-Bereich:

    Me.ListBox2.RowSource = "Tabelle1!A1:E10"
  3. Zugriff auf die Werte aus einer MultiColumn ListBox:

    Dim city As String
    city = Me.ListBox1.List(Me.ListBox1.ListIndex, 2) ' Dritte Spalte
    MsgBox city

Tipps für Profis

  • Nutze die ListBox.List-Eigenschaft, um auf mehrere Spalten gleichzeitig zuzugreifen. Das ist besonders nützlich, wenn du alle Werte einer Zeile abfragen möchtest.

  • Verwende ListBox.MultiSelect, um mehrere Auswahlmöglichkeiten zuzulassen. In diesem Fall musst du eine Schleife implementieren, um alle ausgewählten Elemente abzurufen.

  • Denk daran, die BoundColumn und TextColumn der ListBox zu nutzen, um die Sichtbarkeit und die Datenbindung zu optimieren.


FAQ: Häufige Fragen

1. Wie kann ich die Auswahl in einer ListBox zurücksetzen? Du kannst die Auswahl in einer ListBox zurücksetzen, indem du Me.ListBox1.ListIndex = -1 setzt.

2. Können ListBoxen in Excel VBA mehrspaltige Daten anzeigen? Ja, du kannst eine ListBox so konfigurieren, dass sie mehrere Spalten anzeigt, indem du die ColumnCount-Eigenschaft setzt.

3. Was ist der Unterschied zwischen gebundenen und ungebundenen ListBoxen? Eine gebundene ListBox ist mit einem Datenbereich in Excel verknüpft (RowSource), während eine ungebundene ListBox manuell mit der AddItem-Methode gefüllt wird.

4. Wie kann ich die Auswahl in einer ListBox speichern? Du kannst den aktuellen ListIndex verwenden, um die ausgewählten Elemente in Variablen zu speichern, wie im obigen Schritt-für-Schritt-Beispiel gezeigt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige