返回列表 上一主題 發帖

股票資料匯入,程式執行有問題

回復 1# caesar0125
  1. 『For i = 5 To rc』 的 rc 如果超過十個以上,會發生以下之訊息:
  2. 所以建議不要一次無止盡的搜尋,最好分次、分時段的來執行。

  3. 「網站偵測到您的瀏覽量異常, 目前暫時關閉服務, 請稍後再重新查詢」
複製代碼

TOP

回復 1# caesar0125
我將程式稍稍整理了一下,
加強 Focus 到 Sheets("營運績效")。
  1. Sub 歷史股價更新()
  2.     Dim xTable As Object, k As Integer, c As Integer, r As Integer, rc As Integer, sn As Integer
  3.     Dim url As String, i As Integer, E As Object
  4.    
  5.     Sheets("總表").Select
  6.     rc = Cells(Rows.Count, 1).End(xlUp).Row
  7.     k = 0
  8.    
  9.     With Sheets("營運績效")
  10.         .Select
  11.         .UsedRange.Clear
  12.     End With
  13.    
  14.     '  For i = 5 To rc
  15.     For i = 1 To 5
  16.         sn = Sheets("總表").Cells(i, 1)
  17.         url = "http://goodinfo.tw/StockInfo/StockBzPerformance.asp?STOCK_ID=" & sn & " &YEAR_PERIOD=10&RPT_CAT=M_YEAR"

  18.         With CreateObject("InternetExplorer.application")
  19.             .Visible = True
  20.             .Navigate url

  21.             Do While .Busy Or .readyState <> 4: DoEvents: Loop
  22.         
  23.             Set xTable = .Document.getElementsByTagName("TABLE")(11)    '  資料在這
  24.         
  25.             With Sheets("營運績效")
  26.                 k = k + 1
  27.                 For r = 0 To xTable.Rows.Length - 1
  28.                     For c = 0 To xTable.Rows(r).Cells.Length - 1
  29.                         .Cells(k, c + 1) = xTable.Rows(r).Cells(c).innertext
  30.                     Next
  31.                     k = k + 1
  32.                 Next
  33.             End With
  34.         
  35.             Set xTable = .Document.getElementsByTagName("TABLE")(13)    '  資料在這
  36.             With Sheets("營運績效")
  37.                 k = k + 1
  38.                 For r = 0 To xTable.Rows.Length - 1
  39.                     For c = 0 To xTable.Rows(r).Cells.Length - 1
  40.                         .Cells(k, c + 1) = xTable.Rows(r).Cells(c).innertext
  41.                     Next
  42.                     k = k + 1
  43.                 Next
  44.             End With
  45.         
  46.             Set xTable = .Document.getElementsByTagName("TABLE")(19)    '  資料在這
  47.             With Sheets("營運績效")
  48.                 k = k + 1
  49.                 '  For r = 0 To 3
  50.                 For r = 0 To xTable.Rows.Length - 1
  51.                     For c = 0 To xTable.Rows(r).Cells.Length - 1
  52.                         .Cells(k, c + 1) = xTable.Rows(r).Cells(c).innertext
  53.                     Next
  54.                     k = k + 1
  55.                 Next
  56.             End With
  57.             
  58.             .Quit
  59.         End With
  60.     Next
  61. End Sub
複製代碼

TOP

回復 1# caesar0125

TOP

本帖最後由 c_c_lai 於 2016-6-10 07:25 編輯

回復 5# caesar0125
你試試樓上 GBKEE 版大的模組,
其執行效率與速度非常的佳。 畢竟
CreateObject("InternetExplorer.application")
之處裡的確耗時過久。

TOP

回復 6# GBKEE
請教您,有好多回執行到
  1.         Set xTable = oHtmldoc.all.tags("TABLE")
  2.         With Sheets("營運績效")
  3.             '  .Cells.Clear
  4.             For Each E In Array(11, 13, 19) '11,13,19  "TABLE"
  5.                 k = k + 1
  6.                 For R = 0 To xTable(E).Rows.Length - 1
複製代碼
中的   xTable(E).Rows.Length, 便產生如下之錯誤訊息:
  1. 執行階段錯誤 '91'
  2. 沒有設定物件變數或 With 區域變數
複製代碼
查看 oXmlhttp.responseText : "<!DOCTYPE HTML>
<html lang="zh-TW">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <meta http-equiv="X-UA-Compatible" content="I
又看不出有任何狀況, 有時 xTable.length = 0 或  xTable.length =  1 等。

TOP

回復  c_c_lai
可加上防錯
GBKEE 發表於 2016-6-10 10:27

如果 xTable.Length 為零,
Until xTable.Length >= 19 會如同死胡同
永遠出不來,所以我改成
If xTable.Length >= 19 Then
     .
    .
End If
仍然是一推
  1. 1             0             1437
  2. 2             0             1438
  3. 3             0             1439
  4. 4             0             1440
  5. 5             0             1441
複製代碼

TOP

回復 11# GBKEE
明天我再來仔細測試一下。
不信邪,結果依然有錯誤信息:

TOP

回復 11# GBKEE
附上檔案堤供測試:
歷史股價更新.rar (27.88 KB)

TOP

回復  c_c_lai
這網頁有流量管制.
GBKEE 發表於 2016-6-11 07:05

沒錯,它還會丟出訊息:
  1. 網站偵測到您的瀏覽量異常, 目前暫時關閉服務, 請稍後再重新查詢
複製代碼
謝謝您囉!

TOP

回復 14# GBKEE
額外再請教您,在附上之『融資融券與上市當沖.xls』
選紐『融資融券  III』對應的「Sub 融資融券3()」,
url 裡為何我一直抓不到正確的 selectType 對應值?
在「Sub 融資融券2()」使用 .QueryTables.Add() 的方式
即可正確取得?
謝謝您!
融資融券與上市當沖.rar (109.56 KB)
TWSE 臺灣證券交易所.rar (5.29 KB)

TOP

        靜思自在 : 【停滯不前,終無所得】人都迷於尋找奇蹟,因而停滯不前;縱使時間再多、路再長,也了無用處,終無所得。
返回列表 上一主題