macro excel para copiar datos de un libro a otro

02/06/2007 - 19:46 por ssandramiriam | Informe spam
Hola a todos

Os escribo en busca de ayuda. Necesito una macro de excel que al
ejecutarla me copie unos datos que tengo en una columna A de la Hoja
1, en la columna N de la Hoja 1 pero de otro libro. La macro se debe
ejecutar en la hoja destino y además, la macro debería distinguir si
el libro del que quiero copiar los datos esta abierto o no, para que
si no esta abierto lo abra.

Por diferentes motivos, no puedo recurrir a los hipervículos, por ello
mi duda sobre la macro.

Me puede echar una mano alguien, estoy muy perdida. He intentado sacar
algo en claro con la opción de grabar macros, pero no he conseguido
nada que realmente luego me funcione.

Un saludo

Preguntas similare

Leer las respuestas

#1 KL
02/06/2007 - 23:35 | Informe spam
Mira a ver si te vale algo de aqui:
http://www.rondebruin.nl/tips.htm (bajo el titulo: Copy/Paste/Merge examples)

Saludos,
KL


wrote in message news:
Hola a todos

Os escribo en busca de ayuda. Necesito una macro de excel que al
ejecutarla me copie unos datos que tengo en una columna A de la Hoja
1, en la columna N de la Hoja 1 pero de otro libro. La macro se debe
ejecutar en la hoja destino y además, la macro debería distinguir si
el libro del que quiero copiar los datos esta abierto o no, para que
si no esta abierto lo abra.

Por diferentes motivos, no puedo recurrir a los hipervículos, por ello
mi duda sobre la macro.

Me puede echar una mano alguien, estoy muy perdida. He intentado sacar
algo en claro con la opción de grabar macros, pero no he conseguido
nada que realmente luego me funcione.

Un saludo
Respuesta Responder a este mensaje
#2 ssandramiriam
03/06/2007 - 10:56 | Informe spam
On 2 jun, 23:35, "KL" wrote:
Mira a ver si te vale algo de aqui:http://www.rondebruin.nl/tips.htm(bajo el titulo: Copy/Paste/Merge examples)

Saludos,
KL

wrote in messagenews:

Hola a todos

Os escribo en busca de ayuda. Necesito una macro de excel que al
ejecutarla me copie unos datos que tengo en una columna A de la Hoja
1, en la columna N de la Hoja 1 pero de otro libro. La macro se debe
ejecutar en la hoja destino y además, la macro debería distinguir si
el libro del que quiero copiar los datos esta abierto o no, para que
si no esta abierto lo abra.

Por diferentes motivos, no puedo recurrir a los hipervículos, por ello
mi duda sobre la macro.

Me puede echar una mano alguien, estoy muy perdida. He intentado sacar
algo en claro con la opción de grabar macros, pero no he conseguido
nada que realmente luego me funcione.

Un saludo



Hola KL, en primer lugar muchas gracias por responder y ofrecerme tu
ayuda.
La verdad es que no la he sabido aprovehcar muy bien, en el link que
me has pasado se recoge mucha información, pero no se muy bien como
puedo adaptarla para solventar mi necesidad
Podrías asesorarme de froma mas concreta?
Un saludo
Respuesta Responder a este mensaje
#3 KL
03/06/2007 - 13:13 | Informe spam
Hola Sandra,

Hola KL, en primer lugar muchas gracias por responder y ofrecerme tu
ayuda.
La verdad es que no la he sabido aprovehcar muy bien, en el link que
me has pasado se recoge mucha información, pero no se muy bien como
puedo adaptarla para solventar mi necesidad
Podrías asesorarme de froma mas concreta?



Para asesorarte de forma mas concreta haran falta datos mas concretos:

- nombres y rutas concretas de archivos
- es siempre el mismo fichero que se abrira o se tiene que elegir?
- nombres de las hojas?
- cual es la fila donde empiezan los datos a copiar de la hoja de origen?
- contienen formulas los datos a copiar, y, si afirmativo, se deben mantener las formulas?
- cuando la copia se realize por primera vez, en que fila de la hoja de destino se deben copiar los datos?
- cuando la copia se realize por segunda y posteriores veces, los datos se deben agregar al final o se debe borrar lo anteriormente
copiado?
- otras cosas que te parezcan relevantes para el caso

Saludos,
KL
Respuesta Responder a este mensaje
#4 ssandramiriam
03/06/2007 - 13:44 | Informe spam
On 3 jun, 13:13, "KL" wrote:
Hola Sandra,

> Hola KL, en primer lugar muchas gracias por responder y ofrecerme tu
> ayuda.
> La verdad es que no la he sabido aprovehcar muy bien, en el link que
> me has pasado se recoge mucha información, pero no se muy bien como
> puedo adaptarla para solventar mi necesidad
> Podrías asesorarme de froma mas concreta?

Para asesorarte de forma mas concreta haran faltadatosmas concretos:

- nombres y rutas concretas de archivos
- es siempre el mismo fichero que se abrira o se tiene que elegir?
- nombres de las hojas?
- cual es la fila donde empiezan losdatosacopiarde la hoja de origen?
- contienen formulas losdatosacopiar, y,siafirmativo, se deben mantener las formulas?
- cuando la copia se realize por primera vez, en que fila de la hoja de destino se debencopiarlosdatos?
- cuando la copia se realize por segunda y posteriores veces, losdatosse deben agregar al final o se debe borrar lo anteriormente
copiado?
- otras cosas que te parezcan relevantes para el caso

Saludos,
KL




Hola KL, gracias por responder tan rápido, he conseguido algo, aunque
de forma bastante poco elegante. Te cuento:

He creado una macro en que primero me abre el libro del que yo quiero
copiar los datos (de una columna), selecciona el rango a copiar, luego
se va a la hoja del otro libro desde la que se ejecuta la macro y
donde quiero que me copie esos datos, los copia, y finalmente cierra
el libro origen.

Bueno, todo esto funciona, aunq de forma rudimentaria, a las mil
maravillas, salvo en el caso en el libro este ya abierto, en tal caso
me pregunta si deseo volver abrir el libro ya abierto y que si lo hago
perderé la información deseada. Además, según me cierra los libro
origen me pide que confirme si quiero o no modificar cambios. Como
puedo solucionarlo??? Hay alguna forma de que la macro copie los datos
de la columna que quiero del libro origen sin tener que abrirlo???

Te escribo la macro en cuestión.

Privatesub CommandButton1_Click()
Workbook.Open("C:\Libro1.xls")
Windows("Libro1").Activate
Worksheets("Hoja1").Range(A3:A15).Select
Application.CutCopyMode=False
Selection.Copy
Windows("Libro2").Activate
Worksheets("Hoja1").Range(C3).Select
ActiveSheet.Paste
Workbook("Libro1.xls").Close

Esperando tu respuesta, un saludo
Respuesta Responder a este mensaje
#5 KL
03/06/2007 - 16:04 | Informe spam
Hola Sandra,

primero me abre el libro del que yo quiero
copiar los datos (de una columna), selecciona el rango a copiar, luego
se va a la hoja del otro libro desde la que se ejecuta la macro y
donde quiero que me copie esos datos, los copia, y finalmente cierra
el libro origen.

en el caso en el libro este ya abierto, en tal caso
me pregunta si deseo volver abrir el libro ya abierto y que si lo hago
perderé la información deseada.

según me cierra los libro
origen me pide que confirme si quiero o no modificar cambios.

Hay alguna forma de que la macro copie los datos
de la columna que quiero del libro origen sin tener que abrirlo???



A continuacion te pongo dos procedimientos. El primero es una modificacion del tuyo que toma en cuenta tus comentarios mas arriba y
el segundo hace lo mismo sin abrir el fichero de origen.

Importante:
El segundo codigo requiere una referencia a la libreria "Microsoft ActiveX Data Objects #.# Library" (donde #.# es el numero de la
version mas moderna disponible).
En la version castellana de Excel el nombre de la libreria posiblemente este traducido.
La referencia se establece desde el Editor VBA yendo al menu Herramientas>Referencias... (Tools>References...) y tildando la casilla
apropiada.

Saludos,
KL

'Ejemplo1--
Private Sub CommandButton1_Click()
Dim strArchivo As String
Dim oLibro As Workbook

'Creamos la variable de la ruta
strArchivo = "C:\Libro1.xls"

'Comprobamos si el archivo existe en la ruta indicada
If Dir(strArchivo) = "" Then
MsgBox "No existe el archivo en la ruta indicada."
Exit Sub
End If

'Deshabilitamos la actualizacion de pantalla
Application.ScreenUpdating = False

'Comprobamos si el libro ya esta abierto,
'y, si no lo esta, lo abrimos

'Deshabilitamos los avisos de error
On Error Resume Next

'Intentamos asignar a la variable un libro
'abierto con el nombre que buscamos
Set oLibro = Workbooks(Dir(strArchivo))

'Habilitamos los avisos de error
On Error GoTo 0

'Si la variable no tiene nada asignado
'le asignamos el libro abriendolo directamente
If oLibro Is Nothing Then Set oLibro = Workbooks.Open(strArchivo)

'Realizamos la copia (se supone que el libro Libro2.xls
'estaria siempre abierto a la hora de ejecutar el codigo
oLibro.Worksheets("Hoja1").Range("A3:A15").Copy _
Workbooks("Libro2.xls").Worksheets("Hoja1").Range("C3")

'Cerramos sin guardar cambios
oLibro.Close False

'Vaciamos la variable
Set oLibro = Nothing

'Habilitamos la actualizacion de pantalla
Application.ScreenUpdating = True
End Sub
'Ejemplo1--


'Ejemplo2--
Private Sub CommandButton1_Click()
Dim strArchivo As String, strSQL As String
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim arrData As Variant

strArchivo = "C:\Libro1.xls"

'Comprobamos si el archivo existe en la ruta indicada
If Dir(strArchivo) = "" Then
MsgBox "No existe el archivo en la ruta indicada."
Exit Sub
End If

'Creamos la cedena texto de la consulta SQL
strSQL = "SELECT * FROM [Hoja1$A2:A15]"

'Creamos la conexion al archivo
Set cn = New ADODB.Connection
cn.Open "DRIVER={Microsoft Excel Driver (*.xls)};" & _
"DriverIdy0;ReadOnly=True;DBQ=" & strArchivo & ";"

'Extraemos los datos
Set rs = New ADODB.Recordset
rs.Open strSQL, cn, adOpenForwardOnly, _
adLockReadOnly, adCmdText

'Copiamos los datos en la celda destino
Workbooks("Libro2.xls").Worksheets("Hoja1") _
.Range("C3").CopyFromRecordset rs

'Cerramos la conexion y vaciamos las variables
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
'Ejemplo2--
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida