Criterio de la macro, es la celda que este activada en otra hoja

Hola Jaime;

Tengo un pequeño problema con una macro, la macro tiene un listado en la hoja 2, y es para que en la hoja 1 los utilice como variables para filtrarlos y una vez filtrados los registros de ese valor va a generar un archivo de excel para guardarlo. (un archivo por cada valor). En fin creo que lo demás lo tengo cubierto solo tengo un problema.

Para que esto funcione, debe ir buscando los registros 1x1 de forma vertical y había abajo, en la columna A de la hoja 2, solo que no se como poner que el criterio del filtro sea la celda activa (la activa un bucle) de la hoja 2, te dejo la macro a ver si se te ocurre algo,


Sub Filtrar()
Dim TempFilePath As String
Dim TempFileName As String
TempFilePath = Environ$("temp") & "\"
TempFileName = "LAYOUT " & "No.. "
criterio = sheets("hoja2").activecell
'en la linea de arriba es donde tengo el problema, ¿como le digo a excel, que el valor de el criterio del filtro, es la celda que se este activa en la hoja2, ya que no es fijo por que el bucle ira bajando 1x1 para irlas revisando todas

'¿que puedo hacer?
Sheets("hoja2").Select
Range("a1").Select
'aquí tengo que empieza el bucle
Do While ActiveCell <> Empty
ActiveCell.Offset(1, 0).Select
Sheets("hoja1").Select
Rows("1:1").Select
Selection.AutoFilter Field:=3, Criteria1:=criterio
Sheets("hoja1").Select
Cells.Select
Selection.Copy
Workbooks.Add
ActiveSheet.Paste
fecha = Sheets("hoja1").Range("a2") & " "
ActiveWorkbook.SaveAs Filename:=TempFilePath & fecha & TempFileName & ".xls", FileFormat:= _
xlOpenXMLWorkbook, CreateBackup:=False
Workbooks("Lay out .xls").Activate
Sheets("hoja2").Select
Loop
End Sub

1 Respuesta

Respuesta
1

ActiveCell solo marca el objeto que corresponde a la celda actual de la VENTANA actual...

Para que seleccion la celda de la hoja2 debes ir primero a esa hoja...

Aun asi, no creo que necesites mas que ir a hoja2 una sola vez...

... Y quien sabe ni necesites si es que tus datos siempre estan desde el inicio de la columna A

Revisa este codigo corregido con las observaciones

Sub Filtrar()
Dim TempFilePath As String
Dim TempFileName As String
TempFilePath = Environ$("temp") & "\"
TempFileName = "LAYOUT " & "No.. "
Dim criterio As Range
Dim fila As Integer
Dim columna As Integer
Sheets("hoja2").Activate ' ir a la hoja2 para ver cual es la celda activa
Set criterio = Sheets("hoja2").ActiveCell ' según lo que veo en tu código de mas abajo creo que realidad podrías poner
' criterio = Sheets("hoja2").Range("A1")
fila = criterio.Row ' de manera similar, SI SIEMPRE incias en A1 de hoja 2.... estas ultima 4 lineas
columna = criterio.Column ' de código podrían resumirse a simplemente fila=1
Sheets("hoja1").Activate
'aquí empiezas el bucle
Do While Sheets("hoja2").Cells(fila, columna) <> Empty ' De manera similar se podría resumir a:
' Do While Sheets("hoja2").Cells(fila, 1) <> Empty
fila = fila + 1 ' si tus datos inicial en A1... si inician en A2 usar la fila que se indica más abajo
Rows("1:1").Select
Selection.AutoFilter Field:=3, Criteria1:=Sheets("hoja2").Cells(fila, columna) ' podría cambiarse a.. ......oja2").Cells(fila,1)
Cells.Select
Selection.Copy
Workbooks.Add
ActiveSheet.Paste
fecha = Sheets("hoja1").Range("a2") & " "
ActiveWorkbook.SaveAs Filename:=TempFilePath & fecha & TempFileName & ".xls", FileFormat:= _
xlOpenXMLWorkbook, CreateBackup:=False
Workbooks("Lay out .xls").Activate
Sheets("hoja2").Select
' Si los datos de los criterios incian en A1 y no en A2 es aquí donde debería estar fila = fila +1
Loop
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas