[RESUELTO] Macro para copiar hoja

Discute sobre la aplicación de hojas de cálculo
Responder
frantriso
Mensajes: 12
Registrado: Mar Oct 23, 2018 2:03 am

[RESUELTO] Macro para copiar hoja

Mensaje por frantriso »

Muchas gracias!! He podido conseguir lo que quería con vuestra ayuda
Adjuntos
Plantilla Necesidades para RETÉN.xls
(48.8 KiB) Descargado 111 veces
Última edición por frantriso el Lun Mar 07, 2022 6:32 pm, editado 1 vez en total.
Libreoffice version 5.0.1.2.0+
FJCC-ES
Mensajes: 873
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Macro para copiar hoja

Mensaje por FJCC-ES »

Esta macro borra las celdas C6:AG491 de la hoja actual y copia esa hoja, asignando el nombre HojaNueva la hoja nueva.
¿Quiere borrar los datos antes de copiar los datos o después?
¿En cual celda está el nombre de la hoja nueva?

Código: Seleccionar todo

oHojaActual = ThisComponent.CurrentController.ActiveSheet
oCeldas = oHojaActual.getCellRangeByName("C6:AG491")
oCeldas.clearContents(16+8+4+2+1) '16=Formula, 8 = anotacion, 4 = texto, 2 = fecha, 1 = valor
oHojas = ThisComponent.Sheets
oHojas.copyByName(oHojaActual.Name, "HojaNueva", oHojas.Count + 1)
frantriso
Mensajes: 12
Registrado: Mar Oct 23, 2018 2:03 am

Re: Macro para copiar hoja

Mensaje por frantriso »

Buenas noches, los datos que se tienen que borrar son los de la hoja nueva, permaneciendo los de la hoja primera.
El nombre de la hoja debe ser el de la celda A1, que corresponde con el mes.
Muchísimas gracias FJCC por la respuesta y el interés.
Libreoffice version 5.0.1.2.0+
FJCC-ES
Mensajes: 873
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Macro para copiar hoja

Mensaje por FJCC-ES »

Código: Seleccionar todo

oHojaActual = ThisComponent.CurrentController.ActiveSheet
Nombre = oHojaActual.getCellRangeByName("A1").getString()  

oHojas = ThisComponent.Sheets
oHojas.copyByName(oHojaActual.Name, Nombre, oHojas.Count + 1)
oHojaNueva = oHojas.getByName(Nombre)
oCeldas = oHojaNueva.getCellrangeByName("C6:AG491")
oCeldas.clearContents(16+8+4+2+1) '16=Formula, 8 = anotacion, 4 = texto, 2 = fecha, 1 = valor
frantriso
Mensajes: 12
Registrado: Mar Oct 23, 2018 2:03 am

Re: Macro para copiar hoja

Mensaje por frantriso »

Buenas noches, no entiendo muy bien la macro.
Yo he conseguido realizar casi todo lo que me proponía. Sólo me queda cambiar el nombre a la hoja nueva, por el nombre que aparece en la celda A1.
Adjunto el archivo con su macro para que lo veáis y me podáis dar una solución.
Muchas gracias
Adjuntos
Plantilla Necesidades copia.ods
(27.77 KiB) Descargado 104 veces
Libreoffice version 5.0.1.2.0+
FJCC-ES
Mensajes: 873
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Macro para copiar hoja

Mensaje por FJCC-ES »

El archivo no contiene la macro. Por lo menos, no la veo con OpenOffice. ¿Puede publicar el código en una respuesta aquí?
frantriso
Mensajes: 12
Registrado: Mar Oct 23, 2018 2:03 am

Re: Macro para copiar hoja

Mensaje por frantriso »

La macro está asignada al "botón" Nueva hoja.
Dice lo siguiente:

REM ***** BASIC *****


sub Main
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$1:$AI$37"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(2) as new com.sun.star.beans.PropertyValue
args2(0).Name = "DocName"
args2(0).Value = "Plantilla Necesidades copia"
args2(1).Name = "Index"
args2(1).Value = 32767
args2(2).Name = "Copy"
args2(2).Value = true

dispatcher.executeDispatch(document, ".uno:Move", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$C$6:$AG$37"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())

rem ----------------------------------------------------------------------
rem dispatcher.executeDispatch(document, ".uno:DeleteCell", "", 0, Array())

rem ----------------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "Flags"
args5(0).Value = "S"

dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args5())


end sub
Libreoffice version 5.0.1.2.0+
FJCC-ES
Mensajes: 873
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Macro para copiar hoja

Mensaje por FJCC-ES »

Marqué el código nuevo con

Código: Seleccionar todo

'FJCC------------

Código: Seleccionar todo

sub Main2
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
'FJCC ----------
oHojaActual = ThisComponent.CurrentController.ActiveSheet
Nombre = oHojaActual.getCellRangeByName("A1").getString() 
'---------------
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$1:$AI$37"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(2) as new com.sun.star.beans.PropertyValue
args2(0).Name = "DocName"
args2(0).Value = "Plantilla Necesidades copia"
args2(1).Name = "Index"
args2(1).Value = 32767
args2(2).Name = "Copy"
args2(2).Value = true

dispatcher.executeDispatch(document, ".uno:Move", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$C$6:$AG$37"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())

rem ----------------------------------------------------------------------
rem dispatcher.executeDispatch(document, ".uno:DeleteCell", "", 0, Array())

rem ----------------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "Flags"
args5(0).Value = "S"

dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args5())
'FJCC------------
oHojaNueva = ThisComponent.CurrentController.ActiveSheet
oHojaNueva.Name = Nombre
'---------------
end sub
Responder