Macro copiar datos

Hola Christian, que tal!, otra vez "molestándote" con dudas. Te comento, he intentado sin éxito hacer una macro que copie a un archivo receptor un rango con datos de un número variable de hojas de un archivo original.
Comentarte que si para cada hoja nueva del archivo original, escribo manualmente la siguiente rutina y cambiando el nombre de la hoja, la macro corre!
Sheets("080317 - Cartutxos impressora").Select
    ufh = Range("B" & Cells.Rows.Count).End(xlUp).Row + 1
    Range("B12:G" & ufh).Copy
    Windows(ficmacro).Activate
    Sheets("Hoja2").Select
    uf1 = Range("A" & Cells.Rows.Count).End(xlUp).Row + 1
    Range("A" & uf1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Sheets("Hoja2").Range("A1").Select
La duda es poder conseguir una macro que recorra todas las hojas del archivo original, excepto hoja1 y hoja3, que copie los datos, y que estos aparezcan en el archivo receptor. Tal como te decía antes si escribo manualmente para cada hoja nueva del archivo original la rutina de arriba, cambiando solamente el nombre de la hoja, la macro corre, pero me parece muy tedioso...
Para ser más explícito te añado el código que estoy utilizando, donde:
RE-VS08.02_Control de residus.xls sería el archivo original, donde están cada una de las hojas
ficmacro es donde tengo la macro, que asigno a un botón.
Sub importar_dades()
Application.ScreenUpdating = False
    ruta = ActiveWorkbook.Path
    ficmacro = ActiveWorkbook.Name
    ficdatos = "RE-VS08.02_Control de residus.xls"
    Workbooks.Open Filename:=ruta & "\" & ficdatos
    Windows(ficmacro).Activate
    uf1 = Range("A" & Cells.Rows.Count).End(xlUp).Row + 1
    Sheets("Hoja2").Range("A7:E" & uf1).ClearContents
Sheets("080317 - Cartutxos impressora").Select
    ufh = Range("B" & Cells.Rows.Count).End(xlUp).Row + 1
    Range("B12:G" & ufh).Copy
    Windows(ficmacro).Activate
    Sheets("Hoja2").Select
    uf1 = Range("A" & Cells.Rows.Count).End(xlUp).Row + 1
    Range("A" & uf1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Sheets("Hoja2").Range("A1").Select
Sheets("150110 - Envasos subst. Peril.").Select....................
..........
 Application.ScreenUpdating = True
    Windows(ficdatos).Close (1)
End Sub
Llevo días tratando de dar con la solución, utilizando la instrucción For Each... Next, y la macro no corre, por este motivo recurro a ti, esperando haber sido lo más explícito posible con la consulta...
Una vez más Christian, gracias por tu ayuda y tiempo!
Saludos

1 Respuesta

Respuesta
1
Bueno tendría que revisar detenidamente cada linea de tu código y evaluar en donde se tendría que realizar la mejora. Ante alguna duda que tenga te lo haré saber.
Hola Christian, revisando la consulta veo que me he dejado una línea, ay, ay,.. Te escribo nuevamente el código marcando con negrita la línea que faltaba:
Sub importar_dades()
Application.ScreenUpdating = False
    ruta = ActiveWorkbook.Path
    ficmacro = ActiveWorkbook.Name
    ficdatos = "RE-VS08.02_Control de residus.xls"
    Workbooks.Open Filename:=ruta & "\" & ficdatos
    Windows(ficmacro).Activate
    uf1 = Range("A" & Cells.Rows.Count).End(xlUp).Row + 1
    Sheets("Hoja2").Range("A7:E" & uf1).ClearContents
Windows(ficdatos).Activate
Sheets("080317 - Cartutxos impressora").Select
    ufh = Range("B" & Cells.Rows.Count).End(xlUp).Row + 1
    Range("B12:G" & ufh).Copy
    Windows(ficmacro).Activate
    Sheets("Hoja2").Select
    uf1 = Range("A" & Cells.Rows.Count).End(xlUp).Row + 1
    Range("A" & uf1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Sheets("Hoja2").Range("A1").Select
Windows(ficdatos).Activate
Sheets("150110 - Envasos subst. peril.").Select....................
..........
 Application.ScreenUpdating = True
    Windows(ficdatos).Close (1)
End Sub
Gracias de nuevo!... y saludos.
Bueno antes debo de realizar algunas aclaraciones. La macro la ejecuto desde el Libro de destino, que puede ser mediante un botón, etc. Solo la ejecuto una vez, para realizar el proceso por las demás hojas. El código esta ubicado dentro de un modulo. Por otro lado sugiero que tanto el numero de hojas que tiene el archivo origen tenga también el mismo numero de hojas del libro de destino para evitar problemas. Aunque esto ultimo bien podrías emplear una pequeña rutina de comparación para que agregue hojas de cálculos en el libro de destino.
La macro es como sigue:
Sub Pruebas()
Application.ScreenUpdating = False
ficmacro = ActiveWorkbook.Name
ruta = ActiveWorkbook.Path
ficdatos = "RE-VS08.02_Control de residus.xls"
Workbooks.Open Filename:=ruta & "\" & ficdatos
nhojas = Worksheets.Count
For i = 4 To nhojas
Sheets(i).Activate
ufh = Range("B" & Cells.Rows.Count).End(xlUp).Row + 1
Range("B12:G" & ufh).Copy
Windows(ficmacro).Activate
Sheets(i).Activate
uf1 = Range("A" & Cells.Rows.Count).End(xlUp).Row + 1
Range("A" & uf1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Windows(ficdatos).Activate
Next i
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
 

*****
Como tu intención es agregar todas las hojas excepto Hoja1 y Hoja3, bueno, la macro anterior lo que hace es que trabaja a partir de Hoja4 en adelante, quedando pendiente Hoja2, lo cual se podría hacer antes de que se ejecute el bucle o después. Estoy seguro que esa macro la podrás realizar. Te sugiero que emplees indices tal como yo en esta ocasión he empleado.
Espero haberte ayudado.
Jordserr, No olvides de finalizar y puntuar la respuesta al final de esta página.
Muchas gracias Christian... la macro al final "corre" y con bucle...!
Según propones la macro quedaría:
For i=4 To nhojas
If Sheets(i).Name<>"Hoja2" Then
.........
End If
Next i
Como siempre, gracias por tu ayuda y hasta la próxima!
Saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas