返回列表 上一主題 發帖

使用VBA抓取網頁資料,大約不到200頁就會當掉,求解

回復 3# clio
沒有別的網址可下載嗎?
測到1500頁跑近10分鐘, 40377 頁要跑很久請自己測試
  1. Option Explicit
  2. Sub Ex()
  3.     Dim Sh(1 To 2) As Worksheet, q As QueryTable, i  As Long, Rng As Range
  4.     Dim xTime As Date
  5.     With ThisWorkbook
  6.         Set Sh(1) = .Sheets(1)
  7.         Set Sh(2) = .Sheets(2)  '**.Sheets("工作表3")
  8.     End With
  9.     With Sh(1)
  10.        '****這段是要刪除工作表1上有太多的 QueryTable  (會當可能是在這)****   
  11.         For Each q In .QueryTables
  12.             q.Delete
  13.         Next
  14.         '****這段是要刪除工作表1上QueryTable的名稱
  15.         For i = .Names.Count To 1 Step -1
  16.             .Names.Item(i).Delete
  17.         Next
  18.         '**設定你的外部查詢在固定的QueryTable上
  19.         If .QueryTables.Count > 0 Then
  20.             Set q = .QueryTables(1)
  21.         Else
  22.             Set q = .QueryTables.Add(Connection:="URL;http://www.passivecomponent.com/asp/search_chip.aspx?page=1" _
  23.                         , Destination:=.[A1])
  24.         End If
  25.     End With
  26.     xTime = Time
  27.     Application.ScreenUpdating = False
  28.     For i = 1 To 40377
  29.         With q
  30.             .Connection = "URL;http://www.passivecomponent.com/asp/search_chip.aspx?page=" & i
  31.             .WebFormatting = xlNone
  32.             .RefreshStyle = xlInsertDeleteCells
  33.             .AdjustColumnWidth = True
  34.             .Refresh BackgroundQuery:=False
  35.             DoEvents
  36.             Set Rng = .ResultRange '**外部查詢的資料區
  37.             If i = 1 Then
  38.                 Sh(2).UsedRange.Clear
  39.                 Sh(2).Range("A1").Resize(Rng.Rows.Count, Rng.Columns.Count) = Rng.Value
  40.             Else
  41.                 Sh(2).Range("A" & Sh(2).Cells(Rows.Count, 1).End(xlUp).Row + 1).Resize(Rng.Rows.Count, Rng.Columns.Count) = Rng.Offset(1).Value
  42.             End If
  43.         End With
  44.         Application.StatusBar = "下載開始: " & xTime & " 共 " & i & " 頁 ok " & Application.Text(Time - xTime, ["m分s秒"])
  45.     Next
  46.     Application.ScreenUpdating = True
  47.     MsgBox Application.Text(Time - xTime, ["m分s秒"]) & "   Finish"
  48. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 GBKEE 於 2018-10-9 12:56 編輯

回復 7# clio
檔案瘦身
QueryTable ,Name太多檔案會虛胖,你一直的存檔動作,會喘死.
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 【時間如鑽石】時間對一個有智慧的人而言,就如鑽石般珍貴;但對愚人來說,卻像是一把泥土,一點價值也沒有。
返回列表 上一主題