Botón [Next] con Autofilter activo. VBA excel

En un userorm se muestran los datos de una tabla (>1000 registros) y botones de comando Añadir, Modificar, Filtrar, etc... Y dos botones para Next y Prev registro.

Cuando clicas en Filtrar se abre un userform con las opciones de filtrado y los posibles valores que define el usuario. Al ejecutar se activa el Autofilter con los valores dichos y se carga en el userform el primer valor con dicha condición.

El problema lo tengo al darle al Next, que me salta a la siguiente línea de la tabla, forme parte o no del grupo de registros del filtrado. Entiendo el porque ya que el botón next tiene el siguiente código sencillo:

RowPos = ActiveCell.Row
If IsEmpty(ActiveCell.Offset(1, 0)) Then
   MsgBox "ESTE ES EL ÚLTIMO REGISTRO", vbInformation, "AVISO DEL SISTEMA"
   Exit Sub
Else
   Range("A" & RowPos + 1).Select
   Call loadData
End If

Lo que quiero es que al darle al next o prev se mueva unicamente entre los registros visibles en la tabla resultado del filtrado.

1 Respuesta

Respuesta
2

Te anexo el código para el siguiente y también para el anterior

Private Sub CommandButton1_Click()
'SIGUIENTE
    n = 1
    RowPos = ActiveCell.Row
    Do While True
        If ActiveCell.Offset(n, 0).EntireRow.Hidden = False Then
            If IsEmpty(ActiveCell.Offset(n, 0)) Then
               MsgBox "ESTE ES EL ÚLTIMO REGISTRO", vbInformation, "AVISO DEL SISTEMA"
               Exit Sub
            Else
               Range("A" & RowPos + n).Select
               Call loadData
               Exit Do
            End If
        Else
            n = n + 1
        End If
    Loop
End Sub
'
Private Sub CommandButton2_Click()
'ANTERIOR
    n = 1
    RowPos = ActiveCell.Row
    Do While True
        If ActiveCell.Offset(-n, 0).EntireRow.Hidden = False Then
            If ActiveCell.Offset(-n, 0).Row = 1 Then
               MsgBox "ESTE ES EL PRIMER REGISTRO", vbInformation, "AVISO DEL SISTEMA"
               Exit Sub
            Else
               Range("A" & RowPos - n).Select
               Call loadData
               Exit Do
            End If
        Else
            n = n + 1
        End If
    Loop
End Sub

.

.Sal u dos. Dante Amor. No olvides valorar la respuesta. G raci as

.

Muchas gracias. No sólo solucionas mi problema concreto, si no que además me aportas opciones para otras rutinas en desarrollo. No había usado jamás el entirerow y me será muy útil.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas