Board logo

標題: [發問] 從公開觀測站抓上市公司EPS [打印本頁]

作者: BigDog    時間: 2012-9-29 21:45     標題: 從公開觀測站抓上市公司EPS

大家好

請問執行這程式前8家公司抓EPS都很順,到第九家過後就變的空白,是哪裡出了問題?請各位協助幫忙。

謝謝大家
BigDog
作者: diabo    時間: 2012-9-30 23:47

回復 1# BigDog


1. 該WEB SERVER限制一分鐘讀取20次,第21次就會出現「系統流量大,請稍後再查詢!」
2. 加個計數器,讀20次後暫停1分鐘再抓...
作者: BigDog    時間: 2012-10-1 13:17

回復 2# diabo


超感謝d大的指導,只是想再請教一個問題,
關於web server如何得知有無載入次數限制,該從哪裡得知?謝謝d大.:loveliness:
作者: GBKEE    時間: 2012-10-2 08:51

本帖最後由 GBKEE 於 2012-10-2 13:08 編輯

回復 1# BigDog
全文檢索中搜尋 網路連線

作業系統 Windows NT 且 網路IP 是浮動IP
  1. Sub 練習()
  2.     Dim motoSht As Worksheet, sakiSht As Worksheet, sakiRng As Range
  3.     Dim motoHani()                                     '宣告變數
  4.     Set motoSht = Worksheets("財務分析")               '設定個別財務分析工作表
  5.     Set sakiSht = Worksheets("上市")                             '設定儲存全部上市工作表
  6.     motoSht.Range("A1:T21") = ""
  7.     For Each E In motoSht.Names                             ' 刪除 QueryTables
  8.         E.Delete
  9.     Next
  10.     '將想要轉寫之儲存格的位置儲存在陣列中
  11.     motoHani = Array("C18", "D18", "E18", "H18", "I18", "J18", "M18", "N18", "O18", "T18")
  12.     '取得分析結果至上市總表的輸入位置
  13.     motoaddress = Array("A1", "f1", "k1", "p1")
  14.     motoyear = Array(93, 96, 99, 100)
  15.     '取得載入財務分析及年度資料位置
  16.     motoRowcon = sakiSht.Range("a1").CurrentRegion.Rows.Count
  17.     '取得上市總列數
  18.     For i = 2 To motoRowcon
  19.         motoSht.Cells(25, 1) = sakiSht.Cells(i, 1)
  20.         For x = 0 To 3
  21. RE:
  22.         Application.StatusBar = False
  23.     With motoSht.QueryTables.Add(Connection:= _
  24.         "URL;http://mopsov.twse.com.tw/server-java/t05st22?colorchg=1&off=1&TYPEK=sii&isnew=false&year=" & motoyear(x) & "&co_id=" & motoSht.Range("A25") & "&" _
  25.         , Destination:=motoSht.Range(motoaddress(x)))
  26.         .Name = _
  27.         "t05st22?colorchg=1&off=1&TYPEK=sii&isnew=false&year=100&co_id=1733&"
  28.         .FieldNames = True
  29.         .RowNumbers = False
  30.         .FillAdjacentFormulas = False
  31.         .PreserveFormatting = True
  32.         .RefreshOnFileOpen = False
  33.         .BackgroundQuery = True
  34.         .RefreshStyle = xlInsertDeleteCells
  35.         .SavePassword = False
  36.         .SaveData = True
  37.         .AdjustColumnWidth = True
  38.         .RefreshPeriod = 0
  39.         .WebSelectionType = xlSpecifiedTables
  40.         .WebFormatting = xlWebFormattingNone
  41.         .WebTables = "4"
  42.         .WebPreFormattedTextToColumns = True
  43.         .WebConsecutiveDelimitersAsOne = True
  44.         .WebSingleBlockTextImport = False
  45.         .WebDisableDateRecognition = False
  46.         .WebDisableRedirections = False
  47.        .Refresh BackgroundQuery:=False
  48.        If Application.Count(.ResultRange) = 0 Then   '到第九家過後就變的空白
  49.             Application.StatusBar = "等候網頁中...."
  50.             重啟連線
  51.             GoTo RE
  52.         End If
  53.     End With
  54.     Next
  55.     For j = 0 To UBound(motoHani)
  56.         sakiSht.Cells(i, 25).Offset(0, j).Value = motoSht.Range(motoHani(j)).Value
  57.     Next
  58.     motoSht.Range("A1:T21") = ""
  59.     For Each E In motoSht.Names
  60.         E.Delete
  61.     Next
  62. Next
  63. '將個別資料帶入上市總表
  64. MsgBox "輸入完畢。"
  65. End Sub
  66. Sub 重啟連線()
  67.    ' 此程式作用:中斷網路連線再度連線重新取的網路IP,以重新取得 WEB SERVER限制 一分鐘讀取20次
  68.     '網路連線 的名稱 adsl 請修改為 你PC 上正確名稱
  69.     'res = Shell("rasphone.exe [-d *****]", 1)
  70.     res = Shell("rasphone.exe [-d adsl]", 1)
  71.     AppActivate res, True
  72.     SendKeys "%(U)", True
  73.     Application.Wait Now + #12:00:01 AM# '延遲等候程式處裡
  74.   
  75.     SendKeys "%(Y)", True
  76.     Application.Wait Now + #12:00:01 AM#   '延遲等候程式處裡
  77.   
  78.     SendKeys "%(C)", True
  79.     Application.Wait Now + #12:00:01 AM#   '延遲等候程式處裡
  80.   
  81.     SendKeys "%(C)", True
  82.     Application.Wait Now + #12:00:02 AM#      '延遲等候曲程式處裡
  83. End Sub
複製代碼

作者: BigDog    時間: 2012-10-2 13:02

回復 4# GBKEE


    感謝版大的回覆 , 收下來好好研究一番,謝謝!
作者: BigDog    時間: 2012-10-4 22:40

回復 4# GBKEE

motoSht.Range("A1:T21") = ""      
請問用在什麼地方?謝謝版大的教導...
作者: BigDog    時間: 2012-10-4 23:36

回復 4# GBKEE


    另外請問一個問題,為什麼motoSht.Names有這麼多個名字,怎麼產生的?謝謝版大!   
        For Each E In motoSht.Names                             ' 刪除 QueryTables
        MsgBox E.Name
        E.Delete
作者: GBKEE    時間: 2012-10-5 06:22

回復 7# BigDog
With motoSht.QueryTables.Add(Connection:=  "URL;http://mopsov.twse.com.tw/server-java/t05st22?colorchg=1&off=1&TYPEK=sii&isnew=false&year=" & motoyear(x) & "&co_id=" & motoSht.Range("A25") & "&" _
        , Destination:=motoSht.Range(motoaddress(x)))
motoSht.Range("A1:T21") = ""   用以清除 motoSht.Range(motoaddress(x)
        .Name = "t05st22?colorchg=1&off=1&TYPEK=sii&isnew=false&year=100&co_id=1733&"
為什麼motoSht.Names有這麼多個名字 QueryTable Add 產生一名稱  
作者: stillfish00    時間: 2012-10-5 07:02

之前也是都用wait 等待 , 原來還有重新連線網路這種方法去避過喔
偷學到一招~
作者: BigDog    時間: 2012-10-5 10:00

回復 8# GBKEE


    拍謝!再請問版大一個問題,為什麼要刪除NAME,不刪除執行會有什麼問題嗎?謝謝!
作者: GBKEE    時間: 2012-10-5 12:17

回復 10# BigDog
不刪是可以的,只是執行後看看有多少名稱
作者: BigDog    時間: 2012-10-5 13:01

回復 11# GBKEE


    哈哈!!我有看到了,了解了,謝謝版大的幫忙,讓我獲益良多...




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)