Limpiar listbox si no hay datos en un Texbox. VBA Excel

Me gustaria limpiar un listbox cuando no hay datos en un combobox o textbox.
El codigo que he creado es este:

If num_equipament.value = "" And _
Tipologia.value = "" And _
nom_equipament.value = "" Then
Else
list_equipaments.RowSource = ""
End If

Como se ve en la imagen en los 2 combobox de arriba y el textbox se introduce los datos para buscar y en el listbox se muestran.
Me gustaria que cuando se borraran los datos también desaparecieran los resultados de listbox.

Como se ve en esta imagen el 3 ha desaparecido pero el contenido de listbox aun muestra todo lo que contenga 3.
¿Falla algo en mi codigo?

¿En qué evento lo deberia poner? ¿En Change del listbox o combobox?

1 Respuesta

Respuesta
1

Siempre que dejes tu código debes indicar en qué evento lo estás colocando.

Tu macro sería correcta si vas a agregar instrucciones diferentes para cuando los 3 campos quedan vacíos... y limpiar la lista cuando solo alguno quede así.

Pero si no importa si solo 1 o los 3 quedan vacíos debes utilizar OR en lugar de AND:

If num_equipament.value = "" OR Tipologia.value = "" OR nom_equipament.value = "" Then
'aquí cuando solo alguno queda vacio
list_equipaments.RowSource = ""
End If

Estas instrucciones podrías colocarlas en el evento Change de cada control, preguntando solo por el contenido de ese control. Por ej: para el de Equipament

If num_equipament.value = ""  Then
'aquí cuando solo alguno queda vacio
list_equipaments.RowSource = ""
End If

Y quizás en algún evento más... pero al desconocer cómo se llena y limpia tu formulario solo se me ocurre ahora el evento Change de cada control.

¡Gracias! Elsa, lo estaba colocando en el evento change de cada control tal y como has dicho.
He intentado lo que me propones pero no he conseguido hacer que funcione (no me da error tampoco). Seguramente tiene algo que ver como agrego los datos al listbox. Tambien he intentado con .RemoveItem  o .Clear y no lo he logrado.
Aqui tienes el codigo que tengo para ingresar los datos en el listbox.

Private Sub nom_equipament_Change()
j = 1
Set hojabase = ThisWorkbook.Sheets("Equipaments")
filas = Range("Equipaments").CurrentRegion.Rows.Count
For i = 1 To filas
If LCase(hojabase.Cells(i, j).Offset(0, 2).value) Like "*" & LCase(Me.nom_equipament.value) & "*" Then
Me.list_equipaments.AddItem hojabase.Cells(i, j)
Me.list_equipaments.List(Me.list_equipaments.ListCount - 1, 2) = hojabase.Cells(i, j).Offset(0, 2)
Me.list_equipaments.List(Me.list_equipaments.ListCount - 1, 3) = hojabase.Cells(i, j).Offset(0, 3)
Me.list_equipaments.List(Me.list_equipaments.ListCount - 1, 1) = hojabase.Cells(i, j).Offset(0, 1)
Me.municipi.value = hojabase.Cells(i, j).Offset(0, 4)
Else
End If
Next i
End If
Exit Sub
End Sub

Que estoy haciendo mal?


Gracias de nuevo

Si este es uno de los controles que al quedar vacío debe limpiar la lista... debes evaluar esa situación aquí mismo.

Dejé en imagen en código completo. Acostumbrate a trabajarlo separando los bucles (IF...End If, For...Next, etc) para que veas con más claridad si todos están bien cerrados. En tu macro sobraba un End IF.

Tampoco hace falta que agregues el ELSE si no hay ninguna acción a ejecutar.

Y por último mira especialmente los videos 11 y 30 de mi canal (uso del Me. Y atención con el uso de CurrentRegion... quizás en este caso esté bien pero no lo tomes como seguro para todo tipo de tablas.)

Sdos!

Ya escribí esta respuesta... quizás te llegue 2 veces.

Si este es el control que, al quedar vacío debe limpiar la lista, debes contemplar esa situación en la misma macro.

Dejo en imagen el código completo para que observes que si acostumbras a espaciar los inicios y fin de bucles, verás con más claridad las acciones. En tu código sobraba un End If. Tampoco es necesario agregar Else si no habrá instrucciones para esa situación.

También te sugiero ver los videos 11 y 30 de mi canal. El uso del Me. Casi nunca es necesario y con el CurrentRegion no habría que tomarlo como un método para todo tipo de tablas. No está mal... solo conocer las limitaciones.

Sdos!

¡Gracias! Muchas gracias, ahora si que me funciona correctamente. He cambiado el .Rowsource por .Clear y todo perfecto.
Ultimamente creo que la pagina da algun tipo de problema, a mi tambien se me han duplicado 2 veces alguna pregunta o alguna respuesta.
Como siempre Elsa muchas gracias por tu explicaciones y tus clases.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas