Jak pobrać zaznaczone elementy z pola listy wielokrotnego wyboru jako ciąg rozdzielany przecinkami w programie Microsoft Access

Uwaga

Nazwa usługi Office 365 ProPlus została zmieniona na Aplikacje usługi Microsoft 365 dla przedsiębiorstw. Aby uzyskać więcej informacji na temat tej zmiany, przeczytaj ten wpis w blogu.

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

Umiarkowany. Wymaga podstawowych umiejętności makr, kodowania i współdziałania.

Podsumowanie

W tym artykule opisano sposób pobierania zaznaczonych elementów z pola listy wielokrotnego wyboru, a następnie przechowywania zaznaczonych 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 raporcie określa, czy pole listy jest pojedynczym polem listy wyboru, czy polem listy wielokrotnego wyboru. W polu listy wielokrotnego wyboru możesz zaznaczyć wiele elementów listy jednocześnie.

Właściwość Wartość pola listy umożliwia pobranie wybranego elementu z pola listy. Jednak w przypadku użycia pola listy wielokrotnego wyboru i próby pobrania wybranych elementów przy użyciu właściwości Value właściwość Value zwraca wartość Null.

Zaznaczone elementy można pobrać do pola listy wielokrotnego wyboru, a następnie programowo przechowywać jako ciąg rozdzielany przecinkami. 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 okna Baza danych kliknij pozycję Formularze.

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

  4. W prawym okienku kliknij dwukrotnie pozycję Utwórz formularz w widoku projektu.

    Uwaga Pomiń ten krok w programie Access 2007.

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

    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 polecenie 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 Edytorze 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 Edytor Visual Basic.

  2. Zapisz formularz jako formularz1.

  3. Zamknij formularz.

  4. Otwieranie formularza Form1 w widoku formularza:

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

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

    2. W prawym okienku kliknij prawym przyciskiem myszy pozycję Formularz1, a następnie kliknij polecenie Otwórz.

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

  5. Zaznaczenie wielu elementów w polu listy. W tym celu kliknij element w polu listy, przytrzymaj naciśnięty klawisz CTRL i kliknij więcej elementów w polu listy.

  6. Kliknij pozycję Wyświetl zaznaczone elementy.

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

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.