Board logo

標題: [發問] 上市股票融資融券餘額CSV下載問題 [打印本頁]

作者: pupai    時間: 2014-8-12 12:05     標題: 上市股票融資融券餘額CSV下載問題

您好
我想用VBA下載網站的每天"融資融券彙總(大盤統計資訊)"
http://www.twse.com.tw/ch/trading/exchange/MI_MARGN/genpage/Report201408/A11220140811_1.php?select2=&chk_date=103/08/11

請問他的URL是什麼
或者有什麼可以讓我參考的資料
請指導
謝謝!!
作者: GBKEE    時間: 2014-8-12 16:12

本帖最後由 GBKEE 於 2014-8-12 17:25 編輯

回復 1# pupai

20140811 指定的日期

http://www.twse.com.tw/ch/tradin ... A11220140811_1.php?
value=''>全部 (大盤統計資訊) 是錯誤的 需改為  value='_1'>全部

http://www.twse.com.tw/ch/tradin ... A11220140811MS.php?
value='MS'>信用交易統計

http://www.twse.com.tw/ch/tradin ... 2201408110099P.php?
value='0099P'>ETF

http://www.twse.com.tw/ch/tradin ... A1122014081101.php?
value='01'>水泥工業

value='02'>食品工業
value='22'>生技醫療業
......

網頁原始文件,分類項目 的 value
  1. <option   value='MS'>信用交易統計</option><option  selected  value=''>全部</option><option   value='0049'>封閉式基金</option><option   value='0099P'>ETF</option><option   value='019919T'>受益證券</option><option   value='0999'>認購權證</option><option   value='0999P'>認售權證</option><option   value='01'>水泥工業</option><option   value='02'>食品工業</option><option   value='03'>塑膠工業</option><option   value='04'>紡織纖維</option><option   value='05'>電機機械</option><option   value='06'>電器電纜</option><option   value='07'>化學生技醫療</option><option   value='21'>化學工業</option><option   value='22'>生技醫療業</option><option   value='08'>玻璃陶瓷</option><option   value='09'>造紙工業</option><option   value='10'>鋼鐵工業</option><option   value='11'>橡膠工業</option><option   value='12'>汽車工業</option><option   value='13'>電子工業</option><option   value='24'>半導體業</option><option   value='25'>電腦及週邊設備業</option><option   value='26'>光電業</option><option   value='27'>通信網路業</option><option   value='28'>電子零組件業</option><option   value='29'>電子通路業</option><option   value='30'>資訊服務業</option><option   value='31'>其他電子業</option><option   value='14'>建材營造</option><option   value='15'>航運業</option><option   value='16'>觀光事業</option><option   value='17'>金融保險</option><option   value='18'>貿易百貨</option><option   value='23'>油電燃氣業</option><option   value='9299'>存託憑證</option><option   value='19'>綜合</option><option   value='20'>其他</option><option   value='CB'>可轉換公司債</option>         
複製代碼

作者: pupai    時間: 2014-8-12 17:20

回復 2# GBKEE


    版主您好
我寫的東西有點行不通
請幫我看看修改
謝謝
  1. Sub 上櫃()
  2.       
  3.     Theurl = "http://www.twse.com.tw/ch/trading/exchange/MI_MARGN/genpage/Report201408/A11220140811_1.php"
  4.     With Workbooks.Open(Theurl)
  5.         AR = .Sheets(1).UsedRange
  6.         .Close False
  7.     End With
  8.     With ActiveSheet
  9.         Range("B:U").Select
  10.         Selection.ClearContents
  11.         '.UsedRange.Clear 全部清除
  12.         .Range("B2").Resize(UBound(AR, 1), UBound(AR, 2)) = AR
  13.    
  14.     End With
  15. End Sub
複製代碼

作者: GBKEE    時間: 2014-8-12 17:45

回復 3# pupai
試試看 用web查詢
  1. Option Explicit
  2. Sub Ex()
  3.     With ActiveSheet
  4.         If .QueryTables.Count = 0 Then
  5.             With .QueryTables.Add("URL;about:Tabs", .[A1])
  6.             .Refresh BackgroundQuery:=False
  7.             End With
  8.         End If
  9.         With .QueryTables(1)
  10.             '全部下載久一點
  11.             .Connection = "URL;http://www.twse.com.tw/ch/trading/exchange/MI_MARGN/genpage/Report201408/A11220140811_1.php"
  12.         
  13.             '.Connection = "URL;http://www.twse.com.tw/ch/trading/exchange/MI_MARGN/genpage/Report201408/A11220140811MS.php?"
  14.         
  15.             .WebSelectionType = xlSpecifiedTables
  16.             .WebFormatting = xlWebFormattingNone
  17.             .WebTables = "10"
  18.             '這全部的要用   .WebTables = "10"
  19.             '其他項目的要用 .WebTables = "8"
  20.             .WebPreFormattedTextToColumns = True
  21.             .WebConsecutiveDelimitersAsOne = True
  22.             .WebSingleBlockTextImport = False
  23.             .WebDisableDateRecognition = False
  24.             .WebDisableRedirections = False
  25.             .Refresh BackgroundQuery:=False
  26.         End With
  27.     End With
  28. End Sub
複製代碼

作者: pupai    時間: 2014-8-13 09:42

回復 4# GBKEE


    感恩版主的回覆

如果我要可以指定日期的查詢功能
請問我要如何呈現
謝謝!!
作者: GBKEE    時間: 2014-8-13 09:54

回復 5# pupai

http://www.twse.com.tw/ch/trading/exchange/MI_MARGN/genpage/Report201307/A1122013071501.php?
作者: pupai    時間: 2014-8-13 12:20

回復 6# GBKEE


    版主
我只能寫這樣,但程式有錯
請幫我指導一下
謝謝!!
  1. Sub EX()
  2.      
  3.   Dim A As Date
  4.   Dim Sdate As Variant
  5.   
  6.   
  7.     A = Range("A1").Value
  8.     Sdate = Format(A, "E/MM/DD")
  9.      
  10.      
  11.      With ActiveSheet
  12.         If .QueryTables.Count = 0 Then
  13.             With .QueryTables.Add("URL;about:Tabs", .[B1])
  14.             .Refresh BackgroundQuery:=False
  15.             End With
  16.         End If
  17.         With .QueryTables(1)
  18.             '全部下載久一點
  19.             .Connection = "URL;http://www.twse.com.tw/ch/trading/exchange/MI_MARGN/genpage/Report=" & Sdate / A112 = " & Sdate_1.php"
  20.         
  21.            
  22.         
  23.             .WebSelectionType = xlSpecifiedTables
  24.             .WebFormatting = xlWebFormattingNone
  25.             .WebTables = "10"
  26.             '這全部的要用   .WebTables = "10"
  27.             '其他項目的要用 .WebTables = "8"
  28.             .WebPreFormattedTextToColumns = True
  29.             .WebConsecutiveDelimitersAsOne = True
  30.             .WebSingleBlockTextImport = False
  31.             .WebDisableDateRecognition = False
  32.             .WebDisableRedirections = False
  33.             .Refresh BackgroundQuery:=False
  34.         End With
  35.     End With
  36. End Sub
複製代碼

作者: GBKEE    時間: 2014-8-13 13:02

回復 7# pupai
試試看
  1. Option Explicit
  2. Sub EX()
  3.   Dim A As Date
  4.   Dim Rep_Ym As String
  5.   Dim Rep_Day As String
  6.     Range("A1") = "2011/12/20"   '示範的日期
  7.     A = Range("A1").Value
  8.     Rep_Ym = Format(A, "yyyyMM")
  9.     Rep_Day = Format(A, "yyyyMMDD")
  10.      With ActiveSheet
  11.         If .QueryTables.Count = 0 Then
  12.             With .QueryTables.Add("URL;about:Tabs", .[B1])
  13.             .Refresh BackgroundQuery:=False
  14.             End With
  15.         End If
  16.         With .QueryTables(1)
  17.             '全部下載久一點
  18.             .Connection = "URL;http://www.twse.com.tw/ch/trading/exchange/MI_MARGN/genpage/Report" & Rep_Ym & "/A112" & Rep_Day & "_1.php"
  19.             .WebSelectionType = xlSpecifiedTables
  20.             .WebFormatting = xlWebFormattingNone
  21.             .WebTables = "10"
  22.             '這全部的要用   .WebTables = "10"
  23.             '其他項目的要用 .WebTables = "8"
  24.             .WebPreFormattedTextToColumns = True
  25.             .WebConsecutiveDelimitersAsOne = True
  26.             .WebSingleBlockTextImport = False
  27.             .WebDisableDateRecognition = False
  28.             .WebDisableRedirections = False
  29.             .Refresh BackgroundQuery:=False
  30.         End With
  31.     End With
  32. End Sub
複製代碼

作者: pupai    時間: 2014-8-13 13:25

回復 8# GBKEE


    版主感恩
謝謝
作者: pupai    時間: 2014-8-13 17:26

回復 8# GBKEE


      請問版主
這個程式為什麼不可以用巨集啟動
就像 Application.Run "工作表1.EX" 這一種方法
會出現執行階段錯誤"1004":
Run方法('Application'物件)失敗
但是如果單獨用F8程式又OK
作者: pupai    時間: 2014-8-14 08:03

回復 8# GBKEE


    坂大
是我的問題
我昨晚熬夜找到問題 解決了
謝謝你的幫忙
作者: hipper68    時間: 2015-8-13 23:22

回復 2# GBKEE


請教版大 和各位大大..
這兩天發現原來抓融資融卷餘額 url 不能用了...

原來的:  (以 2015/8/12為例)
http://www.twse.com.tw/ch/trading/exchange/MI_MARGN/genpage/Report201508/A11220150812MS.php?select2=MS&chk_date=104/08/12
可以取得 "信用交易統計"這類的資料
但這兩天這個url 會找不到 A11220150812MS.php

但是如果將 "MS" 改成 "01" (融資融券彙總(水泥工業)), 也就是
http://www.twse.com.tw/ch/trading/exchange/MI_MARGN/genpage/Report201508/A1122015081201.php?select2=MS&chk_date=104/08/12
則可以正確取得水泥類股的資料.

請問各位大大,該用哪種 url 取得 "信用交易統計" 這類的資料..
Thanks..
作者: joey0415    時間: 2015-8-14 21:08

回復 12# hipper68

你試試看,應該可行!
  1. Sub ex()

  2.     With CreateObject("internetexplorer.application")
  3.         .Visible = True
  4.         .Navigate "http://www.twse.com.tw/ch/trading/exchange/MI_MARGN/MI_MARGN.php"
  5.         Do Until .ReadyState = 4
  6.             DoEvents
  7.         Loop
  8.         
  9.         .Document.getElementById("date-field").Value = "104/08/12" '填入
  10.          
  11.         '---------,內建的fireevent 的onchange失效,改用調用js的方法--------
  12.         Set evt = .Document.createEvent("HTMLEvents")
  13.         evt.initEvent "change", True, False
  14.         Set lst = .Document.all("selectType") 'option的name是selectType,但getElementsByName無法處理,要all才行
  15.         lst.selectedIndex = 0
  16.         lst.dispatchEvent evt
  17.    
  18.         .Document.all("query-button").Click


  19.          Do While .ReadyState <> 4 Or .Busy: DoEvents: Loop

  20.         Application.Wait Now + TimeValue("00:00:5")
  21. '        Stop
  22.         
  23. '        For Z = 0 To 10
  24. '        MsgBox .Document.getElementsByTagName("table")(Z).innerText
  25. '        Next
  26.             Stop
  27.         Set hTable = .Document.getElementsByTagName("table")(3) '第4個table
  28. '        tt = hTable.Rows.Length
  29. '        qq = hTable.Rows(2).Cells.Length

  30.             With ActiveSheet
  31.                 For i = 1 To hTable.Rows.Length - 1 '前3個是標題與空白跳過
  32.                     For j = 0 To hTable.Rows(i).Cells.Length - 1
  33.                         .Cells(i, j + 1) = hTable.Rows(i).Cells(j).innerText
  34.                     Next
  35.                 Next
  36.             End With

  37.         .Quit
  38. '        MsgBox "OK"
  39.     End With
  40.    
  41. End Sub
複製代碼

作者: pupai    時間: 2015-8-27 08:54

回復  pupai
試試看
GBKEE 發表於 2014-8-13 13:02



    請問版大
上述程式8/11前還可以使用
8/12後就不能用了
幫忙修正
謝謝




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