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

#6 ssandramiriam
05/06/2007 - 15:44 | Informe spam
On 3 jun, 16:04, "KL" wrote:
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--



Muchas gracias KL, funciona a las mil maravillas!
Un saludo
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida