Copiar rango en última fila de otra hoja

28/01/2008 - 15:48 por GRIEGO59 | Informe spam
Hola!
Estoy intentando copiar un rango de una hoja en la última fila de otra hoja.
Es decir, intento copiar el rango A2:C20 de la hoja Datos a otra hoja
llamada Relación, una fila por debajo de la última fila con datos, es decir,
en la primera fila disponible.
Estoy usando este código:


Sub Guardar_Click()
Dim ultF As Long
Range("A2:C20").Select
Selection.Copy
With Worksheets("Relación")
ultF = .[a65536].End(xlUp).Row + 1
.Cells(ultF, 1).Paste
End With
End Sub

Pero no funciona, me dice:
“El objeto no admite esta propiedad o método”

Que estoy haciendo mal?
Saludos,
Darío

Preguntas similare

Leer las respuestas

#1 Boris
28/01/2008 - 17:37 | Informe spam
On 28 ene, 09:48, GRIEGO59 wrote:
Hola!
Estoy intentando copiar un rango de una hoja en la última fila de otra hoja.
Es decir, intento copiar el rango A2:C20 de la hoja Datos a otra hoja
llamada Relación, una fila por debajo de la última fila con datos, es decir,
en la primera fila disponible.
Estoy usando este código:

Sub Guardar_Click()
Dim ultF As Long
Range("A2:C20").Select
Selection.Copy
With Worksheets("Relación")
ultF = .[a65536].End(xlUp).Row + 1
.Cells(ultF, 1).Paste
End With
End Sub

Pero no funciona, me dice:
"El objeto no admite esta propiedad o método"

Que estoy haciendo mal?
Saludos,
Darío



Dario, buenos días.

Mientras te solucionan el error que te genera el código, puedes probar
con este, que te realiza lo que deseas.

Sub Guardar_Click()
Dim ultF As Long
Dim r As Range

Set r = Range("A2:C20")

Worksheets("Relación").Activate
Range("a1").Activate
While ActiveCell.Offset(0, 0).Value <> ""
ActiveCell.Offset(1, 0).Activate
Wend
ultF = ActiveCell.Row

Range(Cells(ultF, 1), Cells(22, 3)).Value = r.Value

End Sub

Saludos

Boris
Respuesta Responder a este mensaje
#2 GRIEGO59
28/01/2008 - 18:20 | Informe spam
"Boris" escribió:

Dario, buenos días.
Mientras te solucionan el error que te genera el código, puedes probar
con este, que te realiza lo que deseas.
Sub Guardar_Click()
Dim ultF As Long
Dim r As Range
Set r = Range("A2:C20")
Worksheets("Relación").Activate
Range("a1").Activate
While ActiveCell.Offset(0, 0).Value <> ""
ActiveCell.Offset(1, 0).Activate
Wend
ultF = ActiveCell.Row
Range(Cells(ultF, 1), Cells(22, 3)).Value = r.Value
End Sub



Muchas gracias Boris,
Déjame ver como me funciona!
Mientras puedo hacerlo de la otra forma.
Algo me dice que la otra forma es más segura de evitar sobre-escribir cuando
ocurran saltos de líneas por error. Debido a que la otra forma funciona de
abajo hacia arriba, mientras que esta forma funciona de arriba hacia abajo y
si hay alguna celda en blanco por algún error, pues podría sobre-escribirse
en las celdas siguientes.
Mas ahora te cuento como me fue con tu código.

Saludos
Darío.
Respuesta Responder a este mensaje
#3 Boris
28/01/2008 - 19:51 | Informe spam
On 28 ene, 12:20, GRIEGO59 wrote:
"Boris" escribió:

> Dario, buenos días.
> Mientras te solucionan el error que te genera el código, puedes probar
> con este, que te realiza lo que deseas.
> Sub Guardar_Click()
>   Dim ultF As Long
>   Dim r As Range
>   Set r = Range("A2:C20")
>   Worksheets("Relación").Activate
>   Range("a1").Activate
>   While ActiveCell.Offset(0, 0).Value <> ""
>     ActiveCell.Offset(1, 0).Activate
>   Wend
>   ultF = ActiveCell.Row
>   Range(Cells(ultF, 1), Cells(22, 3)).Value = r.Value
> End Sub

Muchas gracias Boris,
Déjame ver como me funciona!
Mientras puedo hacerlo de la otra forma.
Algo me dice que la otra forma es más segura de evitar sobre-escribir cuando
ocurran saltos de líneas por error. Debido a que la otra forma funciona de
abajo hacia arriba, mientras que esta forma funciona de arriba hacia abajo y
si hay alguna celda en blanco por algún error, pues podría sobre-escribirse
en las celdas siguientes.
Mas ahora te cuento como me fue con tu código.

Saludos
Darío.



Hola Dario.
Pues para evitar eso tendrías que validar el rango que tiene
información en la hoja Relación. Sería algo así:
En el while:
While ActiveCell.Offset(0, 0).Value <> "" or ActiveCell.Offset(1,
0).Value <>"" or ActiveCell.Offset(2, 0).Value <> ""
(Asumiendo que los datos van en el rango (A:C), y si el rango a copiar
es fijo)
La línea Range(Cells(ultF, 1), Cells(22, 3)).Value = r.Value
cámbiala por Range(Cells(ultF, 1), Cells(ultF + 19, 3)).Value r.Value

Si algo comentas.

Saludos

Boris
Respuesta Responder a este mensaje
#4 GRIEGO59
04/02/2008 - 12:15 | Informe spam
Gracias a ambos me han sido muy útiles sus respuestas.
No tienen idea del trabajo que me están aliviando.

Saludos,
Darío
Respuesta Responder a este mensaje
#5 GRIEGO59
07/02/2008 - 13:10 | Informe spam
Hola AnSanVal

He estado usando tu código y me preguntaba como copiar solamente los valores.

Intenté cambiando "Copy" por:

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Pero no funciona.
Por los momentos para que tu sugerencia me funcione pegando solo valores lo
estoy usando así:

Private Sub Guardar_Click()
Sheets("factura").Select
'Para copiar y pegar solo valores en la misma hoja
Range("M7:AC22").Select
Selection.Copy
Range("AJ7").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
'Para copiar los valores de la hoja factura en la hoja compras
With Worksheets("Compras")
Dim ultF As Long
ultF = Sheets("Compras").Cells(65536, 1).End(xlUp).Offset(1).Row
Range("AJ7:AZ22").Copy Destination:=Worksheets("Compras").Cells(ultF, 1)
End Sub

Saludos
Darío


"AnSanVal" escribió:

El método de Pegar, pega en la celda activa de la hoja activa, salvo que (con otra sintaxis) le indiques destino.

(Entre otras), prueba con:
Sub Guardar_Click()
Dim ultF As Long
ultF = Sheets("Relación").Cells(65536, 1).End(xlUp).Offset(1).Row
Range("A2:C20").Copy Destination:=Worksheets("Relación").Cells(ultF, 1)
End Sub
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida