VBA Modificar la celda activa después de un filtro avanzado

Soy nuevo por estos rumbos, estoy realizando un form para manejar una tabla con excel el problema que tengo es que al momento de filtrar estaba utilizando la opción de additem pero esta solo me daba 10 columnas y yo necesitaba 14 encontré una respuesta de Dante Amor con el código que me resolvió ese detalle, el problema ahora es que cuando intento modificar el contenido de las celdas activas me manda a otra celda y no a la que estoy seleccionando, me gustaría saber si alguien tuviera la amabilidad de ayudarme, se programar en c# pero la verdad que si me la eh visto muy complicadas con vba en el excel, de antemano muchas gracias, aqiu dejo el código que uso para dar formato, filtrar y seleccionar las celdas

'
'
'Mostrar resultado en ListBox
Private Sub CommandButton5_Click()
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Temporal")
    '
    If Me.txtFiltro1.Value = "" Then Exit Sub
    If cmbEncabezado = "" Then Exit Sub
    '
    h2.Cells.Clear
    ListBox1.RowSource = ""
    h1.Rows(1).Copy h2.Rows(1)
    '
    j = cmbEncabezado.ListIndex + 1
    n = 2
    '
    For i = 2 To Range("a1").CurrentRegion.Rows.Count
        If LCase(Cells(i, j)) Like "*" & LCase(txtFiltro1) & "*" Then
            h1.Rows(i).Copy h2.Rows(n)
            n = n + 1
        End If
    Next i
    u = Range("A" & Rows.Count).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
'
'Activar la celda del registro elegido
Private Sub ListBox1_Click()
Fila = Me.ListBox1.ListIndex + 2
For i = 1 To 14
    Cells(Fila, 1).Activate
Next i
End Sub
'
'Dar formato al ListBox y traer los encabezados de la tabla
Private Sub UserForm_Initialize()
'
    [A1].Select
    With Me
        .ListBox1.ColumnHeads = True
        .ListBox1.ColumnCount = 14
        .ListBox1.ColumnWidths = "50 pt;50 pt;60 pt;70 pt;65 pt;65 pt;65 pt;65 pt;70 pt;70 pt;70 pt;70 pt;70 pt;70 pt"
        .cmbEncabezado.List = Application.Transpose(ActiveCell.CurrentRegion.Resize(1).Value)
        .cmbEncabezado.ListStyle = fmListStyleOption
    End With
End Sub

1 Respuesta

Respuesta
1

H o l a:

En el listbox estás cargando registros filtrados, entonces necesitamos agregar a cada registro su correspondiente número de fila, entonces ponemos esta instrucción al momento de copiar de la h1 a la h2:

Estoy agregando en la columna 15 de excel el número de fila que tiene el registros que se está copiando.

h2.Cells(n, 15) = i

La macro completa:

'Mostrar resultado en ListBox
Private Sub CommandButton5_Click()
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("Temporal")
    '
    If txtFiltro1.Value = "" Then Exit Sub
    If cmbEncabezado = "" Then Exit Sub
    '
    h2.Cells.Clear
    ListBox1.RowSource = ""
    h1.Rows(1).Copy h2.Rows(1)
    '
    j = cmbEncabezado.ListIndex + 1
    n = 2
    '
    For i = 2 To Range("a1").CurrentRegion.Rows.Count
        If LCase(Cells(i, j)) Like "*" & LCase(txtFiltro1) & "*" Then
            h1.Rows(i).Copy h2.Rows(n)
            h2.Cells(n, 15) = i
            n = n + 1
        End If
    Next i
    u = Range("A" & Rows.Count).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

Ahora, para obtener le número de fila cuando seleccionas un dato del listbox, recuerda que en el listbox se empieza a almacenar desde la columna 0, es por eso que voy a tomar el valor de la columna 14 (contando es la columna 15).

'Activar la celda del registro elegido
Private Sub ListBox1_Click()
    Fila = ListBox1.List(ListBox1.ListIndex, 14)
    Cells(Fila, 1).Activate
End Sub

:) 
Saludos. D a n t e A m o r. Recuerda valorar la respuesta. G r a c i a s
:) 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas