Views

Important:

Quaisquer necessidades de soluções e/ou desenvolvimento de aplicações pessoais/profissionais, que não constem neste Blog podem ser tratados como consultoria freelance à parte.

...

15 de maio de 2013

VBA Word - Abra um documento e encontre uma Palavra nele - Function to open/get a Word document and Find a string

Inline image 1












O propósito da função VBA disponibilizada a seguir é o de abrir um documento do MS Word e encontrar a próxima ocorrência de uma seqüência específica. Além disso, teremos mais um excelente exemplo do uso do late binding com essa automação vinculada à função AppActivate. Ahh, e sim, este é um post para usuários avançados.

É sempre bom relembrar que uma das vantagens de usarmos late binding (uso de objetos genéricos, como o objWd na função), é o de não sermos obrigados a fazermos uma referência a uma biblioteca em particular. Termos a liberdade de não efetuarmos uma referência direta liber-nos da necessidade de sabermos qual a versão do MS Word que está sendo usada pelo usuário final da aplicação. Mas como não existe almoço de graça, a desvantagem é a de que precisamos definir um constante para ser usado no MS Word, razão pela qual o wdFindContinue foi definido.

O AppActivate torna fácil ativarmos um aplicativo específico que estiver aberto na tela. Como? Fazendo referência direta a legenda contida no título da respectiva janela ativa. Neste caso, quando o texto não é encontrado, o documento do MS Word ainda fica ativo, sendo necessário apenas ativar o código do aplicativo em execução antes de mostrarmos a caixa de mensagem. Se não tivéssemos esse cuidado o usuário poderia acabar por ouvir aquele 'ding' quando a caixa de mensagem aparecesse, sendo coberta pelo documento do MS Word e despercebida pelo usuário.

Caso utilize um documento do MS Word como um manual do usuário para o seu aplicativo, digamos do MS Access, por exemplo, poderá usar essa função VBA no evento Click de um botão que abra o documento e detecte a posição da palavra ou expressão desejada num determinado título u trecho do texto no documento. Mas, caso clicasse no botão novamente, quando o documento já estivesse aberto, a próxima ocorrência do texto seria encontrada, tornando-se uma maneira simples de fornecer ajuda sensível ao contexto. Chique hein!

Function OpenAndFindWordExpression (WordFileName As String, Optional WordFindText) As Boolean
' If the Microsoft Word file specified in WordFileName is not open yet, it will
' be opened.  If a value for WordFindText is specified, it will find the next
' occurance of the value.
' Copyright © 2009 Extra Mile Data

On Error GoTo Err_OpenWordAndFind
   
    Dim strPrompt As String
    Dim objWd As Object
    Dim strAppName As String
    Dim intPos As Integer
    Const wdFindContinue As Integer = 1
    
    ' Get the name of the Word document from the path in WordFileName
    ' by finding the last \ and grabbing all the characters to the right
    ' of that position.

    Let intPos = InStrRev(WordFileName, "\")
    Let strAppName = Right(WordFileName, Len(WordFileName) - intPos)
    
    ' Se o documento do Word estiver aberto ele efetuará a busca, caso não esteja aberto, o abrirá.    
    ' Torna a aplicação visível.
    Let objWd.Application.Visible = True
  
    If Not IsMissing(WordFindText) Then
        With objWd.Application.Selection.Find
            Let .Text = WordFindText
            Let .Forward = True
            Let .Wrap = wdFindContinue
            Let .Format = False
            Let .MatchCase = False
            Let .MatchWholeWord = False
            Let .MatchWildcards = False
            Let .MatchSoundsLike = False
            Let .MatchAllWordForms = False
            
            .Execute            
      
            If Not .Found Then      
                AppActivate Application.Name

                Let strPrompt = "O termo de busca '" & WordFindText & "' não pôde ser encontrado."
                MsgBox strPrompt, vbInformation + vbOKOnly, "Não encontrado!"

                AppActivate strAppName

                Let OpenWordAndFind = False

                GoTo Exit_OpenWordAndFind
            End If
        End With
    End If
    
    AppActivate strAppName
    
    Let OpenWordAndFind = True
    
Exit_OpenWordAndFind:
    On Error Resume Next

    Set objWd = Nothing
    Exit Function
    
Err_OpenWordAndFind:
    Select Case Err.Number
    Case 432

        strPrompt = "Este documento do MS Word não pôde ser encontrado:" _
        & vbCrLf & vbCrLf & WordFileName
        MsgBox strPrompt, vbInformation, "Não encontrado!"
    Case Else
        MsgBox Err.Number & " " & Err.Description, , "OpenWordAndFind"
    End Select
    
    Let OpenWordAndFind = False
    Resume Exit_OpenWordAndFind
End Function


Tags: VBA, Word, late binding, find, document, busca, procura, search, 




Nenhum comentário:

Postar um comentário

eBooks VBA na AMAZOM.com.br

Vitrine