Macro - Crear nuevo libro, filtrar y pegar en distintas hojas

6 envíos / 0 nuevos
Último envío
Marianela Ruatta
Imagen de Marianela Ruatta
Offline
última acción: Hace 3 años 8 meses
alta: 18/08/2017 - 14:27
Puntos: 175
Macro - Crear nuevo libro, filtrar y pegar en distintas hojas

Hola! Estoy trabajando con una base de datos, que debe ser filtrada por Área Funcional y en base a eso, copiar y pegar en un nuevo libro, la informacion separada en hojas distintas, tal como esta en la base original. Luego debe guardar el archivo con el nombre del Área y continuar asi hasta que se terminen.

En mi base tengo 5 Hojas:

-Listado: donde he colocado el listado de areas, de donde se alimenta el bucle.

-Ejecución

-Consumido Real

-Comprometido OC

-Comprometido ERM

Las ultimas 4 hojas son las que contienen la informacion a filtrar y copiar en libro nuevo, separadas en la misma cantidad de hojas. Es decir, que para cada nueva Área Funcional, la macro deberá crear un libro, copiar la hoja Ejecucion y pegarla, copiar la hoja Consumido Real y pegarla, etc. Luego debe guardar el archivo y cerrarlo. Volver a la base y realizar nuevamente el procedimiento.

El comando que he escrito para la primer hoja es el siguiente: 

Do While SelectAf <> ""

    Sheets("Ejecución").Select

        ActiveSheet.ListObjects("Ejecución").Range.AutoFilter Field:=1, Criteria1:=SelectAf

        Range("Ejecución[[#Headers],[Área Funcional]]").Select

        Range(Selection, Selection.End(xlToRight)).Select

        Range(Selection, Selection.End(xlDown)).Select

        Selection.Copy

        Workbooks.Add

        ActiveSheet.Paste

        Application.CutCopyMode = False

Como debo hacer para que vuelva al archivo base, filtre la hoja "Consumido Real" y la pegue en ese archivo que he creado? En el caso de que primero deba guardar el archivo, como le indico que vaya a ese archivo? Ya que el mismo irá cambiando de acuerdo al Área Funcional que este filtrando.

Actualmente, la macro la hice de prueba para una sola hoja, y luego de copiar y pegar, realiza el siguiente comando:

        ActiveWorkbook.SaveAs Filename:="C:\Practico\" & SelectAf & ".xlsx", FileFormat:= _

            xlOpenXMLWorkbook, CreateBackup:=False

        ActiveWindow.Close

Espero puedan ayudarme! Ya que son muchas Áreas Funcionales y perdemos mucho tiempo filtrando manualmente.

Agradecida desde ya.

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 19 horas 33 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
variables de objeto

Puedes crear variables para referirte a objetos, por ejemplo una hoja o un libro, esto simplifica bastante poder moverte de un libro a otro, o de una hoja de un libro a otra hoja de otro libro, que es lo que necesitas.

por ejemplo, puedes definir una variable para el libro principal donde tienes todos los datos

Dim miLibroPrincipal as WorkBook

para asignarle valor, cuando tengas ese libro activo, al principio

Set miLibroPrincipal=ActiveWorkBook

 

Cada vez que quieras volver a tu libro principal sólo tienes que utilizar esta variable

por ejemplo, para activar el libro principal:

miLibroPrincipal.Activate

 

Puedes crear otra variable de libro para el libro donde vas a pegar la información

Dim miLibroSecundario as WorkBook

en este caso, debes asignarle valor cuando creas ese nuevo libro con Workbooks.add de la siguiente manera:

Set miLibroSecundario = WorkBooks.Add

puedes hacer cualquier cosa con este libro, por ejemplo

miLibroSecundario.SaveAs....

miLibroSecundario.Activate

y si quieres volver al principal, pues

miLibroPrincipal.Activate

y luego vuelves al secundario

miLibroSecundario.Activate

...

 

 

 

------
Ya sé Excel, pero necesito más.

Marianela Ruatta
Imagen de Marianela Ruatta
Offline
última acción: Hace 3 años 8 meses
alta: 18/08/2017 - 14:27
Puntos: 175
variables de objeto

Muchisimas gracias por la explicacion! Definir de este modo el libro que tiene la informacion Base y los libros que se irán creando me permite realizar todas las acciones que necesito.

Espero pueda escribirlo y funcione correctamente.

Saludos!

Marianela Ruatta
Imagen de Marianela Ruatta
Offline
última acción: Hace 3 años 8 meses
alta: 18/08/2017 - 14:27
Puntos: 175
Error - Subindice fuera del intervalo

A continuacion pego comandos que he escrito para realizar todas las acciones. Tengo un error, esta en Negrita y Subrayado. No se como debo escribirlo. Supongo que es porque "LibroSecundario" no esta guardado con ese nombre, o algo asi. Ya que por ej, mi base con los datos tuve que llamarla con ese nombre para que no me diera error.

Agradezco la ayuda!

 

Sub AF()

   Dim SelectAf As String

    Dim NroFila As Single

    Dim Base As Workbook

    Dim LibroSecundario As Workbook

    

    Range("A2").Select

    SelectAf = ActiveCell.Value

    

    Application.ScreenUpdating = False

    Do While SelectAf <> ""

    Sheets("Ejecución").Select

        ActiveSheet.ListObjects("Ejecución").Range.AutoFilter Field:=1, Criteria1:=SelectAf

        Range("Ejecución[[#Headers],[Área Funcional]]").Select

        Range(Selection, Selection.End(xlToRight)).Select

        Range(Selection, Selection.End(xlDown)).Select

        Selection.Copy

        Workbooks.Add

        Set LibroSecundario = Workbooks.Add

        ActiveSheet.Paste

        Application.CutCopyMode = False

        

    Workbooks("Base").Activate

    

    Sheets("Consumido Real").Select

        ActiveSheet.ListObjects("ConsumidoReal").Range.AutoFilter Field:=1, Criteria1:=SelectAf

        Range("ConsumidoReal[[#Headers],[Área Funcional]]").Select

        Range(Selection, Selection.End(xlToRight)).Select

        Range(Selection, Selection.End(xlDown)).Select

        Selection.Copy

        Workbooks("LibroSecundario").Activate

        Sheets.Add After:=ActiveSheet

        ActiveSheet.Paste

        Application.CutCopyMode = False

        

    Workbooks("Base").Activate

     

     Sheets("Comprometido OC").Select

        ActiveSheet.ListObjects("ComprometidoOC").Range.AutoFilter Field:=1, Criteria1:=SelectAf

        Range("ComprometidoOC[[#Headers],[Área Funcional]]").Select

        Range(Selection, Selection.End(xlToRight)).Select

        Range(Selection, Selection.End(xlDown)).Select

        Selection.Copy

        Workbooks("LibroSecundario").Activate

        Sheets.Add After:=ActiveSheet

        ActiveSheet.Paste

        Application.CutCopyMode = False

        

    Workbooks("Base").Activate

     

     Sheets("Comprometido ERM").Select

        ActiveSheet.ListObjects("ComprometidoERM").Range.AutoFilter Field:=1, Criteria1:=SelectAf

        Range("ComprometidoERM[[#Headers],[Área Funcional]]").Select

        Range(Selection, Selection.End(xlToRight)).Select

        Range(Selection, Selection.End(xlDown)).Select

        Selection.Copy

        Workbooks("LibroSecundario").Activate

        Sheets.Add After:=ActiveSheet

        ActiveSheet.Paste

        Application.CutCopyMode = False

        

        Sheets("Hoja1").Select

        Sheets("Hoja1").Name = "Ejecución"

        Sheets("Hoja2").Select

        Sheets("Hoja2").Name = "Consumido Real"

        Sheets("Hoja3").Select

        Sheets("Hoja3").Name = "Comprometido OC"

        Sheets("Hoja4").Select

        Sheets("Hoja4").Name = "Comprometido ERM"

        

        ActiveWorkbook.SaveAs Filename:="C:\Practico\" & SelectAf & ".xlsx", FileFormat:= _

            xlOpenXMLWorkbook, CreateBackup:=False

        ActiveWindow.Close

        

    Workbooks("Base").Activate

    

        Sheets("LISTADO").Select

        Range("A2").Select

        NroFila = NroFila + 1

        SelectAf = ActiveCell.Offset(NroFila, 0).Value

        Loop

 

    MsgBox ("Macro Finalizada")

    

End Sub

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 19 horas 33 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
LibroSecundario es una

LibroSecundario es una variable que representa el libro, no es el nombre del libro

para activarlo se hace así

LibroSecundario.Activate

 

------
Ya sé Excel, pero necesito más.

Marianela Ruatta
Imagen de Marianela Ruatta
Offline
última acción: Hace 3 años 8 meses
alta: 18/08/2017 - 14:27
Puntos: 175
Gracias

Muchas gracias por todo! He logrado que funcione correctamente todo.

Sin su ayuda no hubiera podido!