Kako ustvariti geografsko orodje za pridobivanje koordinat zemljepisne širine in dolžine za naslove z Excelovim VBA

Skupna raba zdaj:

Sledite temu članku in ustvarite svoje geografsko orodje, s katerim lahko dobite koordinate zemljepisne širine in dolžine za naslov. Takšne pretvornike pogosto uporabljajo nepremičninski posredniki.

Prenesi zdaj

Če želite programsko opremo začeti uporabljati čim prej, lahko:

Prenesite programsko opremo zdaj

V nasprotnem primeru, če želite sami, lahko preberete spodnjo vsebino.

Pripravimo GUI

Potrebujete le en Excelov list, ki ga lahko poimenujete po svojih potrebah. V tem primeru uporabljam privzeto ime lista »List1«. Naslednji korak je dodajanje potrebnih glav na ta list. Pretvornik zemljepisne širine in dolžine da natančen rezultat za naslov, ki ga posredujemo, če vnos vključuje predmestje, zvezno državo, poštno številko in državo. Kot je prikazano na sliki, pripravite glave. Dodajmo zemljepisno širino in dolžino kot zadnja dva stolpca. Potrebujemo tudi gumb, ki bo uporabniku omogočil pretvorbo. Vstavimo torej obliko in jo napolnimo z barvo, da se bo prikazala kot gumb.Pripravite GUI

Naj bo funkcionalen

Tukaj predviden skript je treba kopirati v nov modul. Ne pozabite shraniti delovnega zvezka kot datoteko delovnega zvezka z omogočeno makro. Pod "FindThis" je treba priložiti gumbu, ki smo ga pravkar ustvarili.

Preizkusimo

V ustrezne stolpce dodajte naslov skupaj z drugimi podatki. Kliknite gumb, da zaženete makro, ki bo prikazal zemljepisne in dolžinske koordinate za vse naslove, navedene na listu. Makro se bo začel v 2. vrstici in se bo izvajal, dokler ne doseže prazne vrstice.Dodajte naslov in kliknite gumb

Kako deluje?

S skriptom smo ustvarili dve funkciji. Ena za pridobivanje vrednosti Lat in druga za pridobivanje vrednosti Long. Z zanko FOR vsak naslov posredujemo tem funkcijam in rezultat prikažemo na zaslonu.

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

Če s skriptom ne prejmete ustreznih rezultatov, je verjetno razlog poškodovan excel. Nato lahko uporabite Orodje za obnovitev datotek Excel kot DataNumen Excel Repair popraviti Excel.

Uvod avtorja:

Nick Vipond je strokovnjak za obnovitev podatkov v DataNumen, Inc., ki je vodilna na svetu na področju tehnologij za obnovitev podatkov, vključno z problem popravljanja dokumenta in obeti za obnovitev programske opreme. Za več informacij obiščite www.datanumen.com

Skupna raba zdaj:

Komentarji so zaprti.