¡Hola a todos!
Espero que se encuentren bien. Estoy en busca de asistencia para modificar una macro en LibreOffice que actualmente utilizo. Esta macro me permite copiar textos seleccionados mediante casillas de verificación, como se muestra en la imagen adjunta. Sin embargo, necesito que se adapte para manejar textos más extensos, que incluyen múltiples párrafos y recuadros, ya que actualmente no procesa correctamente estos elementos. Por ejemplo, si el texto seleccionado contiene más de dos párrafos o alguna tabla, la macro no lo captura adecuadamente.
Además, debo mencionar que no tengo conocimientos sobre código VBA, lo que complica mi capacidad para ajustarla por mi cuenta.
Cualquier ayuda o guía sería enormemente apreciada. ¡Gracias de antemano!
Copia Selectiva de textos a nuevo documento (2).odt (39.1 KB)
Texto 1
O tal vez fuera uno de los incontables guardianes de la ley de esta ciudad, ya preparado para ponerle las esposas de acero en las muñecas. Ya podía oír incluso el famoso “manos arriba, no se mueva”. ¡Se sentía acorralado! De pronto vio un estrecho pasaje. ¿Sería esa su salvación? Sin pensarlo dos veces giró a la derecha y como un rayo desapareció entre los dos edificios, estando a punto de tropezar con el contenedor de basura que se encontraba volcado en medio de la calle.
Texto 2
O tal vez fuera uno de los incontables guardianes de la ley de esta ciudad, ya preparado para ponerle las esposas de acero en las muñecas. Ya podía oír incluso el famoso “manos arriba, no se mueva”. ¡Se sentía acorralado! De pronto vio un estrecho pasaje. ¿Sería esa su salvación? Sin pensarlo dos veces giró a la derecha y como un rayo desapareció entre los dos edificios, estando a punto de tropezar con el contenedor de basura que se encontraba volcado en medio de la calle.
Texto 3
En la oscuridad intenta desesperadamente encontrar una salida. Para su sorpresa y desesperación se da cuenta de que no se puede escapar del patio al que ha llegado. La única salida es el mismo pequeño pasaje por el que ha entrado. Mientras tanto los pasos se aproximan cada vez más. Ya puede ver la oscura figura girando la esquina. Sus ojos escrutinan desesperadamente la oscuridad buscando una salida. ¿Va a perderlo todo ahora, estando tan cerca de la meta, después de tantos sacrificios, de tantos años de preparación forjando su plan?
Texto 4
Se apoya en la pared, pegando lo más que puede su espalda contra ella, en la esperanza de poder escapar a la mirada de su perseguidor. De golpe, junto a él, una puerta se abre silenciosamente con el viento nocturno. ¿Sería esa su salvación? Empieza a avanzar lentamente en dirección a la puerta abierta sin dejar de pegarse como una hiedra a la pared. ¿Estaría salvado…?
Texto 5
Oyó pasos detrás suyo y no le gustó en absoluto. ¿Quién podía seguirle en plena noche, y encima en una calle tan estrecha y en la zona portuaria? ¡Justamente ahora que acababa de dar el golpe con el que había soñado toda su vida y quería fugarse con el botín sin dejar huella! Tal vez uno de sus numerosos colegas había tenido la misma idea que él, lo había observado en secreto y esperado el momento preciso para robarle el fruto de su trabajo.
Texto 6
O tal vez fuera uno de los incontables guardianes de la ley de esta ciudad, ya preparado para ponerle las esposas de acero en las muñecas. Ya podía oír incluso el famoso “manos arriba, no se mueva”. ¡Se sentía acorralado! De pronto vio un estrecho pasaje. ¿Sería esa su salvación? Sin pensarlo dos veces giró a la derecha y como un rayo desapareció entre los dos edificios, estando a punto de tropezar con el contenedor de basura que se encontraba volcado en medio de la calle.
Texto 7
En la oscuridad intenta desesperadamente encontrar una salida. Para su sorpresa y desesperación se da cuenta de que no se puede escapar del patio al que ha llegado. La única salida es el mismo pequeño pasaje por el que ha entrado. Mientras tanto los pasos se aproximan cada vez más. Ya puede ver la oscura figura girando la esquina. Sus ojos escrutinan desesperadamente la oscuridad buscando una salida. ¿Va a perderlo todo ahora, estando tan cerca de la meta, después de tantos sacrificios, de tantos años de preparación forjando su plan?
Texto 8
Se apoya en la pared, pegando lo más que puede su espalda contra ella, en la esperanza de poder escapar a la mirada de su perseguidor. De golpe, junto a él, una puerta se abre silenciosamente con el viento nocturno. ¿Sería esa su salvación? Empieza a avanzar lentamente en dirección a la puerta abierta sin dejar de pegarse como una hiedra a la pared. ¿Estaría salvado…?
Texto 9
Oyó pasos detrás suyo y no le gustó en absoluto. ¿Quién podía seguirle en plena noche, y encima en una calle tan estrecha y en la zona portuaria? ¡Justamente ahora que acababa de dar el golpe con el que había soñado toda su vida y quería fugarse con el botín sin dejar huella! Tal vez uno de sus numerosos colegas había tenido la misma idea que él, lo había observado en secreto y esperado el momento preciso para robarle el fruto de su trabajo.
Texto 10
Oyó pasos detrás suyo y no le gustó en absoluto. ¿Quién podía seguirle en plena noche, y encima en una calle tan estrecha y en la zona portuaria? ¡Justamente ahora que acababa de dar el golpe con el que había soñado toda su vida y quería fugarse con el botín sin dejar huella!
Texto 11
Tal vez uno de sus numerosos colegas había tenido la misma idea que él, lo había observado en secreto y esperado el momento preciso para robarle el fruto de su trabajo. O tal vez fuera uno de los incontables guardianes de la ley de esta ciudad, ya preparado para ponerle las esposas de acero en las muñecas. Ya podía oír incluso el famoso “manos arriba, no se mueva”.
Texto 12
¡Se sentía acorralado! De pronto vio un estrecho pasaje. ¿Sería esa su salvación? Sin pensarlo dos veces giró a la derecha y como un rayo desapareció entre los dos edificios, estando a punto de tropezar con el contenedor de basura que se encontraba volcado en medio de la calle. En la oscuridad intenta desesperadamente encontrar una salida.
Texto 13
Para su sorpresa y desesperación se da cuenta de que no se puede escapar del patio al que ha llegado. La única salida es el mismo pequeño pasaje por el que ha entrado. Mientras tanto los pasos se aproximan cada vez más. Ya puede ver la oscura figura girando la esquina. Sus ojos escrutinan desesperadamente la oscuridad buscando una salida.
Texto 14
¿Va a perderlo todo ahora, estando tan cerca de la meta, después de tantos sacrificios, de tantos años de preparación forjando su plan? Se apoya en la pared, pegando lo más que puede su espalda contra ella, en la esperanza de poder escapar a la mirada de su perseguidor.
Texto 15
De golpe, junto a él, una puerta se abre silenciosamente con el viento nocturno. ¿Sería esa su salvación? Empieza a avanzar lentamente en dirección a la puerta abierta sin dejar de pegarse como una hiedra a la pared. ¿Estaría salvado…?
Texto 16
Oyó pasos detrás suyo y no le gustó en absoluto. ¿Quién podía seguirle en plena noche, y encima en una calle tan estrecha y en la zona portuaria? ¡Justamente ahora que acababa de dar el golpe con el que había soñado toda su vida y quería fugarse con el botín sin dejar huella! Tal vez uno de sus numerosos colegas había tenido la misma idea que él, lo había observado en secreto y esperado el momento preciso para robarle el fruto de su trabajo.
Texto 17
O tal vez fuera uno de los incontables guardianes de la ley de esta ciudad, ya preparado para ponerle las esposas de acero en las muñecas. Ya podía oír incluso el famoso “manos arriba, no se mueva”. ¡Se sentía acorralado!
Texto 18
De pronto vio un estrecho pasaje. ¿Sería esa su salvación? Sin pensarlo dos veces giró a la derecha y como un rayo desapareció entre los dos edificios, estando a punto de tropezar con el contenedor de basura que se encontraba volcado en medio de la calle. En la oscuridad intenta desesperadamente encontrar una salida.
Texto 19
Para su sorpresa y desesperación se da cuenta de que no se puede escapar del patio al que ha llegado. La única salida es el mismo pequeño pasaje por el que ha entrado. Mientras tanto los pasos se aproximan cada vez más.
Texto 20
Ya puede ver la oscura figura girando la esquina. Sus ojos escrutinan desesperadamente la oscuridad buscando una salida. ¿Va a perderlo todo ahora, estando tan cerca de la meta, después de tantos sacrificios, de tantos años de preparación forjando su plan? Se apoya en la pared, pegando lo más que puede su espalda contra ella, en la esperanza de poder escapar a la mirada de su perseguidor. De golpe, junto a él, una puerta se abre silenciosamente con el viento nocturno.
Texto 21
¿Sería esa su salvación? Empieza a avanzar lentamente en dirección a la puerta abierta sin dejar de pegarse como una hiedra a la pared. ¿Estaría salvado…?
aqui dejo el codigo:
Option Explicit
Sub BtEjecutar_Clic( oEv )
'-------------------------------------------------------------------------------------------
Dim n As Integer, lIntros As Boolean
Dim Form As Object, Ctrl As Object
Dim mArg(), NuevoDoc As Object
Dim DocOrg As Object, DocDst As Object
Dim Terminar As Boolean
Form = ThisComponent.Drawpage.Forms.GetByIndex(0)
' Compruebo que al menos hay una opción activada
Terminar = True
For n=1 To 21
Ctrl = Form.GetByName("CV" & n)
If Ctrl.State = 1 Then
Terminar = False
EndIf
Next
If Terminar Then
Beep
MsgBox ("No se ha seleccionado ningún bloque", 192, "LibreOffice.es")
Else
DocOrg = ThisComponent.CurrentController.Frame
DocDst = StarDesktop.LoadComponentFromURL( "private:factory/swriter", "_default", 0, mArg() )
DocDst = DocDst.CurrentController.Frame
lIntros = Form.Intros.State = 1
For n=1 To 21
Ctrl = Form.GetByName("CV" & n)
If Ctrl.State = 1 Then
CopiarTexto( DocOrg, "Texto " & n )
PegarTexto( DocDst, lIntros )
Ctrl.State = 0
EndIf
Next
DocDst.ContainerWindow.toFront()
DocDst.ContainerWindow.SetFocus()
Beep
MsgBox ("Proceso terminado", 192, "open-office.es")
EndIf
End Sub
Sub CopiarTexto( Doc As Object, cBloque As String )
'-------------------------------------------------------------------------------------------
Doc.ContainerWindow.toFront()
Doc.ContainerWindow.setFocus()
Dim dispatcher As Object
dispatcher = CreateUNOService("com.sun.star.frame.DispatchHelper")
Dim args1(18) As New com.sun.star.beans.PropertyValue
args1(0).Name = "SearchItem.StyleFamily"
args1(0).Value = 2
args1(1).Name = "SearchItem.CellType"
args1(1).Value = 0
args1(2).Name = "SearchItem.RowDirection"
args1(2).Value = True
args1(3).Name = "SearchItem.AllTables"
args1(3).Value = False
args1(4).Name = "SearchItem.Backward"
args1(4).Value = False
args1(5).Name = "SearchItem.Pattern"
args1(5).Value = False
args1(6).Name = "SearchItem.Content"
args1(6).Value = False
args1(7).Name = "SearchItem.AsianOptions"
args1(7).Value = False
args1(8).Name = "SearchItem.AlgorithmType"
args1(8).Value = 0
args1(9).Name = "SearchItem.SearchFlags"
args1(9).Value = 65552
args1(10).Name = "SearchItem.SearchString"
args1(10).Value = cBloque
args1(11).Name = "SearchItem.ReplaceString"
args1(11).Value = ""
args1(12).Name = "SearchItem.Locale"
args1(12).Value = 255
args1(13).Name = "SearchItem.ChangedChars"
args1(13).Value = 2
args1(14).Name = "SearchItem.DeletedChars"
args1(14).Value = 2
args1(15).Name = "SearchItem.InsertedChars"
args1(15).Value = 2
args1(16).Name = "SearchItem.TransliterateFlags"
args1(16).Value = 1280
args1(17).Name = "SearchItem.Command"
args1(17).Value = 0
args1(18).Name = "Quiet"
args1(18).Value = True
dispatcher.ExecuteDispatch(Doc, ".uno:ExecuteSearch", "", 0, args1())
Dim args2(1) As New com.sun.star.beans.PropertyValue
args2(0).Name = "Count"
args2(0).Value = 1
args2(1).Name = "Select"
args2(1).Value = False
dispatcher.ExecuteDispatch(Doc, ".uno:GoRight", "", 0, args2())
dispatcher.ExecuteDispatch(Doc, ".uno:EndOfParaSel", "", 0, Array())
dispatcher.ExecuteDispatch(Doc, ".uno:Copy", "", 0, Array())
dispatcher.ExecuteDispatch(Doc, ".uno:GoToStartOfDoc", "", 0, Array())
End Sub
Sub PegarTexto( Doc As Object, lExtraIntros As Boolean )
'-------------------------------------------------------------------------------------------
Dim dispatcher As Object
dispatcher = CreateUNOService("com.sun.star.frame.DispatchHelper")
dispatcher.ExecuteDispatch(Doc, ".uno:GoToEndOfDoc", "", 0, Array())
dispatcher.ExecuteDispatch(Doc, ".uno:Paste", "", 0, Array())
dispatcher.ExecuteDispatch(Doc, ".uno:InsertPara", "", 0, Array())
If lExtraIntros Then dispatcher.ExecuteDispatch(Doc, ".uno:InsertPara", "", 0, Array())
dispatcher.ExecuteDispatch(Doc, ".uno:GoToStartOfDoc", "", 0, Array())
End Sub