Formulario de búsqueda no limita "la búsqueda" a una columna

Para Dante Amor:

Hola, de nuevo molestándote. Tengo un formulario de búsqueda que tiene varias columnas, entre ellas el ID y una columna de Unidades, tanto la una como la otra comparten dígitos, y al filtrar un código (id) lee la columna de Unidades y me desaparece la información captada por el formulario de Alta. Disculpa, para explicarme en estos asuntos soy un poco mucho algo complicada. Te envío el archivo y agradezco de antemano tu ayuda.

1 respuesta

Respuesta
1

Te confirmo que recibí tu archivo, lo reviso y te escribo una respuesta.

En el formulario "frmModificarInsumos", así queda el código:

Private Sub UserForm_Initialize()
    'cambia el color del formulario
    Me.BackColor = RGB(141, 181, 147)
    'Llenar los cuadro de texto con los datos del registro elegido
    fila = frmBuscarInsumos.ListBox1.List(frmBuscarInsumos.ListBox1.ListIndex, 8)
    For i = 1 To 7
        Me.Controls("TextBox" & i).Value = Cells(fila, i)
    Next i
End Sub
Private Sub CommandButton1_Click()
    'Actualizar el registro
    fila = frmBuscarInsumos.ListBox1.List(frmBuscarInsumos.ListBox1.ListIndex, 8)
    For i = 1 To 7
        If IsNumeric(Me.Controls("TextBox" & i).Value) Then
            Cells(fila, i) = Val(Me.Controls("TextBox" & i).Value)
        Else
            Cells(fila, i) = Me.Controls("TextBox" & i).Value
        End If
    Next i
    Unload Me
End Sub

El formulario "frmBuscarInsumos" agregué esta instrucción, para almacenar el número de fila en el listbox

Me.ListBox1.List(Me.ListBox1.ListCount - 1, 8) = i

Queda así:

Private Sub CommandButton1_Click()
    'muestra el resultado en ListBox
    On Error GoTo Errores
    If Me.txtFiltro1.Value = "" Then Exit Sub
    Me.ListBox1.Clear
    j = 1
    Filas = Range("a1").CurrentRegion.Rows.Count
    For i = 2 To Filas
        If LCase(Cells(i, j).Offset(0, 1).Value) Like "*" & LCase(Me.txtFiltro1.Value) & "*" Then
            Me.ListBox1.AddItem Cells(i, j)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Cells(i, j).Offset(0, 1)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = Cells(i, j).Offset(0, 2)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = Cells(i, j).Offset(0, 3)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = Cells(i, j).Offset(0, 4)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = Cells(i, j).Offset(0, 5)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 6) = Cells(i, j).Offset(0, 6)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 7) = Cells(i, j).Offset(0, 7)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 8) = i
        Else
        End If
    Next i
    Exit Sub
Errores:
    MsgBox "El Producto no Existe", vbExclamation, "Notificación"
End Sub

De esa forma, cuando filtras, en la columna 8 del listbox ya sabemos a qué fila pertenece cada registro filtrado.


Aumenté a 8 el número de columnas de listbox:

Private Sub UserForm_Initialize()
    'cambia el color del formulario
    Me.BackColor = RGB(141, 181, 147)
    'Da formato al ListBox y trae datos de la tabla
    For i = 1 To 7
        Me.Controls("Label" & i) = Cells(1, i).Value
    Next i
    With ListBox1
        .ColumnCount = 8
        .ColumnWidths = "30 pt;160 pt;50 pt;50 pt;160 pt;50 pt;50 pt"
    End With
End Sub

Saludos.Dante Amor

Hola Dante, agradezco tanto la prontitud de tu respuesta, pero no he podido dedicarme a la macro, pues nos tienen amarrados con la parte gráfica del proyecto, espero entiendas, pero estoy segura que todo me saldra bien pues tu eres un "ducho" en esto, te felicito por tus conocimientos y gracias por compartirlo con todos nosotros.

No te preocupes, revísalo cuando tenga tiempo y no olvides valorar la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas