|
Responder ![]() |
Autor | |
Delarc ![]() Asiduo ![]() ![]() Unido: 03/Marzo/2007 Localización: Argentina Estado: Sin conexión Puntos: 258 |
![]() Enviado: 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?
Editado por AnSanVal - 08/Enero/2021 a las 00:44 |
|
Saludos desde La Plata, Argentina
|
|
![]() |
|
SkaryBlondi ![]() Nuevo ![]() Unido: 24/Octubre/2020 Localización: Asturias Estado: Sin conexión Puntos: 18 |
![]() |
Buenas tardes Puedes probar con Sheets("HojaDestino").Range("RangoDestino") = Sheets("HojaOrigen").Range("RangoOrigen").Value Saludos,
|
|
![]() |
|
Delarc ![]() Asiduo ![]() ![]() Unido: 03/Marzo/2007 Localización: Argentina Estado: Sin conexión Puntos: 258 |
![]() |
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
|
|
![]() |
|
AnSanVal ![]() Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador ![]() ![]() Unido: 16/Marzo/2005 Localización: España Estado: Sin conexión Puntos: 5727 |
![]() |
¿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 |
|
![]() |
|
SkaryBlondi ![]() Nuevo ![]() Unido: 24/Octubre/2020 Localización: Asturias Estado: Sin conexión Puntos: 18 |
![]() |
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, |
|
![]() |
|
Delarc ![]() Asiduo ![]() ![]() Unido: 03/Marzo/2007 Localización: Argentina Estado: Sin conexión Puntos: 258 |
![]() |
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
|
|
![]() |
|
Delarc ![]() Asiduo ![]() ![]() Unido: 03/Marzo/2007 Localización: Argentina Estado: Sin conexión Puntos: 258 |
![]() |
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
|
|
![]() |
|
AnSanVal ![]() Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador ![]() ![]() Unido: 16/Marzo/2005 Localización: España Estado: Sin conexión Puntos: 5727 |
![]() |
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». ![]() 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. |
|
![]() |
|
Delarc ![]() Asiduo ![]() ![]() Unido: 03/Marzo/2007 Localización: Argentina Estado: Sin conexión Puntos: 258 |
![]() |
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...
Editado por Delarc - 07/Enero/2021 a las 23:57 |
|
Saludos desde La Plata, Argentina
|
|
![]() |
|
AnSanVal ![]() Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador ![]() ![]() Unido: 16/Marzo/2005 Localización: España Estado: Sin conexión Puntos: 5727 |
![]() |
Si funciona... y te gusta, no hay más que hablar.
|
|
![]() |
Responder ![]() |
|
Tweet
|
Ir al foro | Permisos de foro ![]() Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |