Hola a todos:
Cuando cargamos los datos en un listbox puede ser que necesitemos que se coloreen o remarquen ciertos ítems de un color determinado según una condición. Esto no lo vamos a lograr con un listbox, sino con otro control de formulario muy parecido, el listview.
Este control lo podremos instalar pulsando con el botón derecho del ratón en el cuadro de herramientas de nuestro formulario.
y a continuación pulsando en «Controles adicionales» y seleccionando Microsoft ListView Control, versión 6.0
Una vez instalado ya lo podemos programar y usar. En la imagen anterior véis que se trata de un control muy parecido al listbox.
Pues bien, vamos a hacer un ejercicio de ejemplo para que veais como podemos programar este control de formulario.
Dada esta base de datos, vamos a cargar todos estos ítems en nuestro listview y colorear según las siguientes condiciones:
- si la edad es <= «25» entonces el color de la fuente será una variedad de azul: RGB(0, 112, 192)
- si la edad es > «45» entonces el color de la fuente será rojo (vbRed).
- si es otra edad, el color será el establecido por defecto.
Para realizar todo esto utilizaremos este código vinculado a un botón de ejecución dentro del mismo formulario:
Option Explicit
Private Sub CommandButton1_Click()
'Definimos variables
Dim fin As Long, final As Long
Dim i As Long, j As Long, c As Long
Dim Dato As Object
fin = Application.CountA(Range("A:A"))
final = Application.CountA(Range("1:1"))
With ListView1
'Limpiamos los items del listview
.ListItems.Clear
'seleccionamos toda la línea
.FullRowSelect = True
'indicamos vista reporte
.View = lvwReport
With .ColumnHeaders
'Limpiamos y creamos encabezados
.Clear
.Add Text:="ID", Width:=30
.Add Text:="NOMBRE COMPLETO", Width:=160
.Add Text:="SECCIÓN", Width:=120
.Add Text:="EDAD", Width:=30
.Add Text:="SEXO", Width:=60
.Add Text:="2º IDIOMA", Width:=60
.Add Text:="ESTUDIOS", Width:=160
End With
'Cargamos datos de la hoja
'Si el valor es menor o igual a 25 años marcamos con color RGB
For i = 2 To fin
If Cells(i, 4).Value <= "25" Then
Set Dato = .ListItems.Add(Text:=Cells(i, 1).Value)
Dato.ForeColor = RGB(0, 112, 192)
With Dato.ListSubItems
For c = 2 To final
.Add Text:=Cells(i, c).Value
Next c
For j = 1 To .Count
.Item(j).ForeColor = RGB(0, 112, 192)
Next j
End With
'Si el valor es mayor que 45 años marcamos con color rojo
ElseIf Cells(i, 4).Value > "45" Then
Set Dato = .ListItems.Add(Text:=Cells(i, 1).Value)
Dato.ForeColor = vbRed
With Dato.ListSubItems
For c = 2 To final
.Add Text:=Cells(i, c).Value
Next c
For j = 1 To .Count
.Item(j).ForeColor = vbRed
Next j
End With
'caso contrario, no coloreamos
Else
Set Dato = .ListItems.Add(Text:=Cells(i, 1).Value)
With Dato.ListSubItems
For c = 2 To final
.Add Text:=Cells(i, c).Value
Next c
End With
End If
Next i
End With
End Sub
El resultado será el siguiente:
Como podéis observar, cuando cargamos los datos se aplican los criterios de nuestra condición.
Y esto es todo!.
Descarga el archivo de ejemplo pulsando en: ÍTEMS EN LISTBOX CON COLORES. CONTROL LISTVIEW
¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.
¡¡Muchas gracias!!
Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies
Como sería la codificaciónpara hacer un buscador en un listview
La mejor forma de hacerlo es realizando la búsqueda directamente en la hoja y mostrar luego los datos en el listview.
En el blog tienes varios ejemplos de cómo buscar:https://excelsignum.com/2017/12/10/realizar-busquedas-dependientes-en-un-listbox/
Me sale este Error: No se encuentra el proyecto o la Biblioteca, y se sitúa el Error en lvwReport
Emiro, ese error surge porque no tienes el control instalado en tu versión de Excel. Tendrías que instalarlo o utilizar otra versión.
Saludos.
Instalé los Controles de la siguiente manera: Cuadro de Herramientas/Controles adicionales/Microsoft ListView Control 6.0/ Microsoft MonthView Control 6.0 (SP6) . Al dar Clic en Generar ListView/ aparece ERROR: No se encuentra el proyecto o la biblioteca y lo manda a: IvwReport
Hola Emiro: Baja mi ejemplo y ejecútalo. Si te muestra el error que indicas, entra en las referencias (no en los Controles Adicionales) y verifica cual de los controles no tienes en tu equipo.
Está claro que el error que te muestra se debe a que no tienes la biblioteca en tu equipo. Intenta descargar un complemento con dicho control, es lo único que te puedo recomendar.
Ahora mismo estoy ejecutando esta macro en un equipo con Office 365 ProPlus a 64 bits. Saludos
se puede usar listview en excel 2016, no encuentro ese control ? como lo cargo o lo habilitp
Hola Daniel:
Deberías tener ese control en 2016, recuerda que no está en la biblioteca de referencias sino en controles adicionales. Tendrías que buscar documentación en internet para descargar una actualización de ese control.
Saludos
tampoco logro correr por el tema del listview alguna sugerencia para instalarlo o acivarlo?
En la red encontrarás tutoriales y cómo instalarlos y la versión de excel indicada que lo incluye. Saludos