hola a todos haber si me pueden ayudar necesito en esta macro que cada vez que precione la tecla pegar est se copie en la hoja base una tras otras es decir la fila que este basia siguiente a la escritura anterior si me pueden ayudar se los agradesco ya que e intentado pero no logro realizar esta accion
las referecia es al presionar copiar pegue en la hoja base en la celda A:1 y al realizar la misma accion sigua en la celda A:2 y asi sucesuvamente
Adjunto | Tamaño |
---|---|
Libro1.xls | 16 KB |
Si en tu Base siempre vas a tener datos en la columna A, puedes utilizar esto para localizar la última fila con datos, como cuando pulsas [ fin ] y [flecha abajo]
esto es una propiedad llamada End del rango. por ejemplo:
Range("A1").End(xlDown) ' se refiere a la última celda con datos bajo la A1.
Para referirte a la celda de debajo, es decir, la primera vacía será algo así (Tiene el inconveniente de que la primera vez, cuando no haya datos, se irá a la última fila de la hoja, así que habrá que comprobarlo antes):
Worksheets(HojaBase).Range("a1").End(xlDown).Offset(1, 0)
y por ejemplo, para asignar valores a partir de esa celda, puedes emplear Offset una vez más
With Worksheets("base").Range("a1").End(xlDown).Offset(1, 0)
.Value = "la primera libre"
.Offset(0, 1).Value = "una a la derecha"
End With
Bueno, ya puedes copiar y pegar los datos de tu hoja inicial a la otra, o puedes anotarlos celda a celda.
tal y como tienes tu hoja, prueba con esto (faltaría controlar el error para la primera fila), te lo pongo en el archivo adjunto:
Option Explicit
Const HojaMatriz = "matriz"
Const RangoDatos = "A2:J2"
Const HojaBase = "base"
Const RangoPrimeraCelda = "A1"
Sub Copiar()
Worksheets(HojaMatriz).Range(RangoDatos).Copy
With Worksheets(HojaBase)
.Paste .Range(RangoPrimeraCelda).End(xlDown).Offset(1, 0)
End With
End Sub
También podrías emplear el rango UsedRange de la hoja (como cuando pulsas [ Ctrl ] [ fin ]) que lleva al último rango utilizado en la hoja (esto tiene algunos inconvenientes, porque si eliminas información, la última celda se queda donde estaba)
Worksheets("base").UserRange.Rows.Count ' esto da las filas utilizadas en la hoja
------
Ya sé Excel, pero necesito más
------
Ya sé Excel, pero necesito más.
muy util, gracias por el aporte..
como se puede modificar si se necesita que al pegar en HojaBase lo haga pegando solo valores? en el rango de la HojaMatriz tengo celdas con buscarV.. gracias!
Pues en vez de pegar, hay que hacer un pegado especial, es decir,
en vez de Paste, será PasteSpecial
.PasteSpecial xlPasteValues
------
Ya sé Excel, pero necesito más ahora en pdf
------
Ya sé Excel, pero necesito más.
He intentado incluir el pegado especial con la opción trasponer pero no me sale que estoy haciendo mal??
With Worksheets(HojaBase)
.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
A mano hay que hacerlo en dos pasos: primero el pegado especial y luego la transposición. Prueba a hacerlo en dos pasos diferentes en la macro.