2013-04-20 12 views
3

Я использую followng-подход для загрузки табличных данных с сайта. Но для каждой итерации цикла требуется около 1,5 секунд. Мне нужно ускорить это. Любые предложения (ы), пожалуйста?Excel VBA - получение данных с веб-сайта

Sub GetData_Sai() 
    Dim htm As Object 
    Dim x As Long, y As Long 

    Set htm = CreateObject("htmlFile") 
    Application.ScreenUpdating = False 

    Row = Sheet2.Cells(Rows.Count, "A").End(xlUp).Row + 1 
    For p = Range("F1") To Range("F1") + 200 
     Debug.Print p 
     Set htm = CreateObject("htmlFile") 
     With CreateObject("msxml2.xmlhttp") 
      .Open "GET", <site_url_goes_here>, False 
      .send 
      htm.body.innerhtml = .responsetext 
     End With 

     With htm.getelementbyid("item") 
      Sheet2.Cells(Row, 4).Value = p 
      For x = 1 To .Rows.Length - 1 
       For y = 0 To .Rows(x).Cells.Length - 1 
        Sheet2.Cells(Row, y + 1).Value = .Rows(x).Cells(y).innertext 
       Next y 
       Row = Row + 1 
      Next x 
     End With 
     Set htm = Nothing 

     If p Mod 10 = 0 Then ThisWorkbook.Save 
    Next 

    Range("F1") = p 

    Application.ScreenUpdating = True 
    MsgBox "Done", vbInformation 
End Sub 
+0

Если вы отлаживаете его, какая часть занимает больше всего времени? –

+0

Просьба предоставить ссылку для сайта, который вы хотите получить. Подход отличается в зависимости от сайта. – Santosh

+0

@SiddharthRout: часть запроса GET. Заявление: .Откройте «GET», , False – Tejas

ответ

0

Вы должны рассмотреть вопрос об открытии объекта Msxml2.XMLHTTP только один раз, а затем вызвать Open и Send внутри каждой итерации цикла. Вы можете сохранить его в переменной перед запуском цикла. Я уверен, что большую часть времени тратится на создание объекта, а не на фактический вызов Open. Основываясь на том, как вы вызываете его в своем коде выше, вы создаете новый объект в каждой итерации цикла.

Смежные вопросы