powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Геокодер VBA
4 сообщений из 4, страница 1 из 1
Геокодер VBA
    #39123420
Freeze729
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не смог найти геокодера на 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
Геокодер VBA
    #39123458
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему используется искусственная фиксированная пауза? которой к тому же может и нехватить... когда вместо неё можно использовать штатное
Код: vbnet
1.
2.
3.
Do While .Busy
  DoEvents
Loop
...
Рейтинг: 0 / 0
Геокодер VBA
    #39124216
Фотография essbase.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Freeze729,

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


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