Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
ГЕО-кодер: сделать огарничитель по количеству запросов в отрезок времени
 
Здравствуйте!
В приложенном файлике прописан макрос на преобразования адресов в гео данные Яндекса. Помогите с кодом для огорчения по времени-чтобы за сутки делалось не более 25 000 запросов.
 
А какой критерий начала "суток"? Открытие файла? 00:00? В целом топорная идея такова. А скрытом листе храним таймстамп и счётчик, пока разница между таймстапмпом и текущим временем меньше суток, счётчик растёт и при достижении 25000 вызывает птичку Оболминого.
Если сутки прошли — таймстамп меняем на свежий и счётчик обнуляем.
Изменено: StoTisteg - 31 Май 2018 18:07:02
 
Да, все верно- отсчет суток с 00 00 по Московскому времени. До следующих 00 00 можно обратиться 25 000 раз.
 
Решается  просто.Таймер задержки на 3 секунды
Вставляете в начало или конец процедуры getYandexMapsGeocode
Код
   Start = Timer
    Do While Timer < Start + 3
        DoEvents
    Loop
 
Ну да, можно и так... Но запросы-то идут не постоянно.
 
StoTisteg, можно как-то так:
Код
Sub гео_с_соседним_по_выделенному()
    Dim vStr As String, c As Variant
    Dim pref As String
    Dim suf As String
    
    Dim DateCell As Range, limitCell As Range
    ' Дата лимита
    Set DateCell = ThisWorkbook.Sheets(1).Range("R2")
    ' Оставшееся кол-во обращений
    Set limitCell = ThisWorkbook.Sheets(1).Range("S2")
    
    ' Если дата меньше текущей - поставим текущую дату и обновим лимит
    If DateCell.Value < Date Then
        DateCell.Value = Date
        limitCell.Value = 25000
    End If
    
    Application.CutCopyMode = False
    Selection.SpecialCells(xlCellTypeVisible).Select
    Selection.NumberFormat = "General"

    pref = "=гео.xlsm!getYandexMapsGeocode("""
    vStr = InputBox("Ведите доп идентификатор для привязки (по умолчанию г.Москва.) :", "Ввод данных")
    If vStr = "" Then vStr = "г.Москва, " Else vStr = vStr
    
        suf = """&RC[-1])"
    
    pref = pref & vStr & " " & suf
    
    For Each c In Selection.Cells
    ' Если лимит не исчерпарн - делаем запрос и уменьшаем счетчик
    If limitCell.Value > 0 Then
        c.Value = pref
        ' =====================
        c.Copy
        c.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        '=================
        On Error GoTo ErrorHandler
        c.Value = Replace(c.Value, "ё", "е")
        GoTo Ends:
ErrorHandler:
        c.Value = "адрес не найден"
        Application.ActiveCell.Offset(1, 0).Select
        Resume Next
Ends:
            ' ==================
        ' Уменьшаем лимит
        limitCell.Value = limitCell.Value - 1
    Else
        ' Если кол-во дневных запросов вышло - выведем сообщение и выйдем из цикла
        MsgBox "Дневной лимит исчерпан."
        Exit For
    End If
    Next
    Application.CutCopyMode = False
End Sub
 
tolstak, Ну де, где-то так. Только нужно счётчики держать на листе с Visible=xlVeryHidden для защиты от сильно хитрозадых юзверей.
 
StoTisteg , Вы в курсе, что есть  часовое ограничение у яндекса?
Страницы: 1
Читают тему (гостей: 1)