Hvordan lage et geografisk verktøy for å få bredde- og lengdegradskoordinater for adresser med Excel VBA

Følg denne artikkelen og bygg ditt eget geografiske verktøy som du kan få bredde- og lengdegradskoordinater for en adresse med. Omformere som dette brukes ofte av eiendomsmeglere.

Last ned nå

Hvis du ønsker å starFor å bruke programvaren så snart som mulig, kan du:

Last ned programvaren nå

Ellers, hvis du vil gjøre DIY, kan du lese innholdet nedenfor.

La oss forberede GUI

Alt du trenger er et enkelt Excel-ark, og du kan navngi arket etter behov. I dette eksemplet bruker jeg standard arknavnet "Sheet1". Det neste trinnet er å legge til nødvendige overskrifter på dette arket. Bredde- og lengdegradsomformeren gir nøyaktig resultat for adressen vi passerer hvis inngangen inkluderer forstad, stat, postkode og land. Som vist på bildet, klargjør overskrifter. La oss legge til breddegrad og lengdegrad som de to siste kolonnene. Vi trenger også en knapp for å la brukeren utføre konverteringen. Så la oss sette inn en form og fylle den med farge for å få den til å vises som en knapp.Forbered GUI

La oss gjøre det funksjonelt

Skriptet som er gitt her bør kopieres inn i en ny modul. Ikke glem å lagre arbeidsboken som makroaktivert arbeidsbokfil. Sub "FindThis" skal festes til knappen som vi nettopp har opprettet.

La oss teste det

Legg til adresse sammen med annen informasjon i respektive kolonner. Klikk på knappen for å kjøre makroen som vil vise lat- og langkoordinater for alle adresser som er oppført på arket. Makroen vil start på rad 2 og vil fortsette å kjøre til den når en tom rad.Legg til adresse og klikk på knappen

Hvordan det fungerer?

Med scriptet har vi laget to funksjoner. En for å hente Lat-verdi og en annen for å hente Long-verdi. Ved å bruke en FOR-løkke sender vi hver adresse til disse funksjonene og viser resultatet på skjermen.

Script

Function GETLAT(v_address As String, v_suburb As String, v_state As String, v_postcode As Long)
    
    Dim URl As String, lastRow As Long
    Dim xmlHttp As Object, html As Object, objResultDiv As Object, objH3 As Object, link As Object
    
    URl = "https://maps.googleapis.com/maps/api/geocode/xml?address=" & Application.WorksheetFunction.Substitute(v_address, " ", "+") & Application.WorksheetFunction.Substitute(v_suburb, " ", "+") & Application.WorksheetFunction.Substitute(v_state, " ", "+") & Application.WorksheetFunction.Substitute(v_postcode, " ", "+") & ",Australia"
    
    Set xmlHttp = CreateObject("MSXML2.XMLHTTP")
    xmlHttp.Open "GET", URl, False
    xmlHttp.setRequestHeader "Content-Type", "text/xml"
    xmlHttp.send
    
    Set html = CreateObject("htmlfile")
    html.body.innerhtml = xmlHttp.ResponseText
    v_string = html.body.innerhtml
    x = InStr(1, v_string, "<LAT>")
    If x <> 0 Then
        y = InStr(x + 5, v_string, "</LAT>")
        GETLAT = Mid(v_string, x + 5, y - (x + 5))
    End If
End Function

Function GETLNG(v_address As String, v_suburb As String, v_state As String, v_postcode As Long)
    
    Dim URl As String, lastRow As Long
    Dim xmlHttp As Object, html As Object, objResultDiv As Object, objH3 As Object, link As Object
    
    URl = "https://maps.googleapis.com/maps/api/geocode/xml?address=" & Application.WorksheetFunction.Substitute(v_address, " ", "+") & Application.WorksheetFunction.Substitute(v_suburb, " ", "+") & Application.WorksheetFunction.Substitute(v_state, " ", "+") & Application.WorksheetFunction.Substitute(v_postcode, " ", "+") & ",Australia"
    
    Set xmlHttp = CreateObject("MSXML2.XMLHTTP")
    xmlHttp.Open "GET", URl, False
    xmlHttp.setRequestHeader "Content-Type", "text/xml"
    xmlHttp.send
    
    Set html = CreateObject("htmlfile")
    html.body.innerhtml = xmlHttp.ResponseText
    v_string = html.body.innerhtml
    
    x = InStr(1, v_string, "<LNG>")
    If x <> 0 Then
        y = InStr(x + 5, v_string, "</LNG>")
        GETLNG = Mid(v_string, x + 5, y - (x + 5))
    End If
End Function

Sub FindThis()
    For r = 2 To 5
        Range("F" & r).Value = GETLAT(Range("A" & r).Value, Range("B" & r).Value, Range("C" & r).Value, Range("D" & r).Value)
        Range("G" & r).Value = GETLNG(Range("A" & r).Value, Range("B" & r).Value, Range("C" & r).Value, Range("D" & r).Value)
    Next r
End Sub

Hvis du ikke får riktige resultater ved å bruke skriptet, kan korrupt excel være en sannsynlig årsak. Du kan da bruke Excel-filgjenopprettingsverktøy slik som DataNumen Excel Repair for å fikse Excel.

Forfatterintroduksjon:

Nick Vipond er en datagjenopprettingsekspert innen DataNumen, Inc., som er verdensledende innen datagjenopprettingsteknologier, inkludert reparer dokumentproblem og Outlook-programvareprodukter. For mer informasjon besøk www.datanumen. Med

Kommentarer er stengt.