Cargar solo las filas con datos en un listBox desde una hoja de Excel

Tengo un userform con un listBox que es cargado con los datos que se encuentran una hoja de Excel y que son tomados de un rango (B17:E46) a la vez con este userform puedo borrar los datos de la fila que seleccione en mi listBox que también lo borra en la hoja. Como también puedo cargar los datos a mi hoja por medio de este userform. Y siempre los datos ingresados pueden verse en mi userform. Hasta aquí todo va bien. El problema está en la estética cuando borro una fila de datos desde el listBox. Me crea huecos. Es decir', si cargo datos desde la fila 2 en mi hoja que van numeradas del 1 al 30 luego borro el dato que se encuentra en la fila 1 se queda vacía esa fila en mi listBox y si borrará la fila 4 también esa queda vacía y así sucesivamente el problema. Lo que busco es que por mas que se borren esa filas o cualquier otra no deje esos huecos y los datos siempre puedan visualizarse en forma continua. ... Espero me haya podido explicar :-)Trabajo en excel 2007

1 Respuesta

Respuesta
2

Para actualizar la vista del listbox, deberás limpiarlo y volver a cargarlo.

Necesitaría ver el código de cómo eliminas en la hoja y en el listbox y cómo estás cargando en el listbox, para ponerte el código adecuado y se actualice el listbox.

Pon tu código para revisarlo.

.cells (fila, 2).clearcells (fila, 2).clearElcells (fila, 2).clearcódigo para cargar el listBox es

Private sub es userform_initialize ()

With Me.ListBox1

           .ColumnCount =4

           .ColumnWidths = ' los anchos de cada Columna

           .RowSourse = "B17:E46"

End With

End sub

Para eliminaren la hoja es

Private.......btnEliminar_Click()

Dim fila as integer

Dim final. .........

Dim xEmpleado

Fila= 17

Do while hoja7.cells (fila, 1)<>""

                 fila=fila+1

Loop 

Final=fila-1

for fila = 17 to  final

If hoja1.cell ( fila, 2 ) =  xEmpleado then

With hoja1

.cells (fila, 2).clear

.cells (fila, 3).clear

.cells.......

.cells.....

End With

Exit For

End If

Next

End Sub

Cambia esto:

With hoja1

. Cells (fila, 2). Clear

. Cells (fila, 3). Clear

.cells...

.cells...

End With

Por esto

With hoja1

.rows(fila).delete

End With


Tu formulario se debe actualizar en automático. Si no se actualiza, quedaría así:

With hoja1

.rows(fila).delete

End With

With Me.ListBox1

           .ColumnCount =4

           .ColumnWidths = ' los anchos de cada Columna

           .RowSourse = "B17:E46"

End With


Saludos. Dante Amor

Si es lo que necesitas.

Muchas gracias Dante Amor por tu corrección. Pero luego de aplicar me marca un error ademas con esto estaría borrando la fila Entera y necesito borrar sólo 4 celdas.

Me pregunto no habría otro método para evitar el problema ya que no quisiera borrar las filas porque contiene fórmulas. Te replanteo la pregunta de poder hacer que mi listBox me muestre los datos en forma continua y que están en la hoja en forma discontinua. Gracias por tu tiempo y aporte solidario a los proyectos ajenos. 

¿Me puedes decir cuál error?

La carga al listbox la estás haciendo con rowsource

With Me.ListBox1
           .ColumnCount =4
           .ColumnWidths = ' los anchos de cada Columna
           .RowSourse = "B17:E46"
End With

Eso significa que va a tomar todo el rango, incluyendo las celdas vacías.

Si no quieres que se vean los espacios en el list, entonces debes cargar con el método aditem

Te dejo un ejemplo:

For i = 17 To 46
    If Cells(i, "A") <> "" Then
        ListBox1.AddItem Range("A" & i)
        ListBox1.List(ListBox1.ListCount - 1, 1) = Range("A" & i)
        ListBox1.List(ListBox1.ListCount - 1, 2) = Range("B" & i)
        ListBox1.List(ListBox1.ListCount - 1, 3) = Range("C" & i)
    End If
Next

Dante Amor....

Estuve viendo y el erro era mio :'(

Cometi un Orror Ortografico 

Y el método de aditem Está fabuloso Asia ya no tengo esos espacios en blanco. 

Sos un caso Dante Amor....

Aunque me suene raro llamarte Dante "Amor"

Muchas gracias de vuelta. ....!!!!!!!!

Cualquier duda puedes consultarme.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas