Board logo

標題: [發問] 擷取上櫃股價行情~遇到非交易日即跳出錯誤訊息! [打印本頁]

作者: cudui    時間: 2012-4-20 00:06     標題: 擷取上櫃股價行情~遇到非交易日即跳出錯誤訊息!

各位大大:

再次請教...
我抓上櫃連續多日的收盤行情時,
遇到假日(非交易日)時,vba都會出現以下訊息~~執行階段錯誤'1004'-無法開啟連結...
[attach]10518[/attach]

該網頁(上櫃每日收盤行情有關的原始碼如下
[attach]10519[/attach]

請問該怎麼修改以下的vba代碼,
使其可以先判定當日有沒有交易資料,再進行資料擷取/或跳至下一個交易日 ???

(抓上市收盤價時就算遇到假日也不會出現此一問題,但抓上櫃收盤價時,則會有錯誤訊息...)

感謝!!!
  1. '上櫃個股歷史資料
  2.    With ActiveSheet.QueryTables.Add(Connection:="URL;http://www.otc.org.tw/ch/stock/aftertrading/otc_quotes_no1430/SQUOTE_AL_" & myear & mmon & nowday & ".html" _
  3.         , Destination:=ActiveCell.Offset(2, 0))
  4.    
  5.      
  6.         .FieldNames = True
  7.         .RowNumbers = False
  8.         .FillAdjacentFormulas = True
  9.         .PreserveFormatting = True
  10.         .RefreshOnFileOpen = False
  11.         .BackgroundQuery = True
  12.         .RefreshStyle = xlInsertDeleteCells
  13.         .SavePassword = False
  14.         .SaveData = False
  15.         .AdjustColumnWidth = True
  16.         .RefreshPeriod = 0
  17.         .WebSelectionType = xlSpecifiedTables
  18.         .WebFormatting = xlWebFormattingNone
  19.         .WebTables = "1,2,3"
  20.         .WebPreFormattedTextToColumns = True
  21.         .WebConsecutiveDelimitersAsOne = True
  22.         .WebSingleBlockTextImport = False
  23.         .WebDisableDateRecognition = False
  24.         .WebDisableRedirections = False
  25.         .Refresh BackgroundQuery:=False
  26.     End With
  27.    
複製代碼

作者: cudui    時間: 2012-4-20 00:08

回復 1# cudui


錯誤訊息都在~程式run到 .refresh BackgroundQuery:=False 時出現error(執行階段錯誤1004)
作者: chen_cook    時間: 2012-4-20 05:25

回復 1# cudui


    請問該怎麼修改以下的vba代碼,
使其可以先判定當日有沒有交易資料,再進行資料擷取/或跳至下一個交易日 ???

   你的問題很籠統...沒法完整回答......如果是一個可正確run的vba,也要先說明你的個邏輯...

    最簡單的方法是將整年的交易日期計劃拿到,比對欲抓取的日期目標,依判定變更report的html.....
作者: chen_cook    時間: 2012-4-20 05:59

http://www.otc.org.tw/ch/stock/aftertrading/otc_quotes_no1430/SQUOTE_AL_1010419.CSV
你又抓到沒有資料的網頁了....
作者: chen_cook    時間: 2012-4-20 07:14

''上櫃個股歷史資料
   With ActiveSheet.QueryTables.Add(Connection:="URL;http://www.otc.org.tw/ch/stock/aftertrading/otc_quotes_no1430/SQUOTE_AL_" & myear & mmon & nowday & ".CSV" _
        , Destination:=ActiveCell.Offset(2, 0))
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = True
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = False
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .WebSelectionType = xlSpecifiedTables
        .WebFormatting = xlWebFormattingNone
        .WebTables = "1,2,3"
        .WebPreFormattedTextToColumns = True
        .WebConsecutiveDelimitersAsOne = True
        .WebSingleBlockTextImport = False
        .WebDisableDateRecognition = False
        .WebDisableRedirections = False
        .Refresh BackgroundQuery:=False
    End With
   
   
    Range("a3:a2200").Select
       Selection.TextToColumns Destination:=Range("b4"), DataType:=xlDelimited, _
       TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
       Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
        :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
         Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), _
         Array(14, 1), Array(15, 1)), TrailingMinusNumbers:=True
    Range("a4:a2200").Delete
    Rows("4:4").Select
    Selection.Delete Shift:=xlUp
    Columns("A:O").Select
    Range("a1").Activate
    Selection.ColumnWidth = 8
   
End Sub

試試看吧
作者: chen_cook    時間: 2012-4-20 07:20

''上櫃個股歷史資料
   With ActiveSheet.QueryTables.Add(Connection:="URL;http://www.otc.org.tw/ch/st ...
chen_cook 發表於 2012-4-20 07:14



    這是錯誤的資料
作者: GBKEE    時間: 2012-4-20 07:28

回復 2# cudui
  1. On Error Resume Next
  2.     With ActiveSheet.QueryTables.Add(Connection:="URL;http://www.otc.org.tw/ch/stock/aftertrading/otc_quotes_no1430/SQUOTE_AL_" & myear & mmon & nowday & ".html" _
  3.         , Destination:=ActiveCell.Offset(2, 0))
  4.         .WebSelectionType = xlEntirePage
  5.         .WebFormatting = xlWebFormattingNone
  6.         .WebPreFormattedTextToColumns = True
  7.         .WebConsecutiveDelimitersAsOne = True
  8.         .WebSingleBlockTextImport = False
  9.         .WebDisableDateRecognition = False
  10.         .WebDisableRedirections = False
  11.         .Refresh BackgroundQuery:=False
  12.         If Err.Number <> 0 Then Err.Clear: MsgBox "資料查詢失敗"
  13.     End With
複製代碼

作者: cudui    時間: 2012-4-20 20:14

http://www.otc.org.tw/ch/stock/aftertrading/otc_quotes_no1430/SQUOTE_AL_1010419.CSV
你又抓到沒有資料的網頁了....


這網頁我確定是可以run得到資料下來的~~
交易日沒有問題,但是非交易時無data時才會出錯~


   你的問題很籠統...沒法完整回答......如果是一個可正確run的vba,也要先說明你的個邏輯...
    最簡單的方法是將整年的交易日期計劃拿到,比對欲抓取的日期目標,依判定變更report的html.....


交易日每年都不同,所以用比對的方法,會比較麻煩~
我的問題可能還不夠明確,
希望得到的解答是:如何在該vba內,添加判斷式---判斷若遇到"查詢失敗"或"查無資料"時,可以 goto NEXT one,繼續未完的查詢,而非跳出....
(因為不知道當 html無資料可擷取時,會回饋什麼樣的訊號...)
作者: cudui    時間: 2012-4-20 20:21

回復 7# GBKEE
  1. If Err.Number <> 0 Then Err.Clear: MsgBox "資料查詢失敗"
複製代碼
請問G大, 該行可以改成下列寫法嗎?
If Err.Number <> 0 Then
GOTO ABC123
END IF
....

ABC123:
Next J ....



謝謝!!
作者: cudui    時間: 2012-4-20 20:22

''上櫃個股歷史資料
   With ActiveSheet.QueryTables.Add(Connection:="URL;http://www.otc.org.tw/ch/st ...
chen_cook 發表於 2012-4-20 07:14


謝謝大大了,
我再試試CSV & Html執行有什麼差別~~
作者: GBKEE    時間: 2012-4-20 21:21

回復 9# cudui
這可自己試試看 不行再說
作者: cudui    時間: 2012-4-21 01:18

以G大的概念延伸..

在出問題的那一列之前,增加:
"On Error Resume Next"

就能跳過錯誤訊息了!!
作者: cudui    時間: 2012-4-22 13:54

回復 5# chen_cook

謝謝COOK大,
我以你的語法改寫就可以用了!!
作者: cudui    時間: 2012-4-22 14:09

本帖最後由 cudui 於 2012-4-22 14:12 編輯

再請問一下~~

我原先抓的是html的資料,可以不需再處理CSV檔匯入的問題,
(Connection:="URL;http://www.otc.org.tw/ch/stock/aftertrading/otc_quotes_no1430/SQUOTE_AL_" & myear & mmon & nowday & ".html" _

但是,使用html遇到的狀況是~
我擷取其他交易日的時候都沒問題,但一旦要匯入"2/10","4/10"...等n月 10日的交易資料時,
個股行情除檔名外,其餘就會是一片空白...(但n月20日.30日都沒問題,所以應該不是"0"的問題)
而我檢查實際連結也都正確,可以正確連結到該網頁
(http://www.otc.org.tw/ch/stock/aftertrading/otc_quotes_no1430/SQUOTE_AL_1010410.html)
而使用CSV則無此問題~~

有沒有大大可以幫忙解惑一下這到底是因為什麼????
謝謝!

附上原始碼如下:


  1. '上櫃個股歷史資料
  2.    With ActiveSheet.QueryTables.Add(Connection:="URL;http://www.otc.org.tw/ch/stock/aftertrading/otc_quotes_no1430/SQUOTE_AL_" & myear & mmon & nowday & ".html" _
  3.         , Destination:=ActiveCell.Offset(2, 0))
  4.    
  5.         .FieldNames = True
  6.         .RowNumbers = False
  7.         .FillAdjacentFormulas = True
  8.         .PreserveFormatting = True
  9.         .RefreshOnFileOpen = False
  10.         .BackgroundQuery = True
  11.         .RefreshStyle = xlInsertDeleteCells
  12.         .SavePassword = False
  13.         .SaveData = False
  14.         .AdjustColumnWidth = True
  15.         .RefreshPeriod = 0
  16.         .WebSelectionType = xlSpecifiedTables
  17.         .WebFormatting = xlWebFormattingNone
  18.         .WebTables = "1,2,3,4"
  19.         .WebPreFormattedTextToColumns = True
  20.         .WebConsecutiveDelimitersAsOne = True
  21.         .WebSingleBlockTextImport = False
  22.         .WebDisableDateRecognition = False
  23.         .WebDisableRedirections = False
  24.         On Error Resume Next
  25.         .Refresh BackgroundQuery:=False
  26.       
  27.     End With
複製代碼

作者: GBKEE    時間: 2012-4-22 15:23

回復 12# cudui
[在出問題的那一列之前,增加: "On Error Resume Next"]
在那程序中 預計會發生錯誤的程式碼 前ˇ的任一列 增加: "On Error Resume Next" 皆可以

回復 14# cudui
http://www.otc.org.tw/ch/stock/a ... OTE_AL_1010402.html
1010402.html 這網頁 的月份 日期都是兩位數
Connection:="URL;http://www.otc.org.tw/ch/stock/a ... s_no1430/SQUOTE_AL_" & myear & mmon & nowday & ".html
mmon & nowday  須先處裡為兩位數
  1. mmon = Format(mmon, "00")
  2. nowday = Format(nowday, "00")
複製代碼

作者: cudui    時間: 2012-4-22 15:45

回復  cudui
[在出問題的那一列之前,增加: "On Error Resume Next"]
在那程序中 預計會發生錯誤的程式碼 ...
GBKEE 發表於 2012-4-22 15:23


G大:

我用 [A1]="URL;http://www.otc.org.tw/ch/stock/aftertrading/otc_quotes_no1430/SQUOTE_AL_" & myear & mmon & nowday & ".html" 去看,
得出來的連結仍是http://www.otc.org.tw/ch/stock/aftertrading/otc_quotes_no1430/SQUOTE_AL_1010410.html沒錯,
而且,
如果真是二位數的問題的話,
不應該N月的20日 / 30日都可以抓到資料,
但10日則抓不出來...

另外,我在之前也有加入判斷式~ N<9則前面加"0",
並加寫  nowday = Left(nowday & "0", 2)...
可是結果都一樣~~
作者: GBKEE    時間: 2012-4-22 17:14

回復 16# cudui
應是這網頁的問題 幫你看了一下 3/1 ,3/2, 4/10  都無法匯入
可改用  Workbooks.Open ("http://www.otc.org.tw/ch/stock/aftertrading/otc_quotes_no1430/SQUOTE_AL_" & myear & mmon & nowday & ".CSV")  匯入
作者: cudui    時間: 2012-4-22 17:51

回復  cudui
應是這網頁的問題 幫你看了一下 3/1 ,3/2, 4/10  都無法匯入
可改用  Workbooks.Open ("ht ...
GBKEE 發表於 2012-4-22 17:14



謝謝G大!
我有改用CSV確定沒有問題,
只是不懂為何用"HTML"才會出現此一狀況....好奇是程式哪裡沒寫好而已...
作者: chen_cook    時間: 2012-4-24 06:50

回復 14# cudui


    依該原始網頁編寫之內容,好像是把,csv的檔轉.html輸出晝面所致,你若用匯入網頁方式會回應你網頁無回應之訊息!!
    (所以才會跟你說抓錯網頁了,因為它本身就沒有.html這個網頁吧!!)櫃買中心的網頁是.php不是.html抓法不同一般的
    .html之前就有跟你提過了:@ .... 你會問其它的沒有問題啊!!我也不知道為什麼,:dizzy: 重點是抓到你要的資料吧!!若
    .csv可正確get data,反正是excel幫忙做,看到資料就好:D !!!.html無法匯入標題不是嗎??
作者: cudui    時間: 2012-4-25 00:53

回復 19# chen_cook


    php查詢後出來的是html的網頁,另外才有csv下載的function..
    所以我也不知道實際是誰先誰後...
    php抓data現在沒問題了,
    就只剩好奇為什麼n月10日的html data撈不出來而已 ( 若單純連結**0410.html 可以看到資料,但vba就是抓不下來~~)

    試了很久,破不了關...奇毛雞有點不爽罷了!!!
    果然"好奇會害死一隻貓"啊!!~~:funk:




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