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!
Animal essa função! Parabéns!!!
ResponderExcluirCara eu estava precisando disso !
ResponderExcluirParabés ! sdb
Muito obrigado mesmo!
ResponderExcluirBoa noite.
ResponderExcluirEu sou novo em programação em vba.
Como coloco essa função para funcionar por um botão e retornar numa célula?
Obrigado
Parabéns pela função... era exatamente um exemplo que estava procurando e agora vou adptar à minha realizada
ResponderExcluirBoa tarde, Como posso adaptar este código para utilizar no Excel?
ResponderExcluirBom dia, sua função é bastante útil.
ResponderExcluirAmigo, como faço para mostrar apenas o nome do arquivo e não o caminho todo?
ResponderExcluirSensacional essa função Parabéns ajudou pacas!
ResponderExcluirSensacional!! Em pleno 2020 e o código continua atual. Parabéns!
ResponderExcluirDepois que li seu comentário foi que notei que o código é de abr/13.
ExcluirImpressionante mesmo.
Wauuuu!! Me ajudou muito, exatamente como eu precisava!!!
ResponderExcluirNã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