Macro alojada en un libro activo y que actúe en otros libros activos sin que estos tengan la macro alojada

Pregunto como hacer una macro que extraiga los datos de varios libros activos, del rango A8 hasta el M28 solo de las celdas visibles de cada hoja de estos libros activos, cada libro tiene un cantidad de hojas variable y con diferentes nombres, la macro deberá generar una hoja llamada "Listado" en cada uno de los libros sobre los que actúe, se requiere que elabore una lista con los datos que copie y sucesivamente pegue como valores en la respectiva hoja "Listado" de cada libro, guardando los cambios. La macro deberá estar alojada en un libro que al estar activo y al ejecutar la macro, realice las operaciones descritas sobre los demás libros que estén activos, sin que se tenga que poner la macro en ellos, solo que se tengan activos para que sean afectados.

Respuesta
1

Acabo de responder otra consulta tuya que creo responde a una variante de este mismo tema.

Aquí estás solicitando colocarla en un libro y desde allí ejecutar en el resto de los libros... confirmame cuál de los 2 métodos vas a utilizar, para continuar o no con esta consulta.

Estimada Elsa, la respuesta que propone a mi consulta es la que utilizare, por lo que le pido por favor continúe con la consulta. 

Bien, en un módulo del libro coloca estos códigos.

- La que activa cada libro abierto

- La que realiza el pase dentro del libro activado

Dim libro1 As String    'variable que guarda el nombre del libro con macro
Sub macroComun()
'x Elsamatilde
libro1 = ActiveWorkbook.Name
'se recorren los libros abiertos y se ejecuta la macro XX
For Each wb In Workbooks
    'se accede a cada libro cuyo nombre no sea PERSONAL ni el libro con la macro
    If wb.Name <> "PERSONAL.XLSB" And wb.Name <> libro1 Then
       'se activa la hoja y se ejecuta la macro
        wb.Activate
        Call macroPrincipal
    End If
Next wb
End Sub
Sub macroPrincipal()
'x Elsamatilde
'se trabaja en el libro activado
'se crea una hoja llamada 'Listado'
Sheets.Add
ActiveSheet.Name = "Listado"
'se recorren las hojas visibles
For Each sh In Sheets
    If sh.Name <> "Listado" And sh.Visible = True Then
        MsgBox "Aquí se copia el rango de hoja " & sh.Name & " a hoja Listado"
        'call copiaRango
    End If
Next sh
'se guarda el libro
ActiveWorkbook.Save
'se regresa al libro que contiene la macro
Workbooks(libro1).Activate
End Sub
Sub copiaRango()
'faltan detalles.... va en otra consulta
End Sub

Van los comentarios en las macros. Es importante que estén todas juntas en un módulo.

Dejo solo un mensaje de que se está a punto de copiar las hojas al resumen... cuando tengas esa macro desarrollada (*) solo quita el mensaje y activa la llamada Call quitándole la comilla que tiene delante.

(*) para esa macro debes dejar otra consulta en el tablón aclarando algunos detalles más:

1- Si es posible que algún libro ya tenga la hoja Listado y qué hacer en ese caso... ¿agregar información?

2- ¿Ya está controlando que solo se ejecute en hojas visibles... pero qué se debe entender por 'celdas visibles' ... filas o col?

3- A partir de qué celda se realizará el copiado... ¿en la misma ubicación A8? ¿Y si la fila 8 o la col A está oculta? ¿Dónde se pegan los datos?

Creo que con lo hecho hasta aquí ya podrás avanzar.

¡Gracias! 

Estudiare su propuesta y en breve le consultare sobre los detalles que omití.

Saludos y nuevamente Gracias

Para la macro que falta deja una nueva consulta en el tablón con todos los detalles (luego de valorar ésta).

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas