Excel - Copiar Rango de un Libro a Otro

   
Vista:

Copiar Rango de un Libro a Otro

Publicado por Luis (1 intervención) el 15/04/2014 09:21:45
Buenos días,

Necesito copiar el contenido de una hoja de un libro (Libro1) a otro libro (Libro2).
El Libro de Origen (Libro1) no tiene que estar abierto, podría estar cerrado.
No conocemos el número de filas que tiene dicha hoja del Libro1 porque se pican datos con frecuencia.

He intentado sacar la macro con "Grabar Macro" pero no funciona.

Muchas gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana

Copiar Rango de un Libro a Otro

Publicado por Antoni Masana (265 intervenciones) el 15/04/2014 12:22:29
La macro puede hacer muchas cosas.

Puedes verificar si el Libro1 esta abierto y si esta cerrado abrirlo.

recorrer una columna desde la fila que se inician los datos y que sepas que siempre estará llena o varias en las que al menos en una tenga datos para buscar la primera fila vacía.

Copiar desde la Primera fila donde se inician los datos hasta la vacía menos 1 y tantas columnas como sean necesarias

Vas al Libro2 y buscas donde copiarlo y lo pegas


Este es un simple ejemplo de una macro que estoy usando que copia desde la columna A hasta la Columna 0 y desde la fila 1 hasta la última fila de datos.

Recorre la columna A porque siempre hay datos en esta columna, en mi caso una fecha.

Y en el destino busca la primera fila vacía o que tenga la misma fecha para no duplicar si se repite la ejecución de la macro y copia.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
    ' </> ----------------------------------------------------------------------------- </>
    ' </> ---&--- </>   Copia - Estadisticas Consumo CPU
    ' </> ----------------------------------------------------------------------------- </>
 
    ' </> ---&--- </>   Abre los ficheros de datos
 
       Workbooks.Open Filename:="Libro1.xls"
 
    ' </> ---&--- </>   Pone las mascaras de los campos
 
    Windows("Libro1.xls").Activate
 
    ' </> ---&--- </>   Busca la primera FECHA
 
    c_Fecha = Range("A1").Cells             ' --- Primera Fecha de datos
    c_Hasta = ""
 
    ' Cuenta el numero de lineas
 
    For a = 1 To 2 ^ 36
        c_Actual = Range("A" + Mid$(Str$(a), 2)).Cells
        If c_Actual = "" Then n_Lin = a: c_Hasta = "O" + Mid$(Str(a - 1), 2): Exit For
    Next
 
    If c_Hasta = "" Then
       MsgBox "Se sobrepaso el limite de las filas de la hoja", _
               vbCritical + vbOKOnly, _
              "Estadisticas Orpas"
       Exit Sub
    End If
 
    ' --- Selecciona el area de datos
 
    Range("A1:" + c_Hasta).Select
    Selection.Copy
 
    ' </> --------------------------------------------- </>
    ' </> ---&---      Copia el Bloque - 6      ---&--- </>
    ' </> --------------------------------------------- </>
 
    Windows("Libro2.xls").Activate
    Sheets("Hoja1").Select
 
    ' --- Busca la celda donde debe copiar
 
    c_Celda = ""
 
 
    For a = 1 To 2 ^ 36
        c_Actual = Range("A" + Mid$(Str$(a), 2)).Cells
        If c_Actual = c_Fecha Then c_Celda = "A" + Mid$(Str(a), 2): n_Pos = a: Exit For
        If c_Actual = c_Vacio Then c_Celda = "A" + Mid$(Str(a), 2): n_Pos = a: Exit For
    Next
 
    If c_Celda = "" Or n_Pos + n_Lin > 2 ^ 36 Then
       MsgBox "Se sobrepaso el limite de las filas de la hoja", _
               vbCritical + vbOKOnly, "Estadisticas Orpas"
       Exit Sub
    End If
 
    ' --- Pegar datos
 
    Range(c_Celda).Select
    ActiveSheet.Paste
 
    Application.CutCopyMode = False
 
    Windows("Libro1.xls").Activate
    ActiveWindow.Close Savechanges:=False

Espero se entienda

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar