¿Autofiltro con macros y celdas como criterio?

Hola saludos desde Mexico.. Pues resulta que estoy atorado con la siguiente cuestión: Quiero filtrar (con macros) de manera que el criterio sea una celda (es decir: Hoja2.Range("A3").Select) y que ejecute una rutina por, después que cambie a la celda siguiente (Hoja2.Range("A4").Select), la utilice como criterio de autofiltro y ejecute la rutina por, así sucesivamente (A3, A4, A5, A6...) hasta que la celda este vacía... Este es el código que uso para mayor referencia:
Sub filtro()
Dim camion As String
Hoja2.Select
Range("A3").Select
If ActiveCell = Empty Then
Hoja80.Select
Exit Sub
Else: Hoja2.Select
Range("A3").Select
camion = ActiveCell
Hoja80.Select
Range("A8").Select
Selection.AutoFilter Field:=20, Criteria1:="=" & camion
'aqui incluire la rutina x
End If
Hoja2.Select
Range("A4").Select
If ActiveCell = Empty Then
Hoja80.Select
Exit Sub
Else: Hoja2.Select
Range("A4").Select
camion = ActiveCell
Hoja80.Select
Range("A8").Select
Selection.AutoFilter Field:=20, Criteria1:="=" & camion
'aqui incluire la rutina x
End If
End Sub 
Me preguntaba si se puede comprimir el código para no tener que escribir la rutina 40 o 50 veces con algún otro código..
Espero haberme explicado y desde ya agradezco su atención y tiempo!

1 Respuesta

Respuesta
1
Entiendo que tienes solucionado el problema del código, y lo que buscas es la automatización de la rutina sobre un rango de 40 celdas, desde la celda "A3" hasta la celda "A42" de "Hoja2".
.
Si es así, basta utilizar una estructura:
-
For Each <objeto> In <coleccion> 
   <codigo xyz>
Next <objeto> 
-
De esta forma, tu código se reduciría a lo siguiente:
-
Hoja2.Select
  Range(<objeto>.direccion).Select
  If ActiveCell = Empty Then
   Hoja80.Select
   Exit Sub
 Else: Hoja2.Select
   Range(<objeto>.direccion).Select
   camion = ActiveCell
   Hoja80.Select
   Range("A8").Select
   Selection.AutoFilter Field:=20, Criteria1:="=" & camion
   'aqui incluire la rutina x
 End If
Antes que nada te agradezco la pronta respuesta.. y efectivamente la idea es automatizar el código. Creo entender la idea de usar "For each... In" pero si te soy honesto no se como incluir el rango dentro de <coleccion>, y también me queda la duda si hay que declarar <objeto> como "Range", bueno igual son dudas sencillas pero no tengo experiencia con los bucles... si me puedes explicar más detalladamente como quedaría el código me ayudarías mucho...
Gracias por tu tiempo...
Quedaría algo así como esto:
-
Sub RUTINA()
Dim CELDA As Range
Dim CAMION As String
   Worksheets("Hoja2").Select
   For Each CELDA In Range("Hoja2!A3:A42").Rows
      If CELDA.Value = Empty Then
         Worksheets("Hoja80").Select
         Exit Sub
      Else
         CAMION = CELDA.Value
         MsgBox CAMION
         Worksheets("Hoja80").Select
         Range("A1:Z10").Select
         Selection.AutoFilter Field:=20, Criteria1:=CAMION
         'aqui incluire la rutina x
      End If
   Next CELDA
End Sub
-
Definí un objeto RANGE, uno STRING. Ajusta el rango y listo.
Vaya quedo perfecto.. gracias por tu tiempo y por la rapidez, te mando saludos y si no te importa te consultare en el futuro si tengo otras dudas..
Muchas gracias!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas