Access & VBA FAQ
| | | |
Indice de temas
Tablas
Consultas
Formularios
Informes
Macros
Módulos
Base de datos
Miscelánea
API
Utilidades
Problemas
Cadenas
Fechas
Todos los temas
Formularios : Cómo obtener valores de cuadros de lista y cuadros combinados
Autor/es:
Juan M Afán de Ribera
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
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:

listas y combos

 

Temas relacionados:

Seleccionar elementos de un cuadro de lista o listbox

Seleccionar elementos de un cuadro combinado o combobox

 

Última actualización: 7/9/2005