Jak pobrać wybrane elementy w polu listy wielokrotnego wyboru jako ciąg rozdzielany przecinkami w programie Microsoft Access

Ten artykuł dotyczy pliku bazy danych programu Microsoft Access (.mdb), pliku bazy danych programu Microsoft Access (.accdb) lub pliku projektu programu Microsoft Access (.adp).

Umiarkowane: wymaga podstawowych umiejętności w zakresie makra, kodowania i współdziałania.

Podsumowanie

W tym artykule opisano sposób pobierania wybranych elementów z wielu pól listy wyboru, a następnie przechowywania wybranych elementów jako ciągu rozdzielanego przecinkami w programie Microsoft Access.

Więcej informacji

W programie Microsoft Access wartość właściwości MultiSelect pola listy w formularzu lub w raporcie określa, czy pole listy jest pojedynczym polem wyboru, czy polem z wieloma listami wyboru. W polu z wieloma listami wyboru można jednocześnie wybrać wiele elementów listy.

Możesz użyć właściwości Value pola listy, aby pobrać wybrany element z pola listy. Jednak w przypadku użycia pola listy wyboru wielokrotnego i próby pobrania wybranych elementów przy użyciu właściwości Value właściwość Value zwraca wartość Null.

Wybrane elementy można pobrać w polu listy wyboru, a następnie przechowywać wybrane elementy jako ciąg rozdzielany przecinkami programowo. Aby to zrobić, wykonaj następujące kroki.

  1. Uruchom program Microsoft Access.

  2. Otwórz przykładową bazę danych northwind.

  3. W sekcji Obiekty w oknie Baza danych kliknij pozycję Formularze.

    Uwaga W programie Access 2007 kliknij pozycję Projekt formularza w grupie Formularze na karcie Tworzenie .

  4. W okienku po prawej stronie kliknij dwukrotnie pozycję Utwórz formularz w widoku projektu.

    Uwaga W programie Access 2007 pomiń ten krok.

  5. Dodaj następujące kontrolki do formularza, a następnie ustaw właściwości kontrolek zgodnie z podanymi instrukcjami:

    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. W menu Widok kliknij pozycję Kod.

    Uwaga W programie Access 2007 kliknij pozycję Wyświetl kod w grupie Narzędzia na karcie Projektowanie .

  7. Wklej następujący kod w Redaktor Visual Basic:

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. Zamknij Redaktor Visual Basic.

  2. Zapisz formularz jako Formularz1.

  3. Zamknij formularz.

  4. Otwórz formularz Form1 w widoku formularzy:

    1. W sekcji Obiekty okna bazy danych kliknij pozycję Formularze.

      Uwaga W programie Access 2007 w okienku nawigacji kliknij grupę Formularze .

    2. W okienku po prawej stronie kliknij prawym przyciskiem myszy pozycję Formularz1, a następnie kliknij przycisk Otwórz.

      Uwaga W programie Access 2007 kliknij prawym przyciskiem myszy pozycję Formularz1, a następnie kliknij przycisk Otwórz.

  5. Wybierz wiele elementów w polu listy. W tym celu kliknij element w polu listy, przytrzymaj klawisz CTRL, a następnie kliknij więcej elementów w polu listy.

  6. Kliknij pozycję Wyświetl zaznaczone elementy.

Elementy wybrane z pola listy wyboru wielokrotnego są wyświetlane jako ciąg rozdzielany przecinkami w polu tekstowym.

Firma Microsoft podaje przykłady programowania tylko dla celów ilustracyjnych, nie udzielając żadnej rękojmi, wyrażonej wprost ani dorozumianej, w tym także, ale nie tylko, dorozumianej rękojmi co do przydatności handlowej lub do określonych celów. W tym artykule zakłada się, że czytelnik zna demonstrowany język programowania oraz narzędzia używane do tworzenia i debugowania procedur. Wykwalifikowani pracownicy pomocy technicznej firmy Microsoft mogą pomóc w wyjaśnieniu, jak działa określona procedura, ale nie będą modyfikować tych przykładów ani dodawać żadnych funkcji i konstruować nowych procedur w celu dostosowania ich do określonych potrzeb użytkownika.