Formularios de datos en Excel: Modificar, entrar y eliminar registros

Para Dante Amor. Gracias por tu última aportación sobre los encabezados en el listbox del formulario de búsqueda de datos, lo he probado y funciona correctamente. Pero visto su funcionamiento, he querido ir un poco más allá porque tal y como yo te había pedido me crea ciertos problemas que no había tenido en cuenta. Así solicito tu ayuda para dos cosas relacionadas con este paso:

1.- Como al final el libro será "compartido", se crean problemas con las macros y necesito una solución para esto que creo es mejor implementar antes de seguir para no echar por tierra luego todo el trabajo realizado con el código. He pensado que lo mejor es que estos formularios estén en un libro aparte, un libro que podemos llamarlo ENTRADA_DATOS o como quieras. Aquí estarían todos los formularios que estamos haciendo encaminados a que conjuntamente realicen la entrada, modificación y consulta de los registros, por ejemplo en la HOJA1. Este formulario iría a buscar a los datos del libro donde están (hoja "Registro" del libro "formularios dam.xlsm". ¿Ves posible adaptar el código que llevamos hasta ahora a esto? ¿Cómo te parece que lo haga?. Primero debo actuar en el formulario "consola" y luego en los formularios "Búsqueda" y "Agregar registro". Te dejo el formulario búsqueda por parecer el más difícil y a partir de ahí, con tus explicaciones, intento adaptar el resto.

2.- El código "Dar formato al ListBox y traer los encabezados de la tabla" que me corregiste me permite filtrar por las primeras 4 columnas/campos/encabezados (for i=1 to 4) en el combo y me muestra en el listbox los mismos cuatro campos para que yo elija. Pero necesito que yo pueda colocar en el combo unos campos determinados para filtrar, no los 4 primeros consecutivos, sino por ejemplo "nº expediente" (posición 12 de la primera fila), "Referencia (posición 18), "Fecha de inicio (posición 27)" y alguno más. Igualmente sería ideal que pueda elegir que columnas (o sea datos) que aparezcan en el listbox después de filtrar (las filas con los campos que aparecen para que elija uno de ellos a modificar/eliminar). Yo he probado cambiando:

CmbEncabezado. AddItem h1. Cells(1, i)

por:

CmbEncabezado. AddItem h1. Cells(1, 12)
CmbEncabezado. AddItem h1. Cells(1, 18)
cmbEncabezado.AddItem h1.Cells(1, 27)

quitando el FOR I=1 to 4 y consigo que el combo me los muestre, pero no me filtra, ni consigo que los campos que muestra en el listbox sean distintos a los que he utilizado para filtrar (ahí quiero que aparezcan unos determinados que no tienen que ser los correspondientes al 12, 18 y 27).

Te agradezco mucho que atiendas mis preguntas y espero no parecer pesado.

2 Respuestas

Respuesta
2

Sin duda, sería más complejo administrar desde otro libro los formularios.

Yo te recomiendo que tengas todo en el mismo libro.

Te anexo el código para filtrar por encabezado seleccionado. Hice ajustes para cargar el combobox.

Dim h1, h2
'
Private Sub Botonfiltrar_Click()
'Act.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 = ""
    h1.Rows(1).Copy h2.Rows(1)
    '
    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
            h1.Rows(i).Copy h2.Rows(n)
            n = n + 1
        End If
    Next i
    u = h2.Cells(Rows.Count, col).End(xlUp).Row
    If u = 1 Then
        MsgBox "No existen registros con ese filtro", vbExclamation, "FILTRO"
        Exit Sub
    End If
    ListBox1.RowSource = h2.Name & "!A2:Z" & 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
    ListBox1.ColumnCount = Columns("Z").Column
End Sub
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
Respuesta
1

Este ejemplo hace lo que requieres te puede ser de utilidad

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas