Buscar datos en listbox con varias columnas

Tengo una dificultad con un formulario VB en excel 2013,

En mi form tengo un texbox asociado a un listbox, esto es para buscar datos, seleccionar uno y que se copie a una celda (ejem.: A1) estos son los códigos que estoy usando.

Private Sub UserForm_Click()
Load UserForm1
UserForm1.Show
End Sub

Private Sub Textbox1_Change()
If Len(TextBox1) < 2 Then Exit Sub
ListBox1.Clear
x = 1
Do Until Hoja3.Cells(x, 1) = ""
If UCase(Hoja3.Cells(x, 1)) Like "*" & UCase(TextBox1) & "*" Then
ListBox1.AddItem Hoja3.Cells(x, 1)
End If
x = x + 1
Loop
End Sub

Private Sub ListBox1_Click()
Range("G17").Select
ActiveCell = ListBox1.Text
Range("G27").Select
End Sub

Private Sub TextBox1_GotFocus()
TextBox1 = ""
ListBox1.Clear
End Sub

Pues hasta acá todo bien, hasta que tuve que poner el listbox con varias columnas (en Columnhead = True, ColumnCount = 3, RowSource seleccione la tabla2, de donde viene los datos) y ahora me arroja error en la línea que destaco en negrita, si me pudiesen ayudar le agradeceré mucho.

1 respuesta

Respuesta
1

H o l a:

Cambia esta línea

ListBox1. Clear

'

Por esta:

ListBox1.RowSource = ""


'

S a l u d o s . D a n t e   A m o r. Recuerda valorar la respuesta.

Hola Dante, gracias por tu respuesta, hasta acá ya no me da el error, sin embargo ahora se genera otro conflicto, detallo:

Así quedo la macro: (con la línea que me comentas actualizada) además actualice los datos del texbox correcto y las hojas de donde vienen los datos y todo funciona bien... pero...


Private Sub Textbox15_Change()
If Len(TextBox15) < 2 Then Exit Sub
ListBox1.RowSource = ""
X = 1
Do Until Hoja2.Cells(X, 1) = ""
If UCase(Hoja2.Cells(X, 1)) Like "*" & UCase(TextBox15) & "*" Then
ListBox1.AddItem Hoja2.Cells(X, 1)
End If
X = X + 1
Loop
End Sub

Private Sub ListBox1_Click()
Range("E21").Select
ActiveCell = ListBox1.Text
Range("E28").Select
End Sub

Private Sub TextBox15_GotFocus()
TextBox15 = ""
ListBox1.Clear
End Sub


El problem que se genera ahora es esto:

Cuando activo el formulario, se cargan así los datos junto con el encabezado y las columnas con sus datos...

Pero cuando en el texbox busco parte del nombre los datos de las demás columnas se borran:

Te agradeceré me puedas comentar de que manera corrijo este error, gracias por tu disposición, saludos.

H o l a:

Tienes que emplear un método para adicionar datos al listbox.

O utilizas Rowsource o utilizas Additem.

Por lo que veo, estás haciendo un filtro. Entonces lo que necesitas es utilizar additem.

Quita la propiedad de rowsource.

El código deberá quedar así:

Private Sub Textbox15_Change()
    If Len(TextBox15) < 2 Then Exit Sub
    ListBox1.Clear
    X = 1
    Do Until Hoja2.Cells(X, 1) = ""
        If UCase(Hoja2.Cells(X, 1)) Like "*" & UCase(TextBox15) & "*" Then
            ListBox1.AddItem Hoja2.Cells(X, 1)
            ListBox1.List(ListBox1.ListCount - 1, 1) = Hoja2.Cells(X, 2)
            ListBox1.List(ListBox1.ListCount - 1, 2) = Hoja2.Cells(X, 3)
        End If
        X = X + 1
    Loop
End Sub

Cuando utilizas la propiedad Additem no puedes utilizar la propiedad Columnheads, aunque la tengas en True, no te va a mostrar los encabezados.

En este caso los encabezado los tendrás que poner directamente en el formulario, por ejemplo, con una etiqueta.


¡Gracias! Te pasaste con la ayuda! Muchas gracias, cerrare esta pregunta y subiré otra con: como pasar los datos de listbox (el mismo) a celdas excel, nuevamente gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas