Macro que copie el rango de un libro, abra el libro destino y pegue?

Deseo hacer una MACRO abra un libro, copie, abra otro libro y pegue; eso lo tengo, mi problema nace en que ¿Cómo hago para que la macro siga funcionando esté o no esté uno o varios de los tantos libros que tenga almacenado en una carpeta?

Acá un ejemplo para abrir un libro, seleccionar el rango, copiar, abrir el libro destino, pegar, regresar al libro y cerrarlo...

'P12-CHIN-1A-1BIM.xlsx es uno de los tantos libro que deseo abrir, seleccionar y copiar el rango

'PROMEDIO_LETRA es el rango

'1A-Prim.xlsm es el libro destino

Application.ScreenUpdating = False
Workbooks.Open ThisWorkbook.Path & "\" & "P12-CHIN-1A-1BIM.xlsx" 'abre el registro
Windows("P12-CHIN-1A-1BIM.xlsx").Activate 'esta usando el registro abierto
Range("PROMEDIO_LETRA").Select 'selecciona el rango del registro abierto
Selection. Copy '. Copia el rango PROMEDIO del registro abierto
Windows("1A-Prim.xlsm").Activate 'selecciona el consolidado
Range("E11").Select 'selecciona la celda del consolidado para copiar las notas
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("C10").Select 'selecciona la celda en el consolidado
Windows("P12-CHIN-1A-1BIM.xlsx").Activate 'regresa al registro abierto
Application.CutCopyMode = False 'desactiva el copiado
ActiveWorkbook.Close False 'cierra el registro

Tengo hasta 25 de estos libros, mi problema nace cuando no tengo los 25, se detiene la macro con un error de "no encuentra el libro". Mi única solución es eliminar o poner como comentario para iniciar otra vez la macro.

1 Respuesta

Respuesta
1

Así quedaría, agregué la instrucción

On Error Resume Next

Y después de intentar abrir el libro, pregunto si existe error, si error = 0 entonces continúa, si es diferente de 0, entonces no hace nada y se pasa a la siguiente instrucción, que en este ejemplo es

Err.Number = 0

Después de esa línea puedes continuar con más código de tu macro.

    Application.ScreenUpdating = False
    On Error Resume Next
    Workbooks.Open ThisWorkbook.Path & "\" & "P12-CHIN-1A-1BIM.xlsx" 'abre el registro
    If Err.Number = 0 Then
        On Error GoTo 0
        Windows("P12-CHIN-1A-1BIM.xlsx").Activate 'esta usando el registro abierto
        Range("PROMEDIO_LETRA").Select 'selecciona el rango del registro abierto
        Selection.Copy '.copia el rango PROMEDIO del registro abierto
        Windows("1A-Prim.xlsm").Activate 'selecciona el consolidado
        Range("E11").Select 'selecciona la celda del consolidado para copiar las notas
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        Range("C10").Select 'selecciona la celda en el consolidado
        Windows("P12-CHIN-1A-1BIM.xlsx").Activate 'regresa al registro abierto
        Application.CutCopyMode = False 'desactiva el copiado
        ActiveWorkbook.Close False 'cierra el registro
    End If
    Err.Number = 0
    On Error Resume Next
    '
    'Continúa tu código
    '

Nota: La instrucción On error Goto 0, hace que se activen los errores, es decir, si ocurriera otro error entonces la macro se detendría

Prueba y me comentas.

Saludos. Dante Amor

Si es lo que necesitas.

Grande Experto, me funcionó a la perfección... lo probé y todo OK, hice una prueba con 3 libros, cargue los 3 y OK, ELIMINÉ 1 y simplemente el excel cargó los 2 que encontró y no salió el error, grande doc.

¡Gracias! 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas