Mostrar en listbox solo las filas con dato, a partir de la columna 1 de la tabla.

Tengo una tabla con datos, la primera columna (A) es un ID, cuando se completa información en mi base de datos, el número del ID lo elimino, quedando vacío. Entonces cuando vuelvo a cargar el listbox, no quiero que las filas con ID vacío se muestren el el listbox.

El siguiente es el código que utilizo para cargar el listbox. La primera fila con dato ID es la 3.

Option Explicit

Sub cargarlista()

Dim i As Long
i = 2
Do While Hoja1.Cells(i + 1, 1).Value <>""

With ListContratosHH.ListBox1

.AddItem Hoja1.Cells(i + 1, 1).Value 
.List(i - 2, 1) = Hoja1.Cells(i + 1, 4).Value 
.List(i - 2, 2) = Hoja1.Cells(i + 1, 5).Value 
.List(i - 2, 3) = Hoja1.Cells(i + 1, 11).Value
End With

i = i + 1

Loop

End Sub

Respuesta
1

Para ajustar tu código y asegurarte de que las filas con un ID vacío no se muestren en el ListBox, solo necesitas agregar una condición que verifique si la celda de la columna A (que contiene el ID) está vacía antes de agregar los datos al ListBox.

A continuación te muestro cómo modificar tu código para que solo cargue las filas en el ListBox si la columna A (ID) tiene un valor:

Código actualizado:

Option Explicit

Sub cargarlista()

Dim i As Long
i = 3 ' Empieza desde la fila 3, según tu descripción

Do While Hoja1.Cells(i, 1).Value <> "" ' Continúa el bucle mientras haya datos en la columna A (ID)

' Verifica si el ID (columna A) no está vacío
If Hoja1.Cells(i, 1).Value <> "" Then
With ListContratosHH.ListBox1
.AddItem Hoja1.Cells(i, 1).Value ' Agrega el ID a la primera columna del ListBox
.List(.ListCount - 1, 1) = Hoja1.Cells(i, 4).Value ' Agrega el dato de la columna 4 (D)
.List(.ListCount - 1, 2) = Hoja1.Cells(i, 5).Value ' Agrega el dato de la columna 5 (E)
.List(.ListCount - 1, 3) = Hoja1.Cells(i, 11).Value ' Agrega el dato de la columna 11 (K)
End With
End If
i = i + 1 ' Avanza a la siguiente fila
Loop

End Sub

Explicación:

1. Condición If Hoja1.Cells(i, 1).Value <> "" Then:

Antes de agregar los datos al ListBox, el código verifica si la celda en la columna A (ID) de esa fila tiene un valor.

Si está vacía, el código no agregará esa fila al ListBox y seguirá con la siguiente fila.

2. Cambio en Do While Hoja1.Cells(i, 1).Value <> "":

El bucle ahora depende de que la columna A tenga un valor para detenerse. Si encuentra una fila sin valor en la columna A, el bucle termina.

3. Uso de .ListCount - 1:

Al usar .ListCount - 1, el código se asegura de que siempre se esté llenando la última fila disponible del ListBox, ya que las filas se agregan dinámicamente.

Resultado:

Este ajuste garantiza que solo las filas con un ID en la columna A se muestren en el ListBox, ignorando las que tienen el ID vacío.

3 respuestas más de otros expertos

Respuesta
1

I. Hola Héctor, en mi caso no fui capaz de encontrar la información necesaria ni soy experto, pero deseaba dejarle los resultados de una búsqueda en Inglés y en especial a ofrecerme para trasladar su consulta a un experto en caso de que no recibiese respuestas en breve. Le ruego me disculpe todas las molestias, ánimo.

https://stackoverflow-com.translate.goog/questions/25324764/stop-blank-cells-entering-into-listbox?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc 

https://forum-ozgrid-com.translate.goog/forum/index.php?thread/110930-refresh-userform-listbox-data-without-listbox-clearing-each-time/&_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc 

https://www-mrexcel-com.translate.goog/board/threads/show-only-filtered-data-in-listbox1.481305/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc 

https://stackoverflow-com.translate.goog/questions/75009451/listbox-to-display-data-from-columns-based-on-if-cells-in-specified-column-conta?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc 

https://answers.microsoft.com/en-us/msoffice/forum/all/listbox-shows-only-first-row-of-filtered-data-in/c8167c03-28c9-449e-82fc-9c633b86f44a 

https://www-access--programmers-co-uk.translate.goog/forums/threads/select-first-row-of-a-value-in-listbox.328161/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc 

https://www-excelforum-com.translate.goog/excel-programming-vba-macros/701175-preventing-listbox-from-showing-blank-cells.html?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc 

https://www.access-programmers.co.uk/forums/threads/listbox-with-bound-second-column.134217/ 

https://www-access--programmers-co-uk.translate.goog/forums/threads/select-column-value-in-a-listbox.321595/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc 

https://www.access-programmers.co.uk/forums/threads/select-column-value-in-a-listbox.321595/ 

https://community-alteryx-com.translate.goog/t5/Alteryx-Designer-Desktop-Discussions/List-box-to-pull-row-values-from-single-column/td-p/325073?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc 

https://stackoverflow.com/questions/55982463/how-to-populate-a-listbox-in-a-userform-with-a-variable-set-of-rows-from-last-ro 

https://stackoverflow.com/questions/77123604/how-can-i-populate-my-listbox-with-only-certain-columns-from-a-worksheet 

https://stackoverflow.com/questions/65982314/why-does-this-listbox-only-displays-the-1st-2-rows-of-the-spreadsheet-and-doesn 

¡Gracias! 

Muy agradecido David por tu interés, excelente aporte.

Bendiciones,

I. Hola Héctor, muchísimas gracias por sus amables palabras :) me alegro de que pueda serle de utilidad.

Un abrazo.

Respuesta
1

Para asegurarte de que solo las filas con un ID no vacío se carguen en el ListBox

Modifique tu código ajustado:

Option Explicit
Sub cargarlista()
    Dim i As Long
    i = 3 
    With ListContratosHH.ListBox1
        .Clear 
        Do While Hoja1.Cells(i, 1).Value <> "" Or Hoja1.Cells(i, 1).Value <> 0
            If Hoja1.Cells(i, 1).Value <> "" Then
                .AddItem Hoja1.Cells(i, 1).Value
                .List(.ListCount - 1, 1) = Hoja1.Cells(i, 4).Value
                .List(.ListCount - 1, 2) = Hoja1.Cells(i, 5).Value
                .List(.ListCount - 1, 3) = Hoja1.Cells(i, 11).Value
            End If
            i = i + 1
        Loop
    End With
End Sub
Respuesta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas