Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

GetDistance-Funktion mit BingMaps/Excel

Forumthread: GetDistance-Funktion mit BingMaps/Excel

GetDistance-Funktion mit BingMaps/Excel
23.03.2019 20:08:03
Rudolf
Guten Tag zusammen,
bei dem Versuch, eine "getDistance"-Funktion unter Verwendung von BingMaps in Excel (Office 365 Home) zu implementieren, komme ich nicht so recht weiter.
Folgende Voraussetzung ist gegeben:
A1 = Adresse_1 (in Form von Straße Hausnummer, PLZ Ort)
B1 = Adresse_2 (in Form von Straße Hausnummer, PLZ Ort)
C1 = =getDistance(A1;B1)
Mein VBAProjekt:
Public Function GetDistance(start As String, dest As String)
Dim firstVal As String, lastVal As String
firstVal = "http://dev.virtualearth.net/REST/v1/Routes?"
lastVal = "&hier_steht_mein_Bing_Maps_Basic_Key"
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
Url = firstVal & "wayPoint" & ".1=" & start & "&wayPoint" & ".2=" & dest & lastVal
objHTTP.Open "GET", Url, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.send ("")
If InStr(objHTTP.responseText, """travelDistance"" {:") = 0 Then GoTo ErrorHandl
Set regex = CreateObject("VBScript.RegExp"): regex.Pattern = """value"".*?([0-9]+)": regex. _
Global = False
Set matches = regex.Execute(objHTTP.responseText)
tmpVal = Replace(matches(0).SubMatches(0), ".", Application.International(xmlListSeparator)) _
GetDistance = CDbl(tmpVal)
Exit Function
ErrorHandl:
GetDistance = -1
End Function
Der Code gibt -1 in der Zelle C1 aus.
Nachdem ich zu Testzwecken den ErrorHandl: auf "GetDistance = Url" abgeändert habe, erscheint die korrekte Url für den Aufruf. Im Browser aufgerufen gibt der Aufruf auch die gewünschen Daten zurück.
Ich schaffe es aber nicht, die im responseText aufgeführte "travelDistance" in die Zelle C1 zu bringen.
Für Hilfe bin ich sehr dankbar.
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Folgendes läuft bei mir ohne...
27.03.2019 08:36:11
Case
Hallo, :-)
... Probleme: ;-)
Option Explicit
Public Sub Main()
Tabelle1.Range("C1").Value = fncEntf(WorksheetFunction.EncodeURL _
(Tabelle1.Range("A1").Text), _
WorksheetFunction.EncodeURL(Tabelle1.Range("B1").Text), _
"Bing_Key HIER EINTRAGEN!!!!!")
End Sub
Function fncEntf(ByVal strFrom As String, ByVal strTo As String, _
ByVal strBingApi As String) As String
Dim objXML As Object
Set objXML = CreateObject("MSXML2.XMLHTTP.3.0")
With objXML
.Open "get", "https://dev.virtualearth.net/REST/V1/Routes/Driving?o=xml&wp.0=" & _
strFrom & "&wp.1=" & strTo & "&avoid=minimizeTolls&key=" & strBingApi, "false"
.send
If .readyState = 4 Then
fncEntf = .responseXML.SelectNodes("//TravelDistance").Item(0).Text
End If
End With
Set objXML = Nothing
End Function
Allerdings nicht mit Massenabfragen. ;-)
Servus
Case

Anzeige
;
Anzeige

Infobox / Tutorial

GetDistance-Funktion mit BingMaps in Excel


Schritt-für-Schritt-Anleitung

Um die GetDistance-Funktion unter Verwendung von BingMaps in Excel zu implementieren, folge diesen Schritten:

  1. Öffne Excel (Office 365 Home empfohlen).

  2. Öffne das VBA-Editor-Fenster:

    • Drücke ALT + F11.
  3. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf VBAProject (DeinWorkbookName), wähle Einfügen und dann Modul.
  4. Füge den folgenden Code ein:

    Public Function GetDistance(start As String, dest As String) As Double
       Dim firstVal As String, lastVal As String
       firstVal = "http://dev.virtualearth.net/REST/v1/Routes?"
       lastVal = "&key=DEIN_BING_MAPS_API_KEY"
       Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
       Url = firstVal & "wayPoint.1=" & start & "&wayPoint.2=" & dest & lastVal
       objHTTP.Open "GET", Url, False
       objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
       objHTTP.send ("")
       If InStr(objHTTP.responseText, """travelDistance"" :") = 0 Then GoTo ErrorHandl
       Set regex = CreateObject("VBScript.RegExp")
       regex.Pattern = """travelDistance"" : ([0-9]+)"
       regex.Global = False
       Set matches = regex.Execute(objHTTP.responseText)
       GetDistance = CDbl(matches(0).SubMatches(0))
       Exit Function
    ErrorHandl:
       GetDistance = -1
    End Function
  5. Speichere das Modul und schließe den VBA-Editor.

  6. Gib in Zelle C1 die Formel ein:

    =GetDistance(A1; B1)

    Hierbei steht A1 für die erste Adresse und B1 für die zweite Adresse.


Häufige Fehler und Lösungen

  • Fehler -1 in der Zelle C1:

    • Stelle sicher, dass die eingegebenen Adressen in A1 und B1 korrekt sind. Überprüfe auch, ob dein Bing Maps API-Key korrekt eingegeben ist.
  • Keine Rückgabe von travelDistance:

    • Überprüfe die URL, die im Browser funktioniert. Wenn keine Daten zurückgegeben werden, könnte es an einer inkorrekten Adresse oder einem Problem mit dem API-Key liegen.

Alternative Methoden

Falls die GetDistance-Funktion nicht funktioniert, kannst du folgende Alternativen in Betracht ziehen:

  • Verwendung von VBA mit XMLHTTP:

    • Der Code kann auch mit MSXML2.XMLHTTP anstelle von MSXML2.ServerXMLHTTP verwendet werden, was in einigen Fällen effizienter sein kann.
  • Excel-Funktionen:

    • Nutze die WEBSERVICE-Funktion in Excel, um die API-Daten abzurufen, falls du keine VBA-Lösungen verwenden möchtest.

Praktische Beispiele

Hier sind einige Beispiele, wie die GetDistance-Funktion genutzt werden kann:

  1. Einfaches Beispiel:

    • In A1: "Brandenburger Tor, Berlin"
    • In B1: "Reichstag, Berlin"
    • Zelle C1 zeigt dann die Entfernung zwischen diesen zwei Punkten an.
  2. Mit unterschiedlichen Adressen:

    • In A1: "München, Deutschland"
    • In B1: "Hamburg, Deutschland"
    • C1 gibt die Entfernung zwischen München und Hamburg zurück.

Tipps für Profis

  • API-Limits beachten: Stelle sicher, dass du die API-Limits von Bing Maps berücksichtigst, um eine Überlastung zu vermeiden.

  • Fehlerprotokollierung: Implementiere eine Fehlerprotokollierung in deinem VBA-Code, um Probleme einfacher diagnostizieren zu können.

  • Daten validieren: Validieren die eingegebenen Adressen, um sicherzustellen, dass sie korrekt formatiert sind, bevor du sie an die API sendest.


FAQ: Häufige Fragen

1. Was ist die GetDistance-Funktion?
Die GetDistance-Funktion ist eine benutzerdefinierte VBA-Funktion, die die Entfernung zwischen zwei Adressen mithilfe der Bing Maps API berechnet.

2. Wo finde ich meinen Bing Maps API-Key?
Du kannst deinen Bing Maps API-Key im Azure-Portal unter deinem Bing Maps-Konto erstellen oder abrufen.

3. Welche Excel-Version benötige ich?
Die Anleitung funktioniert am besten mit Excel in der Version Office 365 Home oder höher, da hier die neuesten Funktionen und Bibliotheken verfügbar sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige