Copiar ultima fila de una tabla a otro archivo

Hola!, esta buscando información sobre esto y pude encontrar que respondiste una pregunta similar a la que tengo. Vi el código que recomendaste y la verdad me ayudó, sin embargo para lo que necesito tiene un pequeño detalle :p y es que agarra toda la tabla y la pasa a el otro archivo. Mi código es este (Resalto en negrita la parte que vi en la respuesta que diste):
Sub Guardar()
  Application.ScreenUpdating = False
    Range("A1").Select
    ActiveCell.Offset(65535, 0).Select
    ActiveCell.End(xlUp).Select
    ActiveCell.Offset(0, 5).Select
    Range("A1", ActiveCell).Select

    Selection.Copy
    Application.Workbooks.Open ("C:\Documents and Settings\sserrano\Escritorio\SSerrano\excel\Libro1.xls")
    Sheets("Historial de mediciones").Select
    Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial
  Application.CutCopyMode = False
End Sub
Lo que necesito es que no seleccione desde A1 sino desde A(ultimafila escrita), ¿si me explico?, necesito copiar la última fila. De antemano mil gracias por la ayuda :)

1 respuesta

Respuesta
1
Para seleccionar la ultima celda con datos (siempre que no tengas celdas en blanco en el medio) es esta instrucción:
Range("A1"). Select  'No situamos en la primera celda de la Col A
ActiveCell.End(xlDown).Select  'Nos desplazamos hasta la ultima celda con datos de A
Range("A1", ActiveCell).Select   'Seleccionamos el rango desde A1 hasta la actual celda
Espero que sea lo que necesitas, si es así puntúa y finaliza la consulta, un comentario siempre es bienvenido. Gracias.
>Un saludo
>Julio
Hola, te cuento que lo probé y no hizo lo que esperaba :s... lo que hizo fue copiar la primera columna con 3 filas nada más (y tengo mucho más datos de los que pasó). Me gusta más el primer código, es decir, el que copié y puse en negrita, el único problema es que me trae toda la tabla y no la ultima fila :(.
¿No hay forma de utilizar ese código que esta en negrita y acomodarlo de tal forma que lea la última fila escrita?... ah! También tengo otra duda, ¿cómo puedo colocar un macro en una celda? Es que quiero que, por ejemplo, al escribir en la celda B2 automáticamente coloque un texto (el que sea) en la celda D2 (y me gustaría que sucediera con todas la celdas de B.. pero tampoco se como :( ). El código ya lo tengo, pero no se como hacer para que sea automático y en todas las celdas.
Creo que pido mucho :( disculpa la molestia y la preguntadera :p es que me toco hacer un proyecto con VBA y nunca antes lo había usado :S. Muchas gracias por tu tiempo!
Entendí mal tu consulta pensé que lo que querías era seleccionar todo el rango desde la primera celda de A1 hasta la ultima fila con datos, si lo que quieres es copiar la ultima fila completa con datos para llevarla a otro lugar sería esta macro:
Sub copiar()
Range("A1").Select
ActiveCell.End(xlDown).Select
Range(ActiveCell, ActiveCell.End(xlRight)).Select
Selection.Copy
Y ahora pones lo que quieres hacer con la fila por ejemplo pegarla en otro libro
Application.Workbooks.Open ("C:\Documents and Settings\sserrano\Escritorio\SSerrano\excel\Libro1.xls")
    Sheets("Historial de mediciones").Select
    Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial
Application.CutCopyMode = False
En relación a como ejecutar una macro en automático para la Col B debes de situarte en tu hoja donde quieres hacerlo, pulsas Alt+F11 en la ventana de VBA que aparece haces doble click en el icono de la hoja de la columna de la izquierda y en la ventana que aparece en blanco en la derecha pones este código modificándolo a tu necesidad:
If Target.Column = 2 Then
If Target.Value<>"" Then
Target.Offset(0, 2).Value = "Aquí pones tu texto"
End If
End If
End Sub
El problema es que el texto siempre será el mismo para toda la Col D
Si te ha servido comenta, puntúa y finaliza la consulta. Gracias.
>Un saludo
>Julio
Hola!, nada :( no me funcionó lo de la última fila, me salio "error 1004" en la linea de Range(ActiveCell, ActiveCell. End(xlRight)).Select así que no pude probarlo :(. Lo otro de las celdas si quedo genial, me sirvió muchísimo.
Tengo otra dudita, pero no se si la deba hacer por aquí, osea si preguntarla por aquí mismo o crear otro tema (como es primera vez que estoy en esto de los foros pues ni idea :p). Por si acaso la voy a hacer por aquí, cualquier cosa abro el otro foro y ya ^^. Tiene que ver con listas; yo creé una lista con unos objetivos que son los que van en la columna B, entonces yo me paro por ejemplo en la celda B7 y le doy click a un objetivo de mi lista (que esta sobre la celda B2) y en B7 aparece el obj al que le di click. Todo me funciona perfecto; sin embargo cuando hago otro cuadro de lista, usando el mismo procedimiento que usé para el de objetivo, el mismo código y todo.. no me funciona, osea que a mi nuevo cuadro de lista le doy click y en la celda donde estaba parada no aparece nada, a pesar de que estoy usando el mismo código. No entiendo por que :S
De verdad muchas gracias por tu ayuda.
Vamos a ver la instrucción.
Range(ActiveCell, ActiveCell.End(xlRight)).Select
Significa que estando en una celda la macro busque la ultima celda a la derecha con datos y seleccione todo el rango, te lo explico con valores, si estamos en A1 y el ultimo dato en la ultima fila esta en D1 esta instrucción selecciona todo el rango A1:D1. Pero claro para eso tiene que haber valores entre esas celdas no puede haber celdas en blanco sino te dará error:
                                 A                 B               C                 D
Fila1 8 3 2 5
En este ejemplo seleccionaría desde 8 hasta 5 pero si estas en A1 y pones la instrucción sin que haya datos, no encuentra un dato que seleccionar y da error:
                                 A B C D
Fila1 8
En lo referente a tu problema de listas probablemente estés intentando que ocurran cosas diferentes con el mismo código y claro está no funciona. Ponme aquí tus instrucciones de la lista a ver que error estas cometiendo.
>Un saludo
>Julio
:'( Nada, llene toda la tabla para evitar el error de los espacios en blanco y me sigue dando el error 1004. Te muestro el código que usé:
Sub Guardar()
  Application.ScreenUpdating = False
  Range("A1").Select
  ActiveCell.End(xlDown).Select
Range(ActiveCell, ActiveCell.End(xlRight)).Select
  Selection.Copy
  Application.Workbooks.Open ("C:\Documents and Settings\sserrano\Escritorio\SSerrano\excel\Libro1.xls")
Sheets("Historial de mediciones").Select
Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial
  Application.CutCopyMode = False
End Sub
¿Qué locura con este bendito código :s, pero sabes que paramisolo? Creo que me va a tocar modifcarlo otra vez porque me están pidiendo que guarde la información pero por la ultima fecha de ingreso, es decir, ya no es la ultima fila sino que puede ser las ultimas filas que estén con la fecha del día, así que debo modificarlo para que seleccione y guarde hasta que ya no encuentre más fechas del día de hoy (por ejemplo).
Bueno, el codigo de la lista es este:
Sub ListaObjetivos()
    Dim Lista As Object
    ' Crea el objeto lista, que sera el list box ubicado en la hoja1
    Set Lista = ActiveSheet.ListBoxes(1)
    ' Revisa qué está seleccionado en el list box y si no hay nada selecc. lo cierra
    If Lista.Value = 0 Then Exit Sub
    ' Cambia el valor de la celda donde me encuentro por el seleccionado en el list box
    ActiveCell.Value = Lista.List(Lista.Value)
    ' Coloca el list box sin seleccion
    Lista.Value = 0
End Sub
Yo lo use para el cuadro de lista que tiene los objetivos y me funciono perfecto, cuando genere otro cuadro de lista exactamente igual y que tiene la misma función, no hacia nada :s.
Que estés bien! :)
Ya veo donde esta el error 1004, estas situándote en otra hoja y entonces el código no sirve tal cual está quedaría así:
Range("A1").Select
ActiveCell.End(xlDown).Select
ActiveSheet.Range(ActiveCell, ActiveCell.End(xlRight)).Select
Selection. Copy
Hay que indicarle que el rango seleccionado es de la hoja activa si no da error.
Respecto a la lista con la modificación que te piden no entiendo bien la consulta. Explicame como creas las lista si utilizas un cuadro de Lista (ListBox) o un Cuadro Combinado(Combobox)
>Un saludo
>Julio
Nada, el mismo error :(, el error exactamente es en ActiveSheet.Range(ActiveCell, ActiveCell. End(xlRight)).Select, ahí me sale error definido por la aplicación o el objeto. Referente a lo de listas, bueno, primero creo mi cuadro de lista y en formato de control le cargo los datos que tengo en otra hoja. Luego, creo el código en VBA y al darle click derecho a la lista, en asignar macro le asigno el código que acabo de crear, en este caso es ListaObjetivos. Y bueno, después le doy a macro y ejecuto el código.
Hola paramisolo! Espero estés bien, ¿Recuerdas qué te comenté que iba a cambiar el código para seleccionar y guardar hasta la fila que ya no tuviera la fecha del día de hoy?. Bueno, estoy en eso y pues en mi humilde opinión creo que estoy cerca :p, sin embargo como nunca pueden faltar, tengo un error y es en la parte que esta en negrita (exactamente la que esta en negrita y en como torcida). Yo necesito que comience a leer a partir de la celda donde estoy parada. ¿Me podrías ayudar con eso por fa? Es decir, qué podía colocar en eso para leer a partir de la celda donde me encuentro. Muchas gracias!
dim rwIndex as long
Sub Guardar()
Application.ScreenUpdating = False
'recorre desde la fila 3 hasta la ultima
For rwIndex = 3 To 65533
  'si el valor de la celda F-rwindex es el de la fecha actual
    If Cells(rwIndex, 6).Value = Date Then
       
        Range(.Cells(rwIndex, 6)).Select

        ActiveCell.Offset(65533, 0).Select
        ActiveCell.End(xlUp).Select
        ActiveCell.Offset(0, 5).Select
        Range(.Cells(rwIndex, 6), ActiveCell).Select
    
        Selection.Copy
    'si el valor de la celda F-rwindex es vacio, dejo de leer
    ElseIf Cells(rwIndex, 6).Value = " " Then
        rwIndex = 65533
    End If
Next rwIndex
Application.Workbooks.Open ("C:\Documents and Settings\sserrano\Escritorio\SSerrano\excel\Libro1.xls")
Sheets("Historial de mediciones").Select
Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial
  Application.CutCopyMode = False
  'cierra el libro
  Application.Quit
End Sub
Hola, ya solucioné el problema, solo dejé la celda (sin el Range) y dejó de dar error. Ya me copia los últimos datos que tengan la fecha del día. Muchísimas gracias por tu ayuda :) cuidate!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas