2017-01-03 3 views
0

Ich bin neu hier und brauche ein paar Tipps für mein Modul. Ich habe das folgende Modul erstellt Datenwert von alexa.com mit bestimmten Adresse zu kratzen: alexa.com/siteinfo/clashofclans.comVBA - get inertext von HTMl Tabelle, wenn Bedingung zuerst td in Zeile ist wahr

Der spezifische Wert ist in der folgenden Tabelle verschachtelt: http://imgur.com/JB11PT2

Ich versuche, Daten "Prozent des Besuchers" von US als das Bild oben mit Wert 9.1% zu bekommen, aber der Code wird nur funktionieren, wenn USA in der ersten Reihe/ersten Position. http://imgur.com/yMBmdbs

Der unten VBA-Code mein Versuch Schaben ist:

Sub ExtractAlexa() 
    Dim tickername As String 
    Dim doc As HTMLDocument 

    ie.Visible = False 
    ie.navigate "http://www.alexa.com/siteinfo/clashofclans.com" 

    Do 
    DoEvents 
    Loop Until ie.readyState = READYSTATE_COMPLETE 

    Application.Wait (Now + TimeValue("00:00:4")) 
    Set doc = ie.document 

    Set elems = doc.getElementById("demographics_div_country_table").getElementsByTagName("tr") 
    For Each e In elems   
    If e.outerHTML Like "*/topsites/countries/US*" Then 
     Sheet2.Range("E11").Value = Trim(doc.getElementsByTagName("td")(1).innerText) 
    End If 
    Next e 

    ie.Quit 
End Sub 

Bitte, weiß jemand, wo ich hier falsch werde? Danke.

Antwort

0

Sie haben es im Grunde genagelt - aber ich glaube, Sie haben einen subtilen Fehler in dieser Zeile:

Sheet2.Range("E11").Value = Trim(doc.getElementsByTagName("td")(1).innerText) 

werden sollten:

Sheet2.Range("E11").Value = Trim(e.getElementsByTagName("td")(1).innerText) 

Sie können auch WinHTTP verwenden, um einige der zu vermeiden Gerangel mit IE:

Public Sub ExtractAlexa() 
    Dim oHTML As MSHTML.HTMLDocument 
    Dim elems As MSHTML.IHTMLElementCollection 
    Dim e As MSHTML.IHTMLElement 
    Set oHTML = New MSHTML.HTMLDocument 
    With CreateObject("WINHTTP.WinHTTPRequest.5.1") 
     .Open "GET", "http://www.alexa.com/siteinfo/clashofclans.com", False 
     .send 
     oHTML.body.innerHTML = .responseText 
    End With 
    oHTML.getElementById("demographics_div_country_table").getElementsByTagName ("tr") 
    Set elems = oHTML.getElementById("demographics_div_country_table").getElementsByTagName("tr") 
    For Each e In elems 
     If e.outerHTML Like "*/topsites/countries/US*" Then 
      Sheet2.Range("E11").Value = Trim(e.getElementsByTagName("td")(1).innerText) 
      Exit For 
     End If 
    Next e 
End Sub 
+0

Vielen Dank Ben, für Ihren Rat, mein Modul funktioniert jetzt. Ich schätze es sehr. – eros

Verwandte Themen