copiar y pegar de un libro a otro por código

21/11/2008 - 08:55 por chiri13 | Informe spam
Hola a todos, gracias por leerme

necesito un poco de ayuda, quiero copiar y pegar de un libro de excel a otro

Tengo dos posibilidades (me gustaría que me ayudarais con las dos)

1º Directamente copiar y pegar la hoja
Desde libroActivo, busco el nuevo libro y copio la hoja que quiero

2ºCopiar y pegar las celdas que están llenas
Desde librosActivo, busco en el nuevo libro las celdas rellenas y las pego
en las celdas normales. Esto sí me sale, pero sólo hasta el registro 540, no
entiendo el porqué, además me dice que no es el mismo rango en el paso 2.1 y
el 2.2 cuando yo he dado "ultimafila" como una variable que obtengo y sí
debería serlo, os pongo el código y si podéis ayudarme os lo agradeceré
Sub CommandButton1_Click()
Dim MiExcel As Excel.Application
Dim LibroOrigen As Excel.Workbook
Dim HojaOrigen As Excel.Worksheet
Dim i As Long, j As Long
Dim RutaDeBusqueda As String
Dim Ultimafila As Long

'Paso 0
Set MiExcel = New Excel.Application
MiExcel.Visible = False
MiExcel.Workbooks.Close

RutaDeBusqueda = SeleccionarArchivo 'una pequeña función que permite
abrir el archivo

' Paso 1: Abrir el libro
MiExcel.Workbooks.Open Filename:=RutaDeBusqueda,
ReadOnly:=True
Set LibroOrigen = MiExcel.Workbooks(1)

' Paso 2.1: Copiar el rango
Set HojaOrigen = LibroOrigen.Worksheets(1)

Ultimafila = (HojaOrigen.Cells.SpecialCells(xlLastCell).Row)
'otras formarse de averiguar la última celda rellena: '[a1].End(xlDown).Row
'[a1].End(xlDown).Address
'MsgBox Ultimafila

HojaOrigen.Range(Cells(1, 1), Cells(Ultimafila, 7)).Copy

' Paso 2.2: Pegar el rango Opción 1

Hoja1.Range("A1:i" & Ultimafila)

'Paso 2.2: Pegar el rango Opción 1
'Hoja1.Cells(1, 1).Select
'Hoja1.Paste


' Paso 3: Cerrar el libro
LibroOrigen.Close SaveChanges:=False
Set HojaOrigen = Nothing
Set LibroOrigen = Nothing



MiExcel.Quit
Set MiExcel = Nothing
End Sub

un saludo y gracias
 

Leer las respuestas

#1 Héctor Miguel
21/11/2008 - 20:08 | Informe spam
hola, !

1) no es claro si estas "instanciando" excel desde otra aplicacion... o por que utilizas objetos de automatizacion ?
dependiendo de lo que pudieras modificar en este sentido, podria variar alguna propuesta para tu consulta -???-

2) el error que obtienes de que los rangos no son iguales, se debe a lo siguiente:

a) en la linea donde determinas "que copiar" (el paso 2.1):
-> HojaOrigen.Range(Cells(1, 1), Cells(Ultimafila, 7)).Copy
esto equivale a copiar hasta la columna 7 [A1:G-ultimafila]

b) en la linea donde (aparentemente) "ibas" a hacer el pegado (el paso 2.2):
-> Hoja1.Range("A1:i" & Ultimafila)
haces referencia hasta la columna "i" (columna 9, y solo estas copiando 7 columnas)

saludos,
hector.

__ OP __
necesito un poco de ayuda, quiero copiar y pegar de un libro de excel a otro
Tengo dos posibilidades (me gustaria que me ayudarais con las dos)
1º Directamente copiar y pegar la hoja
Desde libroActivo, busco el nuevo libro y copio la hoja que quiero
2º Copiar y pegar las celdas que estan llenas
Desde librosActivo, busco en el nuevo libro las celdas rellenas y las pego en las celdas normales.
Esto si me sale, pero solo hasta el registro 540, no entiendo el porque
ademas me dice que no es el mismo rango en el paso 2.1 y el 2.2 cuando yo he dado "ultimafila" como una variable que obtengo
y si deberia serlo, os pongo el codigo y si podeis ayudarme os lo agradecere ...
Sub CommandButton1_Click()
Dim MiExcel As Excel.Application
Dim LibroOrigen As Excel.Workbook
Dim HojaOrigen As Excel.Worksheet
Dim i As Long, j As Long
Dim RutaDeBusqueda As String
Dim Ultimafila As Long
'Paso 0
Set MiExcel = New Excel.Application
MiExcel.Visible = False
MiExcel.Workbooks.Close
RutaDeBusqueda = SeleccionarArchivo 'una pequena funcion que permite abrir el archivo
' Paso 1: Abrir el libro
MiExcel.Workbooks.Open Filename:=RutaDeBusqueda, ReadOnly:=True
Set LibroOrigen = MiExcel.Workbooks(1)
' Paso 2.1: Copiar el rango
Set HojaOrigen = LibroOrigen.Worksheets(1)
Ultimafila = (HojaOrigen.Cells.SpecialCells(xlLastCell).Row) 'otras formarse de averiguar la ultima celda rellena: '[a1].End(xlDown).Row '[a1].End(xlDown).Address
'MsgBox Ultimafila
HojaOrigen.Range(Cells(1, 1), Cells(Ultimafila, 7)).Copy
' Paso 2.2: Pegar el rango Opcion 1
Hoja1.Range("A1:i" & Ultimafila)
'Paso 2.2: Pegar el rango Opcion 1
'Hoja1.Cells(1, 1).Select
'Hoja1.Paste
' Paso 3: Cerrar el libro
LibroOrigen.Close SaveChanges:=False
Set HojaOrigen = Nothing
Set LibroOrigen = Nothing
MiExcel.Quit
Set MiExcel = Nothing
End Sub

Preguntas similares