Cómo recuperar los elementos seleccionados en un cuadro de lista de selección múltiple como una cadena delimitada por comas en Microsoft Access

Este artículo se aplica a archivos de base de datos de Microsoft Access (.mdb o .accdb), o de proyecto de Microsoft Access (.adp).

Moderado: requiere aptitudes básicas de macro, codificación e interoperabilidad.

Resumen

En este artículo se describe cómo recuperar elementos seleccionados de un cuadro de lista de selección múltiple y, a continuación, almacenar los elementos seleccionados como una cadena delimitada por comas en Microsoft Access.

Más información

En Microsoft Access, el valor de la propiedad MultiSelect del cuadro de lista en un formulario o en un informe determina si el cuadro de lista es un único cuadro de lista de selección o un cuadro de lista de selección múltiple. En un cuadro de lista de selección múltiple, puede seleccionar varios elementos de lista a la vez.

Puede usar la propiedad Value del cuadro de lista para recuperar el elemento seleccionado del cuadro de lista. Sin embargo, al usar un cuadro de lista de selección múltiple e intentar recuperar los elementos seleccionados mediante la propiedad Value, la propiedad Value devuelve Null.

Puede recuperar los elementos seleccionados en un cuadro de lista de selección múltiple y, a continuación, almacenar los elementos seleccionados como una cadena delimitada por comas mediante programación. Para ello, siga estos pasos:

  1. Inicie Microsoft Access.

  2. Abra la base de datos de ejemplo Northwind.

  3. En la sección Objetos de la ventana Base de datos, haga clic en Formularios.

    Nota En Access 2007, haga clic en Diseño de formulario en el grupo Formularios de la pestaña Crear .

  4. En el panel derecho, haga doble clic en Crear formulario en la vista Diseño.

    Nota En Access 2007, omita este paso.

  5. Agregue los siguientes controles al formulario y, a continuación, establezca las propiedades de los controles según lo especificado:

    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. En el menú Ver, haga clic en Código.

    Nota En Access 2007, haga clic en Ver código en el grupo Herramientas de la pestaña Diseño .

  7. Pegue el código siguiente en la Editor de 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. Cierre el editor de Visual Basic.

  2. Guarde el formulario como Form1.

  3. Cierre el formulario.

  4. Abra el formulario Form1 en la vista Formulario:

    1. En la sección Objetos de la ventana Base de datos , haga clic en Formularios.

      Nota En Access 2007, en el panel de navegación, haga clic en el grupo Formularios .

    2. En el panel derecho, haga clic con el botón derecho en Form1 y, a continuación, haga clic en Abrir.

      Nota En Access 2007, haga clic con el botón derecho en Form1 y, a continuación, haga clic en Abrir.

  5. Seleccione varios elementos en el cuadro de lista. Para ello, haga clic en un elemento del cuadro de lista, mantenga presionada la tecla CTRL y, a continuación, haga clic en más elementos del cuadro de lista.

  6. Haga clic en Mostrar elementos seleccionados.

Los elementos seleccionados en el cuadro de lista de selección múltiple se muestran como una cadena delimitada por comas en el cuadro de texto.

Microsoft proporciona ejemplos de programación con fines ilustrativos únicamente, sin ninguna garantía, ya sea expresa o implícita. Esto incluye, entre otras, las garantías implícitas de comerciabilidad e idoneidad para un fin determinado. Se considera que está familiarizado con el lenguaje de programación que se muestra y con las herramientas para crear y depurar procedimientos. Los ingenieros de soporte técnico de Microsoft pueden explicarle la funcionalidad de un determinado procedimiento, pero no modificarán estos ejemplos para ofrecer mayor funcionalidad ni crearán procedimientos adaptados a sus necesidades específicas.