Pasar de listbox a listview en vba Excel

Llevo días intentando adaptar un código de un listbox a un listview.
Por lo que he leído se usan controles diferentes y otras propiedades.
A continuación ingreso el código del listbox con la propiedad .additem para ingresar los valores.

Dim j2 As Variant
Dim hojabase2 As Object
Dim filas2 As Variant
Dim i2 As Variant
On Error GoTo Errores2
If Me.num_equipament_final.Caption = "" Then
Else
j2 = 1
Set hojabase2 = ThisWorkbook.Sheets("Dades")
filas2 = Range("num").CurrentRegion.Rows.Count
For i2 = 1 To filas2
If LCase(hojabase2.Cells(i2, j2).Offset(0, 0).value) = LCase(Me.num_equipament_final.Caption) Then
Me.list_historial.AddItem hojabase2.Cells(i2, j2)
Me.list_historial.List(Me.list_historial.ListCount - 1, 0) = Format(hojabase2.Cells(i2, j2).Offset(0, 10), "dd/mm/yyyy")
Me.list_historial.List(Me.list_historial.ListCount - 1, 1) = hojabase2.Cells(i2, j2).Offset(0, 6)
Me.list_historial.List(Me.list_historial.ListCount - 1, 2) = hojabase2.Cells(i2, j2).Offset(0, 7)
Me.list_historial.List(Me.list_historial.ListCount - 1, 3) = hojabase2.Cells(i2, j2).Offset(0, 8)
Me.list_historial.List(Me.list_historial.ListCount - 1, 4) = hojabase2.Cells(i2, j2).Offset(0, 9)
Else
End If
Next i2
End If

Como podria adaptarlo a un listview?

1 respuesta

Respuesta
2

Pol tu código esta raro, veo cosas innecesarias y mal así que se me dificulta entenderlo, pero te explicare como se carga un listview de la forma más simple.

Básicamente el listview funciona así:

-La primera columna se define por el "item"

-El resto de columnas son "sub-items" del "item" de la primera columna.

Osea, en una fila, la primera columna es la principal por decirlo de alguna manera, y el resto son secundarios. Por lo que el Listview se carga de izquierda a derecha, fila por fila. He hecho un corto video para representar lo que quiero decir:

VIDEO DEMO

Por ejemplo, Machin y 28 son "sub-items" del "item" Andy

El código básico para cargar un listbox es el siguiente:

'Crea el encabezado del Listview con la primera fila del rango'
For Each Celda In Rango.Rows(1).Cells
    Me.ListView1.ColumnHeaders.Add Text:=Celda.Value, Width:=90
Next rngCell
'Cuenta la cantidad de filas en el rango'
RowCount = Rango.Rows.Count
'Cuenta la cantidad de columnas en el rango'
ColCount = Rango.Columns.Count
'Llena el Listview'
For i = 2 To RowCount '<-por cada fila'
    Set LstItem = Me.ListView1.ListItems.Add(Text:=Rango(i, 1).Value) '<-creal primer item'
    For j = 2 To ColCount '<-luego por cada columna en esa fila'
        LstItem.ListSubItems.Add Text:=Rango(i, j).Value '<-Crea los sub-items'
    Next j '<-Proximo sub-item'
Next i '<-Proximo item'

El codigo es ilustrativo, no va a funcionar con copiarlo y pegarlo, esto lleva mas trabajo, pero esa es la raiz de la cuestion.

Mas que pegar tu codigo actual, seria mejor que compartas la idea explicada de como funciona o que quieres lograr hacer.

PD: Saldre de viaje esta noche y se me va a hacer dificil ayudarte, hare lo que pueda.

Andy

Hola Andy, no me extraña que no lo entiendas jajaja tube algún que otro problema para poder hacer lo que ahora mismo esta haciendo (aunque el código no sea el mejor).

Te explico un poco lo que pretendo que haga este código y a ver si hay algo que debo quitar o reformular para que este mejor.
Uso un texbox para cargar los resultados de una búsqueda. Esta búsqueda se realiza en el rango "num" que se encuentra en la Hoja "Dades" en la columna A y empieza en la fila 3. (la búsqueda se realiza por un número único de la empresa)
El funcionamiento es el siguiente:
Si el Label (que contiene el numero único de la empresa, llamado "num_equipament_final.Caption") tiene algún valor debe mostrar los resultados solo de esa empresa en un listbox. Este listbox tiene 5 columnas:

Columna 1 del listbox = Fecha = Columna 10 hoja de calculo

Columna 2 del listbox = Material1= columna 6 hoja de calculo

Columna 3 del listbox = Material2 = Columna 7 hoja de calculo

Columna 4 del listbox = Material3 = Columna 8 hoja de calculo

Columna 5 del listbox = Material4 = Columna 9 hoja de calculo
Actualmente este código me realiza esta función correctamente (aunque seguro que se puede hacer muchísimo mejor)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas