返回列表 上一主題 發帖

[發問] 網路CSV下載問題

回復 4# GBKEE
            網頁表格 = 13  '損益表
            網頁表格 = 12  '合併損益表

請問13與12數據由來
若換成不同表格我該要如何判斷這數值?!
例如:http://mops.twse.com.tw/mops/web/t56sb21_q3

TOP

不設表格名稱(抬頭),以下是修改部分資料應用
望請修正錯誤,謝謝..^___^..
  1. Option Explicit
  2. Sub 申報轉讓()
  3. Dim ie As Object, xx, k, j, i, AA As Variant
  4. Dim T As Date, 資訊 As String
  5.     Do
  6.         資訊 = InputBox("1: 歷史持股轉讓" & vbLf & "2: 合併損益表")   '選擇公開資訊觀測站的表格
  7.         If 資訊 = "" Then Exit Sub                              '不選擇結束程式
  8.     Loop Until Val(資訊) > 0 And Val(資訊) <= 2 '                Val(資訊)<=???  結束選擇表單
  9.    
  10.     ActiveSheet.Cells.Clear
  11.     Application.DisplayStatusBar = True
  12.     Application.StatusBar = "....... 網頁開啟中.......... "
  13.    
  14. 'On Error GoTo ie_err
  15. Set ie = CreateObject("InternetExplorer.Application")
  16. ie.Navigate 下載網址(資訊)
  17.     Do While ie.Busy Or ie.ReadyState <> 4
  18.             DoEvents
  19.     Loop
  20.     With ie.Document
  21.         T = Time
  22.         Do While ie.Busy Or ie.ReadyState <> 4
  23.             If Time = T + #12:01:00 AM# Then GoTo ie_err                '等候網頁異常:結束程式
  24.             DoEvents
  25.         Loop
  26.     '**********  修改這裡 的選項
  27.     'http://mops.twse.com.tw/mops/web/t56sb21_q3?&step=0&firstin=1&off=1&TYPEK=sii&year=91&smonth=07&emonth=09
  28.    
  29.     .getelementbyID("TYPEK").Value = "sii"  '上市 = sii,上櫃 = otc,興櫃 = rotc,公開發行 = pub
  30.     .getelementbyID("year").Value = "91"    '年度
  31.     .getelementbyID("smonth").Value = "07"  '起月份
  32.     .getelementbyID("emonth").Value = "09"  '訖月份
  33.         For i = 0 To .getelementsbytagname("input").Length - 1
  34.             If .getelementsbytagname("input")(i).Type = "button" And .getelementsbytagname("input")(i).Value = " 搜尋 " Then
  35.                 .getelementsbytagname("input")(i).Click
  36.             End If
  37.         Next
  38.         等待網頁
  39.         Set AA = .getelementsbytagname("table")   '資料區
  40.     End With
  41.     T = Time
  42.     With ActiveSheet

  43.         .Cells(1).Select
  44.         Application.ScreenUpdating = False
  45.         k = 1
  46.         On Error Resume Next
  47.         For xx = 網頁表格(資訊) To AA.Length - 1
  48.             For i = 0 To AA(xx).Rows.Length - 1      '寫入資料
  49.                 k = k + 1
  50.                 For j = 0 To 19
  51.                     Application.StatusBar = "下載資料中 ..." & k - 1
  52.                     .Cells(k, j + 1) = AA(xx).Rows(i).Cells(j).innertext
  53.                 Next
  54.             Next
  55.         Next
  56.         Set AA = .Range("R3:R" & .[R3].End(xlDown).Row)
  57.         AA.Replace "是否申報持", "", xlWhole
  58.         AA.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
  59.         .Cells(.Rows.Count, 1).End(xlUp).EntireRow.Delete
  60.         .Cells.EntireColumn.AutoFit
  61.         .[A1].Select
  62.     End With
  63.     Application.ScreenUpdating = True
  64.     ie.Quit
  65.     Application.StatusBar = "下載資料時間 : " & Format(Time - T, ["S秒"])
  66.     End
  67. ie_err:
  68.     ie.Quit
  69.     MsgBox "網頁有問題,請重新執行..."
  70.     End
  71. 資訊_Err:
  72. End Sub
  73. Private Sub 等待網頁()    '等待網頁下載資料完畢的時間
  74.     Dim Tt(1 To 3) As Date
  75.     Tt(1) = Time
  76.     Tt(2) = Time
  77.     Tt(3) = #12:00:10 AM#     '10秒 調整這裡
  78.     Do
  79.         If Time > Tt(2) Then
  80.             Application.StatusBar = "網頁下載中 剩餘秒數.. " & Second(Tt(1) + Tt(3) - Time)
  81.             Tt(2) = Time
  82.         End If
  83.         DoEvents
  84.     Loop Until Time > Tt(1) + Tt(3)
  85.     Application.StatusBar = "資料下載中...."
  86. End Sub
  87. Private Function 下載網址(xWord As String) As String      '傳回選擇的網址
  88.     Select Case xWord
  89.         Case "1"
  90.             下載網址 = "http://mops.twse.com.tw/mops/web/t56sb21_q3" '歷史持股轉讓
  91.         Case "2"
  92.             下載網址 = "http://mops.twse.com.tw/mops/web/t51sb13" '合併損益表
  93.         ''Case "3"     新網頁的網址
  94.         ''
  95.         ''
  96.     End Select
  97. End Function
  98. Private Function 市場別(xWord As String) As String
  99.        '上市 = sii,上櫃 = otc,興櫃 = rotc,公開發行 = pub
  100.     Select Case xWord
  101.         Case "sii"
  102.             市場別 = "上市"
  103.         Case "otc"
  104.             市場別 = "上櫃"
  105.         Case "rotc"
  106.             市場別 = "興櫃"
  107.         Case "pub"
  108.             市場別 = "公開發行"
  109.     End Select
  110. End Function
  111. Private Function 網頁表格(xWord As String) As Integer
  112.     Select Case xWord
  113.         Case "1"
  114.             網頁表格 = 11
  115.         Case "2"
  116.             網頁表格 = 12  '合併損益表
  117.         
  118.         ''每一網頁的表單建置不一樣,需一一去尋找
  119.         '' 自行查看新增 Case "3"......
  120.         ''
  121.     End Select
  122. End Function
複製代碼

TOP

回復 8# diabo

謝謝,這UR試過了,可惜抓下來文字是亂碼
G大的測試OK,但還有許多不懂,等待指點 ^__^

TOP

回復 12# diabo

不懂耶!
因為該UR直接顯示亂碼,所以我下載也是亂碼

請問您說的是將程式碼寫在VBA裏頭排除亂碼問題?!
可否示範?!

TOP

回復 4# GBKEE


    G大,同#5 及 #10之問題

            網頁表格 = 13  '損益表
            網頁表格 = 12  '合併損益表

可否請問13與12數據應該如何判斷這數值?!
例如:http://mops.twse.com.tw/mops/web/t56sb21_q3

TOP

回復 15# GBKEE

以102年1~3月為例,上市sii及上櫃otc:
網址是:
http://mops.twse.com.tw/mops/web/ajax_t56sb21?&run=&step=1&TYPEK=sii&year=102&smonth=01&emonth=03&sstep=1&firstin=true                ‘上市 sii 上櫃 otc

因為下載之後呈現亂碼,所以才用G大#4的方式
套用UR : http://mops.twse.com.tw/mops/web/t56sb21_q3?&step=0&firstin=1&off=1&TYPEK=sii&year=102&smonth=01&emonth=03  ‘上市 sii 上櫃 otc

測試完整代碼於#6 ,測試OK 的 (沒亂碼)
只是沒法理解----->網頁表格 13 or 12
遇到不同網頁,判別方式?!

PS:剛剛試 #15 的代碼,下載也呈現亂碼。

TOP

不好意思,補充說明一下
#16 兩個URL 都是指同一份表格

TOP

本帖最後由 HSIEN6001 於 2013-4-2 00:13 編輯

回復 19# GBKEE
回復 18# diabo

謝謝兩位幫忙解惑
你們都好棒喔!
感恩 ^__^

TOP

        靜思自在 : 真正的愛心,是照顧好自己的這顆心。
返回列表 上一主題