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

Preguntas similare

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
Respuesta Responder a este mensaje
#2 chiri13
21/11/2008 - 23:04 | Informe spam
gracias por lo 2º

lo primero se refiere a llamar desde un excel a otro excel


"Héctor Miguel" escribió en el mensaje
news:
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





Respuesta Responder a este mensaje
#3 Héctor Miguel
22/11/2008 - 02:15 | Informe spam
hola, (...) ???

lo primero se refiere a llamar desde un excel a otro excel



entonces no es necesario "abultar" tu codigo usando objetos de automatizacion ;)

1) inhibe la actualizacion de la pantalla (application.screenupdating = false)
2) abre el otro libro de forma "normal" (workbooks.open rutadebusqueda) y ese libro sera el libro "activo"
3) determina la ultima celda + haz el "copy" del rango correspondiente
4) indica exactamente el rango apropiado de la hoja del libro con la macro para hacer el paste
5) cierra el libro "activo" (el que se abrio con el metodo open)

Sub CommandButton1_Click()
application.screenupdating = false
workbooks.open rutadebusqueda
ultimafila = ' aqui el metodo que prefieras '
range(cells(1, 1), cells(ultimafila, 7)).copy
thisworkbook.worksheets("xyz").range("a1:g" & ultimafila).paste
activeworkbook.close false
End Sub

saludos,
hector.

__ el codigo de tu consulta original __
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
Respuesta Responder a este mensaje
#4 chiri13
22/11/2008 - 08:29 | Informe spam
fantástico gracias

pensaba que para abrir otro libro era necesario utilizar la automatización
(vengo de access y ahí lógicamente la utilizo para trabajar sobre excel)

muchas gracias una cosilla más a la hucha

un abrazo

"Héctor Miguel" escribió en el mensaje
news:u7%23Cd$
hola, (...) ???

lo primero se refiere a llamar desde un excel a otro excel



entonces no es necesario "abultar" tu codigo usando objetos de
automatizacion ;)

1) inhibe la actualizacion de la pantalla (application.screenupdating =
false)
2) abre el otro libro de forma "normal" (workbooks.open rutadebusqueda) y
ese libro sera el libro "activo"
3) determina la ultima celda + haz el "copy" del rango correspondiente
4) indica exactamente el rango apropiado de la hoja del libro con la macro
para hacer el paste
5) cierra el libro "activo" (el que se abrio con el metodo open)

Sub CommandButton1_Click()
application.screenupdating = false
workbooks.open rutadebusqueda
ultimafila = ' aqui el metodo que prefieras '
range(cells(1, 1), cells(ultimafila, 7)).copy
thisworkbook.worksheets("xyz").range("a1:g" & ultimafila).paste
activeworkbook.close false
End Sub

saludos,
hector.

__ el codigo de tu consulta original __
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





email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida