Você já escreveu uma macro que abre um arquivo Excel com o caminho fixo, digitado diretamente no código, algo como Workbooks.Open "C:\pasta\arquivo.xlsx". Funciona bem até o dia em que o arquivo muda de nome, é movido de pasta, ou até o dia em que outra pessoa da equipe, com uma estrutura de pastas diferente no computador, tenta rodar a mesma macro e recebe um erro.
Deixar o caminho do arquivo fixo no código torna a macro frágil e pouco reutilizável — qualquer mudança na localização do arquivo obriga a abrir o editor do VBA e reescrever o caminho manualmente, algo que a maioria dos usuários finais não sabe fazer sozinho.
Neste artigo iremos mostrar como usar a função GetOpenFilename do VBA para abrir a janela padrão de seleção de arquivos do Windows dentro da sua macro, permitindo que o próprio usuário escolha visualmente qual arquivo abrir, sem precisar digitar nem saber o caminho completo.
Youtube
Assista ao vídeo abaixo, caso prefira aprender a como usar a função GetOpenFilename no VBA assistindo a um vídeo.
Não se esqueça de se INSCREVER no nosso canal.
O que a GetOpenFilename realmente faz
A função Application.GetOpenFilename abre a janela nativa do Windows para escolha de arquivos — a mesma janela que aparece quando você clica em Arquivo > Abrir dentro do próprio Excel. A diferença fundamental é que essa função não abre o arquivo selecionado sozinha: ela apenas retorna, como texto, o caminho completo do arquivo escolhido pelo usuário. Cabe ao seu código, depois, usar esse caminho retornado para efetivamente abrir o arquivo com Workbooks.Open.
O uso mais básico da função é assim:
Sub SelecionarArquivo()
Dim caminhoArquivo As Variant
caminhoArquivo = Application.GetOpenFilename()
If caminhoArquivo <> False Then
MsgBox "Arquivo escolhido: " & caminhoArquivo
End If
End Sub
Note que a variável que recebe o resultado precisa ser do tipo Variant, e não String. Isso porque, se o usuário clicar em “Cancelar” na janela em vez de escolher um arquivo, a função retorna o valor lógico False, e uma variável String não consegue armazenar False — apenas texto. Por isso a verificação If caminhoArquivo <> False Then é essencial em todo código que usa essa função: sem ela, a macro tenta usar um caminho que não existe e gera erro.
Parâmetros da GetOpenFilename
A função aceita alguns parâmetros opcionais que controlam o comportamento e a aparência da janela de seleção:

O parâmetro FileFilter é o mais usado na prática: ele define quais tipos de arquivo aparecem na lista suspensa de filtro da janela, escondendo arquivos de outras extensões e evitando que o usuário selecione, por engano, um arquivo incompatível com o que a macro espera processar. A sintaxe do FileFilter combina uma descrição textual com a extensão real, separadas por vírgula:
Sub SelecionarSoArquivosExcel()
Dim caminhoArquivo As Variant
caminhoArquivo = Application.GetOpenFilename( _
FileFilter:="Arquivos do Excel (*.xlsx; *.xls), *.xlsx; *.xls", _
Title:="Selecione a planilha para importar")
If caminhoArquivo <> False Then
Workbooks.Open caminhoArquivo
End If
End Sub
Nesse exemplo, a janela mostra apenas arquivos com extensão .xlsx ou .xls na lista, e o título da janela é personalizado para “Selecione a planilha para importar”, orientando melhor o usuário sobre o que ele deve escolher naquele momento.
Permitindo selecionar mais de um arquivo (MultiSelect)
Por padrão, a GetOpenFilename permite escolher apenas um arquivo por vez. Para permitir que o usuário selecione vários arquivos de uma só vez (segurando Ctrl ou Shift na janela do Windows), use o parâmetro MultiSelect:=True. Quando esse parâmetro está ativo, o retorno da função deixa de ser um único texto e passa a ser um array, com um caminho de arquivo em cada posição:
Sub SelecionarVariosArquivos()
Dim arquivosSelecionados As Variant
Dim i As Integer
arquivosSelecionados = Application.GetOpenFilename( _
FileFilter:="Arquivos do Excel (*.xlsx), *.xlsx", _
MultiSelect:=True)
If IsArray(arquivosSelecionados) Then
For i = LBound(arquivosSelecionados) To UBound(arquivosSelecionados)
Workbooks.Open arquivosSelecionados(i)
Next i
Else
MsgBox "Nenhum arquivo foi selecionado."
End If
End Sub
A verificação IsArray(arquivosSelecionados) substitui a comparação com False usada no exemplo de seleção única, porque quando MultiSelect:=True e o usuário cancela a janela, o retorno também é False, mas quando ele seleciona ao menos um arquivo, o retorno é sempre um array — mesmo que seja um array com um único item.
Guardando o caminho em uma variável para reutilizar depois
Um padrão comum é usar a GetOpenFilename apenas para capturar o caminho, guardando-o em uma variável String separada, para poder reutilizar esse caminho em outras partes da macro sem precisar abrir a janela de seleção de novo:
Sub CapturarCaminhoEReutilizar()
Dim caminho As Variant
Dim caminhoTexto As String
caminho = Application.GetOpenFilename(FileFilter:="Arquivos do Excel (*.xlsx), *.xlsx")
If caminho = False Then
MsgBox "Nenhum arquivo selecionado. A macro será encerrada."
Exit Sub
End If
caminhoTexto = CStr(caminho)
'a partir daqui, "caminhoTexto" pode ser usado quantas vezes for necessário
Workbooks.Open caminhoTexto
End Sub
Esse padrão de sair da macro com Exit Sub assim que se confirma que o usuário cancelou a seleção evita que o restante do código tente processar um caminho inexistente, prevenindo erros mais à frente na execução.
✅ Sempre use uma variável Variant (nunca String) para receber o retorno direto da GetOpenFilename, por causa do valor False em caso de cancelamento.
❌ Não use a GetOpenFilename esperando que ela abra o arquivo sozinha — ela só retorna o caminho, quem abre é o Workbooks.Open logo depois.
Disponibilidade em outras versões
A função Application.GetOpenFilename está disponível em todas as versões do Excel para Windows com suporte a VBA: 2010, 2013, 2016, 2019 e 365. No Excel para Mac, essa função tem um comportamento diferente e mais limitado, já que a janela de seleção de arquivos do macOS funciona de forma distinta da do Windows — em versões recentes do Excel para Mac, ela geralmente funciona, mas vale testar antes de disponibilizar a macro para usuários de Mac. O Excel Online e o Google Sheets não suportam VBA, então esse recurso só existe na versão desktop do Excel para Windows.
Perguntas frequentes
Qual é a diferença entre GetOpenFilename e Workbooks.Open?
A GetOpenFilename apenas abre a janela de seleção de arquivos e retorna o caminho escolhido como texto, sem abrir o arquivo. O Workbooks.Open é quem efetivamente abre o arquivo no Excel, usando o caminho retornado pela GetOpenFilename como parâmetro.
Por que preciso usar uma variável Variant em vez de String para guardar o resultado?
Porque quando o usuário clica em Cancelar na janela de seleção, a função retorna o valor lógico False, que uma variável do tipo String não consegue armazenar. A variável Variant aceita tanto texto quanto o valor False, permitindo verificar corretamente se houve cancelamento.
Como permitir que o usuário selecione vários arquivos de uma vez?
Use o parâmetro MultiSelect:=True dentro da função. Quando ativado, o retorno passa a ser um array com o caminho de cada arquivo selecionado, que pode ser percorrido com um loop For para abrir todos os arquivos escolhidos.
Compartilhe ou Comente
Se você curtiu esse artigo aonde mostramos como usar a função GetOpenFilename no VBA para escolher um arquivo no Excel, compartilhe com as suas redes sociais e não se esqueça de deixar um comentário aqui embaixo caso você tenha ficado com alguma dúvida.
Sua macro ainda tem algum caminho de arquivo fixo digitado no código? Já teve algum problema quando um arquivo mudou de lugar e a macro parou de funcionar? Conta para nós nos comentários!