Imprimir página | Cerrar ventana

Agregar fila y pegar clipboard en Tabla Excel

Impreso de: Foro de Access y VBA
Categoría: Otros de Microsoft: Windows y Office
Nombre del foro: Excel
Descripción del foro: Foro de Excel y VBA de Excel
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=85720
Fecha de impresión: 19/Abril/2024 a las 07:10


Tema: Agregar fila y pegar clipboard en Tabla Excel
Publicado por: Delarc
Asunto: Agregar fila y pegar clipboard en Tabla Excel
Fecha de publicación: 04/Enero/2021 a las 17:34
Quisiera aprovechar las ventajas de las Tablas Excel.
Pero no logro solucionar esta tarea:

Copio al clipboard cierto contenido de mi hoja activa:

Range("F3:F19").Select
Selection.Copy

Ahora pretendo pegar esos datos en una nueva fila de una Tabla que está en otra Hoja.
Para acceder a la tabla y agregarle una nueva fila, uso:

Range("NombreTabla").ListObject.ListRows.Add

Hasta aquí funciona bien.
Ahora el problema es como Pegar el contenido del clipboard en esa fila creada.
La idea es usar algo como:

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

Pero encontré que para usar PasteEspecial debo resignar las ventajas de la Tabla y tratarla como a un "rango común", usando un código así:

Sheets("NombreHojaTablaDestino").Select
Range("B3").Select 'sería la celda superior izquierda de la Tabla
Selection.End(xlDown).Select 
If ActiveCell.Value <> "" Then ActiveCell.Offset(1, 0).Select 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=True

¿Alguna pista?


-------------
Saludos desde La Plata, Argentina



Respuestas:
Publicado por: SkaryBlondi
Fecha de publicación: 04/Enero/2021 a las 18:12
Buenas tardes

Puedes probar con

Sheets("HojaDestino").Range("RangoDestino") = Sheets("HojaOrigen").Range("RangoOrigen").Value

Saludos,


Publicado por: Delarc
Fecha de publicación: 04/Enero/2021 a las 20:35
Hola, 

Gracias por tu sugerencia, pero con ese método debo indicar la HOJA y el RANGO donde pegar los datos. Lo que intento hacer es aprovechar las "ventajas" de la Tabla Excel, que entre otras cosas, permite mover la tabla de lugar, agregarle filas y/o columnas, sin tener que corregir el código.

Saludos

-------------
Saludos desde La Plata, Argentina


Publicado por: AnSanVal
Fecha de publicación: 05/Enero/2021 a las 02:51
¿Quieres aprovechar las «ventajas» de la tabla y pierdes recursos seleccionando rangos?

Desde la hoja de la tabla (da igual en que rango esté la tabla):

Sub TransponerEnTabla()
  Worksheets("Hoja1").Range("F3:F19").Copy
  Cells(Rows.Count, [Tabla1].Column).End(xlUp).Offset(1). _
      PasteSpecial Paste:=xlPasteValues, Transpose:=True
End Sub




-------------
Saludos desde Tenerife.


Publicado por: SkaryBlondi
Fecha de publicación: 05/Enero/2021 a las 13:56
Por dar un apunte transversal

Yo personalmente huyo de las tablas en Excel ya que para eso está access y además si hay muchos registros penaliza mucho el rendimiento.

Si hay captura manual de datos existe la opción de validación de datos para evitar duplicados y si es una importación normalmente lo cargo en una hoja temporal para eliminar duplicados, ordenar y copiar a la hoja de destino.

Como indicaba AnSanVal en Excel se puede saber fácilmente la última fila y/o columna de la hoja seleccionada y a partir de ahí definir rangos y tomar decisiones.

Feliz año nuevo y que le den al 2020

Saludos,



Publicado por: Delarc
Fecha de publicación: 05/Enero/2021 a las 14:52
Hola AnSanVal!

Sí, mas o menos eso es lo que estoy haciendo ahora y funciona perfecto.

Lo que pretendo es aprender como el IntelliSense (o como se llame) del Excel, que con un simple .Add le agrega una nueva Row a la Tabla sin importar donde ésta se ubique en el Libro, podría después pegarle datos. Me extraña que para esto último, todas las soluciones requieren especificar la hoja donde se halla la Tabla. De la única manera que lo puedo hacer es recorriendo la fila celda por celda y no en un "paquete" como lo hace el PasteEspecial. Quizás no lo han hecho para cuidar que si le agregas columnas a tu Tabla los datos se acomoden correctamente.

A propósito, en tu código el Offset(1) hace que si la tabla está sin datos (es decir, sólo es el encabezado y una primera fila vacía) los datos se peguen en la primera fila abajo de la tabla... y no son parte de la Tabla. 


-------------
Saludos desde La Plata, Argentina


Publicado por: Delarc
Fecha de publicación: 05/Enero/2021 a las 14:54
Sí, yo adoro las tablas... 
"En el Libro de la Vida la página de los gustos permanece el blanco"... jeje
Buen año !

-------------
Saludos desde La Plata, Argentina


Publicado por: AnSanVal
Fecha de publicación: 05/Enero/2021 a las 23:01
Delarc.- «... en tu código el Offset(1) hace que si la tabla está sin datos (es decir, sólo es el encabezado y una primera fila vacía) los datos se peguen en la primera fila abajo de la tabla... y no son parte de la Tabla...»

- ¡Efectivamente!, está pensado para que la tabla esté iniciada y simplificar el proceso, no siendo necesario añadir previamente una fila a la tabla. Si (por la razón que sea) prefieres añadir la fila con ...ListRows.Add, eliminas Offset(1) y «muerto el perro se acabó la rabia». Wink


SkaryBlondi.- «... Yo personalmente huyo de las tablas en Excel ya que para eso está Access y además si hay muchos registros penaliza mucho el rendimiento...»

- Para gustos colores, para mi las tablas Excel son muy valiosas y versátiles.
- También Access si tiene «muchos registros»  da problemas, aunque indudablemente, «muchos» (concepto relativo) tiene diferente valor para Access que para Excel. 




-------------
Saludos desde Tenerife.


Publicado por: Delarc
Fecha de publicación: 07/Enero/2021 a las 23:56
Hola amigos, encontré esta solución:

Copio al clipboard datos de la HojaActiva

Range("f3:f19").Copy

Luego Pego esos datos en la TablaPrueba que NO ESTÁ en la HojaActiva, con estas líneas:

With Range("TablaPrueba") 
        .Cells(.Rows.Count, 1).PasteSpecial xlPasteValues, Transpose:=True
        .ListObject.ListRows.Add
End With

Parece funcionar, pero me gustaría que lo evalúen personas con mas experiencia...


-------------
Saludos desde La Plata, Argentina


Publicado por: AnSanVal
Fecha de publicación: 08/Enero/2021 a las 00:43
Si funciona... y te gusta, no hay más que hablar.




-------------
Saludos desde Tenerife.



Imprimir página | Cerrar ventana