Abrufen der ausgewählten Elemente in einem Listenfeld mit mehrfacher Auswahl als durch Trennzeichen getrennte Zeichenfolge in Microsoft Access

Dieser Artikel bezieht sich auf Microsoft Access-Datenbankdateien (.mdb) oder Microsoft Access-Datenbankdateien (.accdb), und auch auf Microsoft Access-Projektdateien (.adp).

Moderat: Erfordert grundlegende Makro-, Programmier- und Interoperabilitätskenntnisse.

Zusammenfassung

In diesem Artikel wird beschrieben, wie Sie ausgewählte Elemente aus einem Listenfeld mit mehrfacher Auswahl abrufen und die ausgewählten Elemente dann als durch Trennzeichen getrennte Zeichenfolge in Microsoft Access speichern.

Weitere Informationen

In Microsoft Access bestimmt der Wert der MultiSelect-Eigenschaft des Listenfelds in einem Formular oder in einem Bericht, ob es sich bei dem Listenfeld um ein Listenfeld mit einzeler Auswahl oder um ein Listenfeld mit mehrfacher Auswahl handelt. In einem Listenfeld mit mehrfacher Auswahl können Sie mehrere Listenelemente gleichzeitig auswählen.

Sie können die Value-Eigenschaft des Listenfelds verwenden, um das ausgewählte Element aus dem Listenfeld abzurufen. Wenn Sie jedoch ein Listenfeld mit Mehrfachauswahl verwenden und versuchen, die ausgewählten Elemente mithilfe der Value-Eigenschaft abzurufen, gibt die Value-Eigenschaft Null zurück.

Sie können die ausgewählten Elemente in einem Mehrfachauswahllistenfeld abrufen und die ausgewählten Elemente dann programmgesteuert als durch Trennzeichen getrennte Zeichenfolge speichern. Gehen Sie dazu wie folgt vor:

  1. Starten Sie Microsoft Access.

  2. Öffnen Sie die Beispieldatenbank Northwind.

  3. Klicken Sie im Abschnitt Objekte des Datenbankfensters auf Formulare.

    Hinweis Klicken Sie in Access 2007 auf der Registerkarte Erstellen in der Gruppe Formulare auf Formularentwurf.

  4. Doppelklicken Sie im rechten Bereich in der Entwurfsansicht auf Formular erstellen.

    Hinweis Überspringen Sie in Access 2007 diesen Schritt.

  5. Fügen Sie dem Formular die folgenden Steuerelemente hinzu, und legen Sie dann die Eigenschaften der Steuerelemente wie angegeben fest:

    List Box
    ----------------------------------------------------
    Name : NamesList
    Row Source Type : Table/Query
    Row Source : SELECT First Name FROM Employees
    Multi Select : Extended
    Width : 3.5"
    Height : 0.75"
    
    Text Box
    -----------------------
    Name : mySelections
    Width : 3.5"
    Height : 0.25"
    
    Command Button
    ----------------------------------
    Name : testmultiselect
    Caption : Display Selected Items
    Width : 1.375"
    Height : 0.3"
    
    Command Button
    ----------------------
    Name : ClrList
    Caption : Clear List
    Width : 1.375"
    Height : 0.3"
    
  6. Klicken Sie im Menü Ansicht auf Code.

    Hinweis Klicken Sie in Access 2007 auf der Registerkarte Entwurf in der Gruppe Tools auf Code anzeigen.

  7. Fügen Sie den folgenden Code in die Visual Basic-Editor ein:

Option Compare Database
Option Explicit

Private Sub Form_Current()
    Dim oItem As Variant
    Dim bFound As Boolean
    Dim sTemp As String
    Dim sValue As String
    Dim sChar As String
    Dim iCount As Integer
    Dim iListItemsCount As Integer

sTemp = Nz(Me!mySelections.Value, " ")
    iListItemsCount = 0
    bFound = False
    iCount = 0

Call clearListBox

For iCount = 1 To Len(sTemp) + 1
    sChar = Mid(sTemp, iCount, 1)
        If StrComp(sChar, ",") = 0 Or iCount = Len(sTemp) + 1 Then
            bFound = False
            Do
                If StrComp(Trim(Me!NamesList.ItemData(iListItemsCount)), Trim(sValue)) = 0 Then
                    Me!NamesList.Selected(iListItemsCount) = True
                    bFound = True
                End If
                iListItemsCount = iListItemsCount + 1
            Loop Until bFound = True Or iListItemsCount = Me!NamesList.ListCount
            sValue = ""
        Else
            sValue = sValue & sChar
        End If
    Next iCount
End Sub

Private Sub clearListBox()
    Dim iCount As Integer

For iCount = 0 To Me!NamesList.ListCount
        Me!NamesList.Selected(iCount) = False
    Next iCount
End Sub

Private Sub testmultiselect_Click()
    Dim oItem As Variant
    Dim sTemp As String
    Dim iCount As Integer

iCount = 0

If Me!NamesList.ItemsSelected.Count <> 0 Then
        For Each oItem In Me!NamesList.ItemsSelected
            If iCount = 0 Then
                sTemp = sTemp & Me!NamesList.ItemData(oItem)
                iCount = iCount + 1
            Else
                sTemp = sTemp & "," & Me!NamesList.ItemData(oItem)
                iCount = iCount + 1
            End If
        Next oItem
    Else
        MsgBox "Nothing was selected from the list", vbInformation
        Exit Sub  'Nothing was selected
    End If

Me!mySelections.Value = sTemp
End Sub

Private Sub clrList_Click()
    Call clearListBox
    Me!mySelections.Value = Null
End Sub

  1. Schließen Sie den Visual Basic-Editor.

  2. Speichern Sie das Formular als Form1.

  3. Schließen Sie das Formular.

  4. Öffnen Sie das Formular Form1 in der Formularansicht:

    1. Klicken Sie im Abschnitt Objekte des Datenbankfensters auf Formulare.

      Hinweis Klicken Sie in Access 2007 im Navigationsbereich auf die Gruppe Formulare .

    2. Klicken Sie im rechten Bereich mit der rechten Maustaste auf Form1, und klicken Sie dann auf Öffnen.

      Hinweis Klicken Sie in Access 2007 mit der rechten Maustaste auf Form1, und klicken Sie dann auf Öffnen.

  5. Wählen Sie mehrere Elemente im Listenfeld aus. Klicken Sie dazu auf ein Element im Listenfeld, halten Sie die STRG-TASTE gedrückt, und klicken Sie dann im Listenfeld auf weitere Elemente.

  6. Klicken Sie auf Ausgewählte Elemente anzeigen.

Die elemente, die aus dem Listenfeld für mehrfache Auswahl ausgewählt werden, werden als durch Trennzeichen getrennte Zeichenfolge im Textfeld angezeigt.

Die Verwendung der hier aufgeführten Informationen, Makro- oder Programmcodes geschieht auf Ihre eigene Verantwortung. Microsoft stellt Ihnen diese Informationen sowie Makro- und Programmlistings ohne Gewähr auf Richtigkeit, Vollständigkeit und/oder Funktionsfähigkeit sowie ohne Anspruch auf Support zur Verfügung. Die zur Verfügung gestellten Makro- und Programmierungsbeispiele sollen lediglich exemplarisch die Funktionsweise des Beispiels aufzeigen. Die Microsoft Support-Spezialisten können bei der Erläuterung der Funktionalität bestimmter Prozeduren helfen, jedoch werden sie diese Beispiele nicht in Bezug auf eine erweiterte Funktionalität verändern, noch werden sie Prozeduren entwickeln, die auf Ihre besonderen Bedürfnisse zugeschnitten sind.