Como puedo copiar a datos de una hoja a otro libro

12/10/2007 - 22:23 por MGL19DF | Informe spam
Hola Buen dia

Gracias a todos en especial a Abraham por la solucion que me dio el
otro dia a un problema que tenia, pero ahora tengo otro y a este si
nisiquiera le encuentro solucion. (y creo yo que es mas facil que el
de el otro dia)

Que codigo puedo utilizar para hacer lo siguiente:

tengo una carpeta con Varios libros, cada uno tiene varias hojas, de
las cuales necesito sacar informacion de un arango de hojas variable
de las columnas A,D,F,G,H,I, pero no todas las columnas tiene la misma
informacion y la misma longitud, hay columnas mas cortas y otras mas
largas.

De estos libros necesito sacar cada semana la informacion de esas
hojas y esa informacion copiarla a otro libro que tiene una hoja por
cada libro contenido en la carpeta anterior.

Pero necesito copiar todo el contenido del rango de hojas y el rango
de datos a una hoja cada dato copiado de la hoja, seguido de la otra
hoja ej.

hoja zamba en librro 1
xxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxx
xxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxx
xxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxx
xxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxx
xxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxx

hoja zigma en libro 1
xxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxx
xxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxx
xxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxx
xxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxx
xxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxx
hoja nijna en libro 1
xxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxx
xxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxx
xxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxx
xxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxx
xxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxx
etc

seleccionar solo las columnas 1, 3, 6

y pegar hasta la primer celda vacia de cada columna en:

libro general

hoja libro1
xxxxxx xxxxxxx
xxxxxx xxxxxxx
xxxxxx xxxxxxx
xxxxxx xxxxxxx
xxxxxx xxxxxxx

xxxxxx xxxxxxx
xxxxxx xxxxxxx
xxxxxx xxxxxxx
xxxxxx xxxxxxx
xxxxxx xxxxxxx

xxxxxx xxxxxxx
xxxxxx xxxxxxx
xxxxxx xxxxxxx
xxxxxx xxxxxxx
xxxxxx xxxxxxx

etc

si alguein tene una solucion, se los agradecere infinitamente, ya que
este problema me ha tenido frustrado las ultimas 2 semanas...

saludos
 

Leer las respuestas

#1 Ivan
13/10/2007 - 03:18 | Informe spam
hola,

aunque no acabo de tener claro si te he entendido bien, mira a ver si lo que quieres se acerca a lo siguiente:

pega los codigos en un modulo normal, sigue los requisitos/prevenciones comentados [ y prueba con copias]

op1) si ya tienes las hojas con los nombres de los libros

:-> carga en las hojas [del libro que contiene la macro] cuyo nombre coincide con el cada libro [contenido en la carpeta
especificada en TuRuta] las columnas 1,3 y 6 de todas las hojas de este,

OJO no incluye tratamiento de errores, pej si un libro no tiene su hoja correspondiente (podrias hacer una combinacion
con el 2º codigo que te pongo

se supone que la columna a va a ser siempre mayor o igual de larga que el resto

CAMBIA en la variable 'TuRuta' el contenido por la ruta completa [incluida la ultima barra] a la carpeta contenedora
'
Sub CargarLibrosEnHojasExistentes()
Dim TuRuta As String, TuNombre As String, _
i As Long, n As Byte, hj As Worksheet
Application.ScreenUpdating = False
TuRuta = "C:\Documents and Settings\Ivan\" & _
"Mis documentos\TuCarpeta\"
TuNombre = Dir(TuRuta & "*.xls")
Do While TuNombre <> ""
If TuNombre <> ThisWorkbook.Name Then
Workbooks.Open TuRuta & TuNombre
With ThisWorkbookWorksheets(TuNombre)
For Each hj In Workbooks(TuNombre).Worksheets
If .[a1] = "" Then i = 1 Else _
i = .[a65536].End(xlUp).Row + 2
.Cells(i, 1) = hj.Name
n = hj.[a65536].End(xlUp).Row
hj.Range("a1:a" & n & ",c1:c" & n & ",f1:f" & n) _
.Copy .Cells(i + 2, 1)
Next
End With
Application.DisplayAlerts = False
Workbooks(TuNombre).Close False
Application.DisplayAlerts = True
End If
TuNombre = Dir
Loop
End Sub

op2) crea una nueva hoja con el nombre de cada libo y carga en ella todas las hojas de cada uno

basicamente lo mismo que en el anterior, aunque aqui debes asegurarte de que los nombres de los libros son nombres
validos para una hoja y de que no existen hojas ya con el mismo nombre

puedes / deebes prevenir varias posibilidades de error. Posiblemente lo mejor seria combinar ambos codigos

Sub CargarLibrosEnHojasNuevas()
Dim TuRuta As String, TuNombre As String, _
i As Integer, n As Byte, hj As Worksheet
Application.ScreenUpdating = False
TuRuta = "C:\Documents and Settings\Ivan\" & _
"Mis documentos\TuCarpeta\"
TuNombre = Dir(TuRuta & "*.xls")
Do While TuNombre <> ""
If TuNombre <> ThisWorkbook.Name Then
Workbooks.Open TuRuta & TuNombre
With ThisWorkbook
.Worksheets.Add after:=.Worksheets(.Worksheets.Count)
With .Worksheets(.Worksheets.Count)
.Name = TuNombre
For Each hj In Workbooks(TuNombre).Worksheets
If .[a1] = "" Then i = 1 Else _
i = .[a65536].End(xlUp).Row + 2
.Cells(i, 1) = hj.Name
n = hj.[a65536].End(xlUp).Row
hj.Range("a1:a" & n & ",c1:c" & n & ",f1:f" & n) _
.Copy .Cells(i + 2, 1)
Next
End With
End With
Application.DisplayAlerts = False
Workbooks(TuNombre).Close False
Application.DisplayAlerts = True
End If
TuNombre = Dir
Loop
End Sub

espero te valga y si quieres comentas

un saludo
Ivan

Preguntas similares