Página 1 de 1

[RESUELTO] Copiar y Pegar un Rango variable

Publicado: Mié Feb 22, 2017 8:28 am
por EdgarHen
Hola, he utilizado por un tiempo macros en Vb, no siendo muy experto he logrado sacar lo que requiero pero ahora tengo la necesidad de hacer una macro "Sencilla" en Openoffice, la verdad he leido partes del libro pero quizá al no tener familiaridad con la programación en OO no he logrado avanzar mucho, agradezco su ayuda.
La necesidad que tengo es tomar un rango (3 o 4 celdas con formulas) y bajarlas hasta una fila "x" (La cantidad la capturé con una variable a una celda con un contar y va bien). Luego hacer lo mismo en 4 hojas más. (Claro, solo necesito ayuda con una)
Voy a dejar el código al que he llegado y tal vez sea mas fácil para alguien identificar cual es el error para copiar el rango. Muchas gracias!!

Código: Seleccionar todo

Sub Macro_prueba()
Dim oDoc As Object
Dim oHoja As Object
Dim oCelda as Object
Dim oCounter as Integer
Dim OrangoOrig as Object
Dim OrangoDest as Object

	oDoc = ThisComponent
	'Aca estoy capturando la variable con la que quiero determinar hasta que fila pegar la formula
	oHoja = oDoc.getSheets.getByName("Libro 1")
	oCelda = oHoja.getCellrangebyname("a1")
	ocounter = ocelda.value

oRangoOrig = oHoja.getCellRangeByName( "b9:c9" )
oRangoDest = oHoja.getCellRangeByName( "b10:c" & oCounter)'Aca incluyo la variable para pegar hasta C"Valor Counter")

oHoja.copyRange( oRangoDest.getCellAddress(), oRangoOrig.getRangeAddress() )
'es esta linea me sale ERROR "Propiedad o metodo no encontrado getCellAddress" aca no sé que debo colocar. 
	
End Sub

Re: Copiar y Pegar un Rango con variable que determine su ta

Publicado: Mié Feb 22, 2017 5:43 pm
por FJCC-ES
Un rango de celdas no tiene la propiedad CellAddress. El primer parámetro de copyRange() tiene que ser el CellAddress de una celda.

Código: Seleccionar todo

oDoc = ThisComponent
'Aca estoy capturando la variable con la que quiero determinar hasta que fila pegar la formula
oHoja = oDoc.getSheets.getByName("Libro 1")
oCelda = oHoja.getCellrangebyname("a1")
ocounter = ocelda.value

oRangoOrig = oHoja.getCellRangeByName( "b9:c9" )
'oRangoDest = oHoja.getCellRangeByName( "b10:c" & oCounter)'Aca incluyo la variable para pegar hasta C"Valor Counter")
oCeldaDest = oHoja.getCellRangeByName( "b10")
'oHoja.copyRange( oRangoDest.getCellAddress(), oRangoOrig.getRangeAddress() )
oHoja.copyRange( oCeldaDest.getCellAddress(), oRangoOrig.getRangeAddress() )

Re: Copiar y Pegar un Rango con variable que determine su ta

Publicado: Mié Feb 22, 2017 6:03 pm
por mauricio
Todo esta bien documentado por aca: https://wiki.openoffice.org/wiki/ES/Man ... ndo_rangos

pero... solo leyendo algunas partes, avanzaras lento y con errores...

Saludos

Re: Copiar y Pegar un Rango con variable que determine su ta

Publicado: Jue Feb 23, 2017 3:06 am
por EdgarHen
Muchas gracias Mauricio por la aclaración, le agradezco si me puede indicar entonces que código debo utilizar para la necesidad que tengo, porque en el código que me ha corregido estaría pegando en una celda pero no podría definir hasta donde quiero bajar la fórmula, ejemplo, tengo una formula en la celda "A9" y quiero replicarla dependiendo de la cantidad de registros que tenga, en un caso podrá ser pegarla en el rango "A10:A50" pero en otro caso podrá ser en el rango "A10:A2345" o cualquier otro valor (el que tengo en el counter).
Claro su libro se ve espectacular y sacaré luego el tiempo para leerlo completo pero en el momento necesito solucionar algo y no podría esperar a leerlo completo. Mil gracias, saludos.

Re: Copiar y Pegar un Rango con variable que determine su ta

Publicado: Jue Feb 23, 2017 4:40 am
por FJCC-ES
Una solución no muy elegante:

Código: Seleccionar todo

document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

oDoc = ThisComponent

oHoja = oDoc.getSheets.getByName("Libro 1")
oCelda = oHoja.getCellrangebyname("a1")
ocounter = ocelda.value

oRangoOrig = oHoja.getCellRangeByName( "b9:c9" )
oDoc.CurrentController.select(oRangoOrig)

dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

oRangoDest = oHoja.getCellRangeByName( "b10:c" & oCounter)  'Aca incluyo la variable para pegar hasta C"Valor Counter")
oDoc.CurrentController.select(oRangoDest)

dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())

Re: Copiar y Pegar un Rango con variable que determine su ta

Publicado: Lun Mar 06, 2017 1:47 am
por EdgarHen
Mil gracias FJCC, es justo lo que necesitaba!

Re: [RESUELTO] Copiar y Pegar un Rango variable

Publicado: Lun Mar 27, 2017 10:41 pm
por mauricio
Por favor, si el tema lo das como RESUELTO, es importante marcarlo como tal, ahora lo hago por ti, procura hacerlo tu en un futuro.

Saludos