Minha macro não está funcionando

Olá, sempre que eu utilizo a mala direta, para poder fazer filipetas para o agendamentos de exames que eue faço, ela cria quebras de páginas indesejáveis, que, as vezes eu gostaria que permanecesse 2 ou mais filipetas na mesa folha para a economização de papéis.

Diante disso, eu tenho que excluir quebra por quebra para que todas a filipetas fiquem organizadas em uma folha, porém as vezes me deparo com arquivos mais de 100 folhas, e acaba demorando muito acabar um por um.

Pesquisei na internet algumas soluções e descobri que é possivel criar um macro para que eu possa automatizar isso, e então pedi para uma IA fazer um código para mim, para que eu possa usar no libreoffice e após algumas tentativas ele não funciona, gostaria de saber o que posso fazer para consertar isso.

Código criado pela IA:

Sub RemovePageBreaks
Dim oDoc as Object
Dim oCursor as Object
Dim oSearchDesc as Object
Dim oSearchResult as Object

oDoc = ThisComponent
oCursor = oDoc.Text.createTextCursor()
oSearchDesc = oDoc.createSearchDescriptor()

’ Define o critério de busca para a quebra de página
oSearchDesc.setSearchString(Chr(12)) ’ código ASCII para quebra de página

’ Localiza todas as quebras de página no documento
oSearchResult = oDoc.FindFirst(oSearchDesc)

Do While Not IsNull(oSearchResult)
’ Move o cursor para a quebra de página encontrada
oCursor.gotoRange(oSearchResult.getStart(), False)

  ' Remove a quebra de página
  oDoc.Text.clearAttribute("BreakType")
  
  ' Localiza a próxima quebra de página
  oSearchResult = oDoc.FindNext(oSearchResult.getEnd(), oSearchDesc)

Loop
End Sub

Qualquer dúvida estarei a disposição

Att.
Vitor Calelo.

Acredito que seja alguma configuração de etiqueta por pagina a acertar, não tenho afinidade com o Writer e nunca tive a necessidade de gerar Mala direta. Minha “praia” é o Calc…

MAS, tente esta macro, também consegui no chat.openai.com, depois de 5 tentativas, só acrescentei a Msgbox


Sub RemovePageBreaks
		Msgbox "De OK, para iniciar, e aguarde o aviso de termino"
    Dim oDoc As Object
    Dim oVCursor As Object
    Dim oPBreak As Object
    
    oDoc = ThisComponent
    oVCursor = oDoc.getCurrentController().getViewCursor()
    
    ' Loop through all paragraphs in the document '
    oVCursor.gotoStart(False)
    While oVCursor.goRight(1, False)
        oPBreak = oVCursor.Text.createEnumeration()
        ' Check each text range in the paragraph for a page break '
        While oPBreak.hasMoreElements()
            oTextRange = oPBreak.nextElement()
            If oTextRange.supportsService("com.sun.star.text.Paragraph") Then
                If oTextRange.getPropertyValue("BreakType") = com.sun.star.style.BreakType.PAGE_BEFORE Then
                    oVCursor.Text.removeTextContent(oTextRange, 1)
                End If
            End If
        Wend
    Wend
		Msgbox "De OK, terminou."    
End Sub

De uma olhada, não sei se ajuda, são publicações antigas…
-Mala Direta com LibreOffice_LM11 - MundoLibre
-Mala direta em 4 passos_BO10 - MundoLibre

1 Like

Deu certo!
Muito Obrigado!