Visual Basic 6 - Localizando textos em arquivos com o Word


O nome deste artigo deveria ser : "Parasitando o Word" . Por quê ? porque eu vou usar os recursos do Word para efetuar a localização de texto em arquivos para atingir o meu objetivo.

 

O Word é o processador de texto padrão do mercado e quase todo mundo tem uma cópia instalada (legalizada já é outra história...). Muitas vezes o usuário usa somente uns 20% dos recursos que o Word possui , então ele fica ali quietinho instalado sem fazer quase anda o tempo inteiro a não ser servir como um editor de textos.

 

Pois neste programa eu vou por o Word para trabalhar usando o recurso de localizar textos que ele possui. Vou criar uma aplicação Visual Basic na qual o usuário seleciona os arquivos nos quais deseja procurar um texto , informa o texto e a seguir clica no botão localizar. Neste momento o Word entra em ação e usando a automação OLE eu cria uma instância do Word na minha aplicação VB e efetuo a busca do texto. Ao final temos a opção de abrir o documento no Word. Funciona em 90% dos casos. Se quiser 100% terá que codificar você mesmo a rotina de busca e abertura de arquivos.

 

O formulário principal da nossa aplicação usara os controles : DriveListBox , DirListBox , FileListBox , ListBox , CommandButton , TextBox e terá a seguinte aparência:

 

 

A interface é simples e intuitiva.

Vamos agora ao código . Ele esta comentado e por isto irei me ater somente ao essencial :

 

As rotinas relacionadas aos controles DirListBox , FileListBox e DriveListBox são :

 

Private Sub Dir1_Change()
    File1.Path = Dir1.Path
End Sub

Private Sub Drive1_Change()
    Dir1.Path = Drive1.Drive
End Sub

Private Sub Form_Load()
    List1.Clear
End Sub

 

A rotina cmdLocaliza é mais importante do aplicativo ela localiza o texto nos arquivos ; seu código é dado a seguir :

 

Private Sub cmdLocaliza_Click()

'define as variáveis usadas nesta rotina
Dim wd As New Word.Application
Dim intervalo As Word.Range
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim strCaminho As String
Dim NumArquivos As Integer
Dim strBufferArquivo() As String
Dim strMsg As String

On Error GoTo trata_erro

List1.Clear

'se não informou o texto emite aviso ao usuario
If txtTexto.Text = "" Then
   strMsg = "Não foi informado nenhum texto para localizar." & vbCrLf & vbCrLf
   strMsg = strMsg & "Informe um texto."
   MsgBox strMsg, vbCritical, "Texto não informado"
   txtTexto.SetFocus
   Exit Sub
End If

'obtem a quantidade de arquivos exibidas no componente file1
i = File1.ListCount

For j = 0 To i - 1
     'verifica se o arquivo esta selecionado
     If File1.Selected(j) = True Then
        'se estiver selecionado então incrementa o contador de arquivos
        NumArquivos = NumArquivos + 1
     End If
Next j

'se não selecionou nenhum arquivo avisa
If NumArquivos = 0 Then
   strMsg = "Não foi selecionado nenhum arquivo para busca." & vbCrLf & vbCrLf
   strMsg = strMsg & "Selecione um ou mais arquivos "
   strMsg = strMsg & "files."
   MsgBox strMsg, vbCritical, "Arquivo(s) não selecionado(s)"
   File1.SetFocus
   Exit Sub
End If

'redefina o array com o numero de arquivos selecionados
ReDim strBufferArquivo(NumArquivos - 1)


For j = 0 To i - 1
   'verifica se o arquivo esta selecionado e inclui o caminho completo do arquivo no array
   If File1.Selected(j) = True Then
     strBufferArquivo(k) = File1.Path & "\" & File1.List(j)
      k = k + 1
   End If
Next j

'zera as variáveis
i = 0
j = 0
k = 0

'inicia um laço com o número de arquivos selecionados
For j = 0 To UBound(strBufferArquivo)

'pega o caminho do arquivo e nome do arquivo
strCaminho = strBufferArquivo(j)
'desabilita o botão localiza
cmdLocaliza.Enabled = False

frmMain.MousePointer = vbHourglass
frmMain.Caption = "Procurando... " & strCaminho

'abre o documento no word
wd.Documents.Open (strCaminho)
wd.Documents(1).Activate

'define o intervalo para busca
Set intervalo = wd.ActiveDocument.Content
'tenta localizar a palavra no word
intervalo.Find.Execute FindText:=txtTexto.Text, Forward:=True


While intervalo.Find.Found = True
   i = i + 1
   intervalo.Find.Execute FindText:=txtTexto.Text
Wend

' se localizou o texto inclui o caminho e nome do arquivo na caixa de listagem
If i > 0 Then
   List1.AddItem strCaminho
   i = 0
Else
   List1.AddItem "Nada foi localizado para sua seleção"
End If
Next j

'encerra e fecha o word
wd.Quit
Set wd = Nothing
frmMain.Caption = "Localização completa."
frmMain.MousePointer = vbDefault
cmdLocaliza.Enabled = True
Exit Sub

trata_erro:
MsgBox " Ocorreu um erro durante a busca do texto : " & Err.Description, vbCritical, "Erro ao localizar texto"
frmMain.MousePointer = vbDefault
End Sub

 

Outra rotina importante é cmdAbrirDocumento - que abre o documento selecinado. Seu código é o seguinte :

 

Private Sub cmdAbrirDocumento_Click()
Dim wd As New Word.Application

On Error GoTo cmdAbrirDocumentoErr

'abre o documento selecionado no word
If List1.Selected(List1.ListIndex) = True Then
    wd.Documents.Open (List1.List(List1.ListIndex))
   wd.Visible = True
End If
Exit Sub

cmdAbrirDocumentoErr:

Select Case Err.Number
 Case 381
   MsgBox "Selecione um documento.", vbCritical, "Erro ao selecionar documento"
   List1.SetFocus
End Select

End Sub
Private Sub List1_DblClick()
Dim wd As New Word.Application

'abre o documento selecionado no word (duplo click)
If List1.Selected(List1.ListIndex) = True Then
    wd.Documents.Open (List1.List(List1.ListIndex))
    wd.Visible = True
End If

End Sub

Abre o documento selecionado

Abre o documento com duplo click

 

Abaixo a rotina para encerrar a aplicação:

 

Private Sub cmdSair_Click()
If (MsgBox("Confirma saida do sistema ?", vbYesNo, "Encerra Sistema")) = vbYes Then
     End
End If
End Sub

 

A seguir uma imagem que representa a aplicação em ação localizando e abrindo o documento com o Word:

 


Agora o resto é com você até o próximo artigo ... ( a aplicação completa esta no
Super DVD Visual Basic)
 

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti