MACRO Filtrar datos y copiarlos en otra hoja Visual Basic Excel
Os paso un código que hice para filtrar datos en una hoja y luego pegarlos en otra en función del filtro. Hay veces que al filtrar no hay datos, así que me pega el encabezado en la hoja correspondiente. Llevo con esto ya unas semanas y no soy capaz de añadir ahí una excepción. Intenté con:
If Activesheet.filtermode = True Then
... PEGA LOS DATOS EN LA HOJA CORRESPONDIENTE
Else
Msgbox "No hay datos en el filtro, pulsa OK para continuar"
Pero me dice que no acepta esta propiedad o método. El excel tiene 3 hojas: ORIGEN, PRODUCTO Y SERVICIO. En origen filtra por PRODUCTO y lo pega en la hoja producto, y luego filtra por SERVICIO y lo pega en la hoja SERVICIO. Pero hay veces que no existen uno de los dos y se pega en la hoja el encabezado de la hoja ORIGEN. No consigo adecuar el código a las soluciones que me han ido dando por ahí o directamente no funciona.
Este es el código:
Sub filtrar() Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Application.EnableEvents = False ActiveSheet.DisplayPageBreaks = False 'Quitamos filtro si lo hay If Worksheets("ORIGEN").FilterMode Then Worksheets("ORIGEN").ShowAllData 'Filtramos datos SERVICIO Worksheets("ORIGEN").Range("F1").AutoFilter Field:=6, Criteria1:="SERVICIO" Dim UltimaFila As Long 'Para pegar los datos de la columna G en hoja SERVICIO Sheets("ORIGEN").Activate Let UltimaFila = Worksheets("ORIGEN").Cells(Rows.Count, 1).End(xlUp).Row Worksheets("ORIGEN").Range("G2:G" & UltimaFila).Copy Destination:=Worksheets("SERVICIO").Cells(7, 3) 'Quitamos filtro si lo hay If Worksheets("ORIGEN").FilterMode Then Worksheets("ORIGEN").ShowAllData 'Filtramos datos PRODUCTO Worksheets("ORIGEN").Range("F1").AutoFilter Field:=6, Criteria1:="PRODUCTO" 'Para pegar los datos de la columna G de hoja origen en hoja PRODUCTO Sheets("ORIGEN").Activate Let UltimaFila = Worksheets("ORIGEN").Cells(Rows.Count, 1).End(xlUp).Row Worksheets("ORIGEN").Range("G2:G" & UltimaFila).Copy Destination:=Worksheets("PRODUCTO").Cells(7, 3) Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic Application.EnableEvents = True ActiveSheet.DisplayPageBreaks = True Application.CutCopyMode = False End Sub