Notifications
Clear all

Loop baixo para cima

6 Posts
3 Usuários
0 Reactions
1,153 Visualizações
(@guedesjr7)
Posts: 4
New Member
Topic starter
 

Pessoal, bom dia!

Possuo uma macro que rodo no Word que procura determinadas palavras e retoma uma msxbox. Esse é o código da instrução:

  Application.Selection.Find.ClearFormatting
    If Application.Selection.Find.Execute("^pRELATÓRIO^p") = True Then
    Msgbox "Relatório encontrado", vbInformation, "Item de verificação"
    Else: Msgbox "Não encontrei o relatório na minuta que analisei. Se houver algum ajuste a ser feito, lembre-se de modificar também no relatório!", vbInformation, "Item de verificação"
    End If

Ao executar a macro, a busca é feita progressivamente. Contudo, necessito que ela seja feita do final da página para o início. Ou seja: leitura na ordem inversa.

Já pesquisei bastante... Mas não sei qual expressão acrescentar no meu código...

Por favor, me ajudem.

 
Postado : 07/02/2018 6:16 am
(@klarc28)
Posts: 971
Prominent Member
 

Algo parecido com isto, não manjo de Word.

  
  'Set doc = appWord.Documents.Open("C:Tema.doc")
Set doc = ThisDocument
For i =  doc.Paragraphs.Count to 1 step -1

Paragraphs(i).Select
Application.Selection.Find.ClearFormatting
    If Application.Selection.Find.Execute("^pRELATÓRIO^p") = True Then
    Msgbox "Relatório encontrado", vbInformation, "Item de verificação"
    Else: Msgbox "Não encontrei o relatório na minuta que analisei. Se houver algum ajuste a ser feito, lembre-se de modificar também no relatório!", vbInformation, "Item de verificação"
    End If
      

    Next i
 
Postado : 07/02/2018 6:31 am
(@guedesjr7)
Posts: 4
New Member
Topic starter
 

Primeiramente, klarc28, muito obrigado!! É a primeira vez que alguém responde a uma pergunta minha no fórum!! Valeu mesmo!!

Na linha "Paragraphs(i).Select", deu a seguinte mensagem de erro: "Sub ou Function não definida".

Como que posso definir?

 
Postado : 07/02/2018 7:10 am
(@klarc28)
Posts: 971
Prominent Member
 
 
Sub teste (  )

'Set doc = appWord.Documents.Open("C:Tema.doc")
Set doc = ThisDocument
For i =  doc.Paragraphs.Count to 1 step -1

ActiveDocument.Paragraphs(i).Range.Select
Application.Selection.Find.ClearFormatting
    If Application.Selection.Find.Execute("^pRELATÓRIO^p") = True Then
    Msgbox "Relatório encontrado", vbInformation, "Item de verificação"
    Else: Msgbox "Não encontrei o relatório na minuta que analisei. Se houver algum ajuste a ser feito, lembre-se de modificar também no relatório!", vbInformation, "Item de verificação"
    End If
      

    Next i

End Sub
 
Postado : 07/02/2018 8:02 am
Basole
(@basole)
Posts: 487
Reputable Member
 

Experimente esta sugestão:

Declare esta variável fora da sub:

Dim priTurn As Boolean

Substitua o seu codigo, por:

With Selection
          If priTurn = False Then
          .EndKey Unit:=wdStory
          End If
          With .Find
            .ClearFormatting
            .Text = "^pRELATÓRIO^p"
            .Forward = False
            .Format = True
            .MatchWholeWord = False
             If .Execute = True Then
                   MsgBox "Relatório encontrado", vbInformation, "Item de verificação"
                   priTurn = True
            Else
                   MsgBox "Não encontrei o relatório na minuta que analisei. Se houver algum ajuste a ser feito, " & _
                           "lembre-se de modificar também no relatório!", vbInformation, "Item de verificação"
                       priTurn = False
             End If
            Selection.Collapse wdCollapseStart
            .Forward = True
            .Execute
        End With
    End With

Click em se a resposta foi util!

 
Postado : 07/02/2018 9:26 am
(@guedesjr7)
Posts: 4
New Member
Topic starter
 

Top demais, Basole!! Deu super certo!!! Muito obrigado a ti e ao klarc28!

 
Postado : 07/02/2018 9:57 am