Notifications
Clear all

MACRO/VBA PARA LOCALIZAR E INSERIR TEXTO DO ARQUIVO

7 Posts
3 Usuários
0 Reactions
2,191 Visualizações
(@ancafa)
Posts: 0
New Member
Topic starter
 

Pessoal, criei um formulário no Excel e estou com dificuldade de completar um dos módulos integrados com o Word. Gostaria que alguém me ajudasse a completar os códigos faltantes na rotina abaixo.
No documento gerado é necessário localizar algumas partes do texto e, caso localizadas, selecioná-las e substituí-las por "inserir texto do arquivo". Porém, não estou conseguindo definir o código aplicável para condicionar que somente sejam substituídos e inseridos os textos dos arquivos cujos textos forem efetivamente localizados e, caso não existentes no documento, seguir com a rotina para a parte seguinte que precisa ser substituída.
A rotina é a seguinte:
'abrir o documento - localizar e selecionar cada um dos textos que serão substituídos - se não localizado, ir para o próximo - se localizado, selecionar e substituir por "inserir texto do arquivo" - ir para o próximo aplicando a rotina até o último - salvar o documento para revisão - finalizar a rotina.

Grato pelo retorno.

Sub GERAR_MINUTA()
'
' GERAR_MINUTA Macro
' GERAR DOCUMENTO PARA REVISÃO TEXTO
'
    Dim WORD As WORD.Application
    Dim DOC As WORD.Document
        
    WORD.Visible = True

    Set DOC = WORD.Documents.Open("C:UsersDocumentsDOCUMENTO-1.docx")

With DOC
.Application.Selection.Find.Text = "TEXTO1 TEXTO1 TEXTO1"
.Application.Selection.Find.Execute
.Application.Selection.InsertFile FileName:= "C:DOCUMENTOSTEXTO1 PARA INSERIR.docx" , Range:="", _
        ConfirmConversions:=False, Link:=False, Attachment:=False

.Application.Selection.Find.Text = "TEXTO2 TEXTO2 TEXTO2"
.Application.Selection.Find.Execute
.Application.Selection.InsertFile FileName:= "C:DOCUMENTOSTEXTO2 PARA INSERIR.docx" , Range:="", _
        ConfirmConversions:=False, Link:=False, Attachment:=False

.Application.Selection.Find.Text = "TEXTO3 TEXTO3 TEXTO3"
.Application.Selection.Find.Execute
.Application.Selection.InsertFile FileName:= "C:DOCUMENTOSTEXTO3 PARA INSERIR.docx" , Range:="", _
        ConfirmConversions:=False, Link:=False, Attachment:=False

With DOC

        .SaveAs2 ("C:UsersDocumentsDOCUMENTO-1.docx")
        
End With

Set DOC = Nothing
Set WORD = Nothing

End With

End Sub


 
Postado : 19/09/2017 3:23 pm
(@joebsb)
Posts: 0
New Member
 

Bom dia Ancafa...

Já pensou em utilizar o replace?

Com o replace, ele encontra e substitui o texto de uma string pelo que você definir......

A utilização é a seguinte:

Imagine o texto: "O rato roeu a roupa do rei de roma"

Se você quer substituir a palavra "roeu" nesse texto por "costurou", basta usar o replace da seguinte forma:

dim vartxt as string
vartxt = "O rato roeu a roupa do rei de roma"
vartxt = replace(vartxt ,"roeu","costurou")

Tenta aí e me diga se resolveu o problema...

Abraços

 
Postado : 20/09/2017 7:33 am
(@ancafa)
Posts: 0
New Member
Topic starter
 

Olá JoeBSB,

Agradeço a sua colaboração, porém o replace nesse caso não resolve, já que preciso do conteúdo do texto do arquivo que substituirá a palavra/frase localizada no documento.

Espero encontrar a solução para o meu projeto. Abraço.

 
Postado : 20/09/2017 9:22 am
(@joebsb)
Posts: 0
New Member
 

Coleguinha....

É mais complicado te ajudar sem poder visualizar o arquivo....

De qualquer forma... acabei de testar aqui a rotina usando o replace e funcionou direitinho....

Envio um arquivo com o exemplo que falei... basta executar a macro que vc vai ver a mágica acontecendo...

Deixei o código bem simples para vc poder entender o funcionamento... basicamente ele analisa parágrafo por parágrafo e faz as substituições necessárias.

Espero ter ajudado....

Abraços

 
Postado : 20/09/2017 10:46 am
(@ancafa)
Posts: 0
New Member
Topic starter
 

Caro JoeBSB (deve ser de Brasília né? Morei aí 5 anos),
Seu código funciona para substituição de frases pré definidas mas não para inserir texto de outro arquivo.
Vc pode testar nos arquivos que a substituição funciona com a macro do DOCUMENTO-1.docm, mas o erro na hora de localizar o Texto4 não consegui resolver, ou seja, preciso estabelecer as condições caso o texto não seja localizado para ignorar e ir para o próximo. Enfim, o replace sugerido por si só não é suficiente.

Seguem os arquivos para você testar e verificar eventual solução para os textos não localizados no documento (DOCUMENTO-1.DOCM)

Grato pela ajuda.

 
Postado : 20/09/2017 7:41 pm
(@teleguiado)
Posts: 0
New Member
 

Aqui funcionou a macro, não deu erro.

 
Postado : 21/09/2017 5:42 am
(@ancafa)
Posts: 0
New Member
Topic starter
 

Prezado Teleguiado,
Aí é que está o meu problema.
Se vc observar, não deveria rodar porque no Documento-1 não consta do documento a expressão "TEXTO4 TEXTO4 TEXTO4", então não poderia inserir o texto do arquivo "c:TEXTO4 PARA INSERIR.docx".
É justamente essa a minha dúvida para resolver: como controlo quando o comando .Application.Selection.Find.Text ou .Application.Selection.Find.Execute for "" para ele não inserir o texto, pois ele só deverá fazê-lo se encontrar o trecho indicado no conteúdo do documento. Há momentos em que ao invés de inserir ele dá erro ("o arquivo não foi encontrado. ele pode ter sido removido") e trava a macro para depuração da linha de comando. Preciso solução pra isso porque meus conhecimentos são limitados.

Grato por testar e ajudar.

 
Postado : 21/09/2017 1:58 pm