Macro para copiar datos de una hoja de excel a otro libro

Quería saber como se puede hacer para que los datos q meto en una factura de excel me los copie en otro libro para que asi cuando limpie la factura no pierda los datos.

Por ejemplo necesito q los datos de la "hoja1" de las celdas a1, d5, b9 me los copie a la "hoja1" de un libro nuevo a las celdas a1, a2, a3 respectivamente.

Después los datos nuevos de la "hoja1" de las celdas a1, d5, b9 me los copie al libro nuevo en las celdasb1, b2, b3 para que no borre los que ya tenia anteriormente.

2 respuestas

Respuesta
1

Regularmente las bases de datos son verticales, no horizontales, te paso una rutina que almacena la información de la hoja 1 en la hoja2.

Sub copia_pega()
Sheets("Hoja1").Select
a = Range("A1").Value
b = Range("D5").Value
c = Range("B9").Value
Sheets("Hoja2").Select
Range("A" & k).Value = a
Range("B" & k).Value = b
Range("C" & k).Value = c
End Sub

Si quieres que además luego de pasar esos valores las celdas queden en blanco, debes incluir esta parte en la rutina:

Range("A1, B9, D5"). ClearContents

La rutina es exactamente lo q necesitaba pero no quiero que lo de la "hoja1" me la guarde en la "hoja2" del mismo libro sino que lo de la "hoja1" del "libro1" me lo guarde en la "hoja1" del "libro2".

Tengo asi la macro y no funciona lo de limpiar las celdas:

Sub Botón2_Haga_clic_en()
Sheets("Hoja1").Select
a = Range("A1").Value
b = Range("D5").Value
c = Range("B9").Value
Sheets("Hoja2").Select
k = Range("A" & Cells.Rows.Count).End(xlUp).Row + 1
Range("A" & k).Value = a
Range("B" & k).Value = b
Range("C" & k).Value = c
Range("A1,B9,D5").ClearContents
End Sub

soy un novato en esto de las macros asi q perdona mi incompetencia xD.

Ok, el problema es el orden de las cosas, te paso la rutina corregida

Sub Botón2_Haga_clic_en()

Windows("Libro1").Activate
Sheets("Hoja1").Select
a = Range("A1").Value
b = Range("D5").Value
c = Range("B9").Value
Range("A1,B9,D5").ClearContents

Windows("Libro2").Activate

Sheets("Hoja2").Select
k = Range("A" & Cells.Rows.Count).End(xlUp).Row + 1
Range("A" & k).Value = a
Range("B" & k).Value = b
Range("C" & k).Value = c

Windows("Libro1").Activate
End Sub

Me da error en la primera linea con esa macro. creo q es xq no le indico que archivo es el q tiene q abrir. por ejemplo si el archivo está en c:windows/escritorio/facturas/libro2 como se lo indico en la macro para saber a q archivo lo tiene q copiar.

En mi rutina estoy dando por hecho que los dos libros tanto el que tiene los valores como el libro a donde se deben pegar los valores esta abierto, si el libro destino, donde se van a pegar los valores no esta abierto debes cambiar la rutina.

Sub Botón2_Haga_clic_en()
Windows("Libro1").Activate
Sheets("Hoja1").Select
a = Range("A1").Value
b = Range("D5").Value
c = Range("B9").Value
Range("A1,B9,D5").ClearContents

Workbooks.Open Filename:="C:\windows\escritorio\factura\libro2.xlsm", Origin:= _
xlWindows
Sheets("Hoja1").Select
k = Range("A" & Cells.Rows.Count).End(xlUp).Row + 1
Range("A" & k).Value = a
Range("B" & k).Value = b
Range("C" & k).Value = c
Windows("Libro1").Activate
End Sub

La dirección puede que no sea tal como la estoy poniendo yo, te recomiendo grabar una macro, y abrir el archivo "Libro2" para que verifiques la dirección que estoy colocando en la macro.

Para grabar una macro vas a la ficha de programador y hay un botón Grabar Macro, das click en el botón y luego aceptar.

Luego abres el archivo libro 2, y detienes la grabación.

Luego vas al vb y verificas la dirección para abrir el archivo.

Sub Botón2_Haga_clic_en()
Windows("prueba1.xlsm").Activate
Sheets("Hoja1").Select
a = Range("A1").Value
b = Range("D5").Value
c = Range("B9").Value
Range("A1,B9,D5").ClearContents
Windows("prueba2.xlsm").Activate
Sheets("Hoja2").Select
k = Range("A" & Cells.Rows.Count).End(xlUp).Row + 1
Range("A" & k).Value = a
Range("B" & k).Value = b
Range("C" & k).Value = c
Windows("prueba1.xlsm").Activate
End Sub

Antes no me funcionaba xq no le puse en el nombre .xlsm xD

la nueva q me mandaste tb me funciona pero el problema es q me queda el libro2 abierto y si quiero meter mas datos me dice q ya esta abierto y q voy a perder los otros si no cierro antes.

Como se puede cerrar el libro2 y q guarde los cambios sino da = q la primera tb me funciona solo me tengo q acordar de abrir el archivo y listo xD.

Sub Botón2_Haga_clic_en()
Windows("prueba1.xlsm").Activate
Sheets("Hoja1").Select
a = Range("A1").Value
b = Range("D5").Value
c = Range("B9").Value
Range("A1,B9,D5").ClearContents
Workbooks.Open Filename:="C:\Users\Sucre\Desktop\Facturas\libro2.xlsm", Origin:= _
xlWindows
Sheets("Hoja1").Select
k = Range("A" & Cells.Rows.Count).End(xlUp).Row + 1
Range("A" & k).Value = a
Range("B" & k).Value = b
Range("C" & k).Value = c
Windows("prueba1.xlsm").Activate
End Sub

Muchas gracias x la ayuda me sirvió de 10.

tengo otra pregunta la hago aquí o cierro esta y hago otra?

Si esta queda resuelta cierra la pregunta y has una nueva para que yo o cualquier otro te la pueda responder.

Te paso la rutina incluyendo el cerrar el archivo.

Sub Botón2_Haga_clic_en()
Windows("prueba1.xlsm").Activate
Sheets("Hoja1").Select
a = Range("A1").Value
b = Range("D5").Value
c = Range("B9").Value
Range("A1,B9,D5").ClearContents
Workbooks.Open Filename:="C:\Users\Sucre\Desktop\Facturas\libro2.xlsm", Origin:= _
xlWindows
Sheets("Hoja1").Select
k = Range("A" & Cells.Rows.Count).End(xlUp).Row + 1
Range("A" & k).Value = a
Range("B" & k).Value = b
Range("C" & k).Value = c

ActiveWorkbook. Save
ActiveWindow. Close
Windows("prueba1.xlsm").Activate
End Sub

Respuesta

Que tal disculpa soy principiante en esto... quiero hacer el mismo ejemplo conmi hoja pasarla a otro libro de excel pero no entendí muy bien cual seria el código a aplicar ymodificar en mi archivo quedo atento gracias! Hola que tal disculpa soy principiante en esto... quiero hacer el mismo ejemplo conmi hoja pasaralr a otro libro de excel pero no entendí muy bien cual seria el código a aplicar ymodificar en mi archivo quedo atento

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas