Macro para procurar e substituir não funciona no Linux, só no Windows?

Boa noite.

Tenho uma planilha no libreoffice que insiro alguns dados e inclusive faz alguns calculos.

Tenho uma macro que é chamada através de um botão, que abre um documento modelo de texto chamado “modelo.ott”, e pega campos da planilha e substitui por expressoes de mesmo nome no arquivo de texto, as quais estão entre os simbolos “<<” e “>>”.

Essa macro tem funcionado no LIBREOFFICE WINDOWS muito bem, e tem me ajudado a gerar automaticamente documentos por mais de 4 anos.

Ao que parece a API “com.sun.star.ServiceManager” só roda no windows.

Tenho tentado encontrar uma solução para converter a macro para que ela rode em linux, ou até mac.

Só falta isso para que eu fique livre.

Alguém usa uma solução parecida que roda no linux, ou pode me dar uma referência para reescrever a macro?

Obrigado.

Luiz Carlos de Arruda Jr.

A macro resumida é essa:

Sub completaDocumento(enderecoWeb as String)
    'Variaveis do Calc
    Dim oDocCalc
    Dim oSheets
    Dim oSheet
    Dim oCell
    Dim val
    DocCalc = ThisComponent
    oSheets = oDocCalc.Sheets
    'Variaveis do Write
    Dim oSM 'Root object for accessing OpenOffice from VB
    Dim oDesk, oDoc As Object 'First objects from the API
    Dim arg() 'Ignore it for the moment !
    Dim mmerge As Object
    'Instanciate OOo : this line is mandatory with VB for OOo API
    Set oSM = CreateObject("com.sun.star.ServiceManager")
    'Create the first and most important service
    Set oDesk = oSM.createInstance("com.sun.star.frame.Desktop")
    'Create a new doc
    Set oDoc = oDesk.LoadComponentFromUrl("file:///C:/modelo.ott", "_blank", 0, arg())
    ' jon code
    Dim objText As Object, objCursor As Object
    Set objText = oDoc.GetText
    Set objCursor = objText.createTextCursor
    if oSheets.hasbyName("Folha de Rosto") then
    oSheet = oSheets.getbyName("Folha de Rosto")
    'define objetos de find/replace
    Dim oSrch As Object
    Set oSrch = oDoc.createReplaceDescriptor
    ' colocar aqui as substituicoes
    oCell = oSheet.getCellRangeByName("fr_datacalculo") 'FR_DATACALCULO
    oSrch.setSearchString ("<<FR_DATACALCULO>>")
    oSrch.setReplaceString (oCell.getString())
    oDoc.replaceAll(oSrch)
    oCell = oSheet.getCellRangeByName("fr_contratante") 'FR_CONTRATANTE
    oSrch.setSearchString ("<<FR_CONTRATANTE>>")
    oSrch.setReplaceString (oCell.getString())
    oDoc.replaceAll(oSrch)
    oCell = oSheet.getCellRangeByName("fr_contratantequalificado") 'FR_CONTRATANTEQUALIFICADO
    oSrch.setSearchString ("<<FR_CONTRATANTEQUALIFICADO>>")
    oSrch.setReplaceString (oCell.getString())
    oDoc.replaceAll(oSrch)
    oCell = oSheet.getCellRangeByName("fr_emailcontratante") 'FR_EMAILCONTRATANTE
    oSrch.setSearchString ("<<FR_EMAILCONTRATANTE>>")
    oSrch.setReplaceString (oCell.getString())
    oDoc.replaceAll(oSrch)
    oCell = oSheet.getCellRangeByName("fr_contratado") 'FR_CONTRATADO
    oSrch.setSearchString ("<<FR_CONTRATADO>>")
    oSrch.setReplaceString (oCell.getString())
    oDoc.replaceAll(oSrch)
    oCell = oSheet.getCellRangeByName("fr_contratadoqualificado") 'FR_CONTRATADOQUALIFICADO
    oSrch.setSearchString ("<<FR_CONTRATADOQUALIFICADO>>")
    oSrch.setReplaceString (oCell.getString())
    oDoc.replaceAll(oSrch)
    end if
    Set oDoc = Nothing
    End Sub

.

Ola, @LuizCarlosdeArrudaJr, já tive diversos problemas com macros acionada pelo botão ( Barra de Controle de Formulários ), contornei o problema usando figuras geométrica e Atribui macros. Tente fazer esta alteração e veja o comportamento da macro.

Use Comentar para comentários e não Adicionar Respostas. Grato.