這是承前一提問所衍生出的錯誤,請指點一下:
以下程式碼是抓取yahoo每檔股票9年股利的部分程式碼,但改版後,有的股票一個年度會產生上下年度2筆,如截圖一.中的0,及1; 二者最大差別在有無"exDate"字串資料,若無"exDate"字串時,則會無"year",而產生錯誤中斷,要如何撰寫判斷若無"exDate",則跳下一個(即1),但又需保持迴圈"For j=0 to 8"不變,因其他股票無上下年度?
For j = 0 To 8 '每種股票顯示最近9年股利資料
TempArray(j, 0) = CallByName(CallByName(DecodeJson, j, VbGet), "year", VbGet) - 1911
If IsNull(CallByName(CallByName(DecodeJson, j, VbGet), "exDividend", VbGet)) Then '判斷是否有現金股利
'若是Null,則填入"-"及0
TempArray(j, 1) = "-"
TempArray(j, 2) = 0
圖一:
圖二:股利部分上下年度截圖(股票代號:6184):
想請教一下,之前有抓這個網站的表格資料https://norway.twsthr.info/StockHolders.aspx?STOCK=6457,但最近好像都無法抓,不曉得是什麼原因,程式碼大致如下,變數result都沒東西,可否麻煩一下,謝謝!
norwayURL = "https://norway.twsthr.info/StockHolders.aspx?STOCK=6457"
With GetXml
.Open "GET", norwayURL, False
.send
End With
result = GetXml.responsetext
Set Html = CreateObject("htmlfile")
Html.body.innerhtml = result
Set objTable = Html.getelementsbytagname("table")(10).Rows
ReDim NorwayArray(objTable.Length - 1, objTable(1).Cells.Length - 4)
snare wrote:
執行 Google_Drive...(恕刪)
您好:
請問之前這一段程式碼都可以執行,但是這兩天出現錯誤,可以麻煩您幫忙一下,謝謝
Sub Google_Drive_File_Name_ID()
Dim URL As String, GetXml As Object, Jsondata As Object, DecodeJson, temp, n As Integer, i As Integer
Set GetXml = CreateObject("WinHttp.WinHttpRequest.5.1")
Set Jsondata = CreateObject("HtmlFile")
Jsondata.write ""
URL = "https://drive.google.com/drive/folders/1ZuRkxr4QzOAkp60hi_bJk9RzdAIM8eG4"
With GetXml
.Open "GET", URL, False
.setRequestHeader "Cache-Control", "no-cache"
.setRequestHeader "Pragma", "no-cache"
.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
.send
FilesId = "[[""driveweb;" & Split(Split(.responsetext, "[[""driveweb;")(1), """檔案""]]")(O) & """檔案""]]"
Set DecodeJson = CallByName(CallByName(Jsondata.JsonParse(FilesId), 0, VbGet), 1, VbGet)
n = CallByName(DecodeJson, "length", VbGet)
ReDim temp(1 To n, 1 To 2)
For i = 1 To n
temp(i, 1) = CallByName(CallByName(DecodeJson, i - 1, VbGet), 0, VbGet)
temp(i, 2) = CallByName(CallByName(DecodeJson, i - 1, VbGet), 2, VbGet)
Next i
End With
Set GetXml = Nothing
Set Jsondata = Nothing
Set DecodeJson = Nothing
這次找不到table,不知道該怎麼抓?
https://finance.yahoo.com/quote/BND
原本的副程式:
Sub getstockusetf(RowFirstETF, RowCountETF)
Dim URL, HTMLsourcecode, GetXml
Dim Stock As String
Dim i, j, t, n_etf As Integer
For n_etf = RowFirstETF To RowFirstETF + RowCountETF - 1
Symbol = Sheets("US.Stock").Cells(n_etf, 1)
quotelen = Len(Stock)
DoEvents
Set HTMLsourcecode = CreateObject("htmlfile")
Set GetXml = CreateObject("msxml2.xmlhttp")
URL = "https://finance.yahoo.com/quote/" & Symbol
With GetXml
.Open "GET", URL, False
.setRequestHeader "Cache-Control", "no-cache"
.setRequestHeader "Pragma", "no-cache"
.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
.send
Do Until .ReadyState = 4: DoEvents: Loop
HTMLsourcecode.body.innerhtml = .responsetext
For t = 0 To 1
Set Table = HTMLsourcecode.All.tags("table")(t).Rows
colscount = Table(t).Cells.Length
rowscount = Table.Length
TempArrayETF(n_etf - RowFirstETF, 0) = HTMLsourcecode.querySelector("#quote-header-info [data-field=regularMarketPrice]").innerText
TempArrayETF(n_etf - RowFirstETF, 1) = HTMLsourcecode.querySelector("#quote-header-info [data-field=regularMarketChange]").innerText
TempArrayETF(n_etf - RowFirstETF, 2) = HTMLsourcecode.querySelector("#quote-header-info [data-field=regularMarketChangePercent]").innerText
For i = 1 To colscount - 1
For j = 0 To rowscount - 1
TempArrayETF(n_etf - RowFirstETF, j + 3 + t * 8) = Trim(Table(j).Cells(i).innerText)
Next j
Next i
Next t
End With
Set HTMLsourcecode = Nothing
Set GetXml = Nothing
Next n_etf
End Sub
關閉廣告