[RESUELTO]Copiando rangos con formulas

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
pedrito76
Mensajes: 78
Registrado: Jue Jul 08, 2010 3:02 pm

[RESUELTO]Copiando rangos con formulas

Mensaje por pedrito76 »

Hola a todos de nuevo,

Dentro de los apuntes de mauricio encontre lo que buscaba que es copiar un rango en otra celda, una de esta tiene formula, pero cuando ejecuto la macro no me sale, os pongo lo que hago y nada :crazy:

Sub CopiarRangos2()
Dim oHojaActiva As Object
Dim oOrigen As Object
Dim oDestino As Object
oHojaActiva = ThisComponent.getCurrentController().getActiveSheet()
oOrigen = ThisComponent.getCurrentSelection()
oDestino = oHojaActiva.getCellByPosition( oOrigen.getRangeAddress().EndColumn + 0, oOrigen.getRangeAddress().EndRow - 7)
oHojaActiva.copyRange( oDestino.getCellAddress(), oOrigen.getRangeAddress() )
ThisComponent.getCurrentController().select( oOrigen )
End Sub


Lo que me hace es copiar la formula pero no me copia el resultado de la formula, como puedo arreglarlo?

Espero me puedan ayudar.

Gracias de nuevo
Última edición por pedrito76 el Mié Jul 14, 2010 4:17 pm, editado 1 vez en total.
OpenOffice.org 3.2
Avatar de Usuario
mauricio
Mensajes: 6093
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Copiando rangos con formulas

Mensaje por mauricio »

Hola...

Tienes que seguir leyendo compañero, los siguiente métodos los trato en el libro, dependiendo del tipo de datos alguno de ellos te servirá...

Código: Seleccionar todo

Option Explicit

Sub Main
Dim oDoc As Object
Dim oHoja As Object
Dim oOrigen As Object
Dim oDestino As Object

	'Este documento
	oDoc = ThisComponent
	'La hoja activa
	oHoja = oDoc.getCurrentController.getActiveSheet
	'El rango origen
	oOrigen = oHoja.getCellRangeByName( "A1:C10" )
	'La celda destino A15
	oDestino = oHoja.getCellByPosition( 0,14 )
	'Copiamos el rango
	oHoja.copyRange( oDestino.getCellAddress, oOrigen.getRangeAddress )

	'IMPORTANTE: Todos estos métodos requieren que el origen y el destino tengan
	'EXACTAMENTE el mismo tamaño
	oDestino = oHoja.getCellRangeByName( "E1:G10" )
	oDestino.setData( oOrigen.getData )
	
	oDestino = oHoja.getCellRangeByName( "E15:G24" )
	oDestino.setDataArray( oOrigen.getDataArray )
	
	oDestino = oHoja.getCellRangeByName( "I1:K10" )
	oDestino.setFormulaArray( oOrigen.getFormulaArray )

End Sub
Por favor, si esto responde tu pregunta, edita el primer mensaje de este hilo y agrega al principio del título la etiqueta [RESUELTO], de esta forma conseguiremos un foro más ordenado.

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
pedrito76
Mensajes: 78
Registrado: Jue Jul 08, 2010 3:02 pm

Re: Copiando rangos con formulas

Mensaje por pedrito76 »

Gracias Mauricio,

la he probado y funciona, pero solo funciona si me encuentro en la hoja activa en ese momento si estoy en otra hoja distinta o si la incluyo dentro de otra macro llamandola, ya no me funciona, pues la macro la ejecuto a través de un botón y como este botón no esta en la misma hoja pues no funciona la macro,

¿como se podría solucionar ?

De nuevo Gracias Compañeros, pues me estáis siendo de una gran ayuda.
OpenOffice.org 3.2
Avatar de Usuario
mauricio
Mensajes: 6093
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Copiando rangos con formulas

Mensaje por mauricio »

Compañero, todos esos conceptos están en el libro, como hacer referencias a otras hojas, a la hoja que quieras... por favor, checalo...

oHoja = ThisComponent.getSheets.getByName ( "LAHOJAQUEQUIERAS" )

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
pedrito76
Mensajes: 78
Registrado: Jue Jul 08, 2010 3:02 pm

Re: Copiando rangos con formulas

Mensaje por pedrito76 »

Hola de nuevo en esta macro que he realizado y que funciona, ahora lo que me ocurre es que se salta un mes, en lugar de ir con fechas correlativas, osea de mes en mes se salta uno,

¿Por qué?

No encuentro el que me lo haga de un mes a otro :roll:
OpenOffice.org 3.2
Avatar de Usuario
mauricio
Mensajes: 6093
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Copiando rangos con formulas

Mensaje por mauricio »

