Come recuperare gli elementi selezionati in una casella di riepilogo a selezione multipla come stringa delimitata da virgole in Microsoft Access

Le informazioni in questo articolo si applicano ai file di database di Microsoft Access con estensione .mdb oppure .accdb e ai file di progetto di Microsoft Access con estensione .adp.

Moderato: richiede competenze di base di macro, codifica e interoperabilità.

Riepilogo

Questo articolo descrive come recuperare gli elementi selezionati da una casella di riepilogo a selezione multipla e quindi archiviare gli elementi selezionati come stringa delimitata da virgole in Microsoft Access.

Ulteriori informazioni

In Microsoft Access, il valore della proprietà MultiSelect della casella di riepilogo in una maschera o in un report determina se la casella di riepilogo è una casella di riepilogo a selezione singola o una casella di riepilogo a selezione multipla. In una casella di riepilogo a selezione multipla è possibile selezionare più voci di elenco contemporaneamente.

È possibile utilizzare la proprietà Value della casella di riepilogo per recuperare l'elemento selezionato dalla casella di riepilogo. Tuttavia, quando si utilizza una casella di riepilogo a selezione multipla e si tenta di recuperare gli elementi selezionati tramite la proprietà Value, la proprietà Value restituisce Null.

È possibile recuperare gli elementi selezionati in una casella di riepilogo a selezione multipla e quindi archiviare gli elementi selezionati come stringa delimitata da virgole a livello di codice. A tal fine, attenersi alla seguente procedura:

  1. Avviare Microsoft Access.

  2. Aprire il database di esempio Northwind.

  3. Nella sezione Oggetti della finestra Database fare clic su Moduli.

    Nota In Access 2007 fare clic su Struttura modulo nel gruppo Moduli della scheda Crea .

  4. Nel riquadro destro fare doppio clic su Crea modulo in visualizzazione Struttura.

    Nota In Access 2007 ignorare questo passaggio.

  5. Aggiungere i controlli seguenti al form e quindi impostare le proprietà dei controlli come specificato:

    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. Scegliere Codice dal menu Visualizza.

    Nota In Access 2007 fare clic su Visualizza codice nel gruppo Strumenti della scheda Progettazione .

  7. Incollare il codice seguente nella Editor di 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. Chiudere la Editor di Visual Basic.

  2. Salvare il modulo come Form1.

  3. Chiudere il modulo.

  4. Aprire il modulo Form1 in visualizzazione Maschera:

    1. Nella sezione Oggetti della finestra del database fare clic su Moduli.

      Nota Nel riquadro di spostamento di Access 2007 fare clic sul gruppo Moduli .

    2. Nel riquadro destro fare clic con il pulsante destro del mouse su Form1 e quindi scegliere Apri.

      Nota In Access 2007 fare clic con il pulsante destro del mouse su Form1 e quindi scegliere Apri.

  5. Selezionare più elementi nella casella di riepilogo. A tale scopo, fare clic su un elemento nella casella di riepilogo, tenere premuto CTRL e quindi fare clic su altri elementi nella casella di riepilogo.

  6. Fare clic su Visualizza elementi selezionati.

Gli elementi selezionati dalla casella di riepilogo a selezione multipla vengono visualizzati come stringa delimitata da virgole nella casella di testo.

Microsoft fornisce esempi di programmazione a scopo puramente illustrativo, senza alcuna garanzia di qualsiasi tipo, sia espressa che implicita, ivi incluse, senza limitazioni, le garanzie implicite di commerciabilità o idoneità per uno scopo particolare. In questo articolo si presuppone che l'utente conosca il linguaggio di programmazione in questione e gli strumenti utilizzati per creare ed eseguire il debug delle procedure. Gli esperti Microsoft sono autorizzati a fornire spiegazioni in merito alla funzionalità di una particolare routine, ma in nessun caso a modificare questi esempi per fornire funzionalità aggiuntive o a creare routine atte a soddisfare specifiche esigenze.