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 |