Excel - Modificar un listbox para que encuentre datos concretos

   
Vista:

Modificar un listbox para que encuentre datos concretos

Publicado por Mª Auxilio (19 intervenciones) el 04/05/2015 20:08:05
Hola amigos:
Tengo una base de datos con 14 columnas visibles (que pueden llegar hasta la fila 2000 desde la 5) y que relleno desde un formulario con 12 textbox y 2 combobox, 1 botón insertar y un listbox que refleja los mismos datos de la BD.
Desde el listbox y haciendo doble clik, en una fila, puedo volver a pasar los datos a los textbox para hacer alguna modificación e insertarlo desde el botón como un registro nuevo. con lo que evito tener que teclear todos los datos de un cliente que digamos (ha hecho una nueva compra) pero que la mayoría de los datos son los mismos.
El problema es que la base de datos es muy extensa y quisiera quitando la propiedad rowsource del listbox, que el mismo quedara en blanco y entonces con un textbox nuevo y un botón buscar que me encontrara los registros de un cliente concreto los insertara en el listbox y una vez allí elegir el registro que quisiera de ese cliente hacer alguna modificación e insertarlo como nuevo en la BD.
No sé si me estoy explicando bien, pero el caso es que no lo consigo, sólo logro que se rellenen en el listbox dos columnas de las 14 que tienen tanto el listbox como la base de datos.
Alguien me puede ayudar. No puedo subir el archivo porque es tan extenso que ni comprimiéndolo puedo enviarlo. así que pego el código,

Dim i, items, xGanadero

Private Sub btn_Buscar_Click()


If Me.txt_buscar.Value = Empty Then
MsgBox "Escriba un registro para buscar"
Me.ListBox1.Clear
Me.txt_buscar.SetFocus
Exit Sub
End If

Me.ListBox1.Clear

items = Range("Tabla1").CurrentRegion.Rows.Count
For i = 2 To items
If LCase(Cells(i, 1).Value) Like "*" & LCase(Me.txt_buscar.Value) & "*" Then
Me.ListBox1.AddItem Cells(i, 1)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Cells(i, 14)

ElseIf LCase(Cells(i, 2).Value) Like "*" & LCase(Me.txt_buscar.Value) & "*" Then
Me.ListBox1.AddItem Cells(i, 2)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Cells(i, 14)

ElseIf LCase(Cells(i, 3).Value) Like "*" & LCase(Me.txt_buscar.Value) & "*" Then
Me.ListBox1.AddItem Cells(i, 3)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Cells(i, 14)

ElseIf LCase(Cells(i, 4).Value) Like "*" & LCase(Me.txt_buscar.Value) & "*" Then
Me.ListBox1.AddItem Cells(i, 4)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Cells(i, 14)

ElseIf LCase(Cells(i, 5).Value) Like "*" & LCase(Me.txt_buscar.Value) & "*" Then
Me.ListBox1.AddItem Cells(i, 5)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Cells(i, 14)

ElseIf LCase(Cells(i, 6).Value) Like "*" & LCase(Me.txt_buscar.Value) & "*" Then
Me.ListBox1.AddItem Cells(i, 6)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Cells(i, 14)

ElseIf LCase(Cells(i, 7).Value) Like "*" & LCase(Me.txt_buscar.Value) & "*" Then
Me.ListBox1.AddItem Cells(i, 7)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Cells(i, 14)

ElseIf LCase(Cells(i, 8).Value) Like "*" & LCase(Me.txt_buscar.Value) & "*" Then
Me.ListBox1.AddItem Cells(i, 8)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Cells(i, 14)

ElseIf LCase(Cells(i, 9).Value) Like "*" & LCase(Me.txt_buscar.Value) & "*" Then
Me.ListBox1.AddItem Cells(i, 9)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Cells(i, 14)

ElseIf LCase(Cells(i, 10).Value) Like "*" & LCase(Me.txt_buscar.Value) & "*" Then
Me.ListBox1.AddItem Cells(i, 10)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Cells(i, 14)

ElseIf LCase(Cells(i, 11).Value) Like "*" & LCase(Me.txt_buscar.Value) & "*" Then
Me.ListBox1.AddItem Cells(i, 11)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 11) = Cells(i, 14)

ElseIf LCase(Cells(i, 12).Value) Like "*" & LCase(Me.txt_buscar.Value) & "*" Then
Me.ListBox1.AddItem Cells(i, 12)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Cells(i, 14)

ElseIf LCase(Cells(i, 13).Value) Like "*" & LCase(Me.txt_buscar.Value) & "*" Then
Me.ListBox1.AddItem Cells(i, 13)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Cells(i, 14)

ElseIf LCase(Cells(i, 14).Value) Like "*" & LCase(Me.txt_buscar.Value) & "*" Then
Me.ListBox1.AddItem Cells(i, 14)
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Cells(i, 14)


End If
Next i
Me.txt_buscar.SetFocus
Me.txt_buscar.SelStart = 0
Me.txt_buscar.SelLength = Len(Me.txt_buscar.Text)
Exit Sub


End Sub



Private Sub ListBox1_Click()


'Determino que cuando selecciono un item,
'el valor seleccionado, sea asignado a la variable xGanadero

items = Me.ListBox1.ListCount
For i = 0 To items - 1
If Me.ListBox1.Selected(i) Then
xGanadero = Me.ListBox1.List(i)
End If

Next i




End Sub



Private Sub UserForm_Initialize()
'Le digo cuántas columnas
ListBox1.ColumnCount = 14

'Asigno el ancho a cada columna
Me.ListBox1.ColumnWidths = "120 pt;40 pt;49,95 pt;49,95 pt;40 pt;40 pt;40 pt;40 pt;40 pt;120 pt;49,95 pt;40 pt;40 pt;30 pt"

'El origen de los datos es la Tabla1
' ListBox1.RowSource = "Tabla1"
End Sub

Gracias anticipadas y si alguien me puede ayudar, se lo agradeceré
Un saludo

Maria Auxilio
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder