Hämta markerade objekt i en flervalslistruta som en kommaavgränsad sträng i Microsoft Access

Anteckning

Office 365 ProPlus byter namn till Microsoft 365-appar för företag. Mer information om den här ändringen finns i det här blogginlägget.

Den här artikeln gäller antingen en Microsoft Access-databasfil (.mdb) eller en Microsoft Access-databasfil (.accdb) och en Microsoft Access-projektfil (.adp).

Måttlig: Kräver grundläggande makron, kodning och kompatibilitetsfärdigheter.

Sammanfattning

I den här artikeln beskrivs hur du hämtar markerade objekt från en flervalslistruta och sedan lagrar de markerade objekten som en kommaavgränsad sträng i Microsoft Access.

Mer information

I Microsoft Access avgör värdet för egenskapen MultiSelect för listrutan i ett formulär eller i en rapport om listrutan är en enskild markeringslistruta eller en flervalslistruta. I en flervalslistruta kan du markera flera listobjekt samtidigt.

Du kan använda egenskapen Värde för listrutan till att hämta det markerade objektet från listrutan. Men när du använder en flervalslistruta och försöker hämta de markerade objekten med hjälp av egenskapen Värde, returnerar egenskapen Value Null.

Du kan hämta de markerade objekten i en flervalslistruta och sedan lagra de markerade objekten som en kommaavgränsad sträng med programmering. Gör så här:

  1. Starta Microsoft Access.

  2. Öppna Northwind-exempeldatabasen.

  3. Klicka på Formulär i avsnittet Objekt i databasfönstret.

    Obs! I Access 2007 klickar du på Formulärdesign i gruppen Formulär på fliken Skapa.

  4. Dubbelklicka på Skapa formulär i designvyn i det högra fönstret.

    Obs! Hoppa över det här steget i Access 2007.

  5. Lägg till följande kontroller i formuläret och ange sedan egenskaperna för kontrollerna enligt beskrivningen:

    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. Klicka på KodVisa-menyn.

    Obs! I Access 2007 klickar du på Visa kod i gruppen Verktyg på fliken Design.

  7. Klistra in följande kod i Visual Basic Editor:

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. Stäng Visual Basic Editor.

  2. Spara formuläret som Formulär1.

  3. Stäng formuläret.

  4. Öppna formuläret Formulär1 i formulärvyn:

    1. Klicka på Formulär i avsnittet Objekt i databasfönstret.

      Obs! I Access 2007 går du till navigeringsfönstret och klickar på gruppen Formulär.

    2. I det högra fönstret högerklickar du på Formulär1 och klickar sedan på Öppna.

      Obs! I Access 2007 högerklickar du på Formulär1 och klickar sedan på Öppna.

  5. Markera flera objekt i listrutan. Det gör du genom att klicka på ett objekt i listrutan, hålla ned CTRL och sedan klicka på fler objekt i listrutan.

  6. Klicka på Visa markerade objekt.

De objekt som är markerade i flervalslistrutan visas som en kommaavgränsad sträng i textrutan.

Microsoft tillhandahåller programmeringsexempel enbart i förklarande syfte och gör inga utfästelser, varken uttryckligen eller underförstått. Detta omfattar men begränsas inte till underförstådd garanti för säljbarhet eller lämplighet för ett visst syfte. I denna artikel förutsätts att du känner till det programmeringsspråk som demonstreras och de verktyg som används för att skapa och felsöka procedurer. Microsofts supportexperter kan hjälpa till att förklara funktionerna i en viss procedur, men de kommer inte att ändra dessa exempel för att tillhandahålla extra funktioner eller konstruera procedurer för att uppfylla dina specifika behov.