Saltar al contenido

Macro Registrar datos en otro libro


jhosmar84

Recommended Posts

publicado

Hola amigos.

Quisiera saber como hacer una macro para registar datos de un libro a otro, tengo el libro1 y libro2, al registar datos en el libro1 que la macro me registre en el libro2, así por cada registro me lo registre de bajo del ultimo registro, gracias, adjunto los libros.

Libro2.xls

Libro1.xls

publicado

Hola jhosmar84 , prueba con este codigo funciona perfecto ,

Sub GuardarRegistro()

Dim Id As String

Dim Nombre As String

Dim Apellido As String

Dim Ciudad As String

Dim xlFila As String

Id = Range("Id")

Nombre = Range("Nombre")

Apellido = Range("Apellido")

Ciudad = Range("Ciudad")

xlFila = Workbooks("Libro2.xlsm").Worksheets("Hoja1").Range("A1").Offset(1, 0)

If xlFila = "" Then

Workbooks("Libro2.xlsm").Worksheets("Hoja1").Range("A2") = Id

Workbooks("Libro2.xlsm").Worksheets("Hoja1").Range("B2") = Nombre

Workbooks("Libro2.xlsm").Worksheets("Hoja1").Range("C2") = Apellido

Workbooks("Libro2.xlsm").Worksheets("Hoja1").Range("D2") = Ciudad

Else

Workbooks("Libro2.xlsm").Worksheets("Hoja1").Range("A1").End(xlDown).Offset(1, 0) = Id

Workbooks("Libro2.xlsm").Worksheets("Hoja1").Range("B1").End(xlDown).Offset(1, 0) = Nombre

Workbooks("Libro2.xlsm").Worksheets("Hoja1").Range("C1").End(xlDown).Offset(1, 0) = Apellido

Workbooks("Libro2.xlsm").Worksheets("Hoja1").Range("D1").End(xlDown).Offset(1, 0) = Ciudad

End If

Range("Id") = Empty

Range("Nombre") = Empty

Range("Apellido") = Empty

Range("Ciudad") = Empty

End Sub

Me cuentas si te funciona ...

publicado

Buenas tardes

Otra opcion podria ser esta:

Dim Svd As String 'Declarar variable como string

Svd = Workbooks("Libro2.xlsm").Worksheets("Hoja1").Range("A" & Rows.Count).End(xlUp).Row + 1

'Guarda los datos del libro 1 al 2 de la hoja 1 a las 2

Workbooks("Libro2.xlsm").Worksheets("Hoja1").Cells(Svd, 1) = _

Workbooks("Libro1.xlsm").Worksheets("Hoja1").Range("C2")

Workbooks("Libro2.xlsm").Worksheets("Hoja1").Cells(Svd, 2) = _

Workbooks("Libro1.xlsm").Worksheets("Hoja1").Range("C4")

Workbooks("Libro2.xlsm").Worksheets("Hoja1").Cells(Svd, 3) = _

Workbooks("Libro1.xlsm").Worksheets("Hoja1").Range("C6")

Workbooks("Libro2.xlsm").Worksheets("Hoja1").Cells(Svd, 4) = _

Workbooks("Libro1.xlsm").Worksheets("Hoja1").Range("C8")

Workbooks("Libro2.xlsm").Worksheets("Hoja1").Cells(Svd, 5) = _

Workbooks("Libro1.xlsm").Worksheets("Hoja1").Range("C10")

MsgBox "Datos cargados con exito"

publicado

Perfecto sin embargo sugiero condiciones la celda c2 del libro1 , porque de lo contrario no identifica la ultima fila y sobreescribe el dato que migraste al libro2 de igual forma condicionar el nombre del libro las diferencia en versiones de extensiones pueden generar error .... excelente .

publicado

Gracias, Giova123 y Enigma25, pero en ninguno de los dos casos me ejecuta el codigo, me envia a depuar las lineas de códigos

xlFila = Workbooks("Libro2.xlsm").Worksheets("Hoja1").Range("A1").Offset(1, 0)

Svd = Workbooks("Libro2.xlsm").Worksheets("Hoja1").Range("A" & Rows.Count).End(xlUp).Row + 1

a q se debe eso?

la verdad, que se poco sobre macros, recien estoy intentando conocer más sobre macros, muchas gracias por sus aportes

publicado

Buen dia

Tal como lo muestra en los archivos adjuntados por usted, los dos libros son de excel 2003 (Libro de excel 97-2003) por tanto la extension es .xls.

En dicho caso, sugiero que guarde sus archivos como libro de excel habilitado para macro (En Guardar como) para que la extension cambie a .xlsm. Asi podra operar el codigo suministrado tanto del señor Giova123 o su servidor.

Es lo que presumo que pueda ser. En tal caso intentelo tal como lo menciono y de sus impresiones.

Saludos cordiales.

publicado

Hola Emigma25, sigué sin correrme la macro, te adjutno los libros con los cambios y sigue saliendo el error.

he intentado cambiando el código a por la extencion .xls y no funciona.

publicado

Buen dia

Es al contrario, Lo debes cambiar a .xlsm.

Recuerda que la linea tiene esta creada asi:

Svd = Workbooks("Libro2.xlsm").Worksheets("Hoja1").Range("A" & Rows.Count).End(xlUp).Row + 1

Otra situacion seria que... se deba por modificar los nombres de las hojas. Este tambien puede ser una causa del error.

Las hojas numero 1 del libro 1 y libro 2 deben conservar sus nombres ("Hoja1"). Si las cambias el codigo no funciona.

Saludos.

publicado

Buenas noches

Bueno amigo permitame y para mañana adjuntare los dos archivos en el apartado de aportes e ideas para que lo busque y pueda ver los archivos.

Esperemos que con ello, usted pueda ver la posible solucion.

Otra cosa,....: Que tipo de excel usa, 2003 0 2007?

publicado

Buen día

Que bueno que respondiera ya que con ello, se tendrá una idea del cómo solucionar su problema.

Pues bien, considerando que su Excel es 2003, tendríamos que cambiar la extensión de los código de .xlsm por .xls ya que

  • .xls es para Excel 2003
  • .xlsm es para Excel 2007

Por tanto se deben modificar las líneas que le fueron suministradas anteriormente por el señor Giova123 y su servidor.

Codigo anterior para excel 2007:
Dim Svd As String 'Declarar variable como string
'vicular la variable a un parametro
Svd = Workbooks("Libro2.xlsm").Worksheets("Hoja1").Range("A" & Rows.Count).End(xlUp).Row + 1
'Ejecucion de la macro
'Guarda los datos del libro 1 al 2 de la hoja 1 a las 2
Workbooks("Libro2.xlsm").Worksheets("Hoja1").Cells(Svd, 1) = _
Workbooks("Libro1.xlsm").Worksheets("Hoja1").Range("C2")
Workbooks("Libro2.xlsm").Worksheets("Hoja1").Cells(Svd, 2) = _
Workbooks("Libro1.xlsm").Worksheets("Hoja1").Range("C4")
Workbooks("Libro2.xlsm").Worksheets("Hoja1").Cells(Svd, 3) = _
Workbooks("Libro1.xlsm").Worksheets("Hoja1").Range("C6")
Workbooks("Libro2.xlsm").Worksheets("Hoja1").Cells(Svd, 4) = _
Workbooks("Libro1.xlsm").Worksheets("Hoja1").Range("C8")
Workbooks("Libro2.xlsm").Worksheets("Hoja1").Cells(Svd, 5) = _
Workbooks("Libro1.xlsm").Worksheets("Hoja1").Range("C10")

MsgBox "Datos cargados con exito", vbInformation, "Datos Cargados"


[/PHP]

Nuevo codigo para excel 2003:

[PHP]Dim Svd As String 'Declarar variable como string
'vicular la variable a un parametro
Svd = Workbooks("Libro2.xls").Worksheets("Hoja1").Range("A" & Rows.Count).End(xlUp).Row + 1
'Ejecucion de la macro
'Guarda los datos del libro 1 al 2 de la hoja 1 a las 2
Workbooks("Libro2.xls").Worksheets("Hoja1").Cells(Svd, 1) = _
Workbooks("Libro1.xls").Worksheets("Hoja1").Range("C2")
Workbooks("Libro2.xls").Worksheets("Hoja1").Cells(Svd, 2) = _
Workbooks("Libro1.xls").Worksheets("Hoja1").Range("C4")
Workbooks("Libro2.xls").Worksheets("Hoja1").Cells(Svd, 3) = _
Workbooks("Libro1.xls").Worksheets("Hoja1").Range("C6")
Workbooks("Libro2.xls").Worksheets("Hoja1").Cells(Svd, 4) = _
Workbooks("Libro1.xls").Worksheets("Hoja1").Range("C8")
Workbooks("Libro2.xls").Worksheets("Hoja1").Cells(Svd, 5) = _
Workbooks("Libro1.xls").Worksheets("Hoja1").Range("C10")

MsgBox "Datos cargados con exito", vbInformation, "Datos Cargados[/PHP]

"

Como notará el segundo es el que debe usar por tener la extension .xls

PD: No olvide que para que el codigo funcione, tiene que tener los dos archivos abiertos. De lo contrario arrojara un error.

[color=blue]- - - - - Mensaje combinado - - - - -[/color]

Hola jhosmar84

Aqui te dejo el enlace para que consultes. Esta en ideas y aportes

https://www.ayudaexcel.com/foro/ideas-aportes-64/para-jhosmar04-26341/#post128637

publicado

Excelente Amigo, ahora si funciona, una consulta más antes de cerrar el tema...alguna forma para que se guarde sin abrir el libro2.xls o un código para abrir y luego cerrar automaticamente, gracias

publicado

Hola Joshmar84

Claro, por supuesto que se puede hacer. Para ello tendrias que mantener siempre el libro2.xls en el excritorio de tu computadora para que el codigo; abra el libro dos, guardandolo y cerrandolo a su vez el mismo libro2.

El codigo:

1. Abre el libro 2

2. Registra la informacion al libro2

3. Guarde los cambios del libro2

4. por ultimo cierre el libro2

Todo esto; desde tu libro1

Allgo asi:

Dim Svd As String 'Declarar variable como string
Application.ScreenUpdating = False 'Deshabilitas los saltos de pantalla
Workbooks.Open ThisWorkbook.Path & "\Libro2.xls" 'Abre el libro dos
'vicular la variable a un parametro
Svd = Workbooks("Libro2.xls").Worksheets("Hoja1").Range("A" & Rows.Count).End(xlUp).Row + 1
'Ejecucion de la macro
'Guarda los datos del libro 1 al 2 de la hoja 1 a las 2
Workbooks("Libro2.xls").Worksheets("Hoja1").Cells(Svd, 1) = _
Workbooks("Libro1.xls").Worksheets("Hoja1").Range("C2")
Workbooks("Libro2.xls").Worksheets("Hoja1").Cells(Svd, 2) = _
Workbooks("Libro1.xls").Worksheets("Hoja1").Range("C4")
Workbooks("Libro2.xls").Worksheets("Hoja1").Cells(Svd, 3) = _
Workbooks("Libro1.xls").Worksheets("Hoja1").Range("C6")
Workbooks("Libro2.xls").Worksheets("Hoja1").Cells(Svd, 4) = _
Workbooks("Libro1.xls").Worksheets("Hoja1").Range("C8")
Workbooks("Libro2.xls").Worksheets("Hoja1").Cells(Svd, 5) = _
Workbooks("Libro1.xls").Worksheets("Hoja1").Range("C10")

Workbooks("Libro2.xls").Save 'Guarda la informacion del libro dos
Workbooks("Libro2.xls").Close 'Cierra el libro dos
Application.ScreenUpdating = True

MsgBox "Datos cargados con exito", vbInformation, "Datos Cargados"
[/PHP]

  • 2 weeks later...
publicado

Una consulta antes que cierren el tema, esta solucion podria servir para mi consulta? Es muy parecida a la jhosmar84

https://www.ayudaexcel.com/foro/macros-programacion-vba-10/pasar-datos-libro-otro-26551/

Ojala puedan ayudarme antes de cerrar.

Saludos a todos

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.