Macro que se ejecute en todos los libros abiertos

Josaul:
Ahora que tengo abiertos los libros de trabajo tengo la siguiente macro que requiero se ejecute en todos los libros que abrí.
El libro pendientes debe copiar de cada libro abierto todas las filas que contengan el número 1 en la primera columna.
Dim i As Integer
Dim nombre As String
For i = 1 To Worksheets.Count
    nombre = Sheets(i).Name
    Sheets(nombre).Select
    ActiveWindow.DisplayHeadings = True
    Columns("C:E").Select
    Selection.EntireColumn.Hidden = False
    Range("B4").Select
    While ActiveCell.Value <> Empty
    If ActiveCell.Value = "1" Then
    Selection.EntireRow.Copy
    Windows("Pendientes.xls").Activate
    Worksheets("Notas").Select
    Range("A65000").End(xlUp).Offset(1, 0).Select
    Selection.Insert Shift:=xlDown
    Selection.PasteSpecial Paste:=xlFormulas, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
    Application.CutCopyMode = False
End If
    Windows("Clientes.xls").Activate
    ActiveCell.Offset(1, 0).Select
Wend
    Windows("Libro donde copia las filas").Activate  "Esto para dejar el lbro igual que antes de copiarlo"
    ActiveWindow.DisplayHeadings = False
    Columns("D:D").Select
    Selection.EntireColumn.Hidden = True
    Range("B4").Select
End If
Espero me puedas ayudar de nueva cuenta.
Saludos.
Respuesta
1
Checa este código a ver si te funciona, si quieres que te funcione en todos los libros guarda la MACRO en la plantilla de Excel.
Sub CopiaCeldas()
Dim i As Integer
Dim nombre As String
Dim sLibro As Workbook
Dim sNombreLibro As String
For Each sLibro In Workbooks 'Recorres todos los libros abiertos
    sNombreLibro = sLibro.Name
    If UCase(sNombreLibro) <> UCase("Pendientes.xls") Then 'Para evitar que considere tu archivo de pendientes
        For i = 1 To Worksheets.Count
            nombre = Sheets(i).Name
            Sheets(nombre).Select
            ActiveWindow.DisplayHeadings = True
            Columns("C:E").Select
            Selection.EntireColumn.Hidden = False
            Range("B4").Select
            While ActiveCell.Value <> Empty
                If ActiveCell.Value = "1" Then
                    Selection.EntireRow.Copy
                    Windows("Pendientes.xls").Activate
                    Worksheets("Notas").Select
                    Range("A65000").End(xlUp).Offset(1, 0).Select
                    Selection.Insert Shift:=xlDown
                    Selection.PasteSpecial Paste:=xlFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                    Application.CutCopyMode = False
                End If
                'Windows("Clientes.xls").Activate ' supongo que este es uno de los archivos a modificar
                Windows(sNombreLibro).Activate
                ActiveCell.Offset(1, 0).Select
            Wend
        Next
            Windows(sNombreLibro).Activate "Esto para dejar el lbro igual que antes de copiarlo"
            ActiveWindow.DisplayHeadings = False
            Columns("D:D").Select
            Selection.EntireColumn.Hidden = True
            Range("B4").Select
        End If
    End If
Next
End Sub
Estimado Master:
Ya copié la rutina pero copia las celdas que quiere del libro que quiere, a parte de los libros de trabajo no los deja como estaban antes de ejecutar la macro (ocultar columna DE y desactivar ver los encabezados).
¿Qué me falta, puedes darme la luz?
Saludos
Sub CopiaCeldas()
Dim i As Integer
Dim nombre As String
Dim sLibro As Workbook
Dim sNombreLibro As String
    Application.ScreenUpdating = False
    Rows("4:200").Select
    Selection.ClearContents
For Each sLibro In Workbooks 'Recorres todos los libros abiertos
    sNombreLibro = sLibro.Name
    If UCase(sNombreLibro) <> UCase("Pendientes.xls") Then 'Para evitar que considere tu archivo de pendientes
        For i = 1 To Worksheets.Count
            nombre = Sheets(i).Name
            Sheets(nombre).Select
            ActiveWindow.DisplayHeadings = True
            Columns("C:E").Select
            Selection.EntireColumn.Hidden = False
            Range("B4").Select
            While ActiveCell.Value <> Empty
                If ActiveCell.Value = "1" Then
                    Selection.EntireRow.Copy
                    Windows("Pendientes.xls").Activate
                    Worksheets("Notas").Select
                    Range("A65000").End(xlUp).Offset(1, 0).Select
                    Selection.Insert Shift:=xlDown
                    Selection.PasteSpecial Paste:=xlFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                    Application.CutCopyMode = False
                End If
                Windows(sNombreLibro).Activate
                ActiveCell.Offset(1, 0).Select
            Wend
        Next
            Windows(sNombreLibro).Activate 'Esto para dejar el lbro igual que antes de copiarlo
            ActiveWindow.DisplayHeadings = False
            Columns("D:D").Select
            Selection.EntireColumn.Hidden = True
            Range("B4").Select
        End If
  Next
   Windows("Pendientes.xls").Activate
    Rows("201:201").Select
    Selection.Copy
    Rows("4:200").Select
    Range("A200").Activate
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    Rows("202:400").Select
    Selection.Delete Shift:=xlUp
    Range("B4").Select
End Sub
Que te parece si me explicas las acciones que necesitas realizar paso a paso y entonces te propongo una mejor solución.
Ejemplo:
Paso 1.- Abrir archivo pendientes
Paso 2.- Abrir primer archivo para cambiar
Paso3... ETC
Primero te describo mis libros de los clientes que es muy simple.
Aquí llevo un seguimiento diario y los asuntos ya resueltos los pongo con el número 2 y los pendientes con el número 1, y los rechazos o que no puedo concluir con 0; los pendientes que con el tiempo ya resueltos les pongo el número 2. (aplico formato condiconal para que visualmente se vean taches (0), palomas(2) o signos de admiración (1)).
Sería complicado abrir todos los libros y revisar los pendientes día con día (No dispongo de tanto tiempo ya que debo salir a la calle a ver a mis clientes).
Por eso se me ocurrió hacer un libro que copie de todos los libros los pendientes y tener este concentrado.
1.- Paso abro el libro pendientes y los libros de de todos los clientes (ya me diste la macro).
2.- Libro Pendientes, borrar todas las filas ya que los pendientes cambian y se actualizan.
3.- Hacer que de cada libro se copie los pendientes y lo deje igual antes del copiado. (Cada libro tiene una columna oculta y por "vista" requiero que este desactivado "ver encabezados").
4.- Darle formato al libro de pendientes "tipo de letra, de color, etc.)
Saludos master.
Ya hice algunas pruebas con este código, espero que te funcione a ti también
Sub CopiaCeldas()
On Error GoTo Err_CopiaCeldas
Dim nHojas As Integer
Dim sNombreHoja As String
Dim sLibro As Workbook
Dim sHoja As Worksheet
Dim sNombreLibro As String
    For Each sLibro In Workbooks
        sNombreLibro = sLibro.Name
        If UCase(sNombreLibro) <> "PENDIENTES.XLS" Then
            Windows(sNombreLibro).Activate
            For Each sHoja In Worksheets
                sNombreHoja = sHoja.Name
                Sheets(sNombreHoja).Select
                ActiveWindow.DisplayHeadings = True
                Columns("C:E").Select
                Selection.EntireColumn.Hidden = False
                Range("B4").Select
                While ActiveCell.Value <> Empty
                    If ActiveCell.Value = "1" Then
                        Selection.EntireRow.Copy
                        Windows("Pendientes.xls").Activate
                        Worksheets("Notas").Select
                        Range("A65000").End(xlUp).Offset(1, 0).Select
                        Selection.Insert Shift:=xlDown
                        Selection.PasteSpecial Paste:=xlFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                        Application.CutCopyMode = False
                    End If
                    Windows(sNombreLibro).Activate
                    ActiveCell.Offset(1, 0).Select
                Wend
            Next
            Windows(sNombreLibro).Activate
            ActiveWindow.DisplayHeadings = False
            Columns("C:E").Select
            Selection.EntireColumn.Hidden = True
            Range("B4").Select
        End If
    Next
Exit_CopiaCeldas:
    Exit Sub
Err_CopiaCeldas:
    MsgBox "Excepción encontrada en Linea " & Err.Description & " Originada por: " & Err.Source
    Resume Exit_CopiaCeldas
End Sub
Disculpa la demora
Ok,
Gracias, solo unos detalles.
¿No sé si al copiar las filas con el número 1 y pegarlas en el libro pendientes regresa al libro donde copió las filas y lo debería dejar como esta o esto lo hace hasta el final?
Bueno el caso es que no deja los libros de los clientes igual que antes, oculta muchas columnas. Esto sucede igual con el libro de pendientes.
Gracias, master.
Prueba esta modificación, además revisa si el rango que puse de celdas es el correcto
Columns("C:E").Select
Sub CopiaCeldas() 
On Error GoTo Err_CopiaCeldas 
Dim nHojas As Integer 
Dim sNombreHoja As String 
Dim sLibro As Workbook 
Dim sHoja As Worksheet 
Dim sNombreLibro As String 
    For Each sLibro In Workbooks 
        sNombreLibro = sLibro.Name 
        If UCase(sNombreLibro) <> "PENDIENTES.XLS" Then 
            Windows(sNombreLibro).Activate 
            For Each sHoja In Worksheets 
                sNombreHoja = sHoja.Name 
                Sheets(sNombreHoja).Select 
                ActiveWindow.DisplayHeadings = True 
                Columns("C:E").Select 
                Selection.EntireColumn.Hidden = False 
                Range("B4").Select 
                While ActiveCell.Value <> Empty 
                    If ActiveCell.Value = "1" Then 
                        Selection.EntireRow.Copy 
                        Windows("Pendientes.xls").Activate 
                        Worksheets("Notas").Select 
                        Range("A65000").End(xlUp).Offset(1, 0).Select 
                        Selection.Insert Shift:=xlDown 
                        Selection.PasteSpecial Paste:=xlFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 
                        Application.CutCopyMode = False 
                    End If 
                    Windows(sNombreLibro).Activate 
                    ActiveCell.Offset(1, 0).Select 
                Wend 
                 Windows(sNombreLibro).Activate 
                 ActiveWindow.DisplayHeadings = False 
                 Columns("C:E").Select 
                 Selection.EntireColumn.Hidden = True 
                 Range("B4").Select
            Next 
        End If 
    Next 
Exit_CopiaCeldas: 
    Exit Sub 
Err_CopiaCeldas: 
    MsgBox "Excepción encontrada en Linea " & Err.Description & " Originada por: " & Err.Source 
    Resume Exit_CopiaCeldas 
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas