Ik gebruik een van internet geplukte Excel template om aandelenkoeren van Yahoo Finance te downloaden om vervolgens te gebruiken in een zelfgemaakte trading tool. De template is te vinden op http://investexcel.net/mu...ote-downloader-for-excel/.
De template download koersen van een vooraf opgegeven lijst tickers en schrijft de data van elke ticker in een aparte tab/sheet. Vervolgens schrijft een macro in de template de data van elke sheet/ticker naar een apart CSV bestand. Hierbij crasht de macro vaak bij grotere aantallen tickers (+5) met een 'subscript out of range' melding.
Het oplossen van deze crashes zou uiteraard fijn zijn, maar voor mijn workflow zou nog veel handiger zijn als de template de data van de tickers onder elkaar in 1 sheet zou zetten, met in de 1e kolom de tickername.
Ik heb volgens mij de module gevonden in het VBA script die de ticker data in aparte Excel sheets wegschrijft:
'Parse returned string into an array
'***************************************************
nColumns = 6 'number of columns minus 1 (date, open, high, low, close, adj close, volume)
csv_rows() = Split(resultFromYahoo, Chr(10))
ReDim resultArray(0 To UBound(csv_rows), 0 To nColumns) As Variant
For iRows = LBound(csv_rows) To UBound(csv_rows)
CSV_Fields = Split(csv_rows(iRows), ",")
If UBound(CSV_Fields) > nColumns Then
nColumns = UBound(CSV_Fields)
ReDim Preserve resultArray(0 To UBound(csv_rows), 0 To nColumns) As Variant
End If
For iCols = LBound(CSV_Fields) To UBound(CSV_Fields)
If IsNumeric(CSV_Fields(iCols)) Then
resultArray(iRows, iCols) = Val(CSV_Fields(iCols))
ElseIf IsDate(CSV_Fields(iCols)) Then
resultArray(iRows, iCols) = CDate(CSV_Fields(iCols))
Else
resultArray(iRows, iCols) = CStr(CSV_Fields(iCols))
End If
Next
Next
'Write results into worksheet for ticker
Sheets(stockTicker).Range("A2").Resize(UBound(resultArray, 1) + 1, UBound(resultArray, 2) + 1).Value = resultArray
'***********
Ik ben mij wel aan het inlezen in VBA, maar kom er nog niet uit hoe ik deze macro kan aanpassen zodat de tickerdata onder elkaar in 1 sheet kan worden weggeschreven, met in een extra kolom de tickername.
Mocht iemand mij op weg kunnen helpen zou dat super zijn.
De template download koersen van een vooraf opgegeven lijst tickers en schrijft de data van elke ticker in een aparte tab/sheet. Vervolgens schrijft een macro in de template de data van elke sheet/ticker naar een apart CSV bestand. Hierbij crasht de macro vaak bij grotere aantallen tickers (+5) met een 'subscript out of range' melding.
Het oplossen van deze crashes zou uiteraard fijn zijn, maar voor mijn workflow zou nog veel handiger zijn als de template de data van de tickers onder elkaar in 1 sheet zou zetten, met in de 1e kolom de tickername.
Ik heb volgens mij de module gevonden in het VBA script die de ticker data in aparte Excel sheets wegschrijft:
'Parse returned string into an array
'***************************************************
nColumns = 6 'number of columns minus 1 (date, open, high, low, close, adj close, volume)
csv_rows() = Split(resultFromYahoo, Chr(10))
ReDim resultArray(0 To UBound(csv_rows), 0 To nColumns) As Variant
For iRows = LBound(csv_rows) To UBound(csv_rows)
CSV_Fields = Split(csv_rows(iRows), ",")
If UBound(CSV_Fields) > nColumns Then
nColumns = UBound(CSV_Fields)
ReDim Preserve resultArray(0 To UBound(csv_rows), 0 To nColumns) As Variant
End If
For iCols = LBound(CSV_Fields) To UBound(CSV_Fields)
If IsNumeric(CSV_Fields(iCols)) Then
resultArray(iRows, iCols) = Val(CSV_Fields(iCols))
ElseIf IsDate(CSV_Fields(iCols)) Then
resultArray(iRows, iCols) = CDate(CSV_Fields(iCols))
Else
resultArray(iRows, iCols) = CStr(CSV_Fields(iCols))
End If
Next
Next
'Write results into worksheet for ticker
Sheets(stockTicker).Range("A2").Resize(UBound(resultArray, 1) + 1, UBound(resultArray, 2) + 1).Value = resultArray
'***********
Ik ben mij wel aan het inlezen in VBA, maar kom er nog niet uit hoe ik deze macro kan aanpassen zodat de tickerdata onder elkaar in 1 sheet kan worden weggeschreven, met in een extra kolom de tickername.
Mocht iemand mij op weg kunnen helpen zou dat super zijn.