Ich habe ein VBA-Programm geschrieben, was historische Aktienkursdaten aus Yahoo Finance lädt. Bei Yahoo Finance können diese Kursdaten per CSV-Datei heruntergeladen werden, wobe ich auf diese Funktion per Webquery zugreife. Im Speziellen "besorge" ich mir so momentan die täglichen Kursdaten von 01.01.2011 - 31.12.2011 für ca. 70 Aktientitel.
Dabei sind manche Kurshistorien nicht vollständig. Bspw. geht die Historie von Aktie A nur von 01.04.2011 bis 31.12.2011 und Aktie B ist vollständig. Wenn ich das excel komplett schließe und wieder neu starte, dann passiert das Merkwürdige: Bei einem erneuten Durchlauf kann dann Aktie A vollständig sein, Aktie B aber wiederum nicht. Bei erneutem Schließen tut wieder B, A aber nicht... usw... ????
- Habe viel gegoogelt, aber zu diesem Probelm noch gar nichts gefunden.
- Kennt jemand das Problem?
- Weiß jemand, woran das liegen könnte?
- Hat jemand einen Tipp zur Behebung des Problems?
Bin dankbar für jeglichen Input! Bis auf Hinweise, das mein Code scheiße geschrieben ist. Das weiß ich... :-)
Sub GetPrices(aktie, startdate, enddate)
' aktie -> String-Array mit Kürzeln der Wertpapiere
Dim sheet1, sheet2 As String
sheet1 = "GetPrices"
sheet2 = "GetPrices2"
' Meldungen deaktivieren
Application.DisplayAlerts = False
'Sheets vorbereiten
Sheets(sheet1).Select
Cells.Select
Selection.ClearContents
Sheets(sheet2).Select
Cells.Select
Selection.ClearContents
'Formatierung von sheet1
Sheets(sheet1).Select
Cells.Select
Selection.NumberFormat = "#,##0.00"
Columns("A:A").Select
Selection.NumberFormat = "m/d/yyyy"
' Deklarierung der Variablen
Dim a, b, c, d, e, f As Integer
Dim i, i2, i3 As Integer ' HilfsIndex-Variablen
Dim g As String
Dim run As Integer
Dim preis As Double
Dim run2, run3 As Date
Dim genlink As String
' Aus "startdate" und "enddate" (Yahoo) auslesen
' Anpassung der Werte von a und d für Link
a = Format(Month(startdate) - 1, "00")
b = Day(startdate)
c = Year(startdate)
d = Format(Month(enddate) - 1, "00")
e = Day(enddate)
f = Year(enddate)
g = "d" 'Intervall = daily
' Datumswerte schreiben
With ThisWorkbook.Sheets(sheet1)
.Range("A1").Value = "Date"
run2 = startdate
Do
i2 = DateDiff(g, startdate, run2)
.Range("A1").Offset(i2 + 1, 0).Value = run2
run2 = DateAdd(g, 1, run2)
Loop While run2 <= enddate
End With
' Ermitteln der nötigen Durchläufe, um alle Aktien durchzugehen
run = UBound(aktie)
For i = 1 To run
ThisWorkbook.Sheets(sheet2).Select
'Link erzeugen
genlink = "URL;" & "http://ichart.finance.yahoo.com/table.csv?s=" & aktie(i) & _
"&a=" & a & "&b=" & b & "&c=" & c & "&d=" & d & "&e=" & e & "&f=" & f & "&g=" & g & "&ignore=.csv"
' -> Bsp: http://ichart.finance.yahoo.com/table.csv?s=CIS.F&a=0&b=1&c=2011&d=4&e=9&f=2011&g=d&ignore=.csv
'Historische Kurse abrufen
With ActiveSheet.QueryTables.Add(Connection:=genlink, Destination:=Range("A1"))
.BackgroundQuery = True
.TablesOnlyFromHTML = False
.Refresh BackgroundQuery:=False
.SaveData = True
End With 'Range Query
ThisWorkbook.Sheets(sheet2).Range("A1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.TextToColumns _
Destination:=Range("A1"), _
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, _
Tab:=True, _
Semicolon:=False, _
Comma:=True, _
Space:=False, _
Other:=False
With ThisWorkbook
'Kopieren der Kurswerte in Spalte E in sheet1
For Each zelle In Range("E2:E500")
Select Case zelle.Value
Case Is <> ""
i2 = DateDiff(g, startdate, zelle.Offset(0, -4).Value)
If i2 >= 0 Then
.Sheets(sheet1).[a1].Offset(i2 + 1, i).Font.ColorIndex = 1
.Sheets(sheet1).[a1].Offset(i2 + 1, i).Value = zelle.Value
End If
End Select
Next zelle
' Löschen der Abfragewerte
Range(Selection, Selection.End(xlDown).End(xlToRight)).Select
Selection.QueryTable.Delete
Selection.ClearContents
Next i
' Leeren von sheet2
Sheets(sheet2).Select
Cells.Select
Selection.ClearContents
End Sub
Grüße,
Andrej
|