誰かが私を正しい方向に向けてくれることを願っています。ある郵便番号から別の郵便番号までの距離を呼び出すために、Excel から呼び出される VBA の関数があります。これは今のところ問題なく動作しています。
距離はオランダについてのみ計算する必要がありますが、クエリ文字列を国に限定することはできません。これで、郵便番号が 2151 KD になりました。これをクエリ文字列で from または to の郵便番号として使用します。お気に入り:
(数字と文字の間のスペースを削除します)。
これをブラウザに貼り付けるとうまくいきます。正しい位置と距離を示します。(目的地または出発地)。
このクエリ文字列は、次の VBA 関数を使用してコードで生成されます。
Function GetDistance(fromZip As String, toZip As String) As Integer
Dim Uri As String: Uri = "http://maps.googleapis.com/maps/api/distancematrix/json?origins={0}&destinations={1}&mode=car&sensor=false"
Dim xmlHttp As Object: Set xmlHttp = CreateObject("MSXML2.ServerXMLHTTP.6.0")
Dim Json As Object
Dim distance As Double: distance = 0
Uri = Replace(Uri, "{0}", fromZip)
Uri = Replace(Uri, "{1}", toZip)
With xmlHttp
.Open "GET", Uri, False
.setRequestHeader "Content-Type", "text/xml"
.send
End With
'Debug.Print (Uri)
Set Json = JsonConverter.ParseJson(xmlHttp.ResponseText)
'Top-level status OK
If Json("status") = "OK" Then
'Elementstatus
If Json("rows")(1)("elements")(1)("status") = "OK" Then
distance = CLng(Json("rows")(1)("elements")(1)("distance")("value")) / 1000
Else
distance = -2
End If
Else
distance = -1
End If
If fromZip = "1251KD" Or toZip = "1251KD" Then
Debug.Print (xmlHttp.ResponseText)
Debug.Print (Uri)
End If
If IsObject(xmlHttp) Then
Set xmlHttp = Nothing
End If
If IsObject(Json) Then
Set Json = Nothing
End If
GetDistance = Round(distance, 0)
終了機能
ただし、結果は異なります。西暦 1251 年は現在、米国内の場所です。また、距離計算はありません。
VBA コードから呼び出した場合の結果:
{
"destination_addresses" : [ "1211 LW Hilversum, Netherlands" ],
"origin_addresses" : [ "NE 1251, Osceola, MO 64776, USA" ],
"rows" : [
{
"elements" : [
{
"status" : "ZERO_RESULTS"
}
]
}
],
"status" : "OK"
}
ブラウザから直接呼び出された場合の結果:
{
destination_addresses: [
"1211 LW Hilversum, Nederland"
],
origin_addresses: [
"1251 KD Laren, Nederland"
],
rows: [
{
elements: [
{
distance: {
text: "6,9 km",
value: 6878
},
duration: {
text: "14 min.",
value: 810
},
status: "OK"
}
]
}
],
status: "OK"
}
これまでのところ、これを解決する方法を見つけることができませんでした。ブラウザのアドレスバーに貼り付けるとクエリ文字列が機能しますが、VBA から呼び出すと結果が無効になります。これまでのところ、この特定の郵便番号 1251 KD についてだけです。
誰も手がかりを持っていますか?