Гость
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Геокодер VBA / 4 сообщений из 4, страница 1 из 1
08.12.2015, 16:39
    #39123420
Freeze729
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Геокодер VBA
Не смог найти геокодера на VBA на страницах форума, решил поделиться.
Иногда необходимо преобразовать текстовый адрес в геокоординаты.
Помещаем в Лист1 колонку А список адресов, прогоняем скриптом и на выходе получаем геоданные.
Если ваш интернет провайдер не смог корректно обработать запрос, то клетка с координатами останется пустой. Скрипт можно запустить повторно, заполнит только пустые клетки. Пауза в 0.25 сек для того, чтобы успеть создать объект. try, количество попыток для повторной попытки.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
Function Pauza(Tm As Double)
    vrm! = Timer
    Do While Timer - vrm! < Tm: DoEvents: Loop
End Function

Sub WebScraping()

    Dim x As Integer, p As Integer, MyTable As Object    'MSHTML.HTMLTable
    On Error Resume Next
    i = 1
    Do While Лист1.Cells(i, 1) <> ""
      If Лист1.Cells(i, 4) = "" Then
        Set IE = CreateObject("InternetExplorer.Application")
        IE.Visible = False
        With IE
           t1 = Replace(Лист1.Cells(i, 1), " ", "+")
          .Navigate "https://geocode-maps.yandex.ru/1.x/?geocode=" & t1
           
           Pauza (0.25)
           For Each MyTable In .Document.getElementsByTagName("pos")
          
             Лист1.Cells(i, 4) = MyTable.innertext
             Лист1.Cells(i, 2) = Mid(MyTable.innertext, InStr(1, MyTable.innertext, ">") + 1, InStr(1, MyTable.innertext, " ") - InStr(1, MyTable.innertext, ">") - 1)
             Лист1.Cells(i, 3) = Mid(MyTable.innertext, InStr(1, MyTable.innertext, " ") + 1, InStr(1, MyTable.innertext, "</") - InStr(MyTable.innertext, " ") - 1)
             If Лист1.Cells(i, 4) <> "" Then Exit For
             DoEvents
           Next
           try = try + 1
           If (Лист1.Cells(i, 4) <> "" Or try > 2) Then
             i = i + 1
             try = 0
           End If
        End With
        IE.Quit
        Set EI = Nothing
      Else
        i = i + 1
      End If
    Loop

End Sub
...
Рейтинг: 0 / 0
08.12.2015, 17:02
    #39123458
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Геокодер VBA
А почему используется искусственная фиксированная пауза? которой к тому же может и нехватить... когда вместо неё можно использовать штатное
Код: vbnet
1.
2.
3.
Do While .Busy
  DoEvents
Loop
...
Рейтинг: 0 / 0
09.12.2015, 15:25
    #39124216
essbase.ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Геокодер VBA
Freeze729,

>> Лист1.
ActiveSheet ??
...
Рейтинг: 0 / 0
09.12.2015, 15:26
    #39124219
essbase.ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Геокодер VBA
Freeze729,
Спасибо ) - действительно интересно )
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Геокодер VBA / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]