2017-06-21 2 views
1

Hallo, ich brauche Hilfe mit diesem Code Ich versuche, Daten von dieser Seite https://finance.yahoo.com/quote/ADM.L/balance-sheet?p=ADM.L, zu extrahieren, aber das Problem ist Seite wird standardmäßig auf jährliche festgelegt, aber ich brauche vierteljährliche Werte der Bilanzsumme und Gesamtverbindlichkeiten.Extrahieren Sie Daten von Yahoo Finanzen mit Excel VBA

Dieser Code läuft, aber meistens werden Jahreswerte ausgewählt. Bitte schlagen Sie etwas vor, was ich tun kann.

Private Sub CommandButton3_Click() 
' 
Dim ie As Object 
Set Rng = Range("A2:A50") 
Set Row = Range(Rng.Offset(1, 0), Rng.Offset(1, 0).End(xlDown)) 
Set ie = CreateObject("InternetExplorer.Application") 
With ie 
'.Visible = False 
For Each Row In Rng 
.navigate "https://finance.yahoo.com/quote/" & Range("A" & Row.Row).Value & "/balance-sheet?p=" & Range("A" & Row.Row).Value 
'Application.Wait (Now + TimeValue("0:00:02")) 
While ie.readyState <> 4 
Wend 

Do While ie.Busy: DoEvents: Loop 

Dim doc As HTMLDocument 
Set doc = ie.document 

doc.getElementsByClassName("P(0px) M(0px) C($actionBlue) Bd(0px) O(n)")(2).Click 

Do While ie.Busy: DoEvents: Loop 
Application.Wait (Now + TimeValue("0:00:05")) 
Range("D" & Row.Row).Value = doc.getElementsByClassName("Fw(b) Fz(s) Ta(end)")(4).innerText 
Range("E" & Row.Row).Value = doc.getElementsByClassName("Fw(b) Fz(s) Ta(end)")(12).innerText 
Range("F" & Row.Row).Value = doc.getElementsByClassName("C($gray) Ta(end)")(0).innerText 


Next Row 
End With 
ie.Quit 
' 
End Sub 
+1

* Bitte schlagen Sie etwas vor, was ich tun kann. * - Sie können IE verwenden, um die vierteljährlichen Daten auszuwählen, bevor Sie die Elemente in Ihr Arbeitsblatt schreiben. –

+0

Ich tat, aber es funktioniert nicht immer .... meistens ist es die Quartalsdaten abholen –

+0

Ich dachte, Sie wollten es die Vierteldaten abholen? – Rdster

Antwort

0

Dies sollte ein guter Anfang für Sie sein, um loszulegen.

Sub DownloadData() 

Set ie = CreateObject("InternetExplorer.application") 


With ie 
    .Visible = True 
    .navigate "https://finance.yahoo.com/quote/ADM.L/balance-sheet?p=ADM.L" 

' Wait for the page to fully load; you can't do anything if the page is not fully loaded 
Do While .Busy Or _ 
    .readyState <> 4 
    DoEvents 
Loop 


Set e = ie.Document.GetElementsByClassName("Fz(s) Fw(500) D(ib) Pend(15px) H(18px) C($finDarkLink):h Mend(15px)")(1) 
e.Click 

    ' Wait for the page to fully load; you can't do anything if the page is not fully loaded 
    Do While .Busy Or _ 
     .readyState <> 4 
     DoEvents 
    Loop 

End With 

End Sub 

Grundsätzlich ‚Annual‘ ist die Standardeinstellung und Sie haben die ‚Quarterly‘ Link zu klicken, angezeigt, um die vierteljährlichen Daten zu erhalten. Ich glaube, Yahoo hat 2 verschiedene URLs für Annual und Quarterly. Jetzt, anscheinend, geben sie Ihnen 2 Verbindungen, um zu klicken, um hin und her zwischen den 2 Häufigkeiten der Finanzberichte hin und her zu schalten.

0

Finden Sie unten auf dem Code zu beheben. Beachten Sie, dass Yahoo den Klassennamen aktualisiert hat, dh von "P (0px) M (0px) C ($ actionBlue) Bd (0px) O (n)" ==> "P (0px) M (0px) C ($ c -Fuji-Blau-1-b) Bd (0px) O (n) ".

Private Sub CommandButton3_Click() 

    Dim ie As Object 
    Set Rng = Range("A2:A50") 
    Set row = Range(Rng.Offset(1, 0), Rng.Offset(1, 0).End(xlDown)) 
    Set ie = CreateObject("InternetExplorer.Application") 

    With ie 
     .Visible = True 
     For Each row In Rng 
      .navigate "https://finance.yahoo.com/quote/" & Range("A" & row.row).Value & "/balance-sheet?p=" & Range("A" & row.row).Value 

      While ie.readyState <> 4 
      Wend 

      Do While ie.Busy: DoEvents: Loop 

      Dim doc As HTMLDocument 
      Set doc = ie.document 

      Set element = doc.getElementsByClassName("P(0px) M(0px) C($c-fuji-blue-1-b) Bd(0px) O(n)")(2) 
      element.Click 

      Do While ie.Busy: DoEvents: Loop 

      Range("D" & row.row).Value = doc.getElementsByClassName("Fw(b) Fz(s) Ta(end)")(4).innerText 
      Range("E" & row.row).Value = doc.getElementsByClassName("Fw(b) Fz(s) Ta(end)")(12).innerText 
      Range("F" & row.row).Value = doc.getElementsByClassName("C($gray) Ta(end)")(0).innerText 
     Next row 
    End With 
    ie.Quit 

End Sub 
0

Es ist nicht möglich, vierteljährliche Daten von Yahoo mit VBA zu extrahieren. Jährliche Daten können extrahiert werden, aber nicht vierteljährlich.

Verwandte Themen