2015-11-05 44 views
-1

爲了好玩,我正在改寫excel股票portflio的風格。迄今爲止,我能夠從雅虎獲取數據,並把它變成這種形式:MsgBox Http.ResponseText糾正解釋CSV數據時的錯誤

Dim URL As String: URL = "http://finance.yahoo.com/d/quotes.csv?s=" & Symbols & "&f=snpohgkj" 
Dim Http As New WinHttpRequest 
Http.Open "GET", URL, False 
Http.Send 

我試圖設定,讓這個數據(上圖)被自動放入每個行。第一欄由用戶填寫,無論他/她持有什麼,而價格應該在按下按鈕時更新。

目前,每當我刷新(此鏈接到一個ActiveX命令按鈕),實際嘗試輸入數據的Excel文件,我得到這個:FilledExcelExample

這部分的代碼是:

Dim Resp As String: Resp = Http.ResponseText 
Dim Lines As Variant: Lines = Split(Resp, vbNewLine) 
Dim sLine As String 
Dim Values As Variant 
For i = 0 To UBound(Lines) 
    sLine = Lines(i) 
    If InStr(sLine, ",") > 0 Then 
     Values = Split(sLine, ",") 
     W.Cells(i + 2, 2).Value = Split(Split(sLine, Chr(34) & "," & Chr(34))(1), Chr(34))(0) 
     W.Cells(i + 2, 3).Value = Values(UBound(Values) - 5) 
     W.Cells(i + 2, 4).Value = Values(UBound(Values) - 4) 
     W.Cells(i + 2, 5).Value = Values(UBound(Values) - 3) 
     W.Cells(i + 2, 6).Value = Values(UBound(Values) - 2) 
     W.Cells(i + 2, 7).Value = Values(UBound(Values) - 1) 
     W.Cells(i + 2, 8).Value = Values(UBound(Values)) 
    End If 
Next i 
W.Cells.Columns.AutoFit 

目前看起來好像它採用了第一家公司的專有名稱,但沒有采取適當的價格(看起來像最後一家公司的價格)。我一直盯着這太久才發現錯誤。任何人都可以幫助把正確的數據放在正確的列中嗎?

回答

0

您在vbNewLine(又名vbCrLfChr(13) & Chr(10))拆分下載CSV但Feed僅使用換行符(又名vbLfChr(10))作爲行終止。這就像VS在HTML中<br/>Enter↵ + Enter↵在Microsoft Word中<p>之間的差異或。

Dim Lines As Variant: Lines = Split(Resp, vbLf) 

這應該解決你的問題。

本質上,CSV並未被拆分成單獨的行;這只是一條長長的路線。你從這條線的開頭收集了正確的名字,並從最後收集了股票價格。