[Resuelto] Macro de AOO Calc no funciona en Libo Calc

Discute sobre la aplicación de hojas de cálculo

[Resuelto] Macro de AOO Calc no funciona en Libo Calc

Notapor BOTUCATU » Vie Ago 28, 2020 8:51 pm

Buenas tardes. Tengo esta macro que funciona perfectamente en OpenOffice Calc (4.1.7) pero no así en LibreOffice Calc (7.0.0.3 (x64)).

Básicamente se trata de copiar unas fórmulas (sencillas), pegarlas en un área, y luego volver a copiar todo eso y pegar sólo los registros ya sin fórmulas en el mismo área. La macro la hice con la grabadora de macros de opencalc (y también probé grabarla con la grabadora de macros de libreOffice Calc donde obtuve el mismo código). Lo raro es que en LibreOffice Calc la macro no funciona correctamente ya que las celdas no se llenan con los datos correctos. Adjunto un archivo de muestra que se puede abrir en OpenOffice Calc (dónde apretando el "botón" funciona correctamente todo) y luego en LibreOffice Calc (dónde apretando el "botón" no funciona la macro ya que arroja un resultado equivocado)

Agradezco vuestras opiniones (y comentarios) sobre como hacer que esta macro funcione indistintamente y correctamente en ambos sistemas. Saludos.

Aquí el código de la macro
Código: Seleccionar todo   Expandir vistaContraer vista
sub formular
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 = "filaconformula"

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

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

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "areaapegarfórmula"

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

rem ----------------------------------------------------------------------
dim args4(5) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Flags"
args4(0).Value = "SVDF"
args4(1).Name = "FormulaCommand"
args4(1).Value = 0
args4(2).Name = "SkipEmptyCells"
args4(2).Value = false
args4(3).Name = "Transpose"
args4(3).Value = false
args4(4).Name = "AsLink"
args4(4).Value = false
args4(5).Name = "MoveMode"
args4(5).Value = 4

dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args4())

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

rem ----------------------------------------------------------------------
dim args6(5) as new com.sun.star.beans.PropertyValue
args6(0).Name = "Flags"
args6(0).Value = "SVD"
args6(1).Name = "FormulaCommand"
args6(1).Value = 0
args6(2).Name = "SkipEmptyCells"
args6(2).Value = false
args6(3).Name = "Transpose"
args6(3).Value = false
args6(4).Name = "AsLink"
args6(4).Value = false
args6(5).Name = "MoveMode"
args6(5).Value = 4

dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args6())


end sub
Adjuntos
Macro de Aoc loquea en Libo.ods
(25.77 KiB) 8 veces
Última edición por BOTUCATU el Sab Ago 29, 2020 10:53 pm, editado 2 veces en total
OpenOffice 3.1 en Windows 7 SP1
BOTUCATU
 
Mensajes: 34
Registrado: Vie Ene 04, 2019 9:59 pm

Re: Macro de AOO Calc no funciona en Libo Calc

Notapor xiseme » Sab Ago 29, 2020 8:45 pm

Versión corta:
La razón puede estar en el «Botón»
Establecer la opción «Dar foco al pulsar» a «No» en las propiedades del botón debería funcionar.

Versión extendida:
Suelo usar unas macros* (que son básicamente lo mismo que la tuya) y no me dan problemas.
He probado en ese archivo y a veces sí iba bien y a veces no. :shock:
Proceso seguido:
-Descargo el archivo
-Lo abro con LibO**
-Borro datos
-Doy al botón... ahora Sí/ ahora No ... ahora Sí/ ahora No ..Sí/No ... Sí/No ... grrrr... :evil:
-Cambio el foco del boton***
-Guardo, abro y pruebo: siempre Sí :mrgreen:
Espero que sea eso (raro me parece peeero...)

*
Código: Seleccionar todo   Expandir vistaContraer vista
'---------------------------------------
Sub CopiaRango(RangOrx As String, RangoDestino As String, Optional TipoDatos As String )
'Copia de RangOrx a RangoDestino solo los tipos de datos indicados en TipoDatos (ausente → todos)
'SVDFNT  S=texto V=valores D=fecha F=formulas N=comentarios T=formatos ex.: DF= fechas + formulas
   If IsMissing(TipoDatos) Then TipoDatos = "SVDFN"   'Por defecto pega todo menos formatos
   Dim Document As Object
   Dim Dispatcher As Object

   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 = RangOrx   '"$D$8:$J$8"
   
   Dispatcher.executeDispatch(Document, ".uno:GoToCell", "", 0, args1())
   Dispatcher.executeDispatch(Document, ".uno:Copy", "", 0, Array())
   
   rem ----------------------------------------------------------------------
   Dim args3(0) as new com.sun.star.beans.PropertyValue
   args3(0).Name = "ToPoint"
   args3(0).Value = RangoDestino
   
   Dispatcher.executeDispatch(Document, ".uno:GoToCell", "", 0, args3())

   rem ----------------------------------------------------------------------
   Dim args5(5) as new com.sun.star.beans.PropertyValue
   args5(0).Name = "Flags"
   args5(0).Value = TipoDatos      '"F"
   args5(1).Name = "FormulaCommand"
   args5(1).Value = 0
   args5(2).Name = "SkipEmptyCells"
   args5(2).Value = false
   args5(3).Name = "Transpose"
   args5(3).Value = false
   args5(4).Name = "AsLink"
   args5(4).Value = false
   args5(5).Name = "MoveMode"
   args5(5).Value = 4   '4→ApacheOpenOffice 6-LibreOfficeINSERTA COL
   
   Dispatcher.executeDispatch(Document, ".uno:InsertContents", "", 0, args5())

End Sub


Sub PegadoEspecial(RangOrx As String, RangoDestino As String, Optional TipoPegado As String )
'Para LibreOffice (sin probar en AOO)
'Copia de RangOrx a RangoDestino solo los tipos de datos indicados en TipoPegado (ausente → todo)
' S=texto V=valores F=formulas

   Dim Document As Object
   Dim Dispatcher As Object
      
   Select Case TipoPegado
      Case "F":    TipoPegado = ".uno:PasteOnlyFormula"   'formulas
      Case "S":    TipoPegado = ".uno:PasteOnlyText"      'string-texto o texto dev.por formula
      Case "V":    TipoPegado = ".uno:PasteOnlyValue"      'valores o resultados que son un valor
      'Case "SVD":   TipoPegado = ".uno:PasteOnly"         '??????? NO HACE NADA
      Case Else:   TipoPegado = ".uno:Paste"            'todo-todo
   End Select
   
   Document = ThisComponent.CurrentController.Frame
   Dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
   
   Dim args1(0) as new com.sun.star.beans.PropertyValue
   args1(0).Name = "ToPoint"
   args1(0).Value = RangOrx
   
   Dispatcher.executeDispatch(Document, ".uno:GoToCell", "", 0, args1())
   Dispatcher.executeDispatch(Document, ".uno:Copy", "", 0, Array())
   
   Dim args3(0) as new com.sun.star.beans.PropertyValue
   args3(0).Name = "ToPoint"
   args3(0).Value = RangoDestino
   
   Dispatcher.executeDispatch(Document, ".uno:GoToCell", "", 0, args3())

   Dispatcher.executeDispatch(Document, TipoPegado, "", 0, Array())

End Sub

Sub formular

CopiaRango("filaconformula","areaapegarfórmula","F")
CopiaRango("areaapegarfórmula","areaapegarfórmula","V")

End Sub


**
Version: 7.0.1.1.0+
Build ID: <buildversion>
CPU threads: 2; OS: Linux 5.8; UI render: default; VCL: kf5

***Por ej. Menú → Ver → Barras de herramientas → Controles de formulario ...

Nota: ¿qué ha sido de la buena costumbre de no usar acentos ni caracteres especiales en nombres de rangos, hojas, etc...? :ucrazy: :mrgreen:
Todo es mejorable, estamos dispuestos a mejorar. ¿Yo? ... poco a poco.
Nunca hay acritud en mis comentarios, si lo pareciera, seguro que me he expresado mal.
xiseme
 
Mensajes: 1908
Registrado: Lun Nov 24, 2008 1:13 pm

Re: Macro de AOO Calc no funciona en Libo Calc

Notapor BOTUCATU » Sab Ago 29, 2020 10:52 pm

Muchas gracias xiseme. Por lo visto la razón estaba en el "Botón"
Procedí a darle "NO" a la configuración del foco del botón y ahí funcionó correctamente la macro luego de apretar el botón.
(Propiedades del botón => General => Dar foco al pulsar: "No" )

Ahora Funciona. Daré por resuelto el tema (pero pienso que al margen, habría que ver este inconveniente del "botón" en Libreoffice ya que parece ser un Bug vigente).
OpenOffice 3.1 en Windows 7 SP1
BOTUCATU
 
Mensajes: 34
Registrado: Vie Ene 04, 2019 9:59 pm


Volver a Calc

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 6 invitados