Cómo controlar errores al aplicar Autofiltro en vba

Quisiera que me ayudarán a resolver mi error. Tengo dos hojas en un libro de excel, la hoja1 es la que necesito filtrar las celdas que tengan mayor o igual a 4 y el resultado se cuentan y se coloca el resultado en la hoja2 celda E17. El detalle es que funciona solo si hay celdas que contengan el número 4, si no hay el resultado es 1 cuando debería de ser 0.

Anexo la macro..

Dim libro As Workbook: Set libro = ThisWorkbook
Dim hoja1 As Worksheet: Set hoja1 = libro.Sheets("Clos")
Dim hoja2 As Worksheet: Set hoja2 = libro.Sheets("Res")
Dim n As Integer
Dim uf As Long
uf = hoja1.Range("A" & Rows.Count).End(xlUp).Row

On Error Resume Next
hoja1.Range("N1:N" & uf).AutoFilter Field:=14, Criteria1:=">=4"
Operator:=xlFilterValues
hoja1.Activate
hoja1.Range("N2:N" & uf).Select
hoja2.Cells(17, 5) = hoja2.Range("E17").Application.WorksheetFunction.Subtotal(3, Selection)
On Error GoTo 0

1 respuesta

Respuesta
1

[Hola

No es recomendable el uso de On Error Resume Next, a menos que sea estrictamente necesario. Para no hacer propuestas que pueden no resultar, sugiero colocar el archivo en algún Drive y compartir por aquí el enlace.

Saludos]

Abraham Valencia

Hola! Abraham gracias por responder y disculpa la demora.

te adjunto  el enlace https://1drv.ms/u/s!AsALBSVXq78dgQBX1awAIiN2NNXn?e=fin9VZ .

es un ejemplo del archivo que trabajo. 

Muchas Gracias!!

Pues en tu propio archivo si borro los valores igual a 4 o superiores y luego uso tu macro, sale 0 tal cual debe ocurrir, por ende, sigue sin entenderse el dilema ¿no era más práctico dejar tal cual los datos con el supuesto error?

Abraham Valencia

el dilema es que si se ejecuta  2 veces o más se vuelve 1

Primero que nada felicitarte por declarar las variables, es una buena costumbre que pocas personas nuevas en VBA utilizan.

Sobre tu dilema, claro que iba a dar 1 ya que con los datos filtrados sigues intentando hallar la supuesta última fila, y al estar todo filtrado, siempre es la 1, y todo se hace en base a ese 1 ¿qué hacer? Deshacer el filtro cada vez que se termina la operación. Ah, otra cosa, no es recomendable usar variables con nombres de objetos ni es necesario seleccionar o activar alguno (así sean las hojas). Deja todo así (y/o adapta):

Sub uno()
Dim libro As Workbook: Set libro = ThisWorkbook
Dim Mihoja1 As Worksheet: Set Mihoja1 = libro.Sheets("Clos")
Dim MiHoja2 As Worksheet: Set MiHoja2 = libro.Sheets("Res")
Dim n As Integer
Dim uf As Long
uf = Mihoja1.Range("N" & Rows.Count).End(xlUp).Row
Mihoja1.Range("N1:N" & uf).AutoFilter Field:=1, Criteria1:=">=4", Operator:=xlOr
MiHoja2.Cells(16, 5) = Application.WorksheetFunction.Subtotal(3, Mihoja1.Range("N2:N" & uf))
Mihoja1.ShowAllData
End Sub

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas