Código: Seleccionar todo
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-LibreOffice??INSERTA COL NO ME VA BIEN EN LibO
Dispatcher.executeDispatch(Document, ".uno:InsertContents", "", 0, args5())
End Sub
He visto que en LibreOffice se pueden usar .uno:InsertContents y .uno:Paste .uno:PasteOnly .uno:PasteOnlyText .uno:PasteOnlyFormula pero no va en OpenOffice.
¿Habrá manera de una única macro para «pegado especial» que funcione indistintamente en ambos?
Gracias anticipadas
Editado: siguiendo algo de este enlace para LibreOffice ...
Código: Seleccionar todo
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 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