Modulo g-distancia en visual basic

Hace cuestión de 1 año estaba creando un programa en access y ahora lo estoy haciendo de nuevo pero con visual studio y a base de tutoriales pude crear un modulo para extraer los cálculos de rutas de google maps.

Ahora me encuentro de el modulo creado de G-DISTANCIA lo creo en visual studio con visual basic y no me lo acepta por algunos errores que no se solucionar.

Este es el código de G-DISTANCIA que funciona al 100% en access:

Function G_DISTANCIA(ORIGEN As String, DESTINO As String)

Dim MyRequest As XMLHTTP60
Dim mydomdoc As DomDocument60
Dim distanceNode As ixmldomnode
G_DISTANCIA = 0

On Error GoTo exitRoute
ORIGEN = Replace(ORIGEN, " ", "%20")
DESTINO = Replace(DESTINO, " ", "%20")

Set MyRequest = New XMLHTTP60
MyRequest.Open "GET", "https://maps.googleapis.com/maps/api/distancematrix/xml?origins=" _
& ORIGEN & "&destinations=" & DESTINO & "&key=API-GOOGLE"
MyRequest.send

Set mydomdoc = New DomDocument60
mydomdoc.LoadXML MyRequest.responseText

Set distanceNode = mydomdoc.SelectSingleNode("//row/element/distance/value")
If Not distanceNode Is Nothing Then G_DISTANCIA = (distanceNode.Text / 1000) & ""
exitRoute:

Set distanceNode = Nothing
Set mydomdoc = Nothing
Set MyRequest = Nothing

End Function

Cuando lo pego en visual studio en un modulo me da errores :(

1 respuesta

Respuesta
2

No dices qué errores te da, ni dónde... con lo que es prácticamente imposible ayudarte efectivamente. Lo único que se me ocurre ( y no soy experto en visual) es que no hayas activado la librería o referencia para trabajar con los objetos xml que creas.

Los errores que me salen son los siguientes:

No se admiten instrucciones de asignación Let y Set -----> Linea 13

Los argumentos de método se deben incluir entre los paréntesis -----línea 14

Como los anteriores hay unos cuantos y después están los siguientes:

No esta definido el tipo xmlhttp60 ----línea 4

"" Domdocument60 ------ línea 5

"" Ixmldomnode ----línea 6

No esta definido el tipo xmlhttp60

Te falta registrar la librería para trabajar con el objeto xml, como te señalaba antes, será la Micorsoft XML o algo así (debes buscar la misma que tenías registrada en Access): https://www.youtube.com/watch?v=9ZZCfYdSP5M

No se admiten instrucciones de asignación Let y Set -----> Linea 13

Elimina esas lineas y cuando declaras las variables, hazlo así:

Dim MyRequest As New XMLHTTP60  -> linea 2 y elimina la linea "Set MyRequest = New XMLHTTP60" (y lo mismo con el resto de set....)

Los argumentos de método se deben incluir entre los paréntesis -----línea 14

Ésta es fácil, haz lo que te dice:

MyRequest.Open ("GET", "https://maps.googleapis.com/maps/api/distancematrix/xml?origins=" _
& ORIGEN & "&destinations=" & DESTINO & "&key=API-GOOGLE")

no le saco punta :( he agregado la lreferencia system.xml y nada.... he visto el tutorial y agrego la libreria xml como dice pero me pierdo con el codigo 

No tengo instalado vb6 y no puedo hacer pruebas, pero dado que vba y vb6 no son el mismo lenguaje de programación ( aunque comparten mucho) entra dentro de lo normal que un código VBA no te funcione a la primera en vb6.

La referencia que usas en access es la Microsoft Xml 6.0, o al menores la que uso yo al trabajar con códigos similares, y esa referencia es la que te habilita para trabajar con los objetos XMLHTTP60, DomDocument60... que declaras en tu código. Desconozco si la librería que has registrado tiene esos objetos (supongo que no, porque sigues con problemas...)

En cuanto al código en sí, solo tienes que hacer los cambios que te indicaba antes.

he reducido los errores a 6 asi llevo el codigo:

Imports.MSXML2
Module Module2

Function G_DISTANCIA(ORIGEN As String, DESTINO As String)

Dim MyRequest As XMLHTTP60
Dim mydomdoc As DomDocument60
Dim distanceNode As ixmldomnode
G_DISTANCIA = 0

On Error GoTo exitRoute
ORIGEN = Replace(ORIGEN, " ", "%20")
DESTINO = Replace(DESTINO, " ", "%20")

MyRequest = New XMLHTTP60
MyRequest.Open("GET", "https://maps.googleapis.com/maps/api/distancematrix/xml?origins=" _
& ORIGEN & "&destinations=" & DESTINO & "&key=API-GOOGLE")
MyRequest.send

mydomdoc = New DomDocument60
mydomdoc.LoadXML(MyRequest.responseText)

distanceNode = mydomdoc.SelectSingleNode("//row/element/distance/value")
If Not distanceNode Is Nothing Then G_DISTANCIA = (distanceNode.Text / 1000) & ""
exitRoute:

distanceNode = Nothing
mydomdoc = Nothing
MyRequest = Nothing

End Function

End Module

ahora me quedan los siguientes errores:

Error BC30203 Se esperaba un identificador.  linea 1

Error BC30002 No está definido el tipo 'XMLHTTP60'. linea 6

Error BC30002 No está definido el tipo 'DomDocument60'. linea 7
Error BC30002 No está definido el tipo 'ixmldomnode'. linea 8
Error BC30002 No está definido el tipo 'XMLHTTP60'. linea 15
Error BC30002 No está definido el tipo 'DomDocument60'. linea 20

Seguimos en la misma, todos esos errores son el mismo: no has registrado la librería adecuada para trabajar con esos objetos.

Por otra parte, veo que no me has hecho caso con las correcciones del código, y así no creo que te funcione aunque no te de errores...

Module Module2

Function G_DISTANCIA(ORIGEN As String, DESTINO As String)

Dim MyRequest As New Xmlhttp60
Dim mydomdoc As New DomDocument60
Dim distanceNode As New ixmldomnode
G_DISTANCIA = 0

On Error GoTo exitRoute
ORIGEN = Replace(ORIGEN, " ", "%20")
DESTINO = Replace(DESTINO, " ", "%20")


MyRequest.Open("GET", "https://maps.googleapis.com/maps/api/distancematrix/xml?origins=" _
& ORIGEN & "&destinations=" & DESTINO & "&key=API-GOOGLE")
MyRequest.send


mydomdoc.LoadXML(MyRequest.responseText)

distanceNode = mydomdoc.SelectSingleNode("//row/element/distance/value")
If Not distanceNode Is Nothing Then G_DISTANCIA = (distanceNode.Text / 1000) & ""
exitRoute:

distanceNode = Nothing
mydomdoc = Nothing
MyRequest = Nothing

End Function

Vale.... creo que solucione el problema de la libreria.

esto es lo que tengo ahora mismo :

Imports MSXML2

Module Module2

Function G_DISTANCIA(ORIGEN As String, DESTINO As String)

Dim MyRequest As New XMLHTTP60
Dim mydomdoc As New DOMDocument60
Dim distanceNode As IXMLDOMNode
G_DISTANCIA = 0

On Error GoTo exitRoute
ORIGEN = Replace(ORIGEN, " ", "%20")
DESTINO = Replace(DESTINO, " ", "%20")


MyRequest.open("GET", "https://maps.googleapis.com/maps/api/distancematrix/xml?origins=" _
& ORIGEN & "&destinations=" & DESTINO & "&key=&key=AIzaSyDB5ZXeg7HMfRt3vePCe2PC--4K0jokf2E")
MyRequest.send


mydomdoc.LoadXML(MyRequest.responseText)

distanceNode = mydomdoc.SelectSingleNode("//row/element/distance/value")
If Not distanceNode Is Nothing Then G_DISTANCIA = (distanceNode.Text / 1000) & ""
exitRoute:

distanceNode = Nothing
mydomdoc = Nothing
MyRequest = Nothing


End Function

End Module

ahora mismo solo me informa que estas 3 ultimas

distanceNode = Nothing
mydomdoc = Nothing
MyRequest = Nothing

el valor asignado a MyRequest, mydomdoc, distanceNode  no se utiliza nunca

Si te da error en esas últimas líneas, bórralas que no aportan nada

Vale, ya no me da error ahora solo que no me da el valor del xml jajaja. Con lo rápido que lo solucione en access

Quita esta línea, porque si por el medio te salta algún error, no te enteras de los que está pasando:

On Error GoTo exitRoute

Por cierto, que no tengas errores de sintaxis, no quiere decir que el código no tenga errores... jejeje

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas