Board logo

標題: [發問] 網頁資料下載簡化 [打印本頁]

作者: carzyindex    時間: 2011-4-29 17:11     標題: 網頁資料下載簡化

本帖最後由 carzyindex 於 2011-5-21 09:26 編輯

這個網站比較有人性一點  參數找的到也可以設定

但是我不知道頁數有幾張

土法煉鋼一頁一頁弄也很沒有效率

查詢太多次還會被檔

請問程式該如何下載

例如1101

     2201
作者: diabo    時間: 2011-4-30 16:38

<span id="sp_ListCount">54</span>

用 page_num = document.getElementById("sp_ListCount").innerText

就知道頁數了...

不過查詢大多次會被擋,用VBA程式一樣會被擋.....
作者: GBKEE    時間: 2011-4-30 20:58

本帖最後由 GBKEE 於 2011-5-1 10:46 編輯

回復 1# carzyindex
PS: 今日(5/1)測試此網頁 只允許連續下載10頁
  1. Sub Ex()
  2.     Dim 股票代號 As String, 日期  As Variant, N, i As Integer
  3.     Do While Not IsDate(日期)
  4.         日期 = InputBox("輸入查詢日期", "日期", Date)
  5.         If 日期 = "" Then End
  6.     Loop
  7.     Do While 股票代號 = ""
  8.         股票代號 = InputBox("股票代號", "輸入查詢之股票代號", "1101")
  9.         If 日期 = "" Then End
  10.     Loop
  11.     日期 = Format(日期, "yyyymmdd")
  12.     With ActiveSheet
  13.         For Each N In .Names
  14.             N.Delete
  15.         Next
  16.         .Cells.Clear
  17.         Application.ScreenUpdating = False
  18.         With .QueryTables.Add(Connection:="URL;http://bsr.twse.com.tw/bshtm/bshtm_report_Messages.aspx?strDate=" & 日期 & "&StartNumber=" & 股票代號 & "&FocusIndex=1", Destination:=Range("A1"))
  19.             .Name = 日期 & "_" & 股票代號 & "_1"
  20.             .FieldNames = True
  21.             .RowNumbers = False
  22.             .FillAdjacentFormulas = False
  23.             .PreserveFormatting = True
  24.             .RefreshOnFileOpen = False
  25.             .BackgroundQuery = True
  26.             .RefreshStyle = xlInsertDeleteCells
  27.             .SavePassword = False
  28.             .SaveData = True
  29.             .AdjustColumnWidth = True
  30.             .RefreshPeriod = 0
  31.             .WebSelectionType = xlEntirePage
  32.             .WebFormatting = xlWebFormattingNone
  33.             .WebPreFormattedTextToColumns = True
  34.             .WebConsecutiveDelimitersAsOne = True
  35.             .WebSingleBlockTextImport = False
  36.             .WebDisableDateRecognition = False
  37.             .WebDisableRedirections = False
  38.             .Refresh BackgroundQuery:=False
  39.             If Application.CountA(.ResultRange) = 0 Then
  40.                 MsgBox Format(日期, "0000/00/00") & " 休市!!!  或  股票代號:" & 股票代號 & " 錯誤 !!!"
  41.                 [A1].Select
  42.                 End
  43.             End If
  44.         End With
  45.         i = 2
  46.         Do
  47.             .Cells(Rows.Count, 1).End(xlUp).Offset(1).Select
  48.             With .QueryTables.Add(Connection:="URL;http://bsr.twse.com.tw/bshtm/bshtm_report_Messages.aspx?strDate=" & 日期 & "&StartNumber=" & 股票代號 & "&FocusIndex=" & i, Destination:=Selection)
  49.                 .Name = 日期 & "_" & 股票代號 & "_" & i
  50.                 .WebSelectionType = xlSpecifiedTables
  51.                 .WebFormatting = xlWebFormattingNone
  52.                 .WebTables = "6"
  53.                 .WebPreFormattedTextToColumns = True
  54.                 .WebConsecutiveDelimitersAsOne = True
  55.                 .WebSingleBlockTextImport = False
  56.                 .WebDisableDateRecognition = False
  57.                 .WebDisableRedirections = False
  58.                 .Refresh BackgroundQuery:=False
  59.                 If .ResultRange(1) Like "ip*" Then
  60.                     .ResultRange.Clear
  61.                     GoTo Out
  62.                 End If
  63.                 i = i + 1
  64.             End With
  65.         Loop
  66. Out:
  67.         .UsedRange.Columns.AutoFit
  68.         .[A1].Select
  69.     End With
  70.     Application.ScreenUpdating = True
  71. End Sub
複製代碼

作者: carzyindex    時間: 2011-5-3 08:13

本帖最後由 carzyindex 於 2011-5-3 08:20 編輯

回復 3# GBKEE


    感謝各位大大的幫忙

請問可以批次10頁10頁的下載嗎
作者: GBKEE    時間: 2011-5-3 21:41

本帖最後由 GBKEE 於 2011-5-4 09:15 編輯

回復 4# carzyindex
請耐心等候  程式在跑時 **請勿按下** [確定]

'此網頁有下載管制 須有下載時間間隔 3秒 可全部下載完成
A = CreateObject("WScript.Shell").popup("請等待4秒後下載" & Chr(10) & Chr(10) & "** 請勿按下 ** [確定]", 3, 日期 & "_" & .[F2] & "  第" & i & "頁", 16 * 3 + 0)
  1. Sub 個股交易明細下載()
  2.     Dim 股票代號 As String, 日期 As Variant, N, i As Integer, A, T As Date
  3.     Do While Not IsDate(日期)
  4.         日期 = InputBox("輸入查詢日期", "日期", Date)
  5.         If 日期 = "" Then End
  6.     Loop
  7.     Do While 股票代號 = ""
  8.         股票代號 = InputBox("股票代號", "輸入查詢之股票代號", "1101")
  9.         If 日期 = "" Then End
  10.     Loop
  11.     日期 = Format(日期, "yyyymmdd")
  12.     T = Time
  13.     With ActiveSheet
  14.         For Each N In .Names
  15.             N.Delete
  16.         Next
  17.         .Cells.Clear
  18.         Application.StatusBar = False
  19.         On Error GoTo A_Wait
  20.         With .QueryTables.Add(Connection:="URL;http://bsr.twse.com.tw/bshtm/bshtm_report_Messages.aspx?strDate=" & 日期 & "&StartNumber=" & 股票代號 & "&FocusIndex=1", Destination:=Range("A1"))
  21.             .Name = 日期 & "_" & 股票代號 & "_1"
  22.             .FieldNames = True
  23.             .RowNumbers = False
  24.             .FillAdjacentFormulas = False
  25.             .PreserveFormatting = True
  26.             .RefreshOnFileOpen = False
  27.             .BackgroundQuery = True
  28.             .RefreshStyle = xlInsertDeleteCells
  29.             .SavePassword = False
  30.             .SaveData = True
  31.             .AdjustColumnWidth = True
  32.             .RefreshPeriod = 0
  33.             .WebSelectionType = xlEntirePage
  34.             .WebFormatting = xlWebFormattingNone
  35.             .WebPreFormattedTextToColumns = True
  36.             .WebConsecutiveDelimitersAsOne = True
  37.             .WebSingleBlockTextImport = False
  38.             .WebDisableDateRecognition = False
  39.             .WebDisableRedirections = False
  40.             .Refresh BackgroundQuery:=False
  41.             If Application.CountA(.ResultRange) = 0 Then
  42.                 MsgBox Format(日期, "0000/00/00") & " 休市!!!  或  股票代號:" & 股票代號 & " 錯誤 !!!"
  43.                 [A1].Select
  44.                 End
  45.             End If
  46.         End With
  47.         i = 2
  48.         Do
  49.             .Cells(Rows.Count, 1).End(xlUp).Offset(1).Select
  50.             With .QueryTables.Add(Connection:="URL;http://bsr.twse.com.tw/bshtm/bshtm_report_Messages.aspx?strDate=" & 日期 & "&StartNumber=" & 股票代號 & "&FocusIndex=" & i, Destination:=Selection)
  51.                 .Name = 日期 & "_" & 股票代號 & "_" & i
  52.                 .WebSelectionType = xlSpecifiedTables
  53.                 .WebFormatting = xlWebFormattingNone
  54.                 .WebTables = "6"
  55.                 .WebPreFormattedTextToColumns = True
  56.                 .WebConsecutiveDelimitersAsOne = True
  57.                 .WebSingleBlockTextImport = False
  58.                 .WebDisableDateRecognition = False
  59.                 .WebDisableRedirections = False
  60.               ''''''無法查詢時稍待  到  A_Wait: '''''
  61.                 .Refresh BackgroundQuery:=False
  62.                 If Application.CountA(.ResultRange) = 0 Then GoTo Out
  63.                 i = i + 1
  64.             End With
  65.             A = CreateObject("WScript.Shell").popup("請等後下載..." & Chr(10) & Chr(10) & "** 請勿按下 ** [確定]", 4, 日期 & "_" & .[F2] & "  第" & i & "頁", 16 * 3 + 0)
  66.             Application.ScreenUpdating = True
  67.         Loop
  68. Out:
  69.         .UsedRange.Columns.AutoFit
  70.         .[A1].Select
  71.         A = CreateObject("WScript.Shell").popup("共下載" & i & "頁", 5, 日期 & "_" & 股票代號, 48 + 0)
  72.         Application.StatusBar = "共下載 " & i & "頁 費時 " & Format(Time - T, "HH:MM:SS")
  73.     End With
  74.     End
  75. A_Wait:
  76.     Application.StatusBar = "無法查詢等候10秒鐘"
  77.     Application.Wait Now + TimeValue("00:00:10")
  78.     Err.Clear
  79.     Application.StatusBar = False
  80.     Resume    '重返查詢
  81. End Sub
複製代碼

作者: carzyindex    時間: 2011-5-4 08:06

回復 5# GBKEE


    感謝版大再次相助,非常感謝.
作者: carzyindex    時間: 2011-5-4 08:22

回復 5# GBKEE


看來問題比我想像中還大的樣子

第一頁資料位置偏移

今天早上測試出現error 408

載到第六頁就掛掉了

無奈我只會排版的vba對網頁的不知道從何下手
作者: GBKEE    時間: 2011-5-4 09:14

本帖最後由 GBKEE 於 2011-5-4 19:57 編輯

回復 7# carzyindex
5樓的程式剛才測試是有些不順 已稍為修改了
第一頁資料位置偏移
  1. Sub 簡易明細下載()
  2.     Dim 股票代號 As String, 日期 As Variant, N, i As Integer, A, T As Date
  3.     Do While Not IsDate(日期)
  4.         日期 = InputBox("輸入查詢日期", "日期", Date)
  5.         If 日期 = "" Then End
  6.     Loop
  7.     Do While 股票代號 = ""
  8.         股票代號 = InputBox("股票代號", "輸入查詢之股票代號", "1101")
  9.         If 日期 = "" Then End
  10.     Loop
  11.     日期 = Format(日期, "yyyymmdd")
  12.     T = Time
  13.     With ActiveSheet
  14.         For Each N In .Names
  15.             N.Delete
  16.         Next
  17.         .Cells.Clear
  18.         Application.StatusBar = False
  19.         On Error GoTo A_Wait
  20.         i = 1
  21.         Do
  22.             .Cells(Rows.Count, 1).End(xlUp).Offset(1).Select
  23.             With .QueryTables.Add(Connection:="URL;http://bsr.twse.com.tw/bshtm/bshtm_report_Messages.aspx?strDate=" & 日期 & "&StartNumber=" & 股票代號 & "&FocusIndex=" & i, Destination:=Selection)
  24.                 .Name = 日期 & "_" & 股票代號 & "_" & i
  25.                 .WebSelectionType = xlSpecifiedTables
  26.                 .WebFormatting = xlWebFormattingNone
  27.                 .WebTables = "6"
  28.                 .WebPreFormattedTextToColumns = True
  29.                 .WebConsecutiveDelimitersAsOne = True
  30.                 .WebSingleBlockTextImport = False
  31.                 .WebDisableDateRecognition = False
  32.                 .WebDisableRedirections = False
  33.               ''''''無法查詢時稍待  到  A_Wait: '''''
  34.                 .Refresh BackgroundQuery:=False
  35.                 If Application.CountA(.ResultRange) = 0 Then GoTo Out
  36.                 i = i + 1
  37.             End With
  38.             A = CreateObject("WScript.Shell").popup("請等後下載..." & Chr(10) & Chr(10) & "** 請勿按下  [確定] **", 4, 日期 & "_" & 股票代號 & "  第" & i & "頁", 16 * 3 + 0)
  39.             Application.ScreenUpdating = True
  40.         Loop
  41. Out:
  42.         .UsedRange.Columns.AutoFit
  43.         .[A1].Select
  44.         A = CreateObject("WScript.Shell").popup("共下載" & i & "頁", 5, 日期 & "_" & 股票代號, 48 + 0)
  45.         Application.StatusBar = 股票代號 &" 共下載 " & i & "頁 費時 " & Format(Time - T, "HH:MM:SS")
  46.     End With
  47.     End
  48. A_Wait:
  49.     Application.StatusBar = "無法查詢等候5秒鐘"
  50.     Application.Wait Now + TimeValue("00:00:05")
  51.     Err.Clear
  52.     Application.StatusBar = False
  53.     Resume    '重返查詢
  54. End Sub
複製代碼

作者: GBKEE    時間: 2011-5-6 16:44

回復 9# carzyindex
這是另一領域 我功力不夠 也找不出來阿!
作者: carzyindex    時間: 2011-5-7 10:54

回復 10# GBKEE


    感謝版大回覆
作者: carzyindex    時間: 2011-5-16 16:16

本帖最後由 carzyindex 於 2011-5-16 16:32 編輯

回復 10# GBKEE


想再次詢問版大兩個問題

1.   附件test
我想要依照sheet2清單 A欄
執行程式
另存新檔   檔名為B欄

2.   附件1101
程式有時候後會有錯誤
F欄位篩選為空格
可以刪除嗎
作者: GBKEE    時間: 2011-5-16 21:15

回復 12# carzyindex
下載一支股票要將近10分鐘 , 我沒測試完,請你慢慢測試 .
  1. Option Explicit
  2. Sub 明細下載()
  3.     Dim 股票代號 As Range, 日期 As Variant, i As Integer, A, T As Date
  4.     Dim Rng As Range
  5.     Do While Not IsDate(日期)
  6.         日期 = InputBox("輸入查詢日期", "日期", Date)
  7.         If 日期 = "" Then End
  8.     Loop
  9.     日期 = Format(日期, "yyyymmdd")
  10.     Set 股票代號 = Workbooks("TEST.XLSX").Sheets("sheet2").[A1]
  11.     Do While 股票代號.Value <> ""
  12.         T = Time
  13.         With Workbooks("TEST.XLSX").Sheets.Add(After:=Sheets(Sheets.Count))
  14.             .Name = 日期 & "-" & 股票代號     '設立 在工作表名稱
  15.             Application.StatusBar = False
  16.             On Error GoTo A_Wait
  17.             i = 1
  18.             Do
  19.                 Set Rng = .Cells(Rows.Count, 1).End(xlUp).Offset(1)
  20.                 DoEvents
  21.                 With .QueryTables.Add(Connection:="URL;http://bsr.twse.com.tw/bshtm/bshtm_report_Messages.aspx?strDate=" & 日期 & "&StartNumber=" & 股票代號 & "&FocusIndex=" & i, Destination:=Rng)
  22.                     .Name = 日期 & "_" & 股票代號 & "_" & i
  23.                     .WebSelectionType = xlSpecifiedTables
  24.                     .WebFormatting = xlWebFormattingNone
  25.                     .WebTables = "6"
  26.                     .WebPreFormattedTextToColumns = True
  27.                     .WebConsecutiveDelimitersAsOne = True
  28.                     .WebSingleBlockTextImport = False
  29.                     .WebDisableDateRecognition = False
  30.                     .WebDisableRedirections = False
  31.                 ''''''無法查詢時稍待  到  A_Wait: '''''
  32.                     .Refresh BackgroundQuery:=False
  33.                     If Application.CountA(.ResultRange) = 0 Then GoTo Out
  34.                         i = i + 1
  35.                 End With
  36.                 A = CreateObject("WScript.Shell").popup("請等後下載..." & Chr(10) & Chr(10) & "** 請勿按下  [確定] **", 4, 日期 & "_" & 股票代號 & "  第" & i & "頁", 16 * 3 + 0)
  37.                 Application.ScreenUpdating = True
  38.             Loop
  39.             
  40. Out:
  41.             .UsedRange.Columns.AutoFit
  42.             ''''''''刪除 A,F欄的空格  ''''''''''''''''''''''''''''''''
  43.             .Range(.Cells(Rows.Count, "B").End(xlUp).Offset(1), .Cells(Rows.Count, "B")).Offset(, -1).Clear
  44.             .Range(.Cells(Rows.Count, "G").End(xlUp).Offset(1), .Cells(Rows.Count, "G")).Offset(, -1).Clear
  45.             '''''''''''''''''''''''''''''''''''''''
  46.             A = CreateObject("WScript.Shell").popup("共下載" & i & "頁", 5, 日期 & "_" & 股票代號, 48 + 0)
  47.             Application.StatusBar = 股票代號 & " 共下載 " & i & "頁 費時 " & Format(Time - T, "HH:MM:SS")
  48.         End With
  49.         Set 股票代號 = 股票代號.Offset(1)
  50.     Loop
  51.     End
  52. A_Wait:
  53.     Application.StatusBar = "無法查詢等候10秒鐘"   '網頁繁忙時程式會有錯誤
  54.     Application.Wait Now + TimeValue("00:00:10")  '可增加等候查詢的秒數
  55.     Err.Clear
  56.     Application.StatusBar = False
  57.     Resume    '重返查詢
  58. End Sub
複製代碼

作者: diabo    時間: 2011-5-16 22:57

改用這個網址可一次抓完.... 不必分頁

http://bsr.twse.com.tw/bshtm/bshtm_report_Messages.aspx?strDate=20110516&StartNumber=2454&FocusIndex=All_40&flg_Print=0
作者: carzyindex    時間: 2011-5-17 08:21

本帖最後由 carzyindex 於 2011-5-17 08:28 編輯

回復 14# diabo


非常感謝您在次相助

不過在下載前需要知道總頁數

但是這方面的應用還不是很熟稔

還是需要兩位的幫忙

還有時間日期為首頁      就不需要一直輸入了

http://bsr.twse.com.tw/bshtm/

右上角
作者: GBKEE    時間: 2011-5-17 16:04

回復 15# carzyindex
有此網頁好辦些,但下載還是很費時的,慢慢的測試吧!!



[attach]6236[/attach]
作者: diabo    時間: 2011-5-17 19:27

回復  diabo

非常感謝您在次相助

不過在下載前需要知道總頁數

但是這方面的應用還不是很熟稔

還是需要兩位的幫忙

還有時間日期為首頁      就不需要一直輸入了

http://bsr.twse.com.tw/bshtm/

右上角 ...
carzyindex 發表於 2011-5-17 08:21


1. 蒐集資料只是籌碼分析的第一步,你應該是希望一次能下載指定日期區間及所有上市櫃公司的歷史資料。
2. 建立個股籌碼分析,至少要用 ACCESS(*.mdb) 方式來儲存,一個資料表就可以解決所有問題。不論享分析個股在某段期間的籌碼變化或是某家券商的下單量.....等等,都可以輕易解決。前提是熟悉 SQL 語法。
3. 如果你的目的是投資,建議花錢買系統比較快。如果你的目的是學程式,可能還要需要下很多功夫。
4. 另外頁數在建資料庫其實沒用。
作者: carzyindex    時間: 2011-5-18 08:35

回復 16# GBKEE


    感謝兩位的幫忙

   正在學習資料庫,

想請問檔案儲存方式

分頁這麼多也不是辦法

還是建立日期資料夾

各股分別建立檔案呢

對資料庫來說  該怎麼管理檔案

該存成csv檔嗎
作者: carzyindex    時間: 2011-5-18 08:42

回復 17# diabo


    如1  2點所說

我是藉由這樣的資料

學習資料庫

頁數的事情是我忘記翻到第一頁去看

的確不重要

網路上的資料庫多半是人員名單  關聯學習   看起來和excel差距不大

但是對於時間的範例就找不太到

像是每天的物料變化和籌碼變化   天天都改變才能真在體現資料庫的偉大和強大

感謝兩位撥冗回覆
作者: diabo    時間: 2011-5-18 22:46

回復  diabo


    如1  2點所說

我是藉由這樣的資料

學習資料庫

頁數的事情是我忘記翻到第一 ...
carzyindex 發表於 2011-5-18 08:42



最起碼要做到像這樣子,才能分析.....

[attach]6262[/attach]
作者: ginbow    時間: 2011-7-24 00:54

如果要做籌碼分析 證交所因該有提供三大法人個股每天買賣超資料
http://www.twse.com.tw/ch/trading/fund/TWT43U/TWT43U.php
提供給你參考 資料下載這部分 真的很困難...因為他有些以脫離VBA
有些網頁不是那麼有善 所以要會些html的語法
不過你也可以試著用 ctrl c + ctrl v 方式 把整個網頁複製到excel 在去抓你要的

^^ 祝你好運囉
作者: yuch8663    時間: 2012-2-9 11:19

謝謝GBKEE所做的範例。
作者: lasum    時間: 2012-5-30 14:47

目前正在學 股票資料下載…
感謝GBKEE大…提供的程式…
目前測試正常…共下載23頁…
作者: white5168    時間: 2012-5-31 00:09

本帖最後由 white5168 於 2012-5-31 00:23 編輯

最近在5/30,5/29,5/28抓資料真的越來越有難度了,搞不懂到底哪個害群之馬一直在操掛 證交所的伺服器,搞的大家要抓資料都變的很困難
我是用python來下載資料就已經快抓狂了,我看用VBA抓資料的人應該會更想打人,因為 證交所的防火牆已經做了修改,因為在尖峰時段防火牆會限制連線數與時間,要長時間連線抓資料真的會有難度
用python下載上市795支股票的資訊,在這3天要花2~3小時,是平實抓上市795 上櫃615 (我抓的不是單一支股票的時間是全部)時間的3倍,真的大家找找這個害群之馬
最近也在用VBA抓網頁,但不是抓每日成交明細,不然我也會受不了
祝大家好運
作者: gracyei    時間: 2012-7-2 23:12

回復  carzyindex
有此網頁好辦些,但下載還是很費時的,慢慢的測試吧!!
GBKEE 發表於 2011-5-17 16:04


GBKEE大大,下載測試檔測試時第一支個股下載完畢後,會出現 "執行階段錯誤'424':此處需要物件" ,偵錯後會指向這一段程式" Sheets(日期 & "-" & 股票代號).Cells.Clear ",小弟還是初學者,想請問大大這一段代表什麼意思??請大大賜教
作者: GBKEE    時間: 2012-7-3 13:46

回復 27# gracyei
Sheets(日期 & "-" & 股票代號).Cells.Clear   

"執行階段錯誤'424':此處需要物件   活頁簿中沒有命名為日期 & "-" & 股票代號 的工作表

日期 & "-" & 股票代號  這工作表所有Cells(儲存格).Clear(清除資料)
作者: gracyei    時間: 2012-7-4 00:02

回復 28# GBKEE


    感謝GBKEE大大的回覆,小弟下載#16的測試檔做測試每次跑到第2檔1102時就會發生錯誤,且第2檔股票Sheet的內容會被這一段指令Clear掉,且代號的Sheet會被刪除掉;若只設定1檔則可完成,小弟還是找不出哪裡的問題,請問大大是哪裡的問題?? THX!!
作者: GBKEE    時間: 2012-7-4 16:13

回復 29# gracyei
將檔案上傳看看
作者: gracyei    時間: 2012-7-4 17:48

回復  gracyei
將檔案上傳看看
GBKEE 發表於 2012-7-4 16:13

測試檔是從本帖16樓下載,無做修改,麻煩GBKEE大大看一下
[attach]11576[/attach]
作者: GBKEE    時間: 2012-7-5 15:47

回復 31# gracyei
修改如下
  1. Option Explicit
  2. Sub 個股交易整頁()
  3.     Dim 股票代號 As Range, 日期 As Variant, F As Range
  4.     Do While Not IsDate(日期)
  5.         日期 = InputBox("輸入查詢日期", "日期", Date)
  6.         If 日期 = "" Then End
  7.     Loop
  8.     日期 = Format(日期, "yyyymmdd")
  9.     Set 股票代號 = ThisWorkbook.Sheets("代號").[A1]
  10.     On Error Resume Next                           '不理會 在執行程式的時候發生的錯誤
  11.     Do While 股票代號.Value <> ""
  12.         ThisWorkbook.Sheets.Add after:=Sheets(Sheets.Count)
  13.         ActiveSheet.Name = 日期 & "-" & 股票代號
  14.         Sheets("代號").Activate
  15.         With Sheets(日期 & "-" & 股票代號)
  16.             With .QueryTables.Add(Connection:="URL;http://bsr.twse.com.tw/bshtm/bshtm_report_Messages.aspx?strDate=" & 日期 & "&StartNumber=" & 股票代號 & "&FocusIndex=All_100", Destination:=.Cells(1))
  17.                 .Name = 日期 & "-" & 股票代號
  18.                 .WebSelectionType = xlEntirePage
  19.                 .WebFormatting = xlWebFormattingNone
  20.                 .WebPreFormattedTextToColumns = True
  21.                 .WebConsecutiveDelimitersAsOne = True
  22.                 .WebSingleBlockTextImport = False
  23.                 .WebDisableDateRecognition = False
  24.                 .WebDisableRedirections = False
  25.                 Do
  26.                     DoEvents
  27.                     Err.Clear                         'Err物件的重設
  28.                     .Refresh BackgroundQuery:=False   '查詢失敗 會產生錯誤
  29.                 Loop Until Err.Number = 0             '執行迴圈直到錯誤消:失 查詢成功
  30.             End With
  31.             .Range("F5:H" & Rows.Count).Delete 1
  32.             .Range(.Cells(.Rows.Count, "B").End(xlUp).Offset(1), .Cells(.Rows.Count, "B")).Offset(, -1).Clear
  33.             .Range(.Cells(Rows.Count, "G").End(xlUp).Offset(1), .Cells(Rows.Count, "G")).Offset(, -1).Clear
  34.             Set F = .[A:A].Find("*頁 / 共*", LOOKAT:=xlPart)
  35.             Do While Not F Is Nothing
  36.                 F.Offset(-1).Resize(7).EntireRow.Delete
  37.                 Set F = .[A:A].FindNext
  38.             Loop
  39.             .UsedRange.Columns.AutoFit
  40.         End With
  41.         Set 股票代號 = 股票代號.Offset(1)
  42.     Loop
  43.     MsgBox "下載完畢 !!!", 32 + 0, "個股交易明細"
  44. End Sub
複製代碼

作者: sd-jason    時間: 2012-7-6 17:02

各位大大:
請問像這些語法,
我應該把他貼在哪裡,
才能執行?
你們的檔案我都沒有辦法看,
是否可以寄給我呢?
[email protected]
感謝!
作者: GBKEE    時間: 2012-7-6 17:46

回復 33# sd-jason

[attach]11606[/attach]
作者: GBKEE    時間: 2012-7-6 18:14

回復 35# sd-jason
自己動動手才會進步    1.程式碼複製在到模組上(這程式碼適用 工作表 或一般模組)
                                      2 .如 34# 製作 一個工作表  按鈕巨集 指定為這程序
試試看
作者: gracyei    時間: 2012-7-6 21:51

回復  gracyei
修改如下
GBKEE 發表於 2012-7-5 15:47



    感謝GBKEE大大的幫忙,可以順利下載了!!
作者: gracyei    時間: 2012-7-11 00:12

回復  gracyei
修改如下
GBKEE 發表於 2012-7-5 15:47


GBKEE大大
想請教一下,若下載完的Sheet名稱只要代號就好,不需要日期的話是不是修改32#的程式碼
13列: ActiveSheet.Name = 日期 & "-" & 股票代號 => ActiveSheet.Name = 股票代號
15列:With Sheets(日期 & "-" & 股票代號) => With Sheets(股票代號)
17列:.Name = 日期 & "-" & 股票代號 => .Name =股票代號
就可以了呢??感謝教導!!
作者: HSIEN6001    時間: 2012-7-11 00:32

回復 37# gracyei

沒錯啦!
可是......這個自己RUN就有答案
若怕不小心改錯,可先另外複製-份原稿

多RUN幾次,就會有點心得
加油!
作者: gracyei    時間: 2012-7-11 19:55

回復  gracyei

沒錯啦!
可是......這個自己RUN就有答案
若怕不小心改錯,可先另外複製-份原稿

多RU ...
HSIEN6001 發表於 2012-7-11 00:32


已有自己做過測試,但會變成無法下載,所以才發問,小弟還是初學者很多指令還不是很了解,請各位大大教導,謝謝!!
作者: HSIEN6001    時間: 2012-7-11 23:26

回復 39# gracyei

剛剛試,真的不行耶!
~是偶多話~金拍謝  =__=!!   

你還是請G大排解好了
偶搞不清楚哪裡出問題
作者: mannyhsu    時間: 2012-7-21 10:53

已有自己做過測試,但會變成無法下載,所以才發問,小弟還是初學者很多指令還不是很了解,請各位大大教導,謝 ...
gracyei 發表於 2012-7-11 19:55

剛試了一下, 前面加一串文字就可以了 ~~
作者: mannyhsu    時間: 2012-7-23 19:43

改用這個網址可一次抓完.... 不必分頁
diabo 發表於 2011-5-16 22:57


請教一下, 上面這種 link 的方式, 好像不能用了,
有人知道有新的方式可用嗎 ?? 謝謝 !
作者: tsuneng    時間: 2012-7-25 19:48

感謝GBKEE大大 ,試了一下可用。
作者: sd-jason    時間: 2012-7-25 20:32

請問這個是不是已經無法下載了???這幾天下載都只跑出活頁代號,而沒有內容資料???
作者: white5168    時間: 2012-7-25 23:13

這幾天不式不能抓,而是網站被動了一些手腳,那大家抓的很辛苦也很痛苦,改用python抓會比較好一點
作者: mannyhsu    時間: 2012-7-26 00:50

我試了一下, 新的 link 變成 :
http://bsr.twse.com.tw/bshtm/bsContent.aspx?StartNumber=2498&FocusIndex=All_59
但是原本可用 All_100 抓到所有的 pages, 現在已經不能用了, 必須要知道確切的 page number,
請問一下, 那原始的程式該如何修改 ?
謝謝 !!
作者: lalalada    時間: 2012-7-26 10:48

本帖最後由 lalalada 於 2012-7-26 10:51 編輯

同樓上
以為終於建好自動更新資料的程式說QQ
原始碼裡有個 <font color="#ffcc00;" size="4"><b><span id="sp_ListCount">59</span></b>
不知道能否用來取得頁數
也發現有
//    window.open("bshtm/"+ HiddenField_spDate +"/"+ document.getElementById("hidTASKNO").value+"/"+ document.getElementById("hidTASKNO").value+".csv");
window.open("bsContent.aspx?StartNumber=" + document.getElementById("hidTASKNO").value + "&download=csv");
有機會下載CSV檔?
而且樓上說的那個網址才改沒幾天而已又在ALL上設新限制
看來是存心不想讓人抓了
話說之前寫信去問說八月開始要提供付費CSV
貌似是網頁改版主因...
作者: GBKEE    時間: 2012-7-26 17:23

回復 46# mannyhsu
回復 47# lalalada
  1. Option Explicit
  2. Sub Ex()
  3.     Dim Stock_No As String, wb As Workbook
  4.     Do
  5.         Stock_No = InputBox("請輸入股票號碼")
  6.         If Stock_No = "" Then If MsgBox("取消輸入股票號碼?", vbYesNo) = vbYes Then Exit Sub
  7.     Loop Until Stock_No <> ""
  8.     For Each wb In Workbooks
  9.         If wb.Name = "bsContent.aspx" Then wb.Close False
  10.     Next
  11.     On Error Resume Next
  12.     Application.DisplayAlerts = False
  13.     Workbooks.Open ("http://bsr.twse.com.tw/bshtm/bsContent.aspx?StartNumber=" & Stock_No & "&download=csv")
  14.     If Err.Number <> 0 Then MsgBox "1 請查明 股票號碼 " & Stock_No & "是否存在" & Chr(10) & _
  15.     "2 股票號碼 " & Stock_No & " 如正確 請重新輸入 " & Stock_No
  16.     Application.DisplayAlerts = True
  17. End Sub
複製代碼

作者: mannyhsu    時間: 2012-7-26 20:21

回復 48# GBKEE

太感恩了, 這個可以用 ~~
作者: mannyhsu    時間: 2012-7-26 20:50

本帖最後由 mannyhsu 於 2012-7-26 20:56 編輯

回復 48# GBKEE

請問 GBKEE 大,
是否可以在目前的試算表中一個工作表(例如 temp)存放 csv 資料,
而不是另開一個試算表, 謝謝 !!

另外, 可能是原始的 CSV 資料有問題,
除了內容格式不對, 有些欄位內也沒有資料 ...
作者: GBKEE    時間: 2012-8-1 13:41

另外, 可能是原始的 CSV 資料有問題,
除了內容格式不對, 有些欄位內也沒有資料 ...mannyhsu 發表於 2012/7/26 20:50


這裡有正確的 http://forum.twbts.com/redirect.php?goto=findpost&pid=41636&ptid=7309




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