Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1916to1920
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

#WERT-Fehler in Enfternungstool

#WERT-Fehler in Enfternungstool
24.01.2023 12:35:15
Lena
Liebe Excel-Community,
zwecks Entfernungsberechnung zwischen zwei Orten habe ich den folgenden Code in einem der zahlreichen Foren gefunden sowie die entsprechenden Formeln, um die erstellte Funktion anzuwenden:
Option Explicit
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Type DIST_STRUCT
 Start As String 'Mehrere durch "/" getrennt eingeben
 Ziel  As String
 LDist As String
 FDist As String
End Type
Sub GetDistance(tDist As DIST_STRUCT)
 Dim oNode As Object
 With CreateObject("MicrosoftEdge.Application")
.navigate "http://www.luftlinie.org" 'Zur Url surfen
  While Not .readyState = 4: DoEvents: Wend 'Warten bis Seite geladen ist
  With .document
   Set oNode = .getElementById("start")
   If Not oNode Is Nothing Then
    oNode.Value = tDist.Start
    Set oNode = .getElementById("end")
    On Error Resume Next
    If Not oNode Is Nothing Then
      oNode.Value = tDist.Ziel
      Set oNode = .getElementById("calcDistance")
      If Not oNode Is Nothing Then oNode.Click
      Do
        Sleep 100
        Set oNode = Nothing
        Set oNode = .getElementById("strck")
        If Not oNode Is Nothing Then
          If Not oNode.outerText Like "*--*" Then Exit Do
        End If
        DoEvents
      Loop
      tDist.LDist = .getElementsByClassName("value km")(0).outerText
      tDist.FDist = .getElementById("strck").outerText
      tDist.Start = tDist.Start & " " & .getElementsByClassName("regions")(0).outerText
      tDist.Ziel = tDist.Ziel & " " & .getElementsByClassName("regions")(2).outerText
    End If      'End
   End If      'Start
  End With
  .Quit        'IE schließen
 End With
End Sub
Function EntfernungErmitteln(a, b)
Dim tDist As DIST_STRUCT
With tDist
  .Start = a: .Ziel = b
  GetDistance tDist
  EntfernungErmitteln = Replace(.Start, " ", "_") & " " & Replace(.Ziel, " ", "_") & " " & .LDist & " " & .FDist
End With
End Function
C1: =MTRANS(XMLFILTERN(WECHSELN(""&WECHSELN(EntfernungErmitteln(A1;B1);" km";)&"";" ";"");"//b"))
Will man nur letztere beide Zahlen haben, dann:
C1: =INDEX(MTRANS(XMLFILTERN(WECHSELN(""&WECHSELN(EntfernungErmitteln(A1;B1);" km";)&"";" ";"");"//b"));{3.4})
Die Datei, in der ich das Tool getestet habe, befindet sich hier:
https://www.herber.de/bbs/user/157444.xlsm
(ich hoffe, das mit dem Dateiupload hat funktioniert!)
Nun habe ich leider das Problem, dass mir ein #WERT-Fehler ausgegeben wird und meine VBA-Kenntnisse nicht gut genug sind, um den Fehler zu finden. Meine Hoffnung ist, dass mir jemand von euch weiterhelfen kann?
Vielen Dank und beste Grüße!

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: #WERT-Fehler in Enfternungstool
24.01.2023 12:40:47
SF
Hola,
verlinkst Du bitte deine Fragen in den verschiedenen Foren gegenseitig?
Gruß,
steve1da
Frage noch offen
24.01.2023 12:54:35
Lena
Rudi Maintaire ist mir zuvor gekommen. Frage bleibt offen.
AW: Frage noch offen
24.01.2023 18:45:48
Yal
Hallo Lena,
hmm... diese Seite bittet eine API (für läpische 1 cent pro Abfrage), daher gehe ich davon aus, dass alles unternommen wird, um die Webscraping-Abfrage (was der Code eigentlich macht) zu verhindern. Spricht, es ist nicht sicher, dass die Folge der "GetElementById", die heute funktionieren, morgen noch funktionieren. Alternativ wird einen Bulk-Methode angeboten: Datei mit von-nach-Liste hochladen, Ergebnisdatei bekommen. Gleicher Preis.
Mit der Google Maps Geocode API könntest Du die Adresse in Lattitude/Longitude umwandeln (ein Budget von $200 wird monatlich gewährt, spricht kostenlos, falls unter diese Grenze. $200 entspricht 40.000 Abfragen). Dann müsstest Du nur noch die Haversine-Formel einsetzen, um die Fluglinie zu rechnen. Eigentlich easy, oder? ;-) Oder der Distance-Funktion der Google API, wobei ich nicht erkennen könnte, dass es Fluglinie liefern kann.
Ich könnte auch nicht entdecken, wie die Bibliothek "MicrosoftEdge.Application" anzubinden wäre. Daher den Code auch nicht testen.
VG
Yal
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige