Board logo

標題: [已解決]如何抓取網頁資料 [打印本頁]

作者: superrednew    時間: 2011-10-17 17:24     標題: [已解決]如何抓取網頁資料

本帖最後由 superrednew 於 2011-10-23 19:53 編輯

例如:http://www.trademag.org.tw/ExchangeRate.asp?vdate=2011/10/10  , 最後日期為2011/10/10
假設我要抓取2009/01/01~now 的資料 , 我要如何寫呢
With ActiveSheet.QueryTables.Add(Connection:= "http://www.trademag.org.tw/ExchangeRate.asp?vdate=2011/10/10  " ....要如何改
A3 1 B3=TODAY()
A4 2 B4=DATE(YEAR(B3),MONTH(B3),DAY(B3)-1)
A5 3 B5=DATE(YEAR(B3),MONTH(B3),DAY(B3)-2)

..................................
資料能貼上

[attach]8265[/attach]
作者: superrednew    時間: 2011-10-17 18:29

我有傳送檔案不知道為何都沒看到我的檔案 , 哪裡出錯了
作者: oobird    時間: 2011-10-17 19:18

壓縮成rar或zip格式才可上傳。
作者: superrednew    時間: 2011-10-17 21:27

回復 3# oobird
我已經壓縮了 , 但似乎我可能選錯吧 還在研究中
作者: superrednew    時間: 2011-10-17 21:38

本帖最後由 superrednew 於 2011-10-17 21:44 編輯

裡面有我錄製的巨集,但是我希望能寫一個能 自動更新 的excel
range A裡面紀錄著 數目 ---代表有多少筆數據
range B------代表日期
sheet2 我裡面是用web擷取網路資訊 ,再把各個國家的匯率複製,用行列轉換貼到sheet1

sheet2裡面有 程式碼 , 小弟我還是個新手 , 大約看得懂程式碼的意思 , 但完全不會寫....
想請教各位,要如何一次更新這麼多筆數據,但是我又希望這些數據是

從ex 2009/01/01~today 假設這有1000筆數據
過了兩天 就會變成 2009/01/03~today 依然是1000筆數據
作者: oobird    時間: 2011-10-18 11:17

依你現有代碼,加上循環就行了。
此例取得今年的資料:
  1. Sub Macro1()
  2.     d = DateValue("2011/10/17")
  3.     i = 3
  4.     Do
  5.         dt = Application.Text(d, "yyyy/mm/dd")
  6.         Set s = Sheet2
  7.         s.UsedRange.Clear
  8.         With s.QueryTables.Add(Connection:= _
  9.                                "URL;http://www.trademag.org.tw/ExchangeRate.asp?vdate=" & dt, _
  10.                                Destination:=s.Range("$A$1"))
  11.             .Name = "17"
  12.             .FieldNames = True
  13.             .RowNumbers = False
  14.             .FillAdjacentFormulas = False
  15.             .PreserveFormatting = True
  16.             .RefreshOnFileOpen = False
  17.             .BackgroundQuery = True
  18.             .RefreshStyle = xlInsertDeleteCells
  19.             .SavePassword = False
  20.             .SaveData = True
  21.             .AdjustColumnWidth = True
  22.             .RefreshPeriod = 0
  23.             .WebSelectionType = xlSpecifiedTables
  24.             .WebFormatting = xlWebFormattingNone
  25.             .WebTables = "2"
  26.             .WebPreFormattedTextToColumns = True
  27.             .WebConsecutiveDelimitersAsOne = True
  28.             .WebSingleBlockTextImport = False
  29.             .WebDisableDateRecognition = False
  30.             .WebDisableRedirections = False
  31.             .Refresh BackgroundQuery:=False
  32.         End With
  33.         With Sheet1
  34.             For j = s.[iv3].End(1).Column To 3 Step -1
  35.                 a = s.Cells(3, j).Resize(41, 1).Value
  36.                 .Cells(i, 2) = s.Cells(1, j)
  37.                 .Cells(i, 3).Resize(1, 41) = Application.Transpose(a)
  38.                 i = i + 1
  39.             Next
  40.         End With
  41.         d = d - 7
  42.     Loop Until Year(d) < 2011
  43. End Sub
複製代碼

作者: superrednew    時間: 2011-10-18 17:19

謝謝oobird 版主 , 收獲很多 , 我研究看看 , 解決我不少問題 , 一般人通長不會這樣用

更新這麼多數據因為會讓excel跑很慢 , 只是我個人想試試看不記錄數據 , 感覺起來如何...

總之很感謝您 ....
作者: oobird    時間: 2011-10-18 19:54

這只是應你的要求修改你的程式
達到取歷史記錄的目的
其實該程式只要跑一遍,以後就用不到了
以後的只要每個星期更新一次,把目前範往下移,在前幾行寫入新的數據
這又是另一個不同的程式。
不必每次更新都要全程跑一遍的!
作者: superrednew    時間: 2011-10-19 08:47

回復 8# oobird


    跑過一次,發現日期有遺露,ex2011/10/9 , 2011/10/8 請問問題出在哪呢?
作者: oobird    時間: 2011-10-19 11:19

網頁你沒看嗎?星期6、日本就沒有資料的。
作者: superrednew    時間: 2011-10-19 18:01

本帖最後由 superrednew 於 2011-10-19 18:05 編輯

回復 10# oobird
哈哈 抱歉

對了我可以請問一下
  s.UsedRange.Clear          為啥要用clear
For j = s.[iv3].End(1).Column To 3 Step -1                           [iv3]是甚麼?

不太懂意思謝謝!!
作者: oobird    時間: 2011-10-19 20:13

s.UsedRange.Clear  
s是sheet2
清空sheet2的使用範圍,以便寫入新的一筆資料呀。   
   [iv3]是甚麼?

就是儲存格iv3  
s.[iv3].End(1).Column To 3 Step -1  
表示sheet2從iv3往左的第一個有資料的欄號到3的反向循環




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