Daê pessoal!
Depois de longo e tenebroso inverso, volto para compartilhar um comando que achei muiiito interessante!
Vamos criar uma função que, baseada em duas condicionais (Cep 1 e Cep 2) retornará a distancias (em KM) entre dois pontos.
Agradecimentos aos participantes da turma de Macro e VBA de Nov/2012, Rogerio, Deyse e Naira que lançaram o desafio... Em especial a Jaime Bull responsável pela criação da função, a qual adaptamos as nossas necessidades.
Então vamos a prática! Primeiramente precisamos habilitar a guia desenvolvedor (Mais detalhes no post MACROS), depois clicamos em “Visual Basic”. Abrirá a tela abaixo:
Clicamos em “Inserir“ depois em “Módulo”:
Agora clicaremos duas vezes sobre o “Módulo” adicionado e colaremos as funções abaixo:
‘----------------------------- ------------------------------ ------------------------------ ----------
Function G_DISTANCIA(Origin As String, Destination As String)
' Requires a reference to Microsoft XML, v6.0
' Draws on the stackoverflow answer at bit.ly/parseXML
Dim myRequest As XMLHTTP60
Dim myDomDoc As DOMDocument60
Dim distanceNode As IXMLDOMNode
G_DISTANCIA = 0
' Check and clean inputs
On Error GoTo exitRoute
Origin = Replace(Origin, " ", "%20")
Destination = Replace(Destination, " ", "%20")
' Read the XML data from the Google Maps API
Set myRequest = New XMLHTTP60
myRequest.Open "GET", "http://maps.googleapis.com/ maps/api/directions/xml? origin=" _
& Origin & "&destination=" & Destination & "&sensor=false", False
myRequest.send
' Make the XML readable usign XPath
Set myDomDoc = New DOMDocument60
myDomDoc.LoadXML myRequest.responseText
' Get the distance node value
Set distanceNode = myDomDoc.SelectSingleNode("// leg/distance/value")
If Not distanceNode Is Nothing Then G_DISTANCIA = (distanceNode.Text / 1000) & " KM"
exitRoute:
' Tidy up
Set distanceNode = Nothing
Set myDomDoc = Nothing
Set myRequest = Nothing
End Function
‘----------------------------- ------------------------------ ------------------------------ ----------
Function G_duracao(Origin As String, Destination As String) As Double
' Requires a reference to Microsoft XML, v6.0
' Draws on the stackoverflow answer at bit.ly/parseXML
Dim myRequest As XMLHTTP60
Dim myDomDoc As DOMDocument60
Dim distanceNode As IXMLDOMNode
G_duracao = 0
' Check and clean inputs
On Error GoTo exitRoute
Origin = Replace(Origin, " ", "%20")
Destination = Replace(Destination, " ", "%20")
' Read the XML data from the Google Maps API
Set myRequest = New XMLHTTP60
myRequest.Open "GET", "http://maps.googleapis.com/ maps/api/directions/xml? origin=" _
& Origin & "&destination=" & Destination & "&sensor=false", False
myRequest.send
' Make the XML readable usign XPath
Set myDomDoc = New DOMDocument60
myDomDoc.LoadXML myRequest.responseText
' Get the distance node value
Set distanceNode = myDomDoc.SelectSingleNode("// leg/duration/value")
If Not distanceNode Is Nothing Then G_duracao = distanceNode.Text / 86400
exitRoute:
' Tidy up
Set distanceNode = Nothing
Set myDomDoc = Nothing
Set myRequest = Nothing
End Function
‘----------------------------- ------------------------------ ------------------------------ ----
A tela ficará assim:
Pronto! Agora retorne a planilha e digite as funções:
Para retornar a distancia: “=G_DISTANCIA(A1;A2)”
Para retornar o tempo: “=G_duracao(A1;A2)”
Nas funções acima você poderá utilizar CEP ou o endereço.
Grande abraço!
Prof. Darlan
Olá Fizemos um teste porem não funcionou todos os valores aparecem zerados
ResponderEliminarSeu CEP está no formato CEP + 3? Precisa ter o traço... Ex: 88229-098.
EliminarAbs!
não funcionou
EliminarOpa! eu de novo.. os CEPS estão sim com o traço, mesmo assim não funciona, disponibiliza sua planilha de exemplo pra download, será que é a minha versão do office ele é o 2013?
ResponderEliminarPode ser a versão... manda seu email para prof.darlan.excel@gmail.com que encaminho a planilha.
ResponderEliminarAbs
O meu só retorna zero, poderia por favor enviar a planilha pra jeffersonabezerra@hotmail.com
EliminarOlá Darlan,
ResponderEliminarPode me enviar por email a planilha?? Não estou conseguindo, está dando erro de Compilação.
jjgermano@globo.com
Abs!
Olá Darlan, poderia me enviar a sua planilha, neiabn@hotmail.com, muito obrigada.
EliminarOlá, Darlan!
ResponderEliminarPor favor, essa API só aceita a literal da RUA e não a string do CEP.
Por favor, poderia me mandar sua planilha... wagnercarvalho_ti@hotmail.com
Olá Darlan, tentei inserir um módulo no Excel 2013, mas ele não compila e retorna o erro "tipo não definido pelo usuário" na linha "Dim myRequest As XMLHTTP60". Você poderia me enviar a tua planilha? Obrigado. lcarmona (at) gmail (dot) com
ResponderEliminarOlá Darlan, No Excel 2013, ele não compila e retorna o erro "tipo não definido pelo usuário" na linha "Dim myRequest As XMLHTTP60". Você pode me dar o caminho das pedras ?
ResponderEliminarUm abraço
Roberto - rcan.f@terra.com.br
consegui fazer....tive que habilitar as referencias solicitadas
EliminarMicrosoft XML, v6.0 e Microsoft WinHTTP Services, version 5.1
Funcionou.
tentei isso tb não funcionou.
EliminarPoderia enviar sua planilha, a minha só retorna zero. jeffersonabezerra@hotmail.com
EliminarA programação funcionou perfeitamente. Mas existem muitos CEP´s que retornam valor zero. Sabem me responder o porque?
ResponderEliminarServiço de Busca Cep com retorno xml do endereço completo, Latitude e longitude, codigo IBGE e população do municipio.
ResponderEliminarAcesse o site http://www.mapacep.com.br/webservice.asp e solicite a key para usar o serviço
MapaCEP – Busca CEP
Alguém pode citar um exemplo de ceps origem e destino para eu poder testar o meu? os ceps q eu tento só retornam zero. obg.
ResponderEliminarParabéns, me ajudou muito !! fiz para ter retorno em km e deu super certo, obrigado.
ResponderEliminarOlá Pode me enviar sua planilha por e-mail não consegui fazer!
ResponderEliminarwrsilva@anhembi.br
abs
Olá
ResponderEliminarPoderia me enviar a planilha não consegui.
emerson@ovd.com.br
Olá Darlan!
ResponderEliminarAcabei de pedir pelo seu email que me enviasse a sua planilha.
Estou tendo alguns problemas!
Se puder me ajudar agradeço!
Abraço
Olá, é possível ter o cálculo de pedágios? Obrigado!
ResponderEliminarParabéns pela inciativa Darlan. O meu está dando erro! Poderia me enviar o seu? Obrigado. Leandro
ResponderEliminarleandrobadann@gmail.com
Professor,
ResponderEliminarNa minha planilha ocorre o erro:"Dim myRequest As XMLHTTP60", conforme acima, é necessário atualizar o excel. A solução é somente essa ? Existe uma burocracia muito grande na empresa para atualização de softwares.
Como poderia resolver esse problema ?
Conto com a sua ajuda.
Abs,
Prezado Narlan, muito obrigado pela ajuda e Parabéns pelo post.
ResponderEliminarPoderia me auxiliar como posso obter a distancia a pé?
Grato
Boa noite, poderia por favor, me enviar a planilha?
ResponderEliminarlivio_sp@hotmail.com
Obrigado, abs
Bom, recebi o feedback de Erro de compilação: o tipo definido pelo usuário não foi definido, dando enfase ao XMLHTTP60.
ResponderEliminarPoderia enviar a planilha para mim? charlescoutinho85@gmail.com
Professor Darlan, parabéns e obrigado pela ajuda. Você poderia disponibilizar sua planilha para me auxiliar, pois deu certo, mas para alguns cep's não funcionou. ddavidd.costa@gmail.com
ResponderEliminarDavid Costa
prof. Darlan, poderia por favor me disponibilizar a planilha? Estou tentando, mas dá o erro: O tipo definido pelo usuário não foi definido.
ResponderEliminarMuito obrigada!
mcgramani@gmail.com
Cris.
Gostaria de saber se há um código que busque também o valor do pedágio entre as localidades. Obrigado
ResponderEliminarSegue código para obter pedágio através do site do MAPEIA, o valor obtido é por eixo:
ResponderEliminar'Identifica se a página já foi totalmente carregada
While IE.ReadyState <> READYSTATE_COMPLETE
Wend
'Como a página possui JavaScript que cria os objetos que são preenchidos após a carga completa, é necessário
'aguardar um tempo, coloquei 3 segundos, alterar conforme a necessidade.
'Caso não tenha javascript na criação dos objetos da página comentar esta parte do código, pois será bem
'mais rápida a execução.
sng = Timer
Do While sng + 3 > Timer
Loop
'Carrega os dados de cidade e UF que serão preenchidos na página
lCidade = Range("A2").Value
lCidadeDest = Range("B2").Value
'Carrega os dados de cidade e UF na página e submente os dados do formulário
IE.Document.all("origin").innertext = lCidade
IE.Document.all("destination").Value = lCidadeDest
IE.Document.all.Item("calc").Click
'Identifica se a página já foi totalmente carregada
While IE.ReadyState <> READYSTATE_COMPLETE
Wend
'Como a página possui JavaScript que cria os objetos que são preenchidos após a carga completa, é necessário
'aguardar um tempo, coloquei 3 segundos, alterar conforme a necessidade.
'Caso não tenha javascript na criação dos objetos da página comentar esta parte do código, pois será bem
'mais rápida a execução.
sng = Timer
Do While sng + 3 > Timer
Loop
Range("c2").Value = IE.Document.all("toll-value").innerHTML
IE.Quit
End Sub
Segue código para obter pedágio através do site do MAPEIA, o valor obtido é por eixo:
ResponderEliminar'Identifica se a página já foi totalmente carregada
While IE.ReadyState <> READYSTATE_COMPLETE
Wend
'Como a página possui JavaScript que cria os objetos que são preenchidos após a carga completa, é necessário
'aguardar um tempo, coloquei 3 segundos, alterar conforme a necessidade.
'Caso não tenha javascript na criação dos objetos da página comentar esta parte do código, pois será bem
'mais rápida a execução.
sng = Timer
Do While sng + 3 > Timer
Loop
'Carrega os dados de cidade e UF que serão preenchidos na página
lCidade = Range("A2").Value
lCidadeDest = Range("B2").Value
'Carrega os dados de cidade e UF na página e submente os dados do formulário
IE.Document.all("origin").innertext = lCidade
IE.Document.all("destination").Value = lCidadeDest
IE.Document.all.Item("calc").Click
'Identifica se a página já foi totalmente carregada
While IE.ReadyState <> READYSTATE_COMPLETE
Wend
'Como a página possui JavaScript que cria os objetos que são preenchidos após a carga completa, é necessário
'aguardar um tempo, coloquei 3 segundos, alterar conforme a necessidade.
'Caso não tenha javascript na criação dos objetos da página comentar esta parte do código, pois será bem
'mais rápida a execução.
sng = Timer
Do While sng + 3 > Timer
Loop
Range("c2").Value = IE.Document.all("toll-value").innerHTML
IE.Quit
End Sub
Segue código para obter pedágio através do site do MAPEIA, o valor obtido é por eixo:
ResponderEliminar'Identifica se a página já foi totalmente carregada
While IE.ReadyState <> READYSTATE_COMPLETE
Wend
'Como a página possui JavaScript que cria os objetos que são preenchidos após a carga completa, é necessário
'aguardar um tempo, coloquei 3 segundos, alterar conforme a necessidade.
'Caso não tenha javascript na criação dos objetos da página comentar esta parte do código, pois será bem
'mais rápida a execução.
sng = Timer
Do While sng + 3 > Timer
Loop
'Carrega os dados de cidade e UF que serão preenchidos na página
lCidade = Range("A2").Value
lCidadeDest = Range("B2").Value
'Carrega os dados de cidade e UF na página e submente os dados do formulário
IE.Document.all("origin").innertext = lCidade
IE.Document.all("destination").Value = lCidadeDest
IE.Document.all.Item("calc").Click
'Identifica se a página já foi totalmente carregada
While IE.ReadyState <> READYSTATE_COMPLETE
Wend
'Como a página possui JavaScript que cria os objetos que são preenchidos após a carga completa, é necessário
'aguardar um tempo, coloquei 3 segundos, alterar conforme a necessidade.
'Caso não tenha javascript na criação dos objetos da página comentar esta parte do código, pois será bem
'mais rápida a execução.
sng = Timer
Do While sng + 3 > Timer
Loop
Range("c2").Value = IE.Document.all("toll-value").innerHTML
IE.Quit
End Sub
Ola Maicon,
EliminarConsegue me ajudar com a macro que você disponibilizou?
Não estou conseguindo montar ela no VBA.
Ola,
ResponderEliminarCocegue me enviar uma Macro que busca o valor de fretes?
A que esta na descrição ao cima não consegui entender.
Ja faz um tempo que estou procurando por algo do tipo.
Grato.
No meu aparece erro de sintaxe na primeira linha. O que pode ser?
ResponderEliminarPra mim tbm o mesmo erro...:(
EliminarEste comentário foi removido pelo autor.
ResponderEliminarOlá Professor Darlan... estou com dificuldades... resultado sempre 0. Pode me ajudar.
ResponderEliminarhenrique_duba@hotmail.com
bom dia professor Darlan eu também estou com dificuldade pois sempre o resultado é zero. Será algum problema em estabelecer a conexão com o site de mapas?
ResponderEliminarGostari da sua ajuda. Grato. Juliano
Olá professor Darlan, boa tarde.
ResponderEliminartentei realizar o procedimento informando mais o meu ocorre erro como uma parte do pessoal acima. poderia me enviar sua planilha como exemplo. desde ja conto com sua compreensão. felix_morais@hotmail.com
Boa tarde.
ResponderEliminarPode encaminhar a planilha fabianeblima@gmail.com obrigada
Olá. Poderia encaminhar a planilha para jealita.tanaka@gmail.com por gentileza? obrigada!
ResponderEliminarOi Professor Darlan,
ResponderEliminaré possivel encaminhar a planilha para meu email?
Nao aparece nenhum erro pra mim, mas só retorna o valor 0.
camila.curi@gmail.com
agradeço imensamente
obrigada, abs
Camila, ele te enviou?
EliminarBom dia professor Darlan. Estou tendo dificuldades com a planilha. Pode me enviar a sua? rafaellobatomansur@gmail.com Obrigado
ResponderEliminarBom dia professor Darlan. Estou COM dificuldades com a planilha. Pode me enviar? AMARILIO.SIMSS@HOTMAIL.COM Obrigado
ResponderEliminarCaro Professor, como foi dito pelos colegas acima, o resultado da pesquisa só vem valor zero, poderia ajudar nesta questão, desde já agradeço.
ResponderEliminarCaro Professor, como foi dito pelos colegas acima, o resultado da pesquisa só vem valor zero, poderia ajudar nesta questão, desde já agradeço.Pode me enviar, email chaves_antonio@yahoo.com.br
ResponderEliminarOla professor, minha planilha so vem 0.
ResponderEliminarConsegue me ajudar, pf?
rtferreira@id.uff.br
Olha, eu também estou com o mesmo problema. Pesquisei bastante e soube que é necessário adquirir a chave de API com a Google. O serviço gratuito foi desativado.
EliminarSerá que alguém pode confirmar essa informação?
Caro Professor, como foi dito pelos colegas acima, o resultado da pesquisa só vem valor zero, poderia ajudar nesta questão, desde já agradeço. Pode me enviar, email santangelo2807@gmail.com
ResponderEliminaro meu excel esta em portugues e acho que não esta aceitando o codigo, tem a versão em portugues?
ResponderEliminarParabéns pelo trabalho, aqui infelizmente só da o valor 0, poderia me enviar a planilha? yurimr3193@gmail.com
ResponderEliminarOlá Professor Darlan, minha planilha só retorna 0. Poderia me ajudar por favor ? snake.061@gmail.com
ResponderEliminarMinha planilha só retorna 0, alguém pode enviar por favor thiagopacha@hotmail.com
ResponderEliminar