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)