2014-10-23 2 views
1

Access 2010을 사용 중이고 지오 코드를 되돌리려 고합니다. lat \ long 위치를 지정하면 결과가 목록 상자에 표시됩니다. 목록 상자와 명령 단추가있는 양식이 있습니다. 명령 단추는 다음 onclick 이벤트가 있습니다.XML 주소 지오 코딩 액세스 VBA

Dim XMLDoc As New DOMDocument 
Dim XMLNode As IXMLDOMNode 
Dim i As Long 
Dim lat As Double, lng As Double 

XMLDoc.Load "http://maps.googleapis.com/maps/api/geocode/xml?latlng=37.4250011,-122.0955909&sensor=false" 

Do Until XMLDoc.ReadyState = 4 
DoEvents 
Loop 

If Len(XMLDoc.Text) = 0 Then 
    Call MsgBox("No data!") 
    Exit Sub 
End If 

Set XMLNode = XMLDoc.selectSingleNode("/GeocodeResponse/result/formatted_address") 

For i = 0 To XMLNode.childNodes.length - 1 

Me.List1.AddItem Item:=XMLNode.childNodes(i).baseName & XMLNode.childNodes(i).Text 

Next i 

따라서 형식이 지정된 주소를 검색합니다. 그러나 주소의 번지 부분을 제외하고 싶습니다. 예를 들어, 다음으로 이동하는 경우 :

http://maps.googleapis.com/maps/api/geocode/xml?latlng=37.4250011,-122.0955909&sensor=false 

나는 'Bayshore Parkway, Mountain View, CA 94043, USA'만 원합니다. 주소 구성 요소를 작성한 다음 목록 상자에 한 줄로 표시하려면 어떻게합니까? 가능한가?

감사합니다, 대신 노드에서 전체 .Text를 인쇄

마이클

답변

0

, 당신은 몇 가지 간단한 문자열 함수를 사용하여 변환 할 수 있습니다.

첫째, 출력 표현하기 위해 문자열 형식의 변수를 선언 : 그것을 조작, 그리고

StreetName = XMLNode.childNodes(i).baseName & XMLNode.childNodes(i).Text 

:

StreetName = Mid(StreetName, Instr(StreetName, " ")+1) 
다음

Dim StreetName as String 

을, 당신은 당신의 변수에 할당 할 수 있습니다

Mid 함수는 첫 번째 문자 다음의 위치에서 시작하는 부분 문자열을 반환합니다. 공간은 Instr 기능을 사용하여 찾습니다. 그런 다음 목록 상자에 추가 :

Me.List1.AddItem StreetName 

당신이 (어떤 일이 없을 수도?) 당신이 할 수있는 주소 번호를 확인해야하는 경우 이에 대한

StreetName = XMLNode.childNodes(i).baseName & XMLNode.childNodes(i).Text 
If IsNumeric(Left(StreetName,1)) Then 
    StreetName = Mid(StreetName, Instr(StreetName, " ")+1) 
End If 

Me.List1.AddItem StreetName 
+0

감사합니다. 그러나 주소에 집 번호가 없으면 주소의 첫 번째 줄이 반으로 자릅니다. – Michael

+0

그럼 원래의 질문에 대해서는 아무 말도하지 않았습니다. 시행 착오를 통해 자신 만의 예외 처리 방법을 찾아 낼 수있을 것이라고 생각하십니까? 왜 시도하지 그래? 어떤 문제가 생기면 알려줘. –

+0

확인. 나는 그것을 줄 것이다 - 나는 VBA를 알고 있지만 XML 측면에 대해서는 확신하지 못한다. – Michael