Página 1 de 1

[RESUELTO] Copiar Rango y Pegar en otra Hoja"Crear Registro"

Publicado: Mié Feb 12, 2020 7:59 pm
por Edhir
Hola a todos, estoy intentando crear un mini_proyecto para la gestión de mi actividad diaria en Calc. Me están surgiendo muchas dudas y estoy aprendiendo a base de prueba y error, y como no también gracias a la inestimable ayuda de la comunidad a la que agradezco su esfuerzo en toda la documentación que tiene y aporta.

Parto de la lectura con un lector de código de barras de un código de 20 dígitos (que trato como texto para su análisis), tras realizar varias comprobaciones con él en la hoja1 deseo crear un registro si se dan ciertas condiciones y para ello deseo crear una macro que haga lo siguiente:

1º copie un rango de la hoja1 (ejemplo $hoja1.D1:D5)
2ª vaya a la celda $hoja2.A2 y haga un pegado especial (ó inserción) en esa celda añadiendo los valores de (textos, fechas y números) realizando una trasposición y desplazando las celdas hacia abajo.
3º finalmente que vuelva el foco de introducción de datos a la casilla $hoja1.A1 donde estoy obteniendo las lecturas del lector.

He intentado simplificar un ejemplo en el libro que adjunto "ejemplo.ods" para que veáis a que me refiero y la condición en la que crea el registro, la he reducido a pulsar un botón.

Actualmente tengo para lo que quiero una macro creada con "crear macro" que he intentado reproducir en el ejemplo que adjunto pero con un resultado negativo (funciona la primera vez, pero luego siempre pega el primer valor que le pasé) ((me refiero a" resultado negativo" a que en la que tengo con mis datos, mas compleja, ahora funciona, pero en el momento que hago algún cambio por mínimo que sea deja de trabajar.., osea que a mi entender tienen un comportamiento no predecible). y por ello querría hacer algo mas controlado.

Agradeciendo de antemano vuestra atención y esperando poder colaborar poco a poco en lo que vaya aprendiendo, un saludo.

PD: le he dado formato previo a cada casilla para que albergue fechas, números o textos..

Re: Copiar Rango Celdas y Pegarlos en otra Hoja "Crear Regis

Publicado: Mié Feb 12, 2020 9:45 pm
por FJCC-ES

Código: Seleccionar todo

oHoja1 = ThisComponent.Sheets.getByName("Hoja1")
D1_D5 = oHoja1.getCellrangeByName("D1:D5")
Datos = D1_D5.DataArray

oHoja2 = ThisComponent.Sheets.getByName("Hoja2")
A2_E2 = oHoja2.getCellrangeByName("A2:E2")
oHoja2.insertCells(A2_E2.RangeAddress, com.sun.star.sheet.CellInsertMode.DOWN)
A2_E2 = oHoja2.getCellrangeByName("A2:E2")
Datos2 = A2_E2.DataArray

for i = 0 to 4
   Datos2(0)(i) = Datos(i)(0)
next i
A2_E2.DataArray = Datos2

A1 = oHoja1.getCellrangeByName("A1")
ThisComponent.CurrentController.select(A1)

Re: Copiar Rango Celdas y Pegarlos en otra Hoja "Crear Regis

Publicado: Mié Feb 12, 2020 11:02 pm
por Edhir
FJCC-ES escribió:

Código: Seleccionar todo

oHoja1 = ThisComponent.Sheets.getByName("Hoja1")
D1_D5 = oHoja1.getCellrangeByName("D1:D5")
Datos = D1_D5.DataArray

oHoja2 = ThisComponent.Sheets.getByName("Hoja2")
A2_E2 = oHoja2.getCellrangeByName("A2:E2")
oHoja2.insertCells(A2_E2.RangeAddress, com.sun.star.sheet.CellInsertMode.DOWN)
A2_E2 = oHoja2.getCellrangeByName("A2:E2")
Datos2 = A2_E2.DataArray

for i = 0 to 4
   Datos2(0)(i) = Datos(i)(0)
next i
A2_E2.DataArray = Datos2

A1 = oHoja1.getCellrangeByName("A1")
ThisComponent.CurrentController.select(A1)
Mil gracias FJCC-ES por tu rápida y efectiva respuesta, probado y funcionando correctamente.

Ahora me pongo a estudiarlo, entenderlo y trastear su funcionamiento, me va a venir de perlas para saber como manejar dentro de las macros las referencias a celdas hojas con arrays que me tenía un poco perdido. Prometo estudiar mas :)

Subo el archivo con la solución propuesta por si a alguien le interesa.