Ayuda para Modificar Macro en LibreOffice para Manejar Textos Largos con tablas, con Checkboxes de verificacion

¡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!

Captura22

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

Por favor, no abras un nuevo tema con la misma pregunta, dale seguimiento correcto a la primera que abriste.

1 Like

Seguir el tema en: