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

Nota

Office 365 ProPlus viene rinominato in Microsoft 365 Apps for enterprise. Per ulteriori informazioni su questa modifica, leggere questo post di blog.

Questo articolo si applica a un file di database di Microsoft Access (con estensione mdb) o a un file di database di Microsoft Access (accdb) e a un file di progetto di Microsoft Access (con estensione adp).

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

Riepilogo

In questo articolo viene descritto come recuperare gli elementi selezionati da una casella di riepilogo a selezione multipla e quindi archiviarli come stringa delimitata da virgole in Microsoft Access.

Ulteriori informazioni

In Microsoft Access il valore della proprietà MultiSelect della casella di riepilogo di una maschera o di un report determina se la casella di riepilogo è una casella di riepilogo a selezione singola o 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 utilizzando 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 programmazione. A tal fine, attenersi alla seguente procedura:

  1. Avviare Microsoft Access.

  2. Aprire il database di esempio Northwind.

  3. Nella sezione Oggetti della finestra del database fare clic su Maschere.

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

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

    Nota In Access 2007 ignorare questo passaggio.

  5. Aggiungere i controlli seguenti al modulo 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 Struttura.

  7. Incollare il codice seguente in 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. Chiudere l Visual Basic Editor.

  2. Salvare il modulo come Form1.

  3. Chiudere il modulo.

  4. Aprire la maschera Form1 in visualizzazione Maschera:

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

      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 più 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.