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..
[RESUELTO] Copiar Rango y Pegar en otra Hoja"Crear Registro"
[RESUELTO] Copiar Rango y Pegar en otra Hoja"Crear Registro"
- Adjuntos
-
- ejemplo.ods
- ejemplo (no funciona como espero con "crear macro"
- (12.81 KiB) Descargado 227 veces
Última edición por Edhir el Mié Feb 12, 2020 11:08 pm, editado 2 veces en total.
LibreOffice 6.4.0.3 (x64), Windows 10 Home
Re: Copiar Rango Celdas y Pegarlos en otra Hoja "Crear Regis
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
Mil gracias FJCC-ES por tu rápida y efectiva respuesta, probado y funcionando correctamente.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)
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.
- Adjuntos
-
- ejemplo.ods
- ejemplo que realiza lo que quería funcionando correctamente
- (12.34 KiB) Descargado 313 veces
LibreOffice 6.4.0.3 (x64), Windows 10 Home