Juanjo Luna

MVP Microsoft 365 Apps & Services 2023

LinkedIn Learning Instructor

Presidente de Access User Groups España

CEO Luna-Soft

Desarrollador

Consultor Informático

Juanjo Luna

MVP Microsoft 365 Apps & Services 2023

LinkedIn Learning Instructor

Presidente de Access User Groups España

CEO Luna-Soft

Desarrollador

Consultor Informático

Blog Post

Cómo obtener valores de cuadros de lista y cuadros combinados

Pregunta

¿Puedes proponer varios ejemplos de cómo obtener valores de cuadros de lista y cuadros combinados?

Respuesta

Los cuadros de lista y cuadros combinados son objetos tremedamente útiles a la hora de visualizar o de consultar información almacenada en nuestra base de datos. Pero a veces, es posible que no sepamos sacarle todo el provecho.

Por eso, quiero exponer aquí algunos extractos de código con operaciones comunes para obtener los valores que contienen. Para ello supondremos que tenemos un cuadro de lista llamado Lista, e iremos mostrando los valores en MsgBox. Los métodos que se verán sirven tanto para cuadros combinados como para cuadros de lista, excepto en aquellos que tratan de multiselección.


– Mostrar el valor del elemento que esté seleccionado actualmente:

MsgBox Me.Lista

– Mostrar todas las columnas del elemento seleccionado (suponiendo que tenga 3):

MsgBox Me.Lista.Column(0) & " | " _
     & Me.Lista.Column(1) & " | " _
     & Me.Lista.Column(2)

– Mostrar el valor del primer elemento (sin necesidad de estar seleccionado):

MsgBox Me.Lista.ItemData(0)

– Mostrar el valor del último elemento (sin necesidad de estar seleccionado):

MsgBox Me.Lista.ItemData(Me.Lista.ListCount - 1)

– Mostrar el valor de todos los elementos (sin necesidad de estar seleccionados):

Dim i As Long
Dim strTemp As String

    ' recorremos todos los elementos
    For i = 0 To Me.Lista.ListCount - 1
        ' construímos una cadena con cada uno de los valores
        strTemp = strTemp & Me.Lista.ItemData(i) & vbCrLf
    Next
    ' mostramos el resultado
    MsgBox strTemp

Cuando un elemento no está seleccionado, la propiedad ItemData([index]) devuelve el valor de la columna señalada en la propiedad Columna dependiente (BoundColumn) de la fila indicada en la variable [index]. Para obtener el valor de las diferentes columnas de un elemento, necesitamos cambiar la propiedad BoundColumn con el número de columna cuyo valor queremos obtener.

– Así, para mostrar todos los elementos y sus correspondientes columnas (sin necesidad de estar seleccionados):

Dim BColumn As Long
Dim Row As Long
Dim Col As Long
Dim strTemp As String

    ' almacenamos el valor de la propiedad
    ' Columna dependiente
    BColumn = Me.Lista.BoundColumn
    ' recorremos todos los elementos
    For Row = 0 To Me.Lista.ListCount - 1
        For Col = 1 To Me.Lista.ColumnCount
            ' cambiamos la columna dependiente a
            ' la que estemos actualmente
            Me.Lista.BoundColumn = Col
            ' obtenemos su valor y lo escribimos
            strTemp = strTemp & Me.Lista.ItemData(Row) & " | "
        Next
        ' quitamos el último "|"
        strTemp = Left(strTemp, Len(strTemp) - 3)
        strTemp = strTemp & vbCrLf
    Next
    ' volvemos a poner la propiedad Columna
    ' dependiente igual que al principio
    Me.Lista.BoundColumn = BColumn
    ' mostramos el resultado
    MsgBox strTemp

Para cuadros de lista con selección múltiple

En cuadros de lista con la propiedad Selección múltiple (MultiSelect), para obtener los valores de los elementos seleccionados utilizaremos la colección ItemsSelected([index]), donde [index] se referirá al número de elemento seleccionado. Sabiendo esto y siguiendo con el cuadro de lista del ejemplo anterior, pero con esta propiedad puesta a Sí, tendremos.

– Mostrar el valor del primer elemento seleccionado:

MsgBox Me.Lista.ItemData(Me.Lista.ItemsSelected(0))

– Mostrar el valor del último elemento seleccionado:

Dim UltimoElemento As Long

    ' averiguamos el número de fila del último
    ' elemento seleccionado
    UltimoElemento = Me.Lista.ItemsSelected _
                    (Me.Lista.ItemsSelected.Count - 1)
    ' mostramos el resultado
    MsgBox Me.Lista.ItemData(UltimoElemento)

– Mostrar los valores de todos los elementos seleccionados:

Dim item As Variant
Dim strTemp As String

    ' recorremos la colección ItemsSelected
    ' y obtenemos todos los elementos seleccionados
    For Each item In Me.Lista.ItemsSelected
        strTemp = strTemp & Me.Lista.ItemData(item) & vbCrLf
    Next
    MsgBox strTemp

Ejemplos

Créditos

con el fin de dar a conocer el trabajo de uno de los más grandes en el mundo de Access en español, y tras solicitar su permiso, replico este artículo de Juan M Afán de Ribera. Todos los derechos y autoría corresponden a él. Access & VBA FAQ – Cómo obtener valores de cuadros de lista y cuadros combinados (archive.org)

Related Posts
Write a comment