Añadir un columna más en listbox

De todo expertos, tengo una duda que no puedo resolverla, bien tengo un formulario en excel, donde es ingreso y búsqueda de datos, donde cuando pongo una letra en textbox1, en el listbox me aparecen los nombres que empiezan con dicha letra y el numero de fila le doy click y los datos me reflejan en varios textbox, hasta ahí todo bien, lo que necesito es añadir una columna más que me muestre los datos de la columna "C", he intentado de todo pero no puedo, solo quiero que me aparezca los datos de la columna "A" y la columna "C" (sin el numero de fila).

Dim Control As Worksheet
Dim clientes As Worksheet
Dim fechas As Worksheet

Dim SaltarEventos As Boolean
Private Sub CommandButton1_Click()
UserForm2.Show
Set fila = Sheets("clientes")
If TextBox2 = "" Or TextBox3 = "" Or TextBox4 = "" Or TextBox5 = "" Then
MsgBox "Campos requeridos vacíos favor complete"
End If
'
If TextBox1 <> "" Then f = CLng(ListBox1.List(ListBox1.ListIndex, 1))
fila.Cells(f, "A") = TextBox2
fila.Cells(f, "B") = TextBox3
fila.Cells(f, "C") = TextBox4
fila.Cells(f, "D") = TextBox5
fila.Cells(f, "E") = TextBox6
MsgBox "Datos actualizados correctamente", vbInformation, "PROTESTO"
limpia
End Sub
Sub limpia()
TextBox1 = ""
TextBox2 = ""
TextBox3 = ""
TextBox4 = ""
TextBox5 = ""
TextBox6 = ""
TextBox2.Locked = True
TextBox3.Locked = True
TextBox4.Locked = True
TextBox5.Locked = True
TextBox6.Locked = True
End Sub

Private Sub CommandButton2_Click()
Unload Me
INGRESO.Show
End Sub

Private Sub CommandButton3_Click()
Unload Me
End Sub

Private Sub Label23_Click()

End Sub

Private Sub ListBox1_Click(): On Error Resume Next
fila = CLng(ListBox1.List(ListBox1.ListIndex, 1))
SaltarEventos = True
'Provoca el evento change del Textbox
TextBox2.Text = clientes.Cells(fila, 1)
TextBox3.Text = clientes.Cells(fila, 2)
TextBox4.Text = clientes.Cells(fila, 3)
TextBox5.Text = clientes.Cells(fila, 4)
TextBox6.Text = clientes.Cells(fila, 5)

SaltarEventos = False

ListBox1.Visible = False

End Sub
Private Sub TextBox1_Change()

If SaltarEventos = True Then Exit Sub

ListBox1.Clear

TextBox2 = ""
TextBox3 = ""
TextBox4 = ""
TextBox5 = ""
TextBox6 = ""

ultf = clientes.Range("a" & Rows.Count).End(xlUp).Row
For Each cliente In clientes.Range("a2:a" & ultf)
If cliente Like TextBox1 & "*" Then

ListBox1.AddItem cliente
ListBox1.List(ListBox1.ListCount - 1, 1) = cliente.Row 'Fila
End If
Next cliente
sr = fechas.Range("c" & Rows.Count).End(xlUp).Row
For Each fecha In fechas.Range("c2:c" & sr)

Next fecha

ListBox1.Visible = True
If ListBox1.ListCount = 0 Then ListBox1.Visible = False

End Sub
Private Sub UserForm_Initialize()
Set clientes = Sheets("clientes")
Set Formulario = Sheets("control")
Set fechas = Sheets("clientes")
End Sub

1 respuesta

Respuesta
1

Te anexo el código para agregar la columna C

Private Sub TextBox1_Change()
    If SaltarEventos = True Then Exit Sub
    ListBox1.Clear
    TextBox2 = ""
    TextBox3 = ""
    TextBox4 = ""
    TextBox5 = ""
    TextBox6 = ""
    ultf = clientes.Range("a" & Rows.Count).End(xlUp).Row
    For Each cliente In clientes.Range("a2:a" & ultf)
        If cliente Like TextBox1 & "*" Then
            ListBox1.AddItem cliente
            ListBox1.List(ListBox1.ListCount - 1, 1) = cliente.Offset(cliente.Row, 2) 'Fila
        End If
    Next cliente
    '
    sr = fechas.Range("c" & Rows.Count).End(xlUp).Row
    For Each fecha In fechas.Range("c2:c" & sr)
    Next fecha
    ListBox1.Visible = True
    If ListBox1.ListCount = 0 Then ListBox1.Visible = False
End Sub

En siguiente evento tienes dos veces la hoja "clientes", la tercer variable, supongo que debe ser la hoja "fechas":

Private Sub UserForm_Initialize()
    Set clientes = Sheets("clientes")
    Set Formulario = Sheets("control")
    Set fechas = Sheets("fechas")
End Sub

gracias por responder todos los datos estan en la hoja clientes,,,disculpa me falto poner que algunos codigos los hice probando y no funcionan bien te anexo la macro buena ,gracias

Dim Control As Worksheet
Dim clientes As Worksheet
Dim SaltarEventos As Boolean
Private Sub CommandButton1_Click()
UserForm2.Show
Set fila = Sheets("clientes")
If TextBox2 = "" Or TextBox3 = "" Or TextBox4 = "" Or TextBox5 = "" Then
MsgBox "Campos requeridos vacíos favor complete"
End If
'
If TextBox1 <> "" Then f = CLng(ListBox1.List(ListBox1.ListIndex, 1))
fila.Cells(f, "A") = TextBox2
fila.Cells(f, "B") = TextBox3
fila.Cells(f, "C") = TextBox4
fila.Cells(f, "D") = TextBox5
fila.Cells(f, "E") = TextBox6
MsgBox "Datos actualizados correctamente", vbInformation, "PROTESTO"
limpia
End Sub
Sub limpia()
TextBox1 = ""
TextBox2 = ""
TextBox3 = ""
TextBox4 = ""
TextBox5 = ""
TextBox6 = ""
TextBox2.Locked = True
TextBox3.Locked = True
TextBox4.Locked = True
TextBox5.Locked = True
TextBox6.Locked = True
End Sub


Private Sub CommandButton2_Click()
Unload Me
INGRESO.Show
End Sub

Private Sub CommandButton3_Click()
Unload Me
End Sub

Private Sub ListBox1_Click(): On Error Resume Next
fila = CLng(ListBox1.List(ListBox1.ListIndex, 1))
SaltarEventos = True
'Provoca el evento change del Textbox
TextBox2.Text = clientes.Cells(fila, 1)
TextBox3.Text = clientes.Cells(fila, 2)
TextBox4.Text = clientes.Cells(fila, 3)
TextBox5.Text = clientes.Cells(fila, 4)
TextBox6.Text = clientes.Cells(fila, 5)

SaltarEventos = False

ListBox1.Visible = False

End Sub
Private Sub TextBox1_Change()

If SaltarEventos = True Then Exit Sub

ListBox1.Clear

TextBox2 = ""
TextBox3 = ""
TextBox4 = ""
TextBox5 = ""
TextBox6 = ""


ultf = clientes.Range("a" & Rows.Count).End(xlUp).Row
For Each cliente In clientes.Range("a2:a" & ultf)
If cliente Like TextBox1 & "*" Then


ListBox1.AddItem cliente
ListBox1.List(ListBox1.ListCount - 1, 1) = cliente.Row 'Fila
End If
Next cliente

ListBox1.Visible = True
If ListBox1.ListCount = 0 Then ListBox1.Visible = False

End Sub
Private Sub UserForm_Initialize()
Set clientes = Sheets("clientes")
Set Formulario = Sheets("control")

End Sub

Solamente cambia esta línea:

ListBox1.List(ListBox1.ListCount - 1, 1) = cliente.Row 'Fila

Por esta:

ListBox1. List(ListBox1.ListCount - 1, 1) = cliente. Offset(cliente.Row, 2)

Gracias nuevamente por responder,, la línea de código que me pasaste no muestre los datos de la columna "c",,, ¿te parece si te envió el archivo a tu correo? Gracias

Prueba así:

ListBox1. List(ListBox1.ListCount - 1, 1) = cliente.Offset(0, 2)

'

Si no te funciona la prueba entonces envíame el archivo. Recuerda poner tu nombre en el asunto del correo.

Así quedarían los códigos:

Private Sub ListBox1_Click(): On Error Resume Next
    fila = CLng(ListBox1.List(ListBox1.ListIndex, 2))
    SaltarEventos = True
     'Provoca el evento change del Textbox
    TextBox2.Text = clientes.Cells(fila, 1)
    TextBox3.Text = clientes.Cells(fila, 2)
    TextBox4.Text = clientes.Cells(fila, 3)
    TextBox5.Text = clientes.Cells(fila, 4)
    TextBox6.Text = clientes.Cells(fila, 5)
    SaltarEventos = False
    ListBox1.Visible = False
End Sub
'
Private Sub TextBox1_Change()
    If SaltarEventos = True Then Exit Sub
    ListBox1.Clear
    TextBox2 = ""
    TextBox3 = ""
    TextBox4 = ""
    TextBox5 = ""
    TextBox6 = ""
    '
    ultf = clientes.Range("a" & Rows.Count).End(xlUp).Row
    For Each cliente In clientes.Range("a2:a" & ultf)
        If cliente Like TextBox1 & "*" Then
            ListBox1.AddItem cliente
            ListBox1.List(ListBox1.ListCount - 1, 1) = cliente.Offset(0, 2)
            ListBox1.List(ListBox1.ListCount - 1, 2) = cliente.Row
        End If
    Next cliente
    ListBox1.Visible = True
    If ListBox1.ListCount = 0 Then ListBox1.Visible = False
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas