Blog

Postado em em 21 de janeiro de 2023

API de CEP no VBA – Como Buscar Endereços Usando o VBA?

Você sabia que é possível buscar endereços usando o Excel? Eu vou te mostrar como fazer isso com a API de CEP no VBA!

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

Fala, Impressionadores! Hoje você vai ver como buscar endereços com VBA!

Para conseguir tal feito, nós vamos fazer uso de uma API de CEP no VBA chamada ViaCEP. Ela vai permitir com que você faça uma busca através do CEP e obtenha várias informações a respeito daquele local.

Nós temos um outro post no Blog de como usar API no VBA, que ajuda a entender o que vamos mostrar na aula de hoje. Seria recomendável que você assista essa aula antes do post de hoje, que vem a seguir.

E aí, vamos aprender a buscar CEP com VBA para implementar nos seus projetos?

Inicialmente já temos uma tabela montada para receber as informações que vão ser conseguidas com o sucesso da API. Veja-a abaixo:

Como funciona?

Preencheremos um CEP, com pontos e hífen, como normalmente temos para esse código postal.

Ao clicar no botão de atualizar, o nosso código vai funcionar e retornar as informações apresentadas, até a linha 10.

Ativando referências no VBA

A seguir temos um fator super importante para o desempenho da API da forma como esperamos na aula de hoje: teremos que ativar duas referências, pra ser mais específicos.

São elas as referências “Microsoft WinHTTP Services” (como na foto abaixo) e também a “Microsoft Scripting Runtime”. Veja:

API de CEP no VBA

Após ativá-las, poderemos partir para o código que vai desempenhar a API de CEP no VBA, que vai fazer a busca de endereços com VBA, e que está a seguir:

Sub APIViaCEP()

'https://viacep.com.br/

Dim requisicao As New WinHttpRequest
Dim resposta As Object
Dim url As String, parametros As String, cep As String

Range("B2:B10").ClearContents

' Tratamento do CEP
cep = Replace(Replace(Replace(Range("B1").Value, ".", ""), "-", ""), " ", "")

If Len(cep) > 8 Then Exit Sub

' Definir a URL e os parâmetros
url = "https://viacep.com.br/ws/"
parametros = cep & "/json/"

' Enviar a requisição
requisicao.Open "Get", url & parametros
requisicao.Send

' Tratamento de erros
If requisicao.Status <> 200 Then
   MsgBox "Erro: " & requisicao.ResponseText
   Exit Sub
End If

' Converter o JSON
Set resposta = JsonConverter.ParseJson(requisicao.ResponseText)

' Tratar as informações
Cells(2, 2).Value = resposta("logradouro")
Cells(3, 2).Value = resposta("complemento")
Cells(4, 2).Value = resposta("bairro")
Cells(5, 2).Value = resposta("localidade")
Cells(6, 2).Value = resposta("uf")
Cells(7, 2).Value = resposta("ibge")
Cells(8, 2).Value = resposta("gia")
Cells(9, 2).Value = resposta("ddd")
Cells(10, 2).Value = resposta("siafi")

Range("B:B").Columns.AutoFit

End Sub

Explicação do código em VBA:

  • Dimensionar:
    • a variável “requisicao” como sendo do tipo um novo objeto do tipo WinHttpRequest, que é um objeto da biblioteca que ativamos, a “Microsoft WinHTTP Services”
    • a variável “resposta” como um objeto
    • as variáveis “url”, “parametros” e “cep” como do tipo texto
  • Limpar o conteúdo das células contidas no intervalo de B2 a B10
  • Armazenar na variável “cep” o que estiver na célula “B1”, retirando os caracteres “.”, “,” e “-“ (ponto, vírgula, e hífen, respectivamente). Isso é necessário porque a requisição deve ter um padrão específico (os parâmetros não podem ter esses caracteres). É aqui que fazemos a verificação de dígitos no VBA
  • Fazer uma validação do CEP através de uma estrutura If de comparação para testar se o CEP digitado na célula B1 tem mais de 8 caracteres. Se for digitado um número de caracteres maior do que 8, depois de tratados os caracteres (etapa acima), o código será abortado
  • Armazenar na variável “url” o texto que corresponde ao site exatamente que vamos acessar para pegar as informações, que é o link disponibilizado (site VIACEP)
  • Armazenar na variável “parametros” os parâmetros variáveis do link da API, levando em consideração o “cep”, e o final padronizado como “/json/”
  • Abrir (do inglês “open”) o objeto que é representado pela variável “requisicao”, passando os argumentos “url” e “parametros”, dos quais ela vai pegar informações (get, em inglês)
  • Passar para o cabeçalho da “requisicao” os parâmetros “padrão” informados pela API
  • Dar o comando de “enviar” requisição (send, em inglês), que é de fato quando o VBA envia a requisição para o site
  • Com um tratamento de erros no VBA, iremos verificar se o “Status” da variável “requisicao” é diferente de 200 (porque essa resposta é a esperada quando uma resposta válida é retornada pela API):
  • Dando tudo certo no envio da requisição ao site, e tendo o “Status” com valor de 200, iremos configurar a variável “resposta” para receber o objeto da biblioteca JSON, que vai ser responsável por retornar a resposta, em texto, da “requisicao”. É aqui que vamos, de fato, converter o JSON
  • Pegar as informações que vêm da variável “resposta” da seguinte forma:
    • A célula da 2ª linha e 2ª coluna (B) vai receber o valor que estiver no item “logradouro” da variável “resposta”
    • A célula da 3ª linha e 2ª coluna (B) vai receber o valor que estiver no item “complemento” da variável “resposta”
    • A célula da 4ª linha e 2ª coluna (B) vai receber o valor que estiver no item “bairro” da variável “resposta”
    • A célula da 5ª linha e 2ª coluna (B) vai receber o valor que estiver no item “localidade” da variável “resposta”
    • A célula da 6ª linha e 2ª coluna (B) vai receber o valor que estiver no item “uf” da variável “resposta”
    • A célula da 7ª linha e 2ª coluna (B) vai receber o valor que estiver no item “ibge” da variável “resposta”
    • A célula da 8ª linha e 2ª coluna (B) vai receber o valor que estiver no item “gia” da variável “resposta”
    • A célula da 9ª linha e 2ª coluna (B) vai receber o valor que estiver no item “ddd” da variável “resposta”
    • A célula da 10ª linha e 2ª coluna (B) vai receber o valor que estiver no item “siafi” da variável “resposta”
  • Fazer o ajuste automático de colunas (especificamente da coluna B), para que todas as informações fiquem visíveis/caibam dentro da largura da coluna
  • Se encerra o código

Veja, abaixo, dois exemplos de CEPs pesquisados, com a API:

API de CEP no VBA
Autofit no VBA
API de CEP no VBA

Observe que, para os dois casos, a API funcionou normalmente, e a coluna ficou com tamanhos diferentes, para caber as informações, sejam elas maiores ou menores.

Conclusão – API de CEP no VBA

Hoje você aprendeu a lidar com API no VBA! Mais especificamente falando buscar informações de CEP com VBA!

Entendeu como funciona a API, como é sua resposta, e viu um código que pode trazer as informações para o Excel!

Pôde realizar o tratamento de informações, manipular os dados conseguidos com a API, lidando com estruturas do VBA que lidamos em outras aulas: estrutura If, Tratamento de erros, funções de texto para verificação de dígitos.

Valeu, Impressionadores! Fique ligado no nosso canal do Youtube para mais conteúdo de VBA! Um abraço!

Hashtag Treinamentos

Para acessar outras publicações de VBA, clique aqui!


Quer aprender mais sobre VBA com um minicurso básico gratuito?

Quer sair do zero em Excel e virar uma referência na sua empresa? Matricule-se agora mesmo no Excel Impressionador!