2017-02-13 4 views
0

Я нашел много похожих вопросов, но все решения специфичны для обрабатываемой страницы. Я пытаюсь выбрать значение из раскрывающегося списка, а затем запустить обработчик события для сброса страницы. Я не лучший в работе с HTML, и я не могу понять, как получить страницу для обновления после того, как я присвою значение выпадающему меню. Вот что у меня есть:Увольнение обработчика событий в IE с использованием VBA

Dim IE As Object 
Dim IECollection As Object 

    Set IE = CreateObject("InternetExplorer.Application") 
     IE.Visible = True 
     IE.navigate "https://www.theocc.com/webapps/historical-volume-query" 

    Do While IE.busy 
     Application.Wait DateAdd("s", 1, Now) 
    Loop 

    Set IECollection =IE.Document.getElementsByName("historicalVolumeSearch.reportType") 
    i = 0 
    While i < IECollection.Length 
     If IECollection(i).Name = "historicalVolumeSearch.reportType" Then 
      IECollection(i).Value = "PC" 
     End If 
    i = i + 1 
    Wend 

Я не могу понять, как назвать рядом с исходной страницы кода, чтобы сделать его обновить.

Спасибо.

+1

Было бы проще использовать параметры, описанные на этой странице: https://www.theocc.com/market-data/batch-processing.jsp –

+0

@TimWilliams К сожалению, данные мне нужно не просто извлечь из отчетов о партиях. Любые другие предложения? – amdopt

ответ

0

Отвечая на мой собственный вопрос здесь. Я отступил от этого на несколько недель и вернулся к нему, и ответ был прямо передо мной. Я изменил свой код выше на то, что ниже. Работает так, как я хочу, и позволяет мне хранить HTML и очищать нужные мне данные.

Dim IE As Object 
Dim IECollection As Object 
Dim IECollection2 As Object 
Dim IEElement As Object 
Dim dt As String 

Set IE = CreateObject("InternetExplorer.Application") 
    IE.Visible = False 
    IE.navigate "https://www.theocc.com/webapps/put-call-ratio" 

Do While IE.busy Or IE.ReadyState <> 4 
    Application.Wait DateAdd("s", 1, Now) 
Loop 

     For i = 1 To UBound(arrDates) 'an array containing a list of dates 
     dt = arrDates(i, 1) 
     Set IECollection = IE.Document.getElementsByName("putCallDate") 
      IECollection(0).Value = dt 
      IECollection(0).Select 

     Set IECollection2 = IE.Document.getElementsByTagName("form") 
      j = 1 
      While j < IECollection2.Length 
       If IECollection2.Item(j).Name = "commandForm" Then 
        Set IEElement = IECollection2.Item(j) 
        IEElement.submit 
       End If 
      j = j + 1 
      Wend 

     Do While IE.busy Or IE.ReadyState <> 4 
      Application.Wait DateAdd("s", 1, Now) 
     Loop 
     'other code in here that stores the HTML as a string and scrapes out data 
     Next i