Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

VBA: El control ListView en Excel

Un usuario preguntaba por la posibilidad de asignar un color a un elemento de un ListBox de acuerdo a un criterio.
Y aunque esto no parece posible, rebuscando entre la documentación de MSDN encontré el control ListView que sí lo permitirá.

El comentario del usuario:
[...]Tengo un LISTBOX en un FORM con una data de 4 columnas que obtengo de una hoja de calculo, hasta ahí todo bien. 

Lo que deseo es resaltar ciertos registros según el valor de la cuarta columna, algo así como formato condicional, si en la cuarta columna dice "SI" que se resalte toda la linea del LISTBOX. 

Esto es posible o de que manera podría lograrlo?? 
[...]


Lo primero es activar el control adicional entre los controles disponibles del UserForm:
Microsoft ListView Control, version 6.0



Así pues ya podemos incorporar a un UserForm nuestro control ListView:



Abrimos la ventana de código de nuestro formulario 'UserForm1' y añadimos el siguiente código asociado al evento UserForm_Initialize:

Private Sub UserForm_Initialize()
Dim FilaIni As Long
Dim UFila As Long
Dim pos As Long
Dim lv_item As Long 'número del item en el ListView
Dim fila As Long

Dim Item As ListItem
'damos valores al inicio y fin de los datos
FilaIni = 2: UFila = 11

pos = 2
lv_item = 1
With ListView1
'esta propiedad indica que tendremos encabezados
.View = lvwReport
'definimos cuáles serán los encabezados
With .ColumnHeaders
.Clear 'primero limpiamos..
'y leugo añadimos Nombre del campo y su ancho
'.Add(index, key, text, width, alignment, icon)
.Add Text:="Fecha", Width:=60
.Add Text:="Región", Width:=60
.Add Text:="Unidades", Width:=60
.Add Text:="Control", Width:=40
End With
'dejamos a la vista los encabezados
.HideColumnHeaders = False
'damos aspecto 3d
.Appearance = cc3D
'habilitamos que al marcar un elemento se selecciona la fila entera
.FullRowSelect = True

'recorremos la hoja de cálculo
'donde están los datos.. y los cargamos al ListView
For fila = FilaIni To UFila
If Cells(pos, "D").Value = "Sí" Then
Set Item = .ListItems.Add(Text:=Cells(pos, "A").Value)
Item.ListSubItems.Add Text:=Cells(pos, "B").Value
Item.ListSubItems.Add Text:=Cells(pos, "C").Value
Item.ListSubItems.Add Text:=Cells(pos, "D").Value
'damos color a la fila
Item.ForeColor = vbBlue
For x = 1 To Item.ListSubItems.Count
Item.ListSubItems.Item(x).ForeColor = vbBlue
Next x
Else
Set Item = .ListItems.Add(Text:=Cells(pos, "A").Value)
Item.ListSubItems.Add Text:=Cells(pos, "B").Value
Item.ListSubItems.Add Text:=Cells(pos, "C").Value
Item.ListSubItems.Add Text:=Cells(pos, "D").Value
End If
lv_item = lv_item + 1
pos = pos + 1
Next fila
End With
End Sub


A partir de los datos volcados en el rango A1:D11 de nuestra hoja de trabajo, si lanzamos nuestro formulario podemos comprobar el éxito de nuestro procedimiento



This post first appeared on EXCEL FORO: EJERCICIOS, EJEMPLOS, SOLUCIONES, DUDA, please read the originial post: here

Share the post

VBA: El control ListView en Excel

×

Subscribe to Excel Foro: Ejercicios, Ejemplos, Soluciones, Duda

Get updates delivered right to your inbox!

Thank you for your subscription

×