У меня есть рабочая книга, которая при каждом открытии очищает рабочую книгу от любого фильтра, который у него есть, и с которым он работает. Но я хочу реализовать это так, что каждый раз, когда выполняется поиск, фильтр, примененный к этой книге, очищается. Это дает мне ошибку, которую я не могу решить.
Я пытался также сделать If Sheets("Datos").AutoFilterMode then Sheets("Datos").AutoFilterMode = False
, но дает мне еще одну ошибку.
Далее, каждый раз, когда активируется секунда, если она активируется, Текстовое поле, которое должно заполнить общее количество строк, отфильтрованных по фамилии, ничего не показывает, но показывает, когда применяет первый if, который является идентификатором пользователя. (Если его нужно спросить на другом топи c, просто пропустите этот параграф)
Private Sub btnBuscar4_Click()
'declarar las variables
Dim FindRow
Dim LastRow As Integer, i As Integer
Dim cRow As String
Dim Datos As Worksheet: Set Datos = Workbooks.Open("C:\Users\Bonito\Desktop\Plataforma\Datos.xlsm").Worksheets("Datos")
'Aplica la liberación de las hojas para consultarlas
SheetProtection
'Si hay filtros, los elimina de la hoja Datos
If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False
'Windows("Datos.xlsm").Visible = False 'Hace que no se muestre el excel externo (Datos)
'hold in memory and stop screen flicker
'Application.ScreenUpdating = False
'error block
On Error GoTo errHandler:
'Filtrar solo por Legajo
If Me.BLeg3 <> "" Then
'Guardar el legajo en una variable
cRow = Me.BLeg3.Value
Worksheets("Datos").Range("A:A").AutoFilter Field:=1, Criteria1:=cRow
LastRow = Sheets("Datos").Range("A500").End(xlUp).Row - 1 'Hay que restarle uno para sacar el titulo
For i = 2 To LastRow
If Cells(i, 1) = cRow Then
Reg2.Value = LastRow 'Muestra la cantidad de filas filtradas de ese legajo
End If
Next i
'Encontrar la fila con la data
Set FindRow = Datos.Range("A:A").Find(What:=cRow, LookIn:=xlValues)
Me.CurrentAddress = FindRow.Address 'te trae la celda actual
'agregar los valores a las casillas correspondientes
Leg3.Value = FindRow
Fech3.Value = FindRow.Offset(0, 4)
Ape3.Value = FindRow.Offset(0, 1)
Nomb3.Value = FindRow.Offset(0, 2)
Pues3.Value = FindRow.Offset(0, 3)
ComboLiqui3.Value = FindRow.Offset(0, 5)
FechaDesde3.Value = FindRow.Offset(0, 6)
FechaHasta3.Value = FindRow.Offset(0, 7)
Dia3.Value = FindRow.Offset(0, 12)
Dia4.Value = FindRow.Offset(0, 13)
Cant3.Value = FindRow.Offset(0, 8)
Obs3.Value = FindRow.Offset(0, 9)
'Filtrar solo por Apellido
ElseIf Me.BApe3 <> "" Then
'Encontrar la fila con la data
cRow = Me.BApe3.Value
Worksheets("Datos").Range("B:B").AutoFilter Field:=1, Criteria1:=cRow
LastRow = Sheets("Datos").Range("B500").End(xlUp).Row - 1 'Hay que restarle uno para sacar el titulo / Se va hasta la ultima row y automaticamente sube al comienzo
For i = 2 To LastRow
If Cells(i, 1) = cRow Then
Reg2.Value = LastRow 'Muestra la cantidad de filas filtradas de ese legajo
End If
Next i
Set FindRow = Datos.Range("B:B").Find(What:=cRow, LookIn:=xlValues)
Me.CurrentAddress = FindRow.Address 'te trae la celda actual
'agregar los valores a las casillas correspondientes
Leg3.Value = FindRow.Offset(0, -1)
Fech3.Value = FindRow.Offset(0, 3)
Ape3.Value = FindRow
Nomb3.Value = FindRow.Offset(0, 1)
Pues3.Value = FindRow.Offset(0, 2)
ComboLiqui3.Value = FindRow.Offset(0, 4)
FechaDesde3.Value = FindRow.Offset(0, 5)
FechaHasta3.Value = FindRow.Offset(0, 6)
Dia3.Value = FindRow.Offset(0, 11)
Dia4.Value = FindRow.Offset(0, 12)
Cant3.Value = FindRow.Offset(0, 7)
Obs3.Value = FindRow.Offset(0, 8)
Else
MsgBox "Por favor, ingresar un Legajo o un Apellido"
End If
'error block
On Error GoTo 0
Exit Sub
errHandler:
MsgBox "Error! Verificar los datos ingresados, porque no son correctos!" & vbCrLf & Err.Description
End Sub