segunda-feira, 8 de abril de 2013

Abrir Janela para Selecionar Arquivo no VBA

Boa noite, pessoal!

Recentemente tive de criar uma ferramenta em Access onde o usuário deveria indicar o caminho de uma planilha para importar no banco de dados. O caminho do arquivo deveria ser flexível e fácil de alterar, e a melhor maneira de fazê-lo pareceu ser então com as já conhecidas telinhas de seleção de arquivos do Windows.

Após alguma leitura na internet, encontrei a codificação necessária. É bastante simples, mas muito útil no desenvolvimento de soluções e basicamente não há alterações para uso em ambas as ferramentas (Excel/Access). Segue o código comentado:



Function AbrirArquivo()

    Dim Caminho As String 'Caminho do arquivo
    Dim fDialog As Office.FileDialog
    
    'Configura caixa de seleção do arquivo
    Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
    With fDialog
        .AllowMultiSelect = False 'Habilita ou desabilita a seleção de múltiplos arquivos
        .Title = "Selecionar arquivo..."
        '.InitialFileName =  'Caminho inicial para seleção, não utilizado no exemplo
        
        'Configura filtros da caixa de seleção
        .Filters.Clear 'Limpa os filtros
        .Filters.Add "Arquivos Excel - .xlsb", "*.xlsb" 'Adiciona filtro para arquivos .xlsb
        .Filters.Add "Arquivos Excel - .xls", "*.xls" 'Adiciona filtro para arquivos .xlsb
        
        If .Show = True Then    'Se o parâmetro .Show for igual à True significa
                                'que algum arquivo foi selecionado
            Caminho = .SelectedItems.Item(1)    'Local + arquivo selecionados são passados para
                                                'a variável chamada de "Caminho"
        Else
            MsgBox "Você clicou em cancelar"
        End If
        
    End With

    AbrirArquivo = Caminho 'Atribui o caminho do arquivo ao retorno da função

End Function



Caso chamada dentro de uma célula do Excel, a função acima irá abrir a janela para seleção do arquivo e retornar o caminho indicado acrescido do nome do arquivo! Por exemplo, ao selecionar o arquivo "Exemplo.xlsb" na raiz do disco rígido "C:\", a função irá retornar a string "C:\Exemplo.xlsb". Ela também pode ser chamada diretamente de outra subrotina.

É isso, pessoal... Qualquer dúvida, sugestões ou consultoria, por favor escrevam para guiamacroexcel@gmail.com!

Obrigado e até a próxima!

13 comentários:

  1. Cara eu estava precisando disso !
    Parabés ! sdb

    ResponderExcluir
  2. Boa noite.
    Eu sou novo em programação em vba.
    Como coloco essa função para funcionar por um botão e retornar numa célula?
    Obrigado

    ResponderExcluir
  3. Parabéns pela função... era exatamente um exemplo que estava procurando e agora vou adptar à minha realizada

    ResponderExcluir
  4. Boa tarde, Como posso adaptar este código para utilizar no Excel?

    ResponderExcluir
  5. Bom dia, sua função é bastante útil.

    ResponderExcluir
  6. Amigo, como faço para mostrar apenas o nome do arquivo e não o caminho todo?

    ResponderExcluir
  7. Sensacional essa função Parabéns ajudou pacas!

    ResponderExcluir
  8. Sensacional!! Em pleno 2020 e o código continua atual. Parabéns!

    ResponderExcluir
    Respostas
    1. Depois que li seu comentário foi que notei que o código é de abr/13.
      Impressionante mesmo.

      Excluir
  9. Wauuuu!! Me ajudou muito, exatamente como eu precisava!!!

    ResponderExcluir
  10. Não consigo rodar. Recebo mensagem de erro em "fDialog As Office.FileDialog". Sabe me dizer qual suplemento eu preciso habilitar para fugir desse erro? Grato.

    ResponderExcluir