E aí pessoal, blz?!!

Hoje, atendendo a alguns pedidos da galera aqui, vou mostrar como localizar arquivos no hd de seu computador, via código, ou seja, através de macro VBA. Dessa maneira, é possível manipular o resultado da pesquisa da forma que desejar, seja validando os itens encontrados, calculando seus tamanhos, verificando seus tipos, relacionando seus nomes, imprimindo a pesquisa, etc. As possibilidades são diversas e dependerá da finalidade que você definir para o projeto.

Para explicar uma maneira de conseguir estes resultados, vou criar um exemplo de uma planilha que listará todas as músicas, em formato .mp3, presentes em seu computador, ou em qualquer pasta que o usuário quiser procurar. A macro solicitará ao usuário em qual pasta deverá fazer a busca e listará o resultado na planilha.

Vejamos como fazer.

Inserindo o código

 

Primeiramente, vamos acessar o ambiente VBA. Para isso, tecle ALT+F11.

Insira dois Módulos no projeto e nomeie-os MóduloAPI e MóduloPesquisa, respectivamente. Veja abaixo os códigos que você deverá escrever em cada um deles.

MóduloPesquisa

Sub Listar_arquivos_mp3()
Dim i As Long
Dim sh As Worksheet
Dim iSomaMb As Double
Dim sPasta As Variant
Dim iLinha As Long

    Set sh = ThisWorkbook.ActiveSheet

    'Exibe a caixa para escolha da pasta onde será feita a pesquisa
    sPasta = GetPasta

    If sPasta = "" Then
        Exit Sub        'Cancela pesquisa
    End If

    'Apaga o conteúdo
    sh.Range("B:C").EntireColumn.ClearContents

    'Escreve o cabeçalho
    sh.Cells(4, 2).Value = "Música"
    sh.Cells(4, 3).Value = "Tamanho (Mb)"

    'Define a linha inicial da listagem
    iLinha = 5

    Application.StatusBar = "Aguarde... Pesquisando ... "

    'Usa o objeto de pesquisa
    With Application.FileSearch
        .LookIn = sPasta                        'Define a pasta onde será pesquisado
        .Filename = "*.mp3"                     'Define o termo da pesquisa
        .SearchSubFolders = True                'Informa se será feita a pesquisa nas subpastas
        .Execute                                'Executa a pesquisa  Ohhhhh!!!!

        'Percorre os itens encontrados e escreve na planilha
        For i = 1 To .FoundFiles.Count
            sh.Cells(iLinha, 2).Value = .FoundFiles(i)
            sh.Cells(iLinha, 3).Value = CDbl(Format((FileLen(.FoundFiles(i)) / 1048576), "0.00"))

            iSomaMb = iSomaMb + sh.Cells(iLinha, 3).Value
            iLinha = iLinha + 1

            Application.StatusBar = "Preenchendo lista ... " & Format(i / .FoundFiles.Count, "0%")
        Next i

        sh.Cells(1, 2).Value = "Músicas em " & sPasta
        sh.Cells(2, 2).Value = "Total de Músicas: " & .FoundFiles.Count
        sh.Cells(3, 2).Value = "Espaço Utilizado: " & Format(iSomaMb, "0.00") & " MB"
    End With

    sh.Range("A1").Select
    Application.StatusBar = False

End Sub

MóduloAPI

'Declarações API
Private Type BROWSEINFO
    hOwner As Long
    pidlRoot As Long
    pszDisplayName As String
    lpszTitle As String
    ulFlags As Long
    lpfn As Long
    lParam As Long
    iImage As Long
End Type

Private Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" _
    (lpBrowseInfo As BROWSEINFO) As Long
Declare Function SHGetPathFromIDList Lib "shell32" (ByVal itemID As Long, ByVal path As String) As Long

Private Const BIF_RETURNONLYFSDIRS = &H1

Function GetPasta() As String

    Dim bnfo As BROWSEINFO
    Dim sCaminho As String
    Dim lIndice As Long
    Dim vJanela As Variant
    Dim iPosicao As Integer
    Dim sPasta As String

    sPasta = ""

    'A pasta raiz é o Desktop:
    bnfo.pidlRoot = 0&

    'Título
    bnfo.lpszTitle = "Selecione a pasta onde procurar"

    'Tipo de dado retornado:
    bnfo.ulFlags = &H1

    'Mostra a janela:
    vJanela = SHBrowseForFolder(bnfo)

    'Analisa e trata o resultado:
    sCaminho = Space(512)
    lIndice = SHGetPathFromIDList(ByVal vJanela, ByVal sCaminho)
    If lIndice Then
        iPosicao = InStr(sCaminho, Chr(0))
        sPasta = Left(sCaminho, iPosicao - 1)
    End If

    GetPasta = sPasta

End Function

Bom, não vou explicar agora o MóduloAPI, pois, não está no escopo deste artigo. Ele será usado apenas para permitir a exibição da tela para escolha da pasta para a busca dos arquivos. Usaremos a função GetPasta deste módulo. Numa próxima oportunidade, farei um artigo sobre as caixas de diálogo do Windows.

Já o MóduloPesquisa, apesar de seu código bem comentado, explicarei alguns detalhes a mais.

Na linha 8, defino a planilha ativa, para receber os resultados da pesquisa. Ou seja, nesta planilha é que deverá ser preparada e formatada para escrever os nomes das músicas encontradas na pesquisa. Nós poderíamos, também, colocar o resultado em uma caixa de listagem dentro de um formulário, isso depende da forma como eu quero trabalhar os dados. Nós vamos imprimí-los na planilha mesmo. Veja na figura como ficaria a formatação desta planilha para receber os dados encontrados na busca.

 

Na linha 32, .Filename = “*.mp3″, é onde definimos o que estamos buscando. Neste caso, tudo que termine com .mp3. Caso você deseje procurar por outro tipo de arquivo é nesta linha que você tem que alterar. Se quiser buscar apenas planilhas, pode ficar “*.xls” ou pesquisar fotos “*.jpg”. Ou ainda, pelos nomes dos arquivos “Currículo.doc” ou “Trabalho de Informática”. Você é quem define.

 

Executando a Macro

 

Antes de rodarmos a macro para efetuar a pesquisa, vamos definir um botão para acessar a rotina Listar_arquivos_mp3(). Faça algo semelhante ao da figura acima, clicque em Caixa de Texto, na barra de ferramentas Desenho, e escreva “Pesquisar Músicas em MP3“. Em seguida, clique com o botão direito do mouse sobre esta caixa e selecione a opção Atribuir macro… e escolha a macro Listar_arquivos_mp3.

Salve a planilha.

Agora, clique neste botão que acabamos de criar. Surgirá a tela para selecionarmos a pasta base para nossa busca de músicas em Mp3. Escolha uma pasta e clique em OK.

Dependendo da pasta que você escolher, se for uma pasta grande, ou seja, com muitos arquivos e pastas, a macro poderá demorar um pouco para finalizar, e, poderá apresentar a mensagem “(não respondendo)”. Não se assuste e nem aborte a função, pois, ela está executando sim, apenas está varrendo muitas pastas em busca dos arquivos mp3. Nos meus testes aqui, ficava em torno de 1 a 2 minutos, mas, eu tinha poucas músicas aqui.

Enfim, o resultado é bem legal e dá para adaptar às suas necessidades perfeitamente. No final do artigo deixei o link para vocês baixarem o arquivo de exemplo.

 

Bem. Então é isso. Não se esqueçam de nos seguir no twitter e assinar nossa newsletter. Assim, você nos ajuda e fica sabendo de todas as novidade aqui do site, ok.

Abração.

UPDATE:

Esta macro não roda nas versões superiores ao Excel 2003, por esta razão escrevi este outro artigo aqui: Update: Macro para Localizar arquivos no Computador – Busca mp3

Leiam esta atualização e baixem o arquivo que disponibilizei lá.

Antes de efetuar o download do arquivo de exemplo, convido você a socializar conosco.

Escolha uma das opções abaixo. Seguir no twitter, assinar nossa Newsletter...

Isso nos ajuda na divulgação do site e te permite ficar sempre atualizado das novidades. Fico muito grato pela sua colaboração.

Digite seu email:

Você receberá um email para ativar o cadastro, ok!