Board logo

標題: 關於匯入外部資料的問題 [打印本頁]

作者: laieven    時間: 2016-4-17 03:13     標題: 關於匯入外部資料的問題

請問各位先進
我想從網頁匯入外部資料!!!一般匯入的方式沒有問題
但是當一些網頁需要先設定資料範圍(例如年份)才會顯示的網頁
該怎麼下載呢?
例如:http://mops.twse.com.tw/mops/web/t163sb06

我爬了一些文也找了一些網頁!!這似乎是跟"Internet Explorer物件控制DOM"有關係!!

我試過下載"http://mops.twse.com.tw/nas/t21/sii/t21sc03_104_1_0.html"這類資料的方式
只要更改整串網址列中的某些數據!!便能順利下載~~但是需要更改些控制項的網頁!!
請教該怎麼下載呢?
作者: GBKEE    時間: 2016-4-18 10:49

本帖最後由 GBKEE 於 2016-4-18 10:50 編輯

回復 1# laieven
試試看
  1. Option Explicit
  2. Sub Ex_營益分析查詢彙總表() '公開資訊觀測站
  3.     Dim i As Variant, E As Object, Op As String, Sh As Worksheet, R As Integer, C As Integer
  4.     Application.StatusBar = "'** 等候網頁 ....**"
  5.     With CreateObject("InternetExplorer.Application")
  6.   '    .Visible = True
  7.         .Navigate "http://mops.twse.com.tw/mops/web/t163sb06"
  8.         Do While .Busy Or .ReadyState <> 4: DoEvents: Loop
  9.          '[上市別] *****
  10.         With .document.ALL("TYPEK")(1)
  11.             For i = 0 To .ALL.Length - 1
  12.                 Op = Op & vbLf & i + 1 & .ALL(i).INNERTEXT
  13.             Next
  14.             DoEvents  ' ** 回到 Excel
  15.             Do
  16.                 Application.ActiveWindow.Activate
  17.                 i = Application.InputBox(Op, "營益分析查詢彙總表  [上市別]", 1, Type:=1)
  18.                
  19.                 If i = 0 Then GoTo Exit_Sub
  20.             Loop Until i <= .ALL.Length And i >= 1
  21.             .selectedindex = i - 1
  22.         End With
  23.         '[年度] *****
  24.         Do
  25.             i = Application.InputBox(Format(Date, "ee"), "營益分析查詢彙總表  [年度]", Format(Date, "ee") - 1, Type:=1)
  26.             If i = 0 Then GoTo Exit_Sub
  27.           Loop Until i <= Format(Date, "ee")
  28.         .document.ALL("year").Value = i
  29.         '[季別] *****
  30.         Do
  31.             i = Application.InputBox(1, "營益分析查詢彙總表  [季別]", DatePart("q", Date), Type:=1)
  32.             If i = 0 Then GoTo Exit_Sub
  33.           Loop Until i <= 4 And i >= 1
  34.         .document.ALL("season").selectedindex = i
  35.         '** 網頁  按下 [搜尋]
  36.         For Each E In .document.ALL.tags("INPUT")
  37.             If E.Value = " 搜尋 " Then
  38.                 E.Click
  39.                 Exit For
  40.             End If
  41.         Next
  42.         '** 等候網頁 載入資料
  43.         Application.StatusBar = "'** 等候網頁 載入資料**"
  44.         Do
  45.             Set E = .document.BODY.ALL.tags("table")(11).Rows
  46.             If InStr(.document.BODY.INNERTEXT, "查詢無資料") Then
  47.                 MsgBox "查詢無資料"
  48.                 Application.StatusBar = "** 網頁  查詢無資料**"
  49.                 GoTo Exit_Sub:
  50.             End If
  51.              DoEvents:
  52.         Loop Until E.Length > 11
  53.           '** 下載 資料
  54.           Set Sh = Sheets(2)  '指定 工作表
  55.           Application.ScreenUpdating = False
  56.           Application.StatusBar = "'** 載入資料 中 **"
  57.           Set E = .document.BODY.ALL.tags("table")(11).Rows
  58.          
  59.           Sh.UsedRange.Clear
  60.           For R = 0 To E.Length - 1
  61.                      For C = 0 To E(R).Cells.Length - 1
  62.                      If R > 1 And E(R).Cells(0).INNERTEXT = "公司代號" Then Exit For
  63.                           Sh.Cells(R + 1, C + 1) = E(R).Cells(C).INNERTEXT
  64.                      Next
  65.             Next
  66.           Sh.UsedRange.SpecialCells(xlCellTypeBlanks).Delete
  67.           Sh.Activate
  68.           Sh.[A1].Select
  69.           Application.ScreenUpdating = True
  70.           Application.StatusBar = .document.BODY.ALL.tags("table")(12).INNERTEXT
  71. Exit_Sub:
  72.         .Quit        '關閉網頁
  73.     End With
  74. End Sub
複製代碼

作者: laieven    時間: 2016-4-18 16:12

回復 2# GBKEE


    感謝協助!!!我來試看看!!
作者: BANK870    時間: 2016-4-20 02:15

請問怎麼會執行錯誤9陣列索引超出範圍




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