Modificar registros a través de Formulario excel

Para Dante Amor,

Gracias por su diligencia, voy avanzando en el formulario de altas, bajas y modificación de formulario. Solo quería hacer una pequeña modificación (uf espero que no cueste mucho a nivel de código) respecto a los datos que muestra el "listbox" después de filtrar.

1.- En la parte correspondiente a "'Mostrar resultado en ListBox" veo en la penúltima línea:

End If
    ListBox1.RowSource = h2.Name & "!A2:Z" & u
End Sub

Esto hace que me muestre en el listbox los encabezados y datos de las columnas A hasta la Z de los registros filtrados. En realidad necesito que mostrara no un rango, sino unas columnas determinadas que yo elegiría (imaginemos que por ejemplo fueran la K, la M, la S y alguna mas, o su equivalente en número de columna). No he sabido adaptarlo para que sea así.

2.- Si tienes a bien, pasamos a la parte de "modificar". Se trata de "pinchar" uno de los registros que se muestran en el listbox, clickar en el botón "modificar" del formulario "BÚSQUEDA" y se abre el formulario "MODIFICAR". Con el código que tenía creado al principio ya no me funciona, dado que hemos cambiado algunas cosas del formulario "Búsqueda".

Busco algo así:

Es decir, una vez que elijo el registro del listbox, se abre este formulario mostrando en los textbos la información de los campos que yo haya definido. En dos de los textbox esta información no será editable (corresponderá a campos clave), pero el resto deberían poder modificarse. Puedo rellenar (si están vacíos) o modificar (si tienen datos) uno o varios de los que aparecen y una vez terminado, daré en el botón "modificar" de este formulario, me preguntará "¿En verdad quiere modificar estos datos?", permitiéndome cancelar la acción si así lo deseara y si le doy sí, los datos se modificarán en la tabla y volveré al formulario "modificar" viendo los datos ya corregidos/rellenos.

2 respuestas

Respuesta
2

H o l a: No es lo mismo copiar una fila, que copiar varias columnas.

Te anexo las macros actualizada para copiar columnas.

Dim h1, h2
'
Private Sub Botonfiltrar_Click()
'Por.Dante Amor
'Mostrar resultado en ListBox
    If Me.TxtFiltro1.Value = "" Then Exit Sub
    If cmbEncabezado = "" Or cmbEncabezado.ListIndex = -1 Then Exit Sub
    '
    h2.Cells.Clear
    ListBox1.RowSource = ""
    '
    cols = Array("K", "M", "S")
    For i = LBound(cols) To UBound(cols)
        h2.Cells(1, i + 1) = h1.Cells(1, cols(i))
    Next
    '
    col = Val(cmbEncabezado.List(cmbEncabezado.ListIndex, 1)) 'columna de encabezado
    n = 2
    For i = 2 To h1.Cells(Rows.Count, 12).End(xlUp).Row
        If LCase(h1.Cells(i, col)) Like "*" & LCase(TxtFiltro1) & "*" Then
            For j = LBound(cols) To UBound(cols)
                h2.Cells(n, j + 1) = h1.Cells(i, cols(j))
            Next
            'agrega la fila de la hoja registro a temp para cargarse en el list
            h2.Cells(n, UBound(cols) + 2) = i
            n = n + 1
        End If
    Next i
    u = h2.UsedRange.Rows(h2.UsedRange.Rows.Count).Row
    If u = 1 Then
        MsgBox "No existen registros con ese filtro", vbExclamation, "FILTRO"
        Exit Sub
    End If
    ListBox1.ColumnCount = UBound(cols) + 1
    c = h2.Cells(1, Columns.Count).End(xlToLeft).Column + 1
    letra = Evaluate("=SUBSTITUTE(ADDRESS(1," & c & ",4),""1"","""")")
    ListBox1.RowSource = h2.Name & "!A2:" & letra & u
End Sub
'
Private Sub cmbEncabezado_Change()
'Cambia el TextBox con cada cambio en el Combo
    Me.lblFiltro = "Filtro por " & Me.cmbEncabezado.Value
    TxtFiltro1 = ""
    ListBox1.RowSource = ""
End Sub
'
Private Sub UserForm_Activate()
'Act.Por.Dante Amor
    Set h1 = Sheets("REGISTRO")
    Set h2 = Sheets("Temporal")
    cols = Array(12, 18, 27)                                            'columnas a agregar
    For j = LBound(cols) To UBound(cols)
        cmbEncabezado.AddItem h1.Cells(1, cols(j))                      'agrega encabezado
        cmbEncabezado.List(cmbEncabezado.ListCount - 1, 1) = cols(j)    'agrega número columna
    Next
    ListBox1.ColumnHeads = True
End Sub

En la macro ya estoy poniendo el número de fila que se filtró, para que se cargue en el listbox y así saber a qué fila corresponde el registro seleccionado en el list y poder modificarlo.


Valora esta respuesta y crea una nueva para la parte de la modificación.

Sal u dos

Respuesta
1

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas