Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Schleife in Makro einbauen
#1
Hallo Zusammen :s,

ich habe Folgendes Problem und schaff es leider nicht es selber zu lösen.
Ich habe ein Funktion mit der ich über GoogleMaps mir die Entfernung zwischen zwei
Städten berechnen lasse. Jetzt möchte ich sie aber gern in eine Schleife einbauen
das mir auf einmal eine Entfernungsmatrix gefüllt wird. Beispielsweise 10 Städte und als Output
sollte dann die 10x10 Matrix mir allen Entfernungen gefüllt werden.

Es müsste doch so in der Art aussehen oder ? Frage ist jetzt wie ich die zwei Geschichten verbinde..
Ich hoff Ihr könnt mir helfen.

Sub Schleifen()


    Dim i As Integer, j As Integer, k As Integer
    
    k = 0
    For i = 1 To 10
        For j = 1 To 10
            k = ???
            Cells(i, j).Value = k
        Next j
    Next i
    
End Sub

Hier die Funktion:

Public Function GetDistance(start As String, dest As String)

    Dim firstVal As String, secondVal As String, lastVal As String
    firstVal = "https://maps.googleapis.com/maps/api/distancematrix/json?origins="
    secondVal = "&destinations="
    lastVal = "&key=AIzaSyBtYr596Le1N1GRCModwPrwYxBS8y5ZYtg"
    Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
    URL = firstVal & Replace(start, " ", "+") & secondVal & Replace(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, """distance"" : {") = 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(xlListSeparator))
    GetDistance = CDbl(tmpVal)
    Exit Function
ErrorHandl:
    GetDistance = -1
End Function

Vielen Dank für die Hilfe im Voraus. Falls ich was vergessen habe bitte sagen, ist mein erster Beitrag hier im Forum :23:.

Viele Grüße,
Max
Antworten Top
#2
Hi

ich bin mir nich 100% sicher ob es klappt, probier es mal so:  (im Prinzip ruft du die Funktion als Unterprogramm auf)
k = GetDistance start = Wert, dest = Wert    Wert ist der String für Start und Ziel. Würde mich freuen wenn es klappt.
Wenn es nicht auf Anhieb klappt kann es an der Syntac liegen, das sie evtl. anders geschrieben werden muss.

mfg  Gast 123
Antworten Top
#3
Hallo Max,

wenn Start und Ziel in Spalte A und Zeile 1 stehen:
Sub Schleifen()
 Dim i As Integer, j As Integer
 For i = 2 To 11
   For j = 2 To 11
     If i <> j Then
       Cells(i, j).Value = GetDistance(Cells(i, 1).Value, Cells(1, j).Value)
     End If
   Next j
 Next i
End Sub
,kommt das bei mir raus:

ABCDEFGHIJK
1von / nachBerlinDresdenErfurtHannoverKölnLeipzigMainzMünchenRostockStuttgart
2Berlin-1-1-1-1-1-1-1-1-1
3Dresden-1-1-1-1-1-1-1-1-1
4Erfurt-1-1-1-1-1-1-1-1-1
5Hannover-1-1-1-1-1-1-1-1-1
6Köln-1-1-1-1-1-1-1-1-1
7Leipzig-1-1-1-1-1-1-1-1-1
8Mainz-1-1-1-1-1-1-1-1-1
9München-1-1-1-1-1-1-1-1-1
10Rostock-1-1-1-1-1-1-1-1-1
11Stuttgart-1-1-1-1-1-1-1-1-1

Gruß Uwe
Antworten Top
#4
Moin!
Da es sich um eine Public UDF handelt, kann man die Funktion ja auch direkt ins Sheet eintragen.
Allerdings ist die Funktion schlicht fehlerhaft, siehe auch Uwe!
Ich habe den ErrHdl wie folgt umgeschrieben
ErrorHandl:
    GetDistance = CVErr(xlErrValue)
und erhalte folgende aufschlussreiche Kreuztabelle:
ABCDEFGHIJK
1von / nachBerlinDresdenErfurtHannoverKölnLeipzigMainzMünchenRostockStuttgart
2Berlin
3Dresden
4Erfurt
5Hannover
6Köln
7Leipzig
8Mainz
9München
10Rostock
11Stuttgart
Formeln der Tabelle
ZelleFormel
B2=WENNFEHLER(GetDistance(B$1;$A2);"")

Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8

Suche mal hier im Forum nach Google Maps, da gibt es funktionierende Varianten.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#5
Hallo Zusammen,

sorry für die späte Antwort. Vielen Dank für eure Hilfe, läuft!!
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste