返回列表 上一主題 發帖

[發問] (EXCEL VBA問題)請問怎樣用QueryTable抓取網頁資料?

[發問] (EXCEL VBA問題)請問怎樣用QueryTable抓取網頁資料?

(EXCEL VBA問題)請問怎樣用QueryTable抓取網頁資料?
網址:www.twse.com.tw/exchangeReport/MI_INDEX?response=html&date=20171229&type=ALLBUT0999
我需要的是中間部份
106年12月29日每日收盤行情(全部(不含權證、牛熊證))

使用錄製巨集方式

sub test()

With ActiveSheet.QueryTables.Add(Connection:= _
        "URL;http://www.twse.com.tw/exchangeReport/MI_INDEX?response=html& date =20171229&type=ALLBUT0999" _
        , Destination:=Range("A1"))
        .Name = "MI_INDEX?response=html&date=20171229&type=ALLBUT0999"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .WebSelectionType = xlSpecifiedTables
        .WebFormatting = xlWebFormattingNone
        .WebTables = "5"
        .WebPreFormattedTextToColumns = True
        .WebConsecutiveDelimitersAsOne = True
        .WebSingleBlockTextImport = False
        .WebDisableDateRecognition = False
        .WebDisableRedirections = False
        .Refresh BackgroundQuery:=False
    End With
End Sub

將其中的日期20171229改為
" & Range("a1") & Range("b1") & Range("c1") & "
卻發現不可行
a1,b1,c1分別輸入2017,12,27
出現的還是20171229的

不知道問題出在那裡?

本帖最後由 GBKEE 於 2018-1-1 07:25 編輯

回復 1# paul3063
  1. =html& date =
複製代碼
網址錯誤傳回最近一天的資料,,需沒有空格
  1. =html&date=
複製代碼
  1. http://www.twse.com.tw/exchangeReport/MI_INDEX?response=html&date=" & Range("A1") & Range("B1") & Range("C1") & "&type=ALLBUT0999"
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 2# GBKEE


GBKEE大,連這種差一個空白鍵的錯誤都找得出來,您真的是太厲害了。
另外,想再問一下,如果想把日期輸入改用INUTBOX方式,程式碼要怎樣修改?

TOP

回復 3# paul3063
  1. Option Explicit
  2. Sub EX()
  3.     Dim xDay As String
  4.     xDay = InputBox("輸入日期", "大盤統計資訊日期", Date)
  5.     If IsDate(xDay) Then
  6.         If Weekday(xDay, vbMonday) < 6 Then
  7.             xDay = Format(xDay, "yyyymmdd")
  8.             With ActiveSheet.QueryTables.Add(Connection:= _
  9.                 "URL;http://www.twse.com.tw/exchangeReport/MI_INDEX?response=html& date =" & xDay & "&type=ALLBUT0999" _
  10.                 , Destination:=Range("A1"))
  11.                 '
  12.                 '
  13.             End With
  14.         Else
  15.             MsgBox xDay & "  假日沒營業"
  16.         End If
  17.     Else
  18.         MsgBox "日期輸入錯誤"
  19.     End If
  20. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

[版主管理留言]
  • GBKEE(2018/1/4 19:03): 附檔看看

回復 4# GBKEE

GBKEE大,試過了,好像不行,執行巨集,沒有反應。

TOP

[版主管理留言]
  • GBKEE(2018/1/6 06:02): 請用附件上傳,可用擴展名: chm, pdf, zip, rar, tar, gz, bzip2, gif, jpg, jpeg, png

回復 4# GBKEE


GBKEE大,檔案網址如下請下載,
Download Page Link
https://www.sendspace.com/file/onxcag

TOP

回復 4# GBKEE


    GBKEE大,檔案已上傳, INPUTBOX+QUERYTABLE.rar (7.65 KB)

TOP

修改抓取表格參數你試看看

Sub Ex()
        Dim xDay As String
        xDay = InputBox("輸入日期", "大盤統計資訊日期", Date)
        If IsDate(xDay) Then
            If Weekday(xDay, vbMonday) < 6 Then
                xDay = Format(xDay, "yyyymmdd")
                With ActiveSheet.QueryTables.Add(Connection:= _
                    "URL;http://www.twse.com.tw/exchangeReport/MI_INDEX?response=html&date=" & xDay & "&type=ALLBUT0999" _
                    , Destination:=Range("A1"))
                    .WebFormatting = xlNone
                    .RefreshStyle = xlInsertDeleteCells
                    .AdjustColumnWidth = True
                    .Refresh BackgroundQuery:=True
                End With
            Else
                MsgBox xDay & "  假日沒營業"
            End If
        Else
            MsgBox "日期輸入錯誤"
        End If
    End Sub
Rogersg

TOP

回復 8# rogersg


rogersg大,可以了,萬分感謝。

您跟GBKEE大的程式碼只多了
.WebFormatting = xlNone
                    .RefreshStyle = xlInsertDeleteCells
                    .AdjustColumnWidth = True
                    .Refresh BackgroundQuery:=True
想不到竟然可行,真是令人訝異。

TOP

回復 9# paul3063


題外話,
其實中間有試著將巨集改成
Sub test()
X = InputBox()
With ActiveSheet.QueryTables.Add(Connection:= _
        "URL;http://www.twse.com.tw/exchangeReport/MI_INDEX?response=html&date=" & X & "&type=ALLBUT0999" _
        , Destination:=Range("A1"))


結果出現,
編譯錯誤:引數不為選擇性
所以才又問了GBKEE大後面的問題

總之,謝謝GBKEE大跟rogersg大

TOP

        靜思自在 : 得理要饒人,理直要氣和。
返回列表 上一主題