Así, sin ver el error o el código es muy, muy complicado ayudarte...

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
pedrito76
Mensajes: 78
Registrado: Jue Jul 08, 2010 3:02 pm

Re: Copiando rangos con formulas

Mensaje por pedrito76 »

Adjunto el Archivo, bueno parte pues pesaba mucho, donde estan las fechas si realizas la macro, Cambiar Fecha se cambia de un mes a otro saltandose uno, como podría solucionarlo?

Gracias Compañeros de antemano

P.D.: Ahora la estoy probando también y me vuelve a fallar, la pongo en su correspondiente celda y me sale el fallo #N/A :crazy:
Adjuntos
JUNIO (1) - copia.ods
(33.56 KiB) Descargado 226 veces
OpenOffice.org 3.2
Avatar de Usuario
mauricio
Mensajes: 6093
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Copiando rangos con formulas

Mensaje por mauricio »

Hola...

No entiendo por que no dan toda la información para poder ayudarles. Tienes varias macros en tu archivo no se cual es la que esta fallando, y cual es la que hiciste, por que la que tienes es prácticamente igual a la que te pase... si tu no estas dispuesto a hacer un mínimo esfuerzo para explicarte, no esperes que nadie haga el esfuerzo por entenderte, de nuevo, tomalo como una critica constructiva...

Código: Seleccionar todo

Sub CambiarFecha()

Dim oDoc As Object
Dim oHoja As Object
Dim oOrigen As Object
Dim oDestino As Object


   'Este documento
   oDoc = ThisComponent
   'La hoja activa
   oHoja = ThisComponent.getSheets.getByName ("Rangos")
   'El rango origen
   oOrigen = oHoja.getCellRangeByName( "FechaSiguiente" )
   'La celda destino A15
   oDestino = oHoja.getCellByPosition( 29,4 )
   oHoja.getCellByPosition( 29,4 ).setFormula("Fechaactual")
   'Copiamos el rango   
   oHoja.copyRange( oDestino.getCellAddress, oOrigen.getRangeAddress )
   
   'IMPORTANTE: Todos estos métodos requieren que el origen y el destino tengan
   'EXACTAMENTE el mismo tamaño
   oDestino = oHoja.getCellRangeByName( "Fechaactual" )
   oDestino.setData( oOrigen.getData )
   
   oDestino = oHoja.getCellRangeByName( "Fechaactual" )
   oDestino.setDataArray( oOrigen.getDataArray )
         
   oDestino = oHoja.getCellRangeByName( "FechaSiguiente" )
   oDestino.setFormulaArray( oOrigen.getFormulaArray )
   
End Sub
Lo cual esta mal, solo tienes que usar una de las cuatro opciones que te pase para copiar datos, solo una que cubra tu necesidad, son cuatro formas diferentes, pero solo debes de usar una de ellas.

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
pedrito76
Mensajes: 78
Registrado: Jue Jul 08, 2010 3:02 pm

Re: Copiando rangos con formulas

Mensaje por pedrito76 »

OK, Mauricio

no te preocupes, esto es como cuando eramos pequeños que uno empieza a leer y el profesor siempre tiene que tener calma a la hora de explicar para que los alumnos podamos aprender bien. Es cierto que debo de pararme un poco más (aunque soy impaciente por naturaleza, :( )

Espero no molestar a nadie con tanta pregunta :? ... solo quiero aprender bien. De todos modos muchas gracias no me cansare de deciros que me sois de gran ayuda. :bravo: :super:

EDITO.: Solo para decir que tengo solucionada la macro que quería, la única que no tengo es la de Acoplar. :cry:
OpenOffice.org 3.2
Avatar de Usuario
mauricio
Mensajes: 6093
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: [RESUELTO]Copiando rangos con formulas

Mensaje por mauricio »

Hola...

No, no me preocupo... pero ya no somos pequeños compañero, ya somos adultos y podemos hablar de adulto a adulto, creo yo...

Las preguntas no molestan, al menos a mi no, si no, te aseguro que no respondería... pero si quieres aprender hay que estudiar, lo siento, no hay de otra, te lo dice un programador autodidacta de mucho camino recorrido... lo que si me puede llegar a molestar es, como dicen en mi pueblo; -que quieran el remedio y el tramito-, es decir, que sin ningún esfuerzo esperen tener solo las respuestas...

P.D. Tu macro Acoplar todavía la tienes en lenguaje VBA, tienes que migrarla a OOo Basic, de nuevo, en mi libro está todos los conocimientos e instrucciones necesarias para lograrlo y como ultima recomendación, procura olvidarte del método SELECT, no es nada eficiente y en la mayor parte de los casos no es necesaria...

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Responder