<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBA: Поиск геокоординат по данным в EXCEL]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=9635&amp;type=atom" />
	<updated>2014-05-22T13:50:26Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=9635</id>
		<entry>
			<title type="html"><![CDATA[Re: VBA: Поиск геокоординат по данным в EXCEL]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=83231#p83231" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>xsanekk пишет:</cite><blockquote><p>Вышел из ситуации вот такой формулой: </p><div class="codebox"><pre><code>=СЦЕПИТЬ(ПРАВСИМВ(getYandexMapsGeocode(A1);9);&quot;, &quot;;ЛЕВСИМВ(getYandexMapsGeocode(A1);9))</code></pre></div></blockquote></div><p>Не совсем рациональное решение - происходит лишний вызов функции. Добавил Split для перестановки долготы и широты, и DoEvents, чтобы книга не подвисала:<br /></p><div class="codebox"><pre><code>Function getYandexMapsGeocode(sAddr As String) As String
    
    &#039; Tools - References - Microsoft XML, v3.0
    Dim oXhr As XMLHTTP
    Dim sQuery As String
    Dim oXml As DOMDocument
    Dim oLatLng As IXMLDOMNode
    Dim arrLatLng() As String
    
    getYandexMapsGeocode = &quot;&quot;
    Set oXhr = CreateObject(&quot;Microsoft.XMLHTTP&quot;)
    sQuery = &quot;http://geocode-maps.yandex.ru/1.x/?geocode=&quot;
    sQuery = sQuery &amp; Replace(sAddr, &quot; &quot;, &quot;+&quot;)
    sQuery = sQuery &amp; &quot;&amp;results=1&quot;
    oXhr.Open &quot;GET&quot;, sQuery, True
    oXhr.send
    Do Until oXhr.readyState = 4
        DoEvents
    Loop
    Set oXml = oXhr.responseXML
    Set oLatLng = oXml.getElementsByTagName(&quot;pos&quot;)(0)
    arrLatLng = Split(oLatLng.Text)
    getYandexMapsGeocode = arrLatLng(1) &amp; &quot;, &quot; &amp; arrLatLng(0)
    
End Function</code></pre></div>]]></content>
			<author>
				<name><![CDATA[omegastripes]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=29228</uri>
			</author>
			<updated>2014-05-22T13:50:26Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=83231#p83231</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBA: Поиск геокоординат по данным в EXCEL]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=83200#p83200" />
			<content type="html"><![CDATA[<p>Вышел из ситуации вот такой формулой: </p><div class="codebox"><pre><code>=СЦЕПИТЬ(ПРАВСИМВ(getYandexMapsGeocode(A1);9);&quot;, &quot;;ЛЕВСИМВ(getYandexMapsGeocode(A1);9))</code></pre></div>]]></content>
			<author>
				<name><![CDATA[xsanekk]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27386</uri>
			</author>
			<updated>2014-05-22T05:19:35Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=83200#p83200</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBA: Поиск геокоординат по данным в EXCEL]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=83199#p83199" />
			<content type="html"><![CDATA[<p>Спасибо большое! Все работает супер! А как можно перевернуть Долготу и широту и поставить между ними запятую то есть вид такой должен быть: &quot;Широта, Долгота&quot;, а то получается наоборот, попробую сам разобраться...</p>]]></content>
			<author>
				<name><![CDATA[xsanekk]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27386</uri>
			</author>
			<updated>2014-05-22T05:12:00Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=83199#p83199</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBA: Поиск геокоординат по данным в EXCEL]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=83192#p83192" />
			<content type="html"><![CDATA[<p>Проверял на Excel 2003 SP3 - что-то непонятное с ранним связыванием и Xpath . Но вот так вполне себе даже работает:<br /></p><div class="codebox"><pre><code>Function getYandexMapsGeocode(sAddr As String) As String
    
    &#039; Tools - References - Microsoft XML, v3.0
    Dim oXhr As XMLHTTP
    Dim sQuery As String
    Dim oXml As DOMDocument
    Dim oLatLng As IXMLDOMNode
    
    getYandexMapsGeocode = &quot;&quot;
    Set oXhr = CreateObject(&quot;Microsoft.XMLHTTP&quot;)
    sQuery = &quot;http://geocode-maps.yandex.ru/1.x/?geocode=&quot;
    sQuery = sQuery &amp; Replace(sAddr, &quot; &quot;, &quot;+&quot;)
    sQuery = sQuery &amp; &quot;&amp;results=1&quot;
    oXhr.Open &quot;GET&quot;, sQuery, False
    oXhr.send
    Set oXml = oXhr.responseXML
    Set oLatLng = oXml.getElementsByTagName(&quot;pos&quot;)(0)
    getYandexMapsGeocode = oLatLng.Text
    
End Function</code></pre></div>]]></content>
			<author>
				<name><![CDATA[omegastripes]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=29228</uri>
			</author>
			<updated>2014-05-21T15:20:53Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=83192#p83192</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBA: Поиск геокоординат по данным в EXCEL]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=83183#p83183" />
			<content type="html"><![CDATA[<p>Добрый день. Уважаемые знатоки прошу подсказать как можно реализовать поиск координат в Excel через яндекс.карты</p><p>В Excel есть столбец с адресом, необходимо выполнить запрос к API яндекс, что бы в соседний столбец вывелись данные координат адреса.</p><p>Искал в интернете готовые решения не нашел, изучив немного <a href="http://api.yandex.ru/maps/doc/geocoder/desc/concepts/input_params.xml">параметры HTTP-запроса</a> в яндекс картах сделал вот такой код на основе какого то кода найденого в интернете... прошу помочь составить запрос, <br />например в ячейке есть &quot;Москва, Тверская, улица, 7&quot; и vba делает запрос http://geocode-maps.yandex.ru/1.x/?geocode=Москва,+Тверская,+дом+7<br /></p><div class="codebox"><pre><code>Option Explicit

Function getYandexMapsGeocode(sAddr As String) As String

Dim xhrRequest As XMLHTTP60
Dim sQuery As String
Dim domResponse As DOMDocument60
Dim LatLng As IXMLDOMNode

getYandexMapsGeocode = &quot;&quot;

Set xhrRequest = New XMLHTTP60
sQuery = &quot;http://geocode-maps.yandex.ru/1.x/?geocode=&quot;
sQuery = sQuery &amp; Replace(sAddr, &quot; &quot;, &quot;+&quot;)
xhrRequest.Open &quot;GET&quot;, sQuery, False
xhrRequest.send

Set domResponse = New DOMDocument60
domResponse.LoadXML xhrRequest.responseText

Set LatLng = domResponse.SelectSingleNode(&quot;/ymaps/GeoObjectCollection/featureMember/GeoObject/Point/pos&quot;)

getYandexMapsGeocode = LatLng.Text

Dim d As Date
d = DateAdd(&quot;s&quot;, 1, Now)
Do While Now &lt; d
DoEvents
Loop

End Function
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[xsanekk]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27386</uri>
			</author>
			<updated>2014-05-21T10:54:12Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=83183#p83183</id>
		</entry>
</feed>